obsidian-dev-utils 85.1.0 → 86.1.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/@types/obsidian-integration-testing/package.json +4 -0
- package/CHANGELOG.md +20 -0
- package/README.md +14 -8
- package/dist/lib/cjs/@types/obsidian-integration-testing.d.cts +18 -0
- package/dist/lib/cjs/__merged.cjs +1291 -0
- package/dist/lib/cjs/__merged.d.cts +165 -0
- package/dist/lib/cjs/abort-controller.cjs +3 -4
- package/dist/lib/cjs/async.cjs +13 -7
- package/dist/lib/cjs/async.d.cts +6 -0
- package/dist/lib/cjs/disposable.cjs +224 -3
- package/dist/lib/cjs/disposable.d.cts +222 -2
- package/dist/lib/cjs/error.cjs +41 -3
- package/dist/lib/cjs/error.d.cts +50 -1
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/attachment-path.cjs +3 -3
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +27 -11
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +14 -9
- package/dist/lib/cjs/obsidian/command-handlers/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/command-handlers/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +195 -0
- package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.d.cts +65 -0
- package/dist/lib/cjs/obsidian/community-plugins.cjs +156 -0
- package/dist/lib/cjs/obsidian/community-plugins.d.cts +22 -0
- package/dist/lib/cjs/obsidian/components/disposable-component.cjs +8 -8
- package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +9 -3
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +17 -2
- package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +17 -0
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +161 -22
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +81 -8
- package/dist/lib/cjs/obsidian/css-class.cjs +4 -1
- package/dist/lib/cjs/obsidian/css-class.d.cts +13 -0
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +239 -0
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +45 -0
- package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +215 -0
- package/dist/lib/cjs/obsidian/desktop-trusted-input.d.cts +135 -0
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +3 -1
- package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +2 -0
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +2 -0
- package/dist/lib/cjs/obsidian/index.cjs +10 -1
- package/dist/lib/cjs/obsidian/index.d.cts +3 -0
- package/dist/lib/cjs/obsidian/link.cjs +2 -2
- package/dist/lib/cjs/obsidian/modals/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/modals/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +15 -2
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.d.cts +18 -3
- package/dist/lib/cjs/obsidian/modals/select-option.cjs +182 -0
- package/dist/lib/cjs/obsidian/modals/select-option.d.cts +65 -0
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +4 -1
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +6 -0
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +50 -3
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +17 -0
- package/dist/lib/cjs/obsidian/workspace.cjs +8 -1
- package/dist/lib/cjs/obsidian/workspace.d.cts +10 -0
- package/dist/lib/cjs/path.cjs +4 -4
- package/dist/lib/cjs/path.d.cts +1 -1
- package/dist/lib/cjs/script-utils/demo-vault.cjs +177 -0
- package/dist/lib/cjs/script-utils/demo-vault.d.cts +23 -0
- package/dist/lib/cjs/script-utils/exec.cjs +75 -34
- package/dist/lib/cjs/script-utils/exec.d.cts +34 -0
- package/dist/lib/cjs/script-utils/index.cjs +9 -3
- package/dist/lib/cjs/script-utils/index.d.cts +2 -0
- package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +1 -5
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +5 -1
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +8 -0
- package/dist/lib/cjs/script-utils/version.cjs +8 -1
- package/dist/lib/cjs/script-utils/version.d.cts +8 -0
- package/dist/lib/cjs/script-utils/warnings-as-errors.cjs +157 -0
- package/dist/lib/cjs/script-utils/warnings-as-errors.d.cts +27 -0
- package/dist/lib/cjs/setup.cjs +75 -4
- package/dist/lib/cjs/setup.d.cts +29 -7
- package/dist/lib/cjs/string.cjs +7 -4
- package/dist/lib/cjs/string.d.cts +11 -1
- package/dist/lib/esm/@types/obsidian-integration-testing.d.mts +18 -0
- package/dist/lib/esm/__merged.d.mts +165 -0
- package/dist/lib/esm/__merged.mjs +1134 -0
- package/dist/lib/esm/abort-controller.mjs +7 -5
- package/dist/lib/esm/async.d.mts +6 -0
- package/dist/lib/esm/async.mjs +13 -7
- package/dist/lib/esm/disposable.d.mts +222 -2
- package/dist/lib/esm/disposable.mjs +215 -2
- package/dist/lib/esm/error.d.mts +50 -1
- package/dist/lib/esm/error.mjs +41 -4
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/obsidian/attachment-path.mjs +4 -4
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +14 -9
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +31 -11
- package/dist/lib/esm/obsidian/command-handlers/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/index.mjs +3 -1
- package/dist/lib/esm/obsidian/command-handlers/open-demo-vault-command-handler.d.mts +65 -0
- package/dist/lib/esm/obsidian/command-handlers/open-demo-vault-command-handler.mjs +77 -0
- package/dist/lib/esm/obsidian/community-plugins.d.mts +22 -0
- package/dist/lib/esm/obsidian/community-plugins.mjs +48 -0
- package/dist/lib/esm/obsidian/components/disposable-component.d.mts +9 -3
- package/dist/lib/esm/obsidian/components/disposable-component.mjs +8 -8
- package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +17 -0
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +17 -2
- package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +81 -8
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +163 -23
- package/dist/lib/esm/obsidian/css-class.d.mts +13 -0
- package/dist/lib/esm/obsidian/css-class.mjs +4 -1
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +45 -0
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +121 -0
- package/dist/lib/esm/obsidian/desktop-trusted-input.d.mts +135 -0
- package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +103 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +2 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.mjs +3 -1
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +2 -0
- package/dist/lib/esm/obsidian/index.d.mts +3 -0
- package/dist/lib/esm/obsidian/index.mjs +7 -1
- package/dist/lib/esm/obsidian/link.mjs +3 -3
- package/dist/lib/esm/obsidian/modals/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/modals/index.mjs +3 -1
- package/dist/lib/esm/obsidian/modals/minimizable-modal.d.mts +18 -3
- package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +17 -3
- package/dist/lib/esm/obsidian/modals/select-option.d.mts +65 -0
- package/dist/lib/esm/obsidian/modals/select-option.mjs +77 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +6 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +4 -1
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +17 -0
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +50 -3
- package/dist/lib/esm/obsidian/workspace.d.mts +10 -0
- package/dist/lib/esm/obsidian/workspace.mjs +7 -1
- package/dist/lib/esm/path.d.mts +1 -1
- package/dist/lib/esm/path.mjs +3 -3
- package/dist/lib/esm/script-utils/demo-vault.d.mts +23 -0
- package/dist/lib/esm/script-utils/demo-vault.mjs +63 -0
- package/dist/lib/esm/script-utils/exec.d.mts +34 -0
- package/dist/lib/esm/script-utils/exec.mjs +73 -34
- package/dist/lib/esm/script-utils/index.d.mts +2 -0
- package/dist/lib/esm/script-utils/index.mjs +6 -2
- package/dist/lib/esm/script-utils/linters/eslint-no-restricted-syntax.mjs +1 -5
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +8 -0
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +5 -1
- package/dist/lib/esm/script-utils/version.d.mts +8 -0
- package/dist/lib/esm/script-utils/version.mjs +8 -1
- package/dist/lib/esm/script-utils/warnings-as-errors.d.mts +27 -0
- package/dist/lib/esm/script-utils/warnings-as-errors.mjs +38 -0
- package/dist/lib/esm/setup.d.mts +29 -7
- package/dist/lib/esm/setup.mjs +78 -4
- package/dist/lib/esm/string.d.mts +11 -1
- package/dist/lib/esm/string.mjs +5 -3
- package/dist/styles.css +33 -3
- package/obsidian/command-handlers/open-demo-vault-command-handler/package.json +6 -0
- package/obsidian/community-plugins/package.json +6 -0
- package/obsidian/desktop-demo-vault-opener/package.json +6 -0
- package/obsidian/desktop-trusted-input/package.json +6 -0
- package/obsidian/modals/select-option/package.json +6 -0
- package/package.json +22 -9
- package/script-utils/demo-vault/package.json +6 -0
- package/script-utils/warnings-as-errors/package.json +6 -0
- package/dist/dev/main.js +0 -32702
- package/dist/dev/manifest.json +0 -9
- /package/obsidian/@types/{Dataview → dataview}/api/data-array/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/api/extensions/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/api/inline-api/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/api/plugin-api/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/api/result/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-import/common/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-import/csv/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-import/inline-field/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-import/markdown-file/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-import/persister/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-import/web-worker/import-entry/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-import/web-worker/import-impl/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-import/web-worker/import-manager/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-index/index/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-index/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-index/resolver/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-index/source/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-model/markdown/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-model/serialized/markdown/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-model/transferable/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/data-model/value/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/expression/binaryop/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/expression/context/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/expression/field/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/expression/functions/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/expression/parse/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/index/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/main/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/query/engine/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/query/parse/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/query/query/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/settings/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/typings/obsidian-ex/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/typings/workers/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/export/markdown/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/lp-render/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/markdown/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/refreshable-view/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/render/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/views/calendar-view/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/views/inline-field-live-preview/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/views/inline-view/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/views/js-view/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/views/list-view/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/views/table-view/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/ui/views/task-view/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/util/hash/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/util/locale/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/util/media/package.json +0 -0
- /package/obsidian/@types/{Dataview → dataview}/util/normalize/package.json +0 -0
- /package/obsidian/{App → app}/package.json +0 -0
- /package/obsidian/{Backlink → backlink}/package.json +0 -0
- /package/obsidian/{Callout → callout}/package.json +0 -0
- /package/obsidian/{Components → components}/abort-signal-component/package.json +0 -0
- /package/obsidian/{Components → components}/all-windows-event-component/package.json +0 -0
- /package/obsidian/{Components → components}/async-error-handler-component/package.json +0 -0
- /package/obsidian/{Components → components}/async-events-component/package.json +0 -0
- /package/obsidian/{Components → components}/case-insensitive-file-index-component/package.json +0 -0
- /package/obsidian/{Components → components}/component-ex/package.json +0 -0
- /package/obsidian/{Components → components}/console-debug-component/package.json +0 -0
- /package/obsidian/{Components → components}/disposable-component/package.json +0 -0
- /package/obsidian/{Components → components}/embed-extensions-component/package.json +0 -0
- /package/obsidian/{Components → components}/generate-markdown-link-default-params-component/package.json +0 -0
- /package/obsidian/{Components → components}/index/package.json +0 -0
- /package/obsidian/{Components → components}/layout-ready-component/package.json +0 -0
- /package/obsidian/{Components → components}/menu-event-registrar-component/package.json +0 -0
- /package/obsidian/{Components → components}/monkey-around-component/package.json +0 -0
- /package/obsidian/{Components → components}/package.json +0 -0
- /package/obsidian/{Components → components}/plugin-context-component/package.json +0 -0
- /package/obsidian/{Components → components}/plugin-notice-component/package.json +0 -0
- /package/obsidian/{Components → components}/plugin-settings-component/package.json +0 -0
- /package/obsidian/{Components → components}/plugin-settings-tab-component/package.json +0 -0
- /package/obsidian/{Components → components}/registry-component/package.json +0 -0
- /package/obsidian/{Components → components}/rename-delete-handler-component/package.json +0 -0
- /package/obsidian/{Dataview → dataview}/package.json +0 -0
- /package/obsidian/{Editor → editor}/package.json +0 -0
- /package/obsidian/{Frontmatter → frontmatter}/package.json +0 -0
- /package/obsidian/{Link → link}/package.json +0 -0
- /package/obsidian/{Logger → logger}/package.json +0 -0
- /package/obsidian/{Loop → loop}/package.json +0 -0
- /package/obsidian/{Markdown → markdown}/package.json +0 -0
- /package/obsidian/{Modals/Alert → modals/alert}/package.json +0 -0
- /package/obsidian/{Modals/Confirm → modals/confirm}/package.json +0 -0
- /package/obsidian/{Modals → modals}/index/package.json +0 -0
- /package/obsidian/{Modals → modals}/minimizable-modal/package.json +0 -0
- /package/obsidian/{Modals → modals}/modal/package.json +0 -0
- /package/obsidian/{Modals → modals}/package.json +0 -0
- /package/obsidian/{Modals/Prompt → modals/prompt}/package.json +0 -0
- /package/obsidian/{Modals → modals}/select-item/package.json +0 -0
- /package/obsidian/{Modals → modals}/suggest-modal-command-builder/package.json +0 -0
- /package/obsidian/{Pdf → pdf}/package.json +0 -0
- /package/obsidian/{Plugin → plugin}/index/package.json +0 -0
- /package/obsidian/{Plugin → plugin}/obsidian-plugin-repo-paths/package.json +0 -0
- /package/obsidian/{Plugin → plugin}/package.json +0 -0
- /package/obsidian/{Plugin/Plugin → plugin/plugin}/package.json +0 -0
- /package/obsidian/{Plugin → plugin}/plugin-context/package.json +0 -0
- /package/obsidian/{Plugin → plugin}/plugin-event-source/package.json +0 -0
- /package/obsidian/{Plugin → plugin}/plugin-settings-tab/package.json +0 -0
- /package/obsidian/{Queue → queue}/package.json +0 -0
- /package/obsidian/{React → react}/app-context/package.json +0 -0
- /package/obsidian/{React → react}/index/package.json +0 -0
- /package/obsidian/{React → react}/package.json +0 -0
- /package/obsidian/{Reference → reference}/package.json +0 -0
- /package/obsidian/{Validation → validation}/package.json +0 -0
- /package/obsidian/{Vault → vault}/package.json +0 -0
- /package/obsidian/{Workspace → workspace}/package.json +0 -0
- /package/{Transformers → transformers}/date-transformer/package.json +0 -0
- /package/{Transformers → transformers}/duration-transformer/package.json +0 -0
- /package/{Transformers → transformers}/group-transformer/package.json +0 -0
- /package/{Transformers → transformers}/index/package.json +0 -0
- /package/{Transformers → transformers}/map-transformer/package.json +0 -0
- /package/{Transformers → transformers}/package.json +0 -0
- /package/{Transformers → transformers}/set-transformer/package.json +0 -0
- /package/{Transformers → transformers}/skip-private-property-transformer/package.json +0 -0
- /package/{Transformers/Transformer → transformers/transformer}/package.json +0 -0
- /package/{Transformers → transformers}/two-way-map-transformer/package.json +0 -0
- /package/{Transformers → transformers}/typed-transformer/package.json +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* @file
|
|
4
4
|
*
|
|
5
|
-
* Component that
|
|
5
|
+
* Component that registers {@link CommandHandler}s with Obsidian and ties their removal to its lifecycle.
|
|
6
6
|
*/
|
|
7
7
|
import type { ActiveFileProvider } from '../active-file-provider.mjs';
|
|
8
8
|
import type { CommandRegistrar } from '../command-registrar.mjs';
|
|
@@ -11,23 +11,22 @@ import type { CommandHandler } from './command-handler.mjs';
|
|
|
11
11
|
import { ComponentEx } from '../components/component-ex.mjs';
|
|
12
12
|
interface CommandHandlerComponentConstructorParams {
|
|
13
13
|
readonly activeFileProvider: ActiveFileProvider;
|
|
14
|
-
readonly commandHandlers: CommandHandler[];
|
|
15
14
|
readonly commandRegistrar: CommandRegistrar;
|
|
16
15
|
readonly menuEventRegistrar: MenuEventRegistrar;
|
|
17
16
|
readonly pluginName: string;
|
|
18
17
|
}
|
|
19
18
|
/**
|
|
20
|
-
*
|
|
19
|
+
* Registers {@link CommandHandler}s with Obsidian and manages their lifecycle.
|
|
20
|
+
*
|
|
21
|
+
* Call {@link registerCommandHandlers} to register a batch of handlers on demand (as many times as
|
|
22
|
+
* needed while the component is alive); dispose the returned {@link Disposable} to unregister exactly
|
|
23
|
+
* those handlers, or let the component unload to remove every command still registered through it.
|
|
21
24
|
*/
|
|
22
25
|
export declare class CommandHandlerComponent extends ComponentEx {
|
|
23
26
|
/**
|
|
24
27
|
* Provider for accessing the currently active file.
|
|
25
28
|
*/
|
|
26
29
|
protected readonly activeFileProvider: ActiveFileProvider;
|
|
27
|
-
/**
|
|
28
|
-
* The command handlers to register with Obsidian.
|
|
29
|
-
*/
|
|
30
|
-
protected readonly commandHandlers: CommandHandler[];
|
|
31
30
|
/**
|
|
32
31
|
* Registrar used to add and remove commands with Obsidian.
|
|
33
32
|
*/
|
|
@@ -47,8 +46,14 @@ export declare class CommandHandlerComponent extends ComponentEx {
|
|
|
47
46
|
*/
|
|
48
47
|
constructor(params: CommandHandlerComponentConstructorParams);
|
|
49
48
|
/**
|
|
50
|
-
* Registers the command with Obsidian and provides
|
|
49
|
+
* Registers the given command handlers with Obsidian and provides each its runtime registration
|
|
50
|
+
* context. Each handler's command is added immediately; the returned {@link Disposable} removes the
|
|
51
|
+
* commands registered by this call when disposed. Any command still registered when the component
|
|
52
|
+
* unloads is removed automatically.
|
|
53
|
+
*
|
|
54
|
+
* @param commandHandlers - The command handlers to register.
|
|
55
|
+
* @returns A {@link Disposable} that unregisters the handlers passed to this call.
|
|
51
56
|
*/
|
|
52
|
-
|
|
57
|
+
registerCommandHandlers(commandHandlers: CommandHandler[]): Disposable;
|
|
53
58
|
}
|
|
54
59
|
export {};
|
|
@@ -21,16 +21,18 @@ 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 { invokeAsyncSafely } from "../../async.mjs";
|
|
25
|
+
import {
|
|
26
|
+
CallbackDisposable,
|
|
27
|
+
CombineDisposable,
|
|
28
|
+
MultipleDisposeBehavior
|
|
29
|
+
} from "../../disposable.mjs";
|
|
24
30
|
import { ComponentEx } from "../components/component-ex.mjs";
|
|
25
31
|
class CommandHandlerComponent extends ComponentEx {
|
|
26
32
|
/**
|
|
27
33
|
* Provider for accessing the currently active file.
|
|
28
34
|
*/
|
|
29
35
|
activeFileProvider;
|
|
30
|
-
/**
|
|
31
|
-
* The command handlers to register with Obsidian.
|
|
32
|
-
*/
|
|
33
|
-
commandHandlers;
|
|
34
36
|
/**
|
|
35
37
|
* Registrar used to add and remove commands with Obsidian.
|
|
36
38
|
*/
|
|
@@ -50,32 +52,50 @@ class CommandHandlerComponent extends ComponentEx {
|
|
|
50
52
|
*/
|
|
51
53
|
constructor(params) {
|
|
52
54
|
super();
|
|
53
|
-
this.commandHandlers = params.commandHandlers;
|
|
54
55
|
this.activeFileProvider = params.activeFileProvider;
|
|
55
56
|
this.menuEventRegistrar = params.menuEventRegistrar;
|
|
56
57
|
this.commandRegistrar = params.commandRegistrar;
|
|
57
58
|
this.pluginName = params.pluginName;
|
|
58
59
|
}
|
|
59
60
|
/**
|
|
60
|
-
* Registers the command with Obsidian and provides
|
|
61
|
+
* Registers the given command handlers with Obsidian and provides each its runtime registration
|
|
62
|
+
* context. Each handler's command is added immediately; the returned {@link Disposable} removes the
|
|
63
|
+
* commands registered by this call when disposed. Any command still registered when the component
|
|
64
|
+
* unloads is removed automatically.
|
|
65
|
+
*
|
|
66
|
+
* @param commandHandlers - The command handlers to register.
|
|
67
|
+
* @returns A {@link Disposable} that unregisters the handlers passed to this call.
|
|
61
68
|
*/
|
|
62
|
-
|
|
69
|
+
registerCommandHandlers(commandHandlers) {
|
|
63
70
|
const context = {
|
|
64
71
|
activeFileProvider: this.activeFileProvider,
|
|
65
72
|
menuEventRegistrar: this.menuEventRegistrar,
|
|
66
73
|
pluginName: this.pluginName
|
|
67
74
|
};
|
|
68
|
-
|
|
75
|
+
const disposables = [];
|
|
76
|
+
for (const commandHandler of commandHandlers) {
|
|
69
77
|
const command = commandHandler.buildCommand();
|
|
78
|
+
const commandId = command.id;
|
|
70
79
|
this.commandRegistrar.addCommand(command);
|
|
80
|
+
const disposable = new CallbackDisposable({
|
|
81
|
+
callback: () => {
|
|
82
|
+
this.commandRegistrar.removeCommand(commandId);
|
|
83
|
+
},
|
|
84
|
+
multipleDisposeBehavior: MultipleDisposeBehavior.Ignore
|
|
85
|
+
});
|
|
86
|
+
disposables.push(disposable);
|
|
71
87
|
this.register(() => {
|
|
72
|
-
|
|
88
|
+
disposable.dispose();
|
|
73
89
|
});
|
|
74
|
-
|
|
90
|
+
invokeAsyncSafely(() => commandHandler.onRegistered(context));
|
|
75
91
|
}
|
|
92
|
+
return new CombineDisposable({
|
|
93
|
+
disposables,
|
|
94
|
+
multipleDisposeBehavior: MultipleDisposeBehavior.Ignore
|
|
95
|
+
});
|
|
76
96
|
}
|
|
77
97
|
}
|
|
78
98
|
export {
|
|
79
99
|
CommandHandlerComponent
|
|
80
100
|
};
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHJlZ2lzdGVycyB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cyB3aXRoIE9ic2lkaWFuIGFuZCB0aWVzIHRoZWlyIHJlbW92YWwgdG8gaXRzIGxpZmVjeWNsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUZpbGVQcm92aWRlciB9IGZyb20gJy4uL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgQ29tbWFuZFJlZ2lzdHJhciB9IGZyb20gJy4uL2NvbW1hbmQtcmVnaXN0cmFyLnRzJztcbmltcG9ydCB0eXBlIHsgTWVudUV2ZW50UmVnaXN0cmFyIH0gZnJvbSAnLi4vbWVudS1ldmVudC1yZWdpc3RyYXIudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kSGFuZGxlcixcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQge1xuICBDYWxsYmFja0Rpc3Bvc2FibGUsXG4gIENvbWJpbmVEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICcuLi8uLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb21wb25lbnQtZXgudHMnO1xuXG5pbnRlcmZhY2UgQ29tbWFuZEhhbmRsZXJDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIHJlYWRvbmx5IGFjdGl2ZUZpbGVQcm92aWRlcjogQWN0aXZlRmlsZVByb3ZpZGVyO1xuICByZWFkb25seSBjb21tYW5kUmVnaXN0cmFyOiBDb21tYW5kUmVnaXN0cmFyO1xuICByZWFkb25seSBtZW51RXZlbnRSZWdpc3RyYXI6IE1lbnVFdmVudFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cyB3aXRoIE9ic2lkaWFuIGFuZCBtYW5hZ2VzIHRoZWlyIGxpZmVjeWNsZS5cbiAqXG4gKiBDYWxsIHtAbGluayByZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gdG8gcmVnaXN0ZXIgYSBiYXRjaCBvZiBoYW5kbGVycyBvbiBkZW1hbmQgKGFzIG1hbnkgdGltZXMgYXNcbiAqIG5lZWRlZCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGFsaXZlKTsgZGlzcG9zZSB0aGUgcmV0dXJuZWQge0BsaW5rIERpc3Bvc2FibGV9IHRvIHVucmVnaXN0ZXIgZXhhY3RseVxuICogdGhvc2UgaGFuZGxlcnMsIG9yIGxldCB0aGUgY29tcG9uZW50IHVubG9hZCB0byByZW1vdmUgZXZlcnkgY29tbWFuZCBzdGlsbCByZWdpc3RlcmVkIHRocm91Z2ggaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21tYW5kSGFuZGxlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIGZvciBhY2Nlc3NpbmcgdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhY3RpdmVGaWxlUHJvdmlkZXI6IEFjdGl2ZUZpbGVQcm92aWRlcjtcblxuICAvKipcbiAgICogUmVnaXN0cmFyIHVzZWQgdG8gYWRkIGFuZCByZW1vdmUgY29tbWFuZHMgd2l0aCBPYnNpZGlhbi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjb21tYW5kUmVnaXN0cmFyOiBDb21tYW5kUmVnaXN0cmFyO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RyYXIgZm9yIG1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBvd25zIHRoZSBjb21tYW5kcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tbWFuZEhhbmRsZXJDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIgPSBwYXJhbXMuYWN0aXZlRmlsZVByb3ZpZGVyO1xuICAgIHRoaXMubWVudUV2ZW50UmVnaXN0cmFyID0gcGFyYW1zLm1lbnVFdmVudFJlZ2lzdHJhcjtcbiAgICB0aGlzLmNvbW1hbmRSZWdpc3RyYXIgPSBwYXJhbXMuY29tbWFuZFJlZ2lzdHJhcjtcbiAgICB0aGlzLnBsdWdpbk5hbWUgPSBwYXJhbXMucGx1Z2luTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIGNvbW1hbmQgaGFuZGxlcnMgd2l0aCBPYnNpZGlhbiBhbmQgcHJvdmlkZXMgZWFjaCBpdHMgcnVudGltZSByZWdpc3RyYXRpb25cbiAgICogY29udGV4dC4gRWFjaCBoYW5kbGVyJ3MgY29tbWFuZCBpcyBhZGRlZCBpbW1lZGlhdGVseTsgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSByZW1vdmVzIHRoZVxuICAgKiBjb21tYW5kcyByZWdpc3RlcmVkIGJ5IHRoaXMgY2FsbCB3aGVuIGRpc3Bvc2VkLiBBbnkgY29tbWFuZCBzdGlsbCByZWdpc3RlcmVkIHdoZW4gdGhlIGNvbXBvbmVudFxuICAgKiB1bmxvYWRzIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRIYW5kbGVycyAtIFRoZSBjb21tYW5kIGhhbmRsZXJzIHRvIHJlZ2lzdGVyLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVycyBwYXNzZWQgdG8gdGhpcyBjYWxsLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzKGNvbW1hbmRIYW5kbGVyczogQ29tbWFuZEhhbmRsZXJbXSk6IERpc3Bvc2FibGUge1xuICAgIGNvbnN0IGNvbnRleHQ6IENvbW1hbmRIYW5kbGVyUmVnaXN0cmF0aW9uQ29udGV4dCA9IHtcbiAgICAgIGFjdGl2ZUZpbGVQcm92aWRlcjogdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIsXG4gICAgICBtZW51RXZlbnRSZWdpc3RyYXI6IHRoaXMubWVudUV2ZW50UmVnaXN0cmFyLFxuICAgICAgcGx1Z2luTmFtZTogdGhpcy5wbHVnaW5OYW1lXG4gICAgfTtcblxuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmRIYW5kbGVyIG9mIGNvbW1hbmRIYW5kbGVycykge1xuICAgICAgY29uc3QgY29tbWFuZCA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkQ29tbWFuZCgpO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgaWQgYmVmb3JlIHJlZ2lzdGVyaW5nLiBgUGx1Z2luLmFkZENvbW1hbmRgIG11dGF0ZXMgYGNvbW1hbmQuaWRgIChwcmVmaXhpbmcgaXQgd2l0aFxuICAgICAgLy8gYHRoaXMubWFuaWZlc3QuaWRgKSwgd2hpbGUgYFBsdWdpbi5yZW1vdmVDb21tYW5kYCByZS1wcmVmaXhlcyBcdTIwMTQgc28gcmVtb3ZhbCBuZWVkcyB0aGUgb3JpZ2luYWwgaWQuXG4gICAgICAvLyBSZWFkaW5nIGBjb21tYW5kLmlkYCBhZnRlciBgYWRkQ29tbWFuZGAgd291bGQgZG91YmxlLXByZWZpeCBpdCwgc28gdGhlIGNvbW1hbmQgaXMgbmV2ZXIgcmVtb3ZlZC5cbiAgICAgIGNvbnN0IGNvbW1hbmRJZCA9IGNvbW1hbmQuaWQ7XG4gICAgICB0aGlzLmNvbW1hbmRSZWdpc3RyYXIuYWRkQ29tbWFuZChjb21tYW5kKTtcbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICAgICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRSZWdpc3RyYXIucmVtb3ZlQ29tbWFuZChjb21tYW5kSWQpO1xuICAgICAgICB9LFxuICAgICAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gICAgICB9KTtcbiAgICAgIGRpc3Bvc2FibGVzLnB1c2goZGlzcG9zYWJsZSk7XG4gICAgICAvLyBUaWUgcmVtb3ZhbCB0byB0aGUgY29tcG9uZW50J3MgdW5sb2FkLCBzbyBhIGNvbW1hbmQgbmV2ZXIgb3V0bGl2ZXMgdGhlIGNvbXBvbmVudC5cbiAgICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgICBkaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICAgIH0pO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gY29tbWFuZEhhbmRsZXIub25SZWdpc3RlcmVkKGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbWJpbmVEaXNwb3NhYmxlKHtcbiAgICAgIGRpc3Bvc2FibGVzLFxuICAgICAgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZVxuICAgIH0pO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUJBQW1CO0FBZ0JyQixNQUFNLGdDQUFnQyxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJcEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPWixZQUFZLFFBQWtEO0FBQ25FLFVBQU07QUFDTixTQUFLLHFCQUFxQixPQUFPO0FBQ2pDLFNBQUsscUJBQXFCLE9BQU87QUFDakMsU0FBSyxtQkFBbUIsT0FBTztBQUMvQixTQUFLLGFBQWEsT0FBTztBQUFBLEVBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXTyx3QkFBd0IsaUJBQStDO0FBQzVFLFVBQU0sVUFBNkM7QUFBQSxNQUNqRCxvQkFBb0IsS0FBSztBQUFBLE1BQ3pCLG9CQUFvQixLQUFLO0FBQUEsTUFDekIsWUFBWSxLQUFLO0FBQUEsSUFDbkI7QUFFQSxVQUFNLGNBQTRCLENBQUM7QUFDbkMsZUFBVyxrQkFBa0IsaUJBQWlCO0FBQzVDLFlBQU0sVUFBVSxlQUFlLGFBQWE7QUFJNUMsWUFBTSxZQUFZLFFBQVE7QUFDMUIsV0FBSyxpQkFBaUIsV0FBVyxPQUFPO0FBQ3hDLFlBQU0sYUFBYSxJQUFJLG1CQUFtQjtBQUFBLFFBQ3hDLFVBQVUsTUFBWTtBQUNwQixlQUFLLGlCQUFpQixjQUFjLFNBQVM7QUFBQSxRQUMvQztBQUFBLFFBQ0EseUJBQXlCLHdCQUF3QjtBQUFBLE1BQ25ELENBQUM7QUFDRCxrQkFBWSxLQUFLLFVBQVU7QUFFM0IsV0FBSyxTQUFTLE1BQU07QUFDbEIsbUJBQVcsUUFBUTtBQUFBLE1BQ3JCLENBQUM7QUFDRCx3QkFBa0IsTUFBTSxlQUFlLGFBQWEsT0FBTyxDQUFDO0FBQUEsSUFDOUQ7QUFFQSxXQUFPLElBQUksa0JBQWtCO0FBQUEsTUFDM0I7QUFBQSxNQUNBLHlCQUF5Qix3QkFBd0I7QUFBQSxJQUNuRCxDQUFDO0FBQUEsRUFDSDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -6,5 +6,6 @@ export * as 'editor-command-handler' from './editor-command-handler.mjs';
|
|
|
6
6
|
export * as 'file-command-handler' from './file-command-handler.mjs';
|
|
7
7
|
export * as 'folder-command-handler' from './folder-command-handler.mjs';
|
|
8
8
|
export * as 'global-command-handler' from './global-command-handler.mjs';
|
|
9
|
+
export * as 'open-demo-vault-command-handler' from './open-demo-vault-command-handler.mjs';
|
|
9
10
|
export * as 'open-settings-command-handler' from './open-settings-command-handler.mjs';
|
|
10
11
|
export * as 'unlock-active-note-command-handler' from './unlock-active-note-command-handler.mjs';
|
|
@@ -28,6 +28,7 @@ import * as editor_command_handler from "./editor-command-handler.mjs";
|
|
|
28
28
|
import * as file_command_handler from "./file-command-handler.mjs";
|
|
29
29
|
import * as folder_command_handler from "./folder-command-handler.mjs";
|
|
30
30
|
import * as global_command_handler from "./global-command-handler.mjs";
|
|
31
|
+
import * as open_demo_vault_command_handler from "./open-demo-vault-command-handler.mjs";
|
|
31
32
|
import * as open_settings_command_handler from "./open-settings-command-handler.mjs";
|
|
32
33
|
import * as unlock_active_note_command_handler from "./unlock-active-note-command-handler.mjs";
|
|
33
34
|
export {
|
|
@@ -38,7 +39,8 @@ export {
|
|
|
38
39
|
file_command_handler as "file-command-handler",
|
|
39
40
|
folder_command_handler as "folder-command-handler",
|
|
40
41
|
global_command_handler as "global-command-handler",
|
|
42
|
+
open_demo_vault_command_handler as "open-demo-vault-command-handler",
|
|
41
43
|
open_settings_command_handler as "open-settings-command-handler",
|
|
42
44
|
unlock_active_note_command_handler as "unlock-active-note-command-handler"
|
|
43
45
|
};
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQnIGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyAnY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL2NvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnZWRpdG9yLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9lZGl0b3ItY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdmaWxlLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9maWxlLWNvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnZm9sZGVyLWNvbW1hbmQtaGFuZGxlcicgZnJvbSAnLi9mb2xkZXItY29tbWFuZC1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdnbG9iYWwtY29tbWFuZC1oYW5kbGVyJyBmcm9tICcuL2dsb2JhbC1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ29wZW4tZGVtby12YXVsdC1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vb3Blbi1kZW1vLXZhdWx0LWNvbW1hbmQtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnb3Blbi1zZXR0aW5ncy1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vb3Blbi1zZXR0aW5ncy1jb21tYW5kLWhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgJ3VubG9jay1hY3RpdmUtbm90ZS1jb21tYW5kLWhhbmRsZXInIGZyb20gJy4vdW5sb2NrLWFjdGl2ZS1ub3RlLWNvbW1hbmQtaGFuZGxlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLFlBQVlBLG1DQUFxQztBQUNqRCxZQUFZQywrQkFBaUM7QUFDN0MsWUFBWUMscUJBQXVCO0FBQ25DLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQywwQkFBNEI7QUFDeEMsWUFBWUMsNEJBQThCO0FBQzFDLFlBQVlDLDRCQUE4QjtBQUMxQyxZQUFZQyxxQ0FBdUM7QUFDbkQsWUFBWUMsbUNBQXFDO0FBQ2pELFlBQVlDLHdDQUEwQzsiLAogICJuYW1lcyI6IFsiYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIiLCAiY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudCIsICJjb21tYW5kLWhhbmRsZXIiLCAiZWRpdG9yLWNvbW1hbmQtaGFuZGxlciIsICJmaWxlLWNvbW1hbmQtaGFuZGxlciIsICJmb2xkZXItY29tbWFuZC1oYW5kbGVyIiwgImdsb2JhbC1jb21tYW5kLWhhbmRsZXIiLCAib3Blbi1kZW1vLXZhdWx0LWNvbW1hbmQtaGFuZGxlciIsICJvcGVuLXNldHRpbmdzLWNvbW1hbmQtaGFuZGxlciIsICJ1bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyIl0KfQo=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/// <reference path="../../library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Handles the "Open demo vault" command.
|
|
6
|
+
*/
|
|
7
|
+
import type { App, PluginManifest } from 'obsidian';
|
|
8
|
+
import type { PluginNoticeComponent } from '../components/plugin-notice-component.mjs';
|
|
9
|
+
import { GlobalCommandHandler } from './global-command-handler.mjs';
|
|
10
|
+
/**
|
|
11
|
+
* Constructor parameters for {@link OpenDemoVaultCommandHandler}.
|
|
12
|
+
*/
|
|
13
|
+
export interface OpenDemoVaultCommandHandlerConstructorParams {
|
|
14
|
+
/**
|
|
15
|
+
* The Obsidian app instance.
|
|
16
|
+
*/
|
|
17
|
+
readonly app: App;
|
|
18
|
+
/**
|
|
19
|
+
* The manifest of the plugin whose demo vault the command opens.
|
|
20
|
+
*/
|
|
21
|
+
readonly manifest: PluginManifest;
|
|
22
|
+
/**
|
|
23
|
+
* The notice component used to report problems while opening the demo vault.
|
|
24
|
+
*/
|
|
25
|
+
readonly pluginNoticeComponent: PluginNoticeComponent;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A command handler that downloads and opens the plugin's shipped demo vault in a new window. Only
|
|
29
|
+
* available on desktop — {@link canExecute} returns `false` on mobile, so the command is hidden there
|
|
30
|
+
* (no mobile notice).
|
|
31
|
+
*
|
|
32
|
+
* This module stays cross-platform-loadable so a plugin can register it directly without a platform
|
|
33
|
+
* guard: the desktop-only opener (which statically imports Node builtins) is loaded via a dynamic
|
|
34
|
+
* `import()` inside {@link execute}, which only ever runs on desktop.
|
|
35
|
+
*/
|
|
36
|
+
export declare class OpenDemoVaultCommandHandler extends GlobalCommandHandler {
|
|
37
|
+
/**
|
|
38
|
+
* The Obsidian app instance.
|
|
39
|
+
*/
|
|
40
|
+
protected readonly app: App;
|
|
41
|
+
/**
|
|
42
|
+
* The manifest of the plugin whose demo vault the command opens.
|
|
43
|
+
*/
|
|
44
|
+
protected readonly manifest: PluginManifest;
|
|
45
|
+
/**
|
|
46
|
+
* The notice component used to report problems while opening the demo vault.
|
|
47
|
+
*/
|
|
48
|
+
protected readonly pluginNoticeComponent: PluginNoticeComponent;
|
|
49
|
+
/**
|
|
50
|
+
* Constructs a new instance.
|
|
51
|
+
*
|
|
52
|
+
* @param params - Constructor parameters.
|
|
53
|
+
*/
|
|
54
|
+
constructor(params: OpenDemoVaultCommandHandlerConstructorParams);
|
|
55
|
+
/**
|
|
56
|
+
* Executes the command, opening the plugin's demo vault.
|
|
57
|
+
*/
|
|
58
|
+
execute(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Checks whether the command can currently execute: only on desktop.
|
|
61
|
+
*
|
|
62
|
+
* @returns Whether the app is running on desktop.
|
|
63
|
+
*/
|
|
64
|
+
protected canExecute(): boolean;
|
|
65
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import { Platform } from "obsidian";
|
|
25
|
+
import { GlobalCommandHandler } from "./global-command-handler.mjs";
|
|
26
|
+
class OpenDemoVaultCommandHandler extends GlobalCommandHandler {
|
|
27
|
+
/**
|
|
28
|
+
* The Obsidian app instance.
|
|
29
|
+
*/
|
|
30
|
+
app;
|
|
31
|
+
/**
|
|
32
|
+
* The manifest of the plugin whose demo vault the command opens.
|
|
33
|
+
*/
|
|
34
|
+
manifest;
|
|
35
|
+
/**
|
|
36
|
+
* The notice component used to report problems while opening the demo vault.
|
|
37
|
+
*/
|
|
38
|
+
pluginNoticeComponent;
|
|
39
|
+
/**
|
|
40
|
+
* Constructs a new instance.
|
|
41
|
+
*
|
|
42
|
+
* @param params - Constructor parameters.
|
|
43
|
+
*/
|
|
44
|
+
constructor(params) {
|
|
45
|
+
super({
|
|
46
|
+
icon: "download",
|
|
47
|
+
id: "open-demo-vault",
|
|
48
|
+
name: "Open demo vault"
|
|
49
|
+
});
|
|
50
|
+
this.app = params.app;
|
|
51
|
+
this.manifest = params.manifest;
|
|
52
|
+
this.pluginNoticeComponent = params.pluginNoticeComponent;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Executes the command, opening the plugin's demo vault.
|
|
56
|
+
*/
|
|
57
|
+
async execute() {
|
|
58
|
+
const { openDemoVault } = await import("../desktop-demo-vault-opener.ts");
|
|
59
|
+
await openDemoVault({
|
|
60
|
+
app: this.app,
|
|
61
|
+
manifest: this.manifest,
|
|
62
|
+
pluginNoticeComponent: this.pluginNoticeComponent
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Checks whether the command can currently execute: only on desktop.
|
|
67
|
+
*
|
|
68
|
+
* @returns Whether the app is running on desktop.
|
|
69
|
+
*/
|
|
70
|
+
canExecute() {
|
|
71
|
+
return Platform.isDesktopApp;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export {
|
|
75
|
+
OpenDemoVaultCommandHandler
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1kZW1vLXZhdWx0LWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiT3BlbiBkZW1vIHZhdWx0XCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luTWFuaWZlc3Rcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHsgR2xvYmFsQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuL2dsb2JhbC1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZm9yIHtAbGluayBPcGVuRGVtb1ZhdWx0Q29tbWFuZEhhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5EZW1vVmF1bHRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG1hbmlmZXN0IG9mIHRoZSBwbHVnaW4gd2hvc2UgZGVtbyB2YXVsdCB0aGUgY29tbWFuZCBvcGVucy5cbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBQbHVnaW5NYW5pZmVzdDtcblxuICAvKipcbiAgICogVGhlIG5vdGljZSBjb21wb25lbnQgdXNlZCB0byByZXBvcnQgcHJvYmxlbXMgd2hpbGUgb3BlbmluZyB0aGUgZGVtbyB2YXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xufVxuXG4vKipcbiAqIEEgY29tbWFuZCBoYW5kbGVyIHRoYXQgZG93bmxvYWRzIGFuZCBvcGVucyB0aGUgcGx1Z2luJ3Mgc2hpcHBlZCBkZW1vIHZhdWx0IGluIGEgbmV3IHdpbmRvdy4gT25seVxuICogYXZhaWxhYmxlIG9uIGRlc2t0b3AgXHUyMDE0IHtAbGluayBjYW5FeGVjdXRlfSByZXR1cm5zIGBmYWxzZWAgb24gbW9iaWxlLCBzbyB0aGUgY29tbWFuZCBpcyBoaWRkZW4gdGhlcmVcbiAqIChubyBtb2JpbGUgbm90aWNlKS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBzdGF5cyBjcm9zcy1wbGF0Zm9ybS1sb2FkYWJsZSBzbyBhIHBsdWdpbiBjYW4gcmVnaXN0ZXIgaXQgZGlyZWN0bHkgd2l0aG91dCBhIHBsYXRmb3JtXG4gKiBndWFyZDogdGhlIGRlc2t0b3Atb25seSBvcGVuZXIgKHdoaWNoIHN0YXRpY2FsbHkgaW1wb3J0cyBOb2RlIGJ1aWx0aW5zKSBpcyBsb2FkZWQgdmlhIGEgZHluYW1pY1xuICogYGltcG9ydCgpYCBpbnNpZGUge0BsaW5rIGV4ZWN1dGV9LCB3aGljaCBvbmx5IGV2ZXIgcnVucyBvbiBkZXNrdG9wLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkRlbW9WYXVsdENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgR2xvYmFsQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIG1hbmlmZXN0IG9mIHRoZSBwbHVnaW4gd2hvc2UgZGVtbyB2YXVsdCB0aGUgY29tbWFuZCBvcGVucy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBtYW5pZmVzdDogUGx1Z2luTWFuaWZlc3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29tcG9uZW50IHVzZWQgdG8gcmVwb3J0IHByb2JsZW1zIHdoaWxlIG9wZW5pbmcgdGhlIGRlbW8gdmF1bHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBDb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogT3BlbkRlbW9WYXVsdENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcih7XG4gICAgICBpY29uOiAnZG93bmxvYWQnLFxuICAgICAgaWQ6ICdvcGVuLWRlbW8tdmF1bHQnLFxuICAgICAgbmFtZTogJ09wZW4gZGVtbyB2YXVsdCdcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLm1hbmlmZXN0ID0gcGFyYW1zLm1hbmlmZXN0O1xuICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50ID0gcGFyYW1zLnBsdWdpbk5vdGljZUNvbXBvbmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCwgb3BlbmluZyB0aGUgcGx1Z2luJ3MgZGVtbyB2YXVsdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBleGVjdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENvbmRpdGlvbmFsIGltcG9ydCBvZiB0aGUgZGVza3RvcC1vbmx5IG9wZW5lcjsgdGhpcyBydW5zIG9ubHkgb24gZGVza3RvcCAoZ2F0ZWQgYnkgYGNhbkV4ZWN1dGVgKSwga2VlcGluZyBpdHMgc3RhdGljIE5vZGUtYnVpbHRpbiBpbXBvcnRzIG9mZiB0aGUgbW9iaWxlIGxvYWQgcGF0aC5cbiAgICBjb25zdCB7IG9wZW5EZW1vVmF1bHQgfSA9IGF3YWl0IGltcG9ydCgnLi4vZGVza3RvcC1kZW1vLXZhdWx0LW9wZW5lci50cycpO1xuICAgIGF3YWl0IG9wZW5EZW1vVmF1bHQoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIG1hbmlmZXN0OiB0aGlzLm1hbmlmZXN0LFxuICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBjdXJyZW50bHkgZXhlY3V0ZTogb25seSBvbiBkZXNrdG9wLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcHAgaXMgcnVubmluZyBvbiBkZXNrdG9wLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFBsYXRmb3JtLmlzRGVza3RvcEFwcDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxTQUFTLGdCQUFnQjtBQUl6QixTQUFTLDRCQUE0QjtBQStCOUIsTUFBTSxvQ0FBb0MscUJBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBc0Q7QUFDdkUsVUFBTTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUVELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssV0FBVyxPQUFPO0FBQ3ZCLFNBQUssd0JBQXdCLE9BQU87QUFBQSxFQUN0QztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBc0IsVUFBeUI7QUFFN0MsVUFBTSxFQUFFLGNBQWMsSUFBSSxNQUFNLE9BQU8saUNBQWlDO0FBQ3hFLFVBQU0sY0FBYztBQUFBLE1BQ2xCLEtBQUssS0FBSztBQUFBLE1BQ1YsVUFBVSxLQUFLO0FBQUEsTUFDZix1QkFBdUIsS0FBSztBQUFBLElBQzlCLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT21CLGFBQXNCO0FBQ3ZDLFdBQU8sU0FBUztBQUFBLEVBQ2xCO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference path="../library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Resolves a community plugin's GitHub repository from Obsidian's public plugin registry.
|
|
6
|
+
*
|
|
7
|
+
* Obsidian's `community-plugins.json` is the authoritative source that maps a plugin `id` to its
|
|
8
|
+
* `owner/name` GitHub repository — the plugin manifest itself carries no repository. This is used to
|
|
9
|
+
* locate a plugin's GitHub releases (e.g. to download its shipped demo-vault archive).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Resolves the `owner/name` GitHub repository of a community plugin from Obsidian's public
|
|
13
|
+
* `community-plugins.json` registry.
|
|
14
|
+
*
|
|
15
|
+
* The registry is fetched once and cached on the shared plugin state for subsequent calls; a failed
|
|
16
|
+
* fetch is not cached, so a later call retries.
|
|
17
|
+
*
|
|
18
|
+
* @param pluginId - The plugin id to look up.
|
|
19
|
+
* @returns A {@link Promise} resolving to the plugin's `owner/name` repository, or `null` if the
|
|
20
|
+
* plugin is not listed in the registry.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getCommunityPluginRepo(pluginId: string): Promise<null | string>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import { requestUrl } from "obsidian";
|
|
25
|
+
import { getObsidianDevUtilsState } from "../obsidian-dev-utils-state.mjs";
|
|
26
|
+
const COMMUNITY_PLUGINS_STATE_KEY = "communityPluginEntriesPromise";
|
|
27
|
+
const COMMUNITY_PLUGINS_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugins.json";
|
|
28
|
+
async function getCommunityPluginRepo(pluginId) {
|
|
29
|
+
const cache = getObsidianDevUtilsState(COMMUNITY_PLUGINS_STATE_KEY, null);
|
|
30
|
+
cache.value ??= fetchCommunityPluginEntries();
|
|
31
|
+
let entries;
|
|
32
|
+
try {
|
|
33
|
+
entries = await cache.value;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
cache.value = null;
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
const entry = entries.find((candidate) => candidate.id === pluginId);
|
|
39
|
+
return entry?.repo ?? null;
|
|
40
|
+
}
|
|
41
|
+
async function fetchCommunityPluginEntries() {
|
|
42
|
+
const response = await requestUrl(COMMUNITY_PLUGINS_URL);
|
|
43
|
+
return response.json;
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
getCommunityPluginRepo
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW11bml0eS1wbHVnaW5zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMgYSBjb21tdW5pdHkgcGx1Z2luJ3MgR2l0SHViIHJlcG9zaXRvcnkgZnJvbSBPYnNpZGlhbidzIHB1YmxpYyBwbHVnaW4gcmVnaXN0cnkuXG4gKlxuICogT2JzaWRpYW4ncyBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgaXMgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIHRoYXQgbWFwcyBhIHBsdWdpbiBgaWRgIHRvIGl0c1xuICogYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5IFx1MjAxNCB0aGUgcGx1Z2luIG1hbmlmZXN0IGl0c2VsZiBjYXJyaWVzIG5vIHJlcG9zaXRvcnkuIFRoaXMgaXMgdXNlZCB0b1xuICogbG9jYXRlIGEgcGx1Z2luJ3MgR2l0SHViIHJlbGVhc2VzIChlLmcuIHRvIGRvd25sb2FkIGl0cyBzaGlwcGVkIGRlbW8tdmF1bHQgYXJjaGl2ZSkuXG4gKi9cblxuaW1wb3J0IHsgcmVxdWVzdFVybCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIHNpbmdsZSBlbnRyeSBpbiBPYnNpZGlhbidzIGBjb21tdW5pdHktcGx1Z2lucy5qc29uYCByZWdpc3RyeS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpbkVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gYXV0aG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGVzY3JpcHRpb24uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkaXNwbGF5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG59XG5cbmNvbnN0IENPTU1VTklUWV9QTFVHSU5TX1NUQVRFX0tFWSA9ICdjb21tdW5pdHlQbHVnaW5FbnRyaWVzUHJvbWlzZSc7XG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19VUkwgPSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvSEVBRC9jb21tdW5pdHktcGx1Z2lucy5qc29uJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5IG9mIGEgY29tbXVuaXR5IHBsdWdpbiBmcm9tIE9ic2lkaWFuJ3MgcHVibGljXG4gKiBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgcmVnaXN0cnkuXG4gKlxuICogVGhlIHJlZ2lzdHJ5IGlzIGZldGNoZWQgb25jZSBhbmQgY2FjaGVkIG9uIHRoZSBzaGFyZWQgcGx1Z2luIHN0YXRlIGZvciBzdWJzZXF1ZW50IGNhbGxzOyBhIGZhaWxlZFxuICogZmV0Y2ggaXMgbm90IGNhY2hlZCwgc28gYSBsYXRlciBjYWxsIHJldHJpZXMuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBpZCB0byBsb29rIHVwLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBwbHVnaW4ncyBgb3duZXIvbmFtZWAgcmVwb3NpdG9yeSwgb3IgYG51bGxgIGlmIHRoZVxuICogcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29tbXVuaXR5UGx1Z2luUmVwbyhwbHVnaW5JZDogc3RyaW5nKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPG51bGwgfCBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+PihDT01NVU5JVFlfUExVR0lOU19TVEFURV9LRVksIG51bGwpO1xuICBjYWNoZS52YWx1ZSA/Pz0gZmV0Y2hDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk7XG5cbiAgbGV0IGVudHJpZXM6IENvbW11bml0eVBsdWdpbkVudHJ5W107XG4gIHRyeSB7XG4gICAgZW50cmllcyA9IGF3YWl0IGNhY2hlLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhY2hlLnZhbHVlID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5ID0gZW50cmllcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcGx1Z2luSWQpO1xuICByZXR1cm4gZW50cnk/LnJlcG8gPz8gbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hDb21tdW5pdHlQbHVnaW5FbnRyaWVzKCk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luRW50cnlbXT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RVcmwoQ09NTVVOSVRZX1BMVUdJTlNfVVJMKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgQ29tbXVuaXR5UGx1Z2luRW50cnlbXTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsU0FBUyxrQkFBa0I7QUFFM0IsU0FBUyxnQ0FBZ0M7QUFnQ3pDLE1BQU0sOEJBQThCO0FBQ3BDLE1BQU0sd0JBQXdCO0FBYTlCLGVBQXNCLHVCQUF1QixVQUEwQztBQUNyRixRQUFNLFFBQVEseUJBQWlFLDZCQUE2QixJQUFJO0FBQ2hILFFBQU0sVUFBVSw0QkFBNEI7QUFFNUMsTUFBSTtBQUNKLE1BQUk7QUFDRixjQUFVLE1BQU0sTUFBTTtBQUFBLEVBQ3hCLFNBQVMsT0FBTztBQUNkLFVBQU0sUUFBUTtBQUNkLFVBQU07QUFBQSxFQUNSO0FBRUEsUUFBTSxRQUFRLFFBQVEsS0FBSyxDQUFDLGNBQWMsVUFBVSxPQUFPLFFBQVE7QUFDbkUsU0FBTyxPQUFPLFFBQVE7QUFDeEI7QUFFQSxlQUFlLDhCQUErRDtBQUM1RSxRQUFNLFdBQVcsTUFBTSxXQUFXLHFCQUFxQjtBQUN2RCxTQUFPLFNBQVM7QUFDbEI7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -5,14 +5,20 @@
|
|
|
5
5
|
* Disposable component base class and utilities for `using` declarations.
|
|
6
6
|
*/
|
|
7
7
|
import { Component } from 'obsidian';
|
|
8
|
-
type
|
|
8
|
+
import type { DisposableEx } from '../../disposable.mjs';
|
|
9
|
+
type DisposableComponentWrapper<TComponent extends Component> = DisposableEx & TComponent;
|
|
9
10
|
/**
|
|
10
|
-
* Convert component to a
|
|
11
|
+
* Convert component to a {@link DisposableEx} interface by adding `Symbol.dispose` and a convenience
|
|
12
|
+
* {@link DisposableEx.dispose} method that unloads the component when disposed.
|
|
13
|
+
*
|
|
14
|
+
* An existing `Symbol.dispose` is preserved; the convenience {@link DisposableEx.dispose} method always
|
|
15
|
+
* delegates to it. The passed component is mutated in place and returned, so the call is idempotent.
|
|
11
16
|
*
|
|
12
17
|
* @typeParam TComponent - The type of component to wrap, constrained to extend Component.
|
|
13
18
|
*
|
|
14
19
|
* @param component - The component instance to wrap with Disposable support.
|
|
15
|
-
* @returns The component cast to `DisposableComponentWrapper` with `Symbol.dispose`
|
|
20
|
+
* @returns The component cast to `DisposableComponentWrapper` with `Symbol.dispose` and `dispose`
|
|
21
|
+
* attached.
|
|
16
22
|
*/
|
|
17
23
|
export declare function asDisposableComponent<TComponent extends Component>(component: TComponent): DisposableComponentWrapper<TComponent>;
|
|
18
24
|
export {};
|
|
@@ -22,18 +22,18 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
24
|
import { Component } from "obsidian";
|
|
25
|
-
import { isDisposable } from "../../disposable.mjs";
|
|
26
25
|
function asDisposableComponent(component) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
const disposable = component;
|
|
31
|
-
disposable[Symbol.dispose] = () => {
|
|
26
|
+
const disposableEx = component;
|
|
27
|
+
const symbolDispose = disposableEx[Symbol.dispose] ?? (() => {
|
|
32
28
|
component.unload();
|
|
29
|
+
});
|
|
30
|
+
disposableEx[Symbol.dispose] = symbolDispose;
|
|
31
|
+
disposableEx.dispose = () => {
|
|
32
|
+
symbolDispose();
|
|
33
33
|
};
|
|
34
|
-
return
|
|
34
|
+
return disposableEx;
|
|
35
35
|
}
|
|
36
36
|
export {
|
|
37
37
|
asDisposableComponent
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvZGlzcG9zYWJsZS1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIGNvbXBvbmVudCBiYXNlIGNsYXNzIGFuZCB1dGlsaXRpZXMgZm9yIGB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBEaXNwb3NhYmxlRXggfSBmcm9tICcuLi8uLi9kaXNwb3NhYmxlLnRzJztcblxudHlwZSBEaXNwb3NhYmxlQ29tcG9uZW50V3JhcHBlcjxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50PiA9IERpc3Bvc2FibGVFeCAmIFRDb21wb25lbnQ7XG5cbi8qKlxuICogQ29udmVydCBjb21wb25lbnQgdG8gYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UgYnkgYWRkaW5nIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGEgY29udmVuaWVuY2VcbiAqIHtAbGluayBEaXNwb3NhYmxlRXguZGlzcG9zZX0gbWV0aG9kIHRoYXQgdW5sb2FkcyB0aGUgY29tcG9uZW50IHdoZW4gZGlzcG9zZWQuXG4gKlxuICogQW4gZXhpc3RpbmcgYFN5bWJvbC5kaXNwb3NlYCBpcyBwcmVzZXJ2ZWQ7IHRoZSBjb252ZW5pZW5jZSB7QGxpbmsgRGlzcG9zYWJsZUV4LmRpc3Bvc2V9IG1ldGhvZCBhbHdheXNcbiAqIGRlbGVnYXRlcyB0byBpdC4gVGhlIHBhc3NlZCBjb21wb25lbnQgaXMgbXV0YXRlZCBpbiBwbGFjZSBhbmQgcmV0dXJuZWQsIHNvIHRoZSBjYWxsIGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHdyYXAsIGNvbnN0cmFpbmVkIHRvIGV4dGVuZCBDb21wb25lbnQuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gd3JhcCB3aXRoIERpc3Bvc2FibGUgc3VwcG9ydC5cbiAqIEByZXR1cm5zIFRoZSBjb21wb25lbnQgY2FzdCB0byBgRGlzcG9zYWJsZUNvbXBvbmVudFdyYXBwZXJgIHdpdGggYFN5bWJvbC5kaXNwb3NlYCBhbmQgYGRpc3Bvc2VgXG4gKiAgIGF0dGFjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNEaXNwb3NhYmxlQ29tcG9uZW50PFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IERpc3Bvc2FibGVDb21wb25lbnRXcmFwcGVyPFRDb21wb25lbnQ+IHtcbiAgY29uc3QgZGlzcG9zYWJsZUV4ID0gY29tcG9uZW50IGFzIFBhcnRpYWw8RGlzcG9zYWJsZUV4PjtcbiAgY29uc3Qgc3ltYm9sRGlzcG9zZTogKCkgPT4gdm9pZCA9IGRpc3Bvc2FibGVFeFtTeW1ib2wuZGlzcG9zZV0gPz8gKCgpOiB2b2lkID0+IHtcbiAgICBjb21wb25lbnQudW5sb2FkKCk7XG4gIH0pO1xuICBkaXNwb3NhYmxlRXhbU3ltYm9sLmRpc3Bvc2VdID0gc3ltYm9sRGlzcG9zZTtcbiAgZGlzcG9zYWJsZUV4LmRpc3Bvc2UgPSAoKTogdm9pZCA9PiB7XG4gICAgc3ltYm9sRGlzcG9zZSgpO1xuICB9O1xuICByZXR1cm4gZGlzcG9zYWJsZUV4IGFzIERpc3Bvc2FibGVDb21wb25lbnRXcmFwcGVyPFRDb21wb25lbnQ+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxTQUFTLGlCQUFpQjtBQW1CbkIsU0FBUyxzQkFBb0QsV0FBK0Q7QUFDakksUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZ0JBQTRCLGFBQWEsT0FBTyxPQUFPLE1BQU0sTUFBWTtBQUM3RSxjQUFVLE9BQU87QUFBQSxFQUNuQjtBQUNBLGVBQWEsT0FBTyxPQUFPLElBQUk7QUFDL0IsZUFBYSxVQUFVLE1BQVk7QUFDakMsa0JBQWM7QUFBQSxFQUNoQjtBQUNBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -45,6 +45,15 @@ export interface MonkeyAroundComponentRegisterFunctionPatchParams<Obj extends ob
|
|
|
45
45
|
* The object to patch.
|
|
46
46
|
*/
|
|
47
47
|
readonly obj: Obj;
|
|
48
|
+
/**
|
|
49
|
+
* When `true`, the patch uninstalls itself the first time the patched function is invoked (by
|
|
50
|
+
* unloading this component), restoring the original — so the interception happens exactly once.
|
|
51
|
+
* Intended for a component dedicated to this single patch. Existing callers that omit it are
|
|
52
|
+
* unaffected.
|
|
53
|
+
*
|
|
54
|
+
* @default `false`
|
|
55
|
+
*/
|
|
56
|
+
readonly once?: boolean;
|
|
48
57
|
/**
|
|
49
58
|
* Patch handler function that takes the original value and returns the patched value.
|
|
50
59
|
*
|
|
@@ -68,6 +77,14 @@ export interface MonkeyAroundComponentRegisterMethodPatchParams<Obj extends obje
|
|
|
68
77
|
* The object to patch.
|
|
69
78
|
*/
|
|
70
79
|
readonly obj: Obj;
|
|
80
|
+
/**
|
|
81
|
+
* When `true`, the patch uninstalls itself the first time the patched method is invoked, restoring
|
|
82
|
+
* the original — so the interception happens exactly once. Existing callers that omit it are
|
|
83
|
+
* unaffected.
|
|
84
|
+
*
|
|
85
|
+
* @default `false`
|
|
86
|
+
*/
|
|
87
|
+
readonly once?: boolean;
|
|
71
88
|
/**
|
|
72
89
|
* The patch handler function.
|
|
73
90
|
*/
|
|
@@ -36,7 +36,21 @@ class MonkeyAroundComponent extends ComponentEx {
|
|
|
36
36
|
this.ensureLoaded();
|
|
37
37
|
const factories = {};
|
|
38
38
|
factories[params.functionName] = (originalValue) => {
|
|
39
|
-
|
|
39
|
+
const patchedValue = params.patchHandler(originalValue);
|
|
40
|
+
if (!params.once) {
|
|
41
|
+
return patchedValue;
|
|
42
|
+
}
|
|
43
|
+
const unloadComponent = () => {
|
|
44
|
+
this.unload();
|
|
45
|
+
};
|
|
46
|
+
function oncePatchedValue(...args) {
|
|
47
|
+
try {
|
|
48
|
+
return Reflect.apply(patchedValue, this, args);
|
|
49
|
+
} finally {
|
|
50
|
+
unloadComponent();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return Object.assign(oncePatchedValue, patchedValue);
|
|
40
54
|
};
|
|
41
55
|
this.registerPatch(params.obj, factories);
|
|
42
56
|
}
|
|
@@ -56,6 +70,7 @@ class MonkeyAroundComponent extends ComponentEx {
|
|
|
56
70
|
this.registerFunctionPatch({
|
|
57
71
|
functionName: params.methodName,
|
|
58
72
|
obj: params.obj,
|
|
73
|
+
once: params.once ?? false,
|
|
59
74
|
patchHandler: (originalMethodRaw) => {
|
|
60
75
|
const originalMethod = originalMethodRaw;
|
|
61
76
|
const finalPatchedMethod = params.postPatchHandler?.({
|
|
@@ -105,4 +120,4 @@ export {
|
|
|
105
120
|
around,
|
|
106
121
|
hasPatchToken
|
|
107
122
|
};
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbXByb3ZlZCB0eXBlLXNhZmUgd3JhcHBlciBvZiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbW9ua2V5LWFyb3VuZH0gbGlicmFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbmFsS2V5cyB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFyb3VuZCBhcyBvcmlnaW5hbEFyb3VuZCB9IGZyb20gJ21vbmtleS1hcm91bmQnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBPYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICovXG5leHBvcnQgdHlwZSBGYWN0b3JpZXM8T2JqIGV4dGVuZHMgb2JqZWN0PiA9IFBhcnRpYWw8RnVsbEZhY3RvcmllczxPYmo+PjtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGNhbGxhYmxlIFx1MjAxNCBhIG1ldGhvZCwgb3IgYSBmdW5jdGlvbi1saWtlIG9iamVjdCBzdWNoIGFzIGEgYERlYm91bmNlcmAuIFRoZXNlIGFyZSB0aGUgbWVtYmVyc1xuICogYWNjZXB0ZWQgYnkge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBmaWx0ZXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVuY3Rpb25LZXlzPE9iaiBleHRlbmRzIG9iamVjdD4gPSBDb25kaXRpb25hbEtleXM8T2JqLCBHZW5lcmljRnVuY3Rpb24gfCB1bmRlZmluZWQ+ICYga2V5b2YgT2JqO1xuXG4vKipcbiAqIEtleXMgb2YgYE9iamAgd2hvc2UgdmFsdWUgaXMgYSBwbGFpbiBmdW5jdGlvbiAoYSBcInJlYWwgbWV0aG9kXCIpLiBGdW5jdGlvbi1saWtlIG9iamVjdHMgdGhhdCBjYXJyeSBleHRyYSBtZW1iZXJzIGFyZVxuICogZXhjbHVkZWQgXHUyMDE0IGUuZy4gYSBgRGVib3VuY2VyYCAod2hpY2ggYWRkcyBgY2FuY2VsYC9gcnVuYCkgYmVsb25ncyB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyRnVuY3Rpb25QYXRjaH0sXG4gKiBub3Qge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3Rlck1ldGhvZFBhdGNofS4gVGhlIGNoZWNrIGlzIHdoZXRoZXIgdGhlIG1lbWJlciBoYXMgYW55IG93biBrZXlzIGJleW9uZCBhIGJhcmVcbiAqIGZ1bmN0aW9uJ3MgKGBFeGNsdWRlPGtleW9mIFQsIGtleW9mIEdlbmVyaWNGdW5jdGlvbj5gIGlzIGBuZXZlcmApLlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBmaWx0ZXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgTWV0aG9kS2V5czxPYmogZXh0ZW5kcyBvYmplY3Q+ID0gTWV0aG9kS2V5c01hcDxPYmo+W0Z1bmN0aW9uS2V5czxPYmo+XTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyRnVuY3Rpb25QYXRjaH0uXG4gKlxuICogQHR5cGVQYXJhbSBPYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8T2JqIGV4dGVuZHMgb2JqZWN0LCBGdW5jdGlvbk5hbWUgZXh0ZW5kcyBGdW5jdGlvbktleXM8T2JqPj4ge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IEZ1bmN0aW9uTmFtZTtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IG9iajogT2JqO1xuXG4gIC8qKlxuICAgKiBQYXRjaCBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIG9yaWdpbmFsIHZhbHVlIGFuZCByZXR1cm5zIHRoZSBwYXRjaGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3JpZ2luYWxWYWx1ZSAtIFRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoZSBwYXRjaGVkIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHBhdGNoSGFuZGxlcihvcmlnaW5hbFZhbHVlOiBPYmpbRnVuY3Rpb25OYW1lXSk6IE9ialtGdW5jdGlvbk5hbWVdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIHtAbGluayBNb25rZXlBcm91bmRDb21wb25lbnQjcmVnaXN0ZXJNZXRob2RQYXRjaH0uXG4gKlxuICogQHR5cGVQYXJhbSBPYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIHRvIHBhdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbmtleUFyb3VuZENvbXBvbmVudFJlZ2lzdGVyTWV0aG9kUGF0Y2hQYXJhbXM8T2JqIGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czxPYmo+PiB7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBtZXRob2ROYW1lOiBNZXRob2ROYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JqOiBPYmo7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRjaCBoYW5kbGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0Y2hIYW5kbGVyOiBQYXRjaEhhbmRsZXJGbjxPYmosIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0b2tlbiB0byBpZGVudGlmeSB0aGUgcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBwYXRjaFRva2VuPzogc3ltYm9sO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBwb3N0LXBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBydW5zIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdFBhdGNoSGFuZGxlcj86IFBvc3RQYXRjaEhhbmRsZXJGbjxPYmosIE1ldGhvZE5hbWU+O1xufVxuXG4vKipcbiAqIEEgcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IGludGVyY2VwdHMgY2FsbHMgdG8gYSBtZXRob2Qgb24gYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGNoSGFuZGxlckZuPE9iaiBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8T2JqPj4gPSAoXG4gIHBhcmFtczogUGF0Y2hIYW5kbGVyUGFyYW1zPE9iaiwgTWV0aG9kTmFtZT5cbikgPT4gUmV0dXJuVHlwZTxFeHRyYWN0RnVuY3Rpb248T2JqLCBNZXRob2ROYW1lPj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8gYSB7QGxpbmsgUGF0Y2hIYW5kbGVyRm59IGNhbGxiYWNrLlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hIYW5kbGVyUGFyYW1zPE9iaiBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8T2JqPj4ge1xuICBmYWxsYmFjayh0aGlzOiB2b2lkKTogUmV0dXJuVHlwZTxFeHRyYWN0RnVuY3Rpb248T2JqLCBNZXRob2ROYW1lPj47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBhcmd1bWVudHMgb2YgdGhlIGludGVyY2VwdGVkIGNhbGwsIGFzIGEgdHVwbGUuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbEFyZ3M6IFBhcmFtZXRlcnM8RXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgKHVucGF0Y2hlZCkgbWV0aG9kLiBDYWxsIHZpYSBgb3JpZ2luYWxGbi5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBtZXRob2QsIGJ1dCB3aXRoIHRoZSBgdGhpc2AgY29udGV4dCBhbHJlYWR5IGJvdW5kIHRvIHRoZSBvcmlnaW5hbCBvYmplY3QuIENhbGwgdmlhIGBvcmlnaW5hbE1ldGhvZEJvdW5kKC4uLm9yaWdpbmFsQXJncylgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxNZXRob2RCb3VuZDogT21pdFRoaXNQYXJhbWV0ZXI8RXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYHRoaXNgIGNvbnRleHQgb2YgdGhlIGludGVyY2VwdGVkIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbFRoaXM6IE9iajtcbn1cblxuLyoqXG4gKiBBIHBvc3QtcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IHJ1bnMgYWZ0ZXIgYSBwYXRjaCBpcyBhcHBsaWVkLlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBvc3RQYXRjaEhhbmRsZXJGbjxPYmogZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPE9iaj4+ID0gKFxuICBwYXJhbXM6IFBvc3RQYXRjaEhhbmRsZXJQYXJhbXM8T2JqLCBNZXRob2ROYW1lPlxuKSA9PiBNYXliZVJldHVybjxFeHRyYWN0RnVuY3Rpb248T2JqLCBNZXRob2ROYW1lPj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8gYSB7QGxpbmsgUG9zdFBhdGNoSGFuZGxlckZufSBjYWxsYmFjay5cbiAqXG4gKiBAdHlwZVBhcmFtIE9iaiAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RQYXRjaEhhbmRsZXJQYXJhbXM8T2JqIGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czxPYmo+PiB7XG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgKHVucGF0Y2hlZCkgbWV0aG9kLiBDYWxsIHZpYSBgb3JpZ2luYWxGbi5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRjaGVkIG1ldGhvZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGNoZWRNZXRob2Q6IEV4dHJhY3RGdW5jdGlvbjxPYmosIE1ldGhvZE5hbWU+O1xufVxuXG50eXBlIEV4dHJhY3RGdW5jdGlvbjxPYmogZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPE9iaj4+ID0gR2VuZXJpY0Z1bmN0aW9uPFBhcmFtZXRlcnM8RXh0cmFjdDxPYmpbTWV0aG9kTmFtZV0sIEdlbmVyaWNGdW5jdGlvbj4+LCBSZXR1cm5UeXBlPEV4dHJhY3Q8T2JqW01ldGhvZE5hbWVdLCBHZW5lcmljRnVuY3Rpb24+Pj47XG5cbnR5cGUgRnVsbEZhY3RvcmllczxPYmogZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbS2V5IGluIGtleW9mIE9ial06IChvcmlnaW5hbFZhbHVlOiBPYmpbS2V5XSkgPT4gT2JqW0tleV07XG59O1xuXG50eXBlIE1ldGhvZEtleXNNYXA8T2JqIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0tleSBpbiBGdW5jdGlvbktleXM8T2JqPl06IFtFeGNsdWRlPGtleW9mIE5vbk51bGxhYmxlPE9ialtLZXldPiwga2V5b2YgR2VuZXJpY0Z1bmN0aW9uPl0gZXh0ZW5kcyBbbmV2ZXJdID8gS2V5IDogbmV2ZXI7XG59O1xuXG50eXBlIE9yaWdpbmFsRmFjdG9yaWVzPE9iaiBleHRlbmRzIEdlbmVyaWNPYmplY3Q+ID0gUGFyYW1ldGVyczx0eXBlb2Ygb3JpZ2luYWxBcm91bmQ8T2JqPj5bMV07XG5cbnR5cGUgVW5pbnN0YWxsZXIgPSAoKSA9PiB2b2lkO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFuYWdlcyBtb25rZXktcGF0Y2hlcyB3aXRoIGxpZmVjeWNsZS1ib3VuZCBjbGVhbnVwLlxuICogQWxsIHBhdGNoZXMgcmVnaXN0ZXJlZCB2aWEgdGhpcyBjb21wb25lbnQgYXJlIGF1dG9tYXRpY2FsbHkgdW5pbnN0YWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IHVubG9hZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25rZXlBcm91bmRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBwYXRjaCBmb3IgYSBzaW5nbGUgZnVuY3Rpb24tbGlrZSBtZW1iZXIgKGEgbWV0aG9kLCBvciBhIGNhbGxhYmxlIHN1Y2ggYXMgYSBgRGVib3VuY2VyYCkgdXNpbmcgYSBzaW1wbGlmaWVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBwYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uUGF0Y2g8T2JqIGV4dGVuZHMgb2JqZWN0LCBjb25zdCBGdW5jdGlvbk5hbWUgZXh0ZW5kcyBGdW5jdGlvbktleXM8T2JqPj4oXG4gICAgcGFyYW1zOiBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8T2JqLCBGdW5jdGlvbk5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBjb25zdCBmYWN0b3JpZXM6IEZhY3RvcmllczxPYmo+ID0ge307XG4gICAgZmFjdG9yaWVzW3BhcmFtcy5mdW5jdGlvbk5hbWVdID0gKG9yaWdpbmFsVmFsdWU6IE9ialtGdW5jdGlvbk5hbWVdKTogT2JqW0Z1bmN0aW9uTmFtZV0gPT4ge1xuICAgICAgcmV0dXJuIHBhcmFtcy5wYXRjaEhhbmRsZXIob3JpZ2luYWxWYWx1ZSk7XG4gICAgfTtcblxuICAgIHRoaXMucmVnaXN0ZXJQYXRjaChwYXJhbXMub2JqLCBmYWN0b3JpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHNpbmdsZS1tZXRob2QgcGF0Y2ggdXNpbmcgYSBzaW1wbGlmaWVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgb2YgdGhlIHBhdGNoLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyTWV0aG9kUGF0Y2g8T2JqIGV4dGVuZHMgb2JqZWN0LCBjb25zdCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czxPYmo+PihcbiAgICBwYXJhbXM6IE1vbmtleUFyb3VuZENvbXBvbmVudFJlZ2lzdGVyTWV0aG9kUGF0Y2hQYXJhbXM8T2JqLCBNZXRob2ROYW1lPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgaWYgKHBhcmFtcy5wYXRjaFRva2VuKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IHBhcmFtcy5vYmpbcGFyYW1zLm1ldGhvZE5hbWVdIGFzIEdlbmVyaWNGdW5jdGlvbjtcbiAgICAgIGdldE1vbmtleUFyb3VuZFBhdGNoZXMoKS5zZXQob3JpZ2luYWxNZXRob2QsIHBhcmFtcy5wYXRjaFRva2VuKTtcbiAgICB9XG5cbiAgICB0eXBlIEZuID0gRXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT47XG5cbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25QYXRjaCh7XG4gICAgICBmdW5jdGlvbk5hbWU6IHBhcmFtcy5tZXRob2ROYW1lLFxuICAgICAgb2JqOiBwYXJhbXMub2JqLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAob3JpZ2luYWxNZXRob2RSYXcpID0+IHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbE1ldGhvZFJhdyBhcyBGbjtcbiAgICAgICAgY29uc3QgZmluYWxQYXRjaGVkTWV0aG9kID0gcGFyYW1zLnBvc3RQYXRjaEhhbmRsZXI/Lih7XG4gICAgICAgICAgb3JpZ2luYWxNZXRob2QsXG4gICAgICAgICAgcGF0Y2hlZE1ldGhvZFxuICAgICAgICB9KSA/PyBwYXRjaGVkTWV0aG9kO1xuICAgICAgICByZXR1cm4gZmluYWxQYXRjaGVkTWV0aG9kIGFzIE9ialtNZXRob2ROYW1lXTtcblxuICAgICAgICBmdW5jdGlvbiBwYXRjaGVkTWV0aG9kKHRoaXM6IE9iaiwgLi4ub3JpZ2luYWxBcmdzOiBQYXJhbWV0ZXJzPEZuPik6IFJldHVyblR5cGU8Rm4+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC10aGlzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyAtLSBXZSBuZWVkIHRvIHVzZSB0aGUgYHRoaXNgIGNvbnRleHQuXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxUaGlzID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gcGFyYW1zLnBhdGNoSGFuZGxlcih7XG4gICAgICAgICAgICBmYWxsYmFjaygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmNhbGwob3JpZ2luYWxUaGlzLCAuLi5vcmlnaW5hbEFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yaWdpbmFsQXJncyxcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLFxuICAgICAgICAgICAgb3JpZ2luYWxNZXRob2RCb3VuZDogb3JpZ2luYWxNZXRob2QuYmluZChvcmlnaW5hbFRoaXMpLFxuICAgICAgICAgICAgb3JpZ2luYWxUaGlzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBwYXRjaCB1c2luZyByYXcgZmFjdG9yaWVzIChhZHZhbmNlZCBBUEkpLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIE9iaiAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gZmFjdG9yaWVzIC0gVGhlIGZhY3RvcmllcyB0byBhcHBseSB0byB0aGUgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyUGF0Y2g8T2JqIGV4dGVuZHMgb2JqZWN0PihvYmo6IE9iaiwgZmFjdG9yaWVzOiBGYWN0b3JpZXM8T2JqPik6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBjb25zdCB1bmluc3RhbGxlciA9IGFyb3VuZChvYmosIGZhY3Rvcmllcyk7XG4gICAgdGhpcy5yZWdpc3Rlcih1bmluc3RhbGxlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgcGF0Y2ggdG8gdGhlIG9iamVjdC5cbiAqIEJldHRlciBzdHJvbmdseS10eXBlZCB2ZXJzaW9uIG9mIGBtb25rZXktYXJvdW5kYC5cbiAqXG4gKiBAdHlwZVBhcmFtIE9iaiAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqIEBwYXJhbSBmYWN0b3JpZXMgLSBUaGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgdW5pbnN0YWxsZXIgdGhhdCByZW1vdmVzIHRoZSBwYXRjaCB3aGVuIGNhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFyb3VuZDxPYmogZXh0ZW5kcyBvYmplY3Q+KG9iajogT2JqLCBmYWN0b3JpZXM6IEZhY3RvcmllczxPYmo+KTogVW5pbnN0YWxsZXIge1xuICByZXR1cm4gb3JpZ2luYWxBcm91bmQob2JqIGFzIEdlbmVyaWNPYmplY3QsIGZhY3RvcmllcyBhcyBPcmlnaW5hbEZhY3RvcmllczxHZW5lcmljT2JqZWN0Pik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZnVuY3Rpb24gaGFzIGEgc3BlY2lmaWMgcGF0Y2ggdG9rZW4uXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHBhcmFtIHBhdGNoVG9rZW4gLSBUaGUgcGF0Y2ggdG9rZW4gdG8gY2hlY2sgZm9yLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZnVuY3Rpb24gaGFzIHRoZSBwYXRjaCB0b2tlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1BhdGNoVG9rZW4oZm46IEdlbmVyaWNGdW5jdGlvbiwgcGF0Y2hUb2tlbjogc3ltYm9sKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRNb25rZXlBcm91bmRQYXRjaGVzKCkuZ2V0KGZuKSA9PT0gcGF0Y2hUb2tlbjtcbn1cblxuZnVuY3Rpb24gZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpOiBXZWFrTWFwPEdlbmVyaWNGdW5jdGlvbiwgc3ltYm9sPiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ21vbmtleUFyb3VuZFBhdGNoZXMnLCBuZXcgV2Vha01hcDxHZW5lcmljRnVuY3Rpb24sIHN5bWJvbD4oKSkudmFsdWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsVUFBVSxzQkFBc0I7QUFNekMsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxtQkFBbUI7QUE0S3JCLE1BQU0sOEJBQThCLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUTlDLHNCQUNMLFFBQ007QUFDTixTQUFLLGFBQWE7QUFFbEIsVUFBTSxZQUE0QixDQUFDO0FBQ25DLGNBQVUsT0FBTyxZQUFZLElBQUksQ0FBQyxrQkFBd0Q7QUFDeEYsYUFBTyxPQUFPLGFBQWEsYUFBYTtBQUFBLElBQzFDO0FBRUEsU0FBSyxjQUFjLE9BQU8sS0FBSyxTQUFTO0FBQUEsRUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sb0JBQ0wsUUFDTTtBQUNOLFNBQUssYUFBYTtBQUVsQixRQUFJLE9BQU8sWUFBWTtBQUNyQixZQUFNLGlCQUFpQixPQUFPLElBQUksT0FBTyxVQUFVO0FBQ25ELDZCQUF1QixFQUFFLElBQUksZ0JBQWdCLE9BQU8sVUFBVTtBQUFBLElBQ2hFO0FBSUEsU0FBSyxzQkFBc0I7QUFBQSxNQUN6QixjQUFjLE9BQU87QUFBQSxNQUNyQixLQUFLLE9BQU87QUFBQSxNQUNaLGNBQWMsQ0FBQyxzQkFBc0I7QUFDbkMsY0FBTSxpQkFBaUI7QUFDdkIsY0FBTSxxQkFBcUIsT0FBTyxtQkFBbUI7QUFBQSxVQUNuRDtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUMsS0FBSztBQUNOLGVBQU87QUFFUCxpQkFBUyxpQkFBNEIsY0FBOEM7QUFFakYsZ0JBQU0sZUFBZTtBQUNyQixpQkFBTyxPQUFPLGFBQWE7QUFBQSxZQUN6QixXQUFXO0FBQ1QscUJBQU8sZUFBZSxLQUFLLGNBQWMsR0FBRyxZQUFZO0FBQUEsWUFDMUQ7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EscUJBQXFCLGVBQWUsS0FBSyxZQUFZO0FBQUEsWUFDckQ7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sY0FBa0MsS0FBVSxXQUFpQztBQUNsRixTQUFLLGFBQWE7QUFFbEIsVUFBTSxjQUFjLE9BQU8sS0FBSyxTQUFTO0FBQ3pDLFNBQUssU0FBUyxXQUFXO0FBQUEsRUFDM0I7QUFDRjtBQVdPLFNBQVMsT0FBMkIsS0FBVSxXQUF3QztBQUMzRixTQUFPLGVBQWUsS0FBc0IsU0FBNkM7QUFDM0Y7QUFTTyxTQUFTLGNBQWMsSUFBcUIsWUFBNkI7QUFDOUUsU0FBTyx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsTUFBTTtBQUM5QztBQUVBLFNBQVMseUJBQTJEO0FBQ2xFLFNBQU8seUJBQXlCLHVCQUF1QixvQkFBSSxRQUFpQyxDQUFDLEVBQUU7QUFDakc7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbXByb3ZlZCB0eXBlLXNhZmUgd3JhcHBlciBvZiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbW9ua2V5LWFyb3VuZH0gbGlicmFyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbmFsS2V5cyB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFyb3VuZCBhcyBvcmlnaW5hbEFyb3VuZCB9IGZyb20gJ21vbmtleS1hcm91bmQnO1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEEgdHlwZSBvZiB0aGUgZmFjdG9yaWVzIHRvIGFwcGx5IHRvIHRoZSBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBPYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICovXG5leHBvcnQgdHlwZSBGYWN0b3JpZXM8T2JqIGV4dGVuZHMgb2JqZWN0PiA9IFBhcnRpYWw8RnVsbEZhY3RvcmllczxPYmo+PjtcblxuLyoqXG4gKiBLZXlzIG9mIGBPYmpgIHdob3NlIHZhbHVlIGlzIGNhbGxhYmxlIFx1MjAxNCBhIG1ldGhvZCwgb3IgYSBmdW5jdGlvbi1saWtlIG9iamVjdCBzdWNoIGFzIGEgYERlYm91bmNlcmAuIFRoZXNlIGFyZSB0aGUgbWVtYmVyc1xuICogYWNjZXB0ZWQgYnkge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3RlckZ1bmN0aW9uUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBmaWx0ZXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVuY3Rpb25LZXlzPE9iaiBleHRlbmRzIG9iamVjdD4gPSBDb25kaXRpb25hbEtleXM8T2JqLCBHZW5lcmljRnVuY3Rpb24gfCB1bmRlZmluZWQ+ICYga2V5b2YgT2JqO1xuXG4vKipcbiAqIEtleXMgb2YgYE9iamAgd2hvc2UgdmFsdWUgaXMgYSBwbGFpbiBmdW5jdGlvbiAoYSBcInJlYWwgbWV0aG9kXCIpLiBGdW5jdGlvbi1saWtlIG9iamVjdHMgdGhhdCBjYXJyeSBleHRyYSBtZW1iZXJzIGFyZVxuICogZXhjbHVkZWQgXHUyMDE0IGUuZy4gYSBgRGVib3VuY2VyYCAod2hpY2ggYWRkcyBgY2FuY2VsYC9gcnVuYCkgYmVsb25ncyB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyRnVuY3Rpb25QYXRjaH0sXG4gKiBub3Qge0BsaW5rIE1vbmtleUFyb3VuZENvbXBvbmVudCNyZWdpc3Rlck1ldGhvZFBhdGNofS4gVGhlIGNoZWNrIGlzIHdoZXRoZXIgdGhlIG1lbWJlciBoYXMgYW55IG93biBrZXlzIGJleW9uZCBhIGJhcmVcbiAqIGZ1bmN0aW9uJ3MgKGBFeGNsdWRlPGtleW9mIFQsIGtleW9mIEdlbmVyaWNGdW5jdGlvbj5gIGlzIGBuZXZlcmApLlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBmaWx0ZXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgTWV0aG9kS2V5czxPYmogZXh0ZW5kcyBvYmplY3Q+ID0gTWV0aG9kS2V5c01hcDxPYmo+W0Z1bmN0aW9uS2V5czxPYmo+XTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyRnVuY3Rpb25QYXRjaH0uXG4gKlxuICogQHR5cGVQYXJhbSBPYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8T2JqIGV4dGVuZHMgb2JqZWN0LCBGdW5jdGlvbk5hbWUgZXh0ZW5kcyBGdW5jdGlvbktleXM8T2JqPj4ge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIG5hbWUgdG8gcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IEZ1bmN0aW9uTmFtZTtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IG9iajogT2JqO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgdGhlIHBhdGNoIHVuaW5zdGFsbHMgaXRzZWxmIHRoZSBmaXJzdCB0aW1lIHRoZSBwYXRjaGVkIGZ1bmN0aW9uIGlzIGludm9rZWQgKGJ5XG4gICAqIHVubG9hZGluZyB0aGlzIGNvbXBvbmVudCksIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgXHUyMDE0IHNvIHRoZSBpbnRlcmNlcHRpb24gaGFwcGVucyBleGFjdGx5IG9uY2UuXG4gICAqIEludGVuZGVkIGZvciBhIGNvbXBvbmVudCBkZWRpY2F0ZWQgdG8gdGhpcyBzaW5nbGUgcGF0Y2guIEV4aXN0aW5nIGNhbGxlcnMgdGhhdCBvbWl0IGl0IGFyZVxuICAgKiB1bmFmZmVjdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBvbmNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBvcmlnaW5hbCB2YWx1ZSBhbmQgcmV0dXJucyB0aGUgcGF0Y2hlZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9yaWdpbmFsVmFsdWUgLSBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGUgcGF0Y2hlZCB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICBwYXRjaEhhbmRsZXIob3JpZ2luYWxWYWx1ZTogT2JqW0Z1bmN0aW9uTmFtZV0pOiBPYmpbRnVuY3Rpb25OYW1lXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50I3JlZ2lzdGVyTWV0aG9kUGF0Y2h9LlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSB0byBwYXRjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3Rlck1ldGhvZFBhdGNoUGFyYW1zPE9iaiBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8T2JqPj4ge1xuICAvKipcbiAgICogVGhlIG1ldGhvZCBuYW1lIHRvIHBhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kTmFtZTogTWV0aG9kTmFtZTtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IG9iajogT2JqO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgdGhlIHBhdGNoIHVuaW5zdGFsbHMgaXRzZWxmIHRoZSBmaXJzdCB0aW1lIHRoZSBwYXRjaGVkIG1ldGhvZCBpcyBpbnZva2VkLCByZXN0b3JpbmdcbiAgICogdGhlIG9yaWdpbmFsIFx1MjAxNCBzbyB0aGUgaW50ZXJjZXB0aW9uIGhhcHBlbnMgZXhhY3RseSBvbmNlLiBFeGlzdGluZyBjYWxsZXJzIHRoYXQgb21pdCBpdCBhcmVcbiAgICogdW5hZmZlY3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgb25jZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRjaCBoYW5kbGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0Y2hIYW5kbGVyOiBQYXRjaEhhbmRsZXJGbjxPYmosIE1ldGhvZE5hbWU+O1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0b2tlbiB0byBpZGVudGlmeSB0aGUgcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBwYXRjaFRva2VuPzogc3ltYm9sO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBwb3N0LXBhdGNoIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBydW5zIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdFBhdGNoSGFuZGxlcj86IFBvc3RQYXRjaEhhbmRsZXJGbjxPYmosIE1ldGhvZE5hbWU+O1xufVxuXG4vKipcbiAqIEEgcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IGludGVyY2VwdHMgY2FsbHMgdG8gYSBtZXRob2Qgb24gYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGNoSGFuZGxlckZuPE9iaiBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8T2JqPj4gPSAoXG4gIHBhcmFtczogUGF0Y2hIYW5kbGVyUGFyYW1zPE9iaiwgTWV0aG9kTmFtZT5cbikgPT4gUmV0dXJuVHlwZTxFeHRyYWN0RnVuY3Rpb248T2JqLCBNZXRob2ROYW1lPj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8gYSB7QGxpbmsgUGF0Y2hIYW5kbGVyRm59IGNhbGxiYWNrLlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0Y2hIYW5kbGVyUGFyYW1zPE9iaiBleHRlbmRzIG9iamVjdCwgTWV0aG9kTmFtZSBleHRlbmRzIE1ldGhvZEtleXM8T2JqPj4ge1xuICBmYWxsYmFjayh0aGlzOiB2b2lkKTogUmV0dXJuVHlwZTxFeHRyYWN0RnVuY3Rpb248T2JqLCBNZXRob2ROYW1lPj47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBhcmd1bWVudHMgb2YgdGhlIGludGVyY2VwdGVkIGNhbGwsIGFzIGEgdHVwbGUuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbEFyZ3M6IFBhcmFtZXRlcnM8RXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgKHVucGF0Y2hlZCkgbWV0aG9kLiBDYWxsIHZpYSBgb3JpZ2luYWxGbi5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBtZXRob2QsIGJ1dCB3aXRoIHRoZSBgdGhpc2AgY29udGV4dCBhbHJlYWR5IGJvdW5kIHRvIHRoZSBvcmlnaW5hbCBvYmplY3QuIENhbGwgdmlhIGBvcmlnaW5hbE1ldGhvZEJvdW5kKC4uLm9yaWdpbmFsQXJncylgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luYWxNZXRob2RCb3VuZDogT21pdFRoaXNQYXJhbWV0ZXI8RXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT4+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYHRoaXNgIGNvbnRleHQgb2YgdGhlIGludGVyY2VwdGVkIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbFRoaXM6IE9iajtcbn1cblxuLyoqXG4gKiBBIHBvc3QtcGF0Y2ggaGFuZGxlciBmdW5jdGlvbiB0aGF0IHJ1bnMgYWZ0ZXIgYSBwYXRjaCBpcyBhcHBsaWVkLlxuICpcbiAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCBiZWluZyBwYXRjaGVkLlxuICogQHR5cGVQYXJhbSBNZXRob2ROYW1lIC0gVGhlIG1ldGhvZCBuYW1lIGJlaW5nIHBhdGNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFBvc3RQYXRjaEhhbmRsZXJGbjxPYmogZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPE9iaj4+ID0gKFxuICBwYXJhbXM6IFBvc3RQYXRjaEhhbmRsZXJQYXJhbXM8T2JqLCBNZXRob2ROYW1lPlxuKSA9PiBNYXliZVJldHVybjxFeHRyYWN0RnVuY3Rpb248T2JqLCBNZXRob2ROYW1lPj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBwYXNzZWQgdG8gYSB7QGxpbmsgUG9zdFBhdGNoSGFuZGxlckZufSBjYWxsYmFjay5cbiAqXG4gKiBAdHlwZVBhcmFtIE9iaiAtIFRoZSBvYmplY3QgYmVpbmcgcGF0Y2hlZC5cbiAqIEB0eXBlUGFyYW0gTWV0aG9kTmFtZSAtIFRoZSBtZXRob2QgbmFtZSBiZWluZyBwYXRjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RQYXRjaEhhbmRsZXJQYXJhbXM8T2JqIGV4dGVuZHMgb2JqZWN0LCBNZXRob2ROYW1lIGV4dGVuZHMgTWV0aG9kS2V5czxPYmo+PiB7XG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgKHVucGF0Y2hlZCkgbWV0aG9kLiBDYWxsIHZpYSBgb3JpZ2luYWxGbi5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKWAuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5hbE1ldGhvZDogRXh0cmFjdEZ1bmN0aW9uPE9iaiwgTWV0aG9kTmFtZT47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRjaGVkIG1ldGhvZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGNoZWRNZXRob2Q6IEV4dHJhY3RGdW5jdGlvbjxPYmosIE1ldGhvZE5hbWU+O1xufVxuXG50eXBlIEV4dHJhY3RGdW5jdGlvbjxPYmogZXh0ZW5kcyBvYmplY3QsIE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPE9iaj4+ID0gR2VuZXJpY0Z1bmN0aW9uPFBhcmFtZXRlcnM8RXh0cmFjdDxPYmpbTWV0aG9kTmFtZV0sIEdlbmVyaWNGdW5jdGlvbj4+LCBSZXR1cm5UeXBlPEV4dHJhY3Q8T2JqW01ldGhvZE5hbWVdLCBHZW5lcmljRnVuY3Rpb24+Pj47XG5cbnR5cGUgRnVsbEZhY3RvcmllczxPYmogZXh0ZW5kcyBvYmplY3Q+ID0ge1xuICBbS2V5IGluIGtleW9mIE9ial06IChvcmlnaW5hbFZhbHVlOiBPYmpbS2V5XSkgPT4gT2JqW0tleV07XG59O1xuXG50eXBlIE1ldGhvZEtleXNNYXA8T2JqIGV4dGVuZHMgb2JqZWN0PiA9IHtcbiAgW0tleSBpbiBGdW5jdGlvbktleXM8T2JqPl06IFtFeGNsdWRlPGtleW9mIE5vbk51bGxhYmxlPE9ialtLZXldPiwga2V5b2YgR2VuZXJpY0Z1bmN0aW9uPl0gZXh0ZW5kcyBbbmV2ZXJdID8gS2V5IDogbmV2ZXI7XG59O1xuXG50eXBlIE9yaWdpbmFsRmFjdG9yaWVzPE9iaiBleHRlbmRzIEdlbmVyaWNPYmplY3Q+ID0gUGFyYW1ldGVyczx0eXBlb2Ygb3JpZ2luYWxBcm91bmQ8T2JqPj5bMV07XG5cbnR5cGUgVW5pbnN0YWxsZXIgPSAoKSA9PiB2b2lkO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFuYWdlcyBtb25rZXktcGF0Y2hlcyB3aXRoIGxpZmVjeWNsZS1ib3VuZCBjbGVhbnVwLlxuICogQWxsIHBhdGNoZXMgcmVnaXN0ZXJlZCB2aWEgdGhpcyBjb21wb25lbnQgYXJlIGF1dG9tYXRpY2FsbHkgdW5pbnN0YWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IHVubG9hZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25rZXlBcm91bmRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBwYXRjaCBmb3IgYSBzaW5nbGUgZnVuY3Rpb24tbGlrZSBtZW1iZXIgKGEgbWV0aG9kLCBvciBhIGNhbGxhYmxlIHN1Y2ggYXMgYSBgRGVib3VuY2VyYCkgdXNpbmcgYSBzaW1wbGlmaWVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gT2JqIC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHR5cGVQYXJhbSBGdW5jdGlvbk5hbWUgLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBwYXRjaC5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBwYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uUGF0Y2g8T2JqIGV4dGVuZHMgb2JqZWN0LCBjb25zdCBGdW5jdGlvbk5hbWUgZXh0ZW5kcyBGdW5jdGlvbktleXM8T2JqPj4oXG4gICAgcGFyYW1zOiBNb25rZXlBcm91bmRDb21wb25lbnRSZWdpc3RlckZ1bmN0aW9uUGF0Y2hQYXJhbXM8T2JqLCBGdW5jdGlvbk5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBjb25zdCBmYWN0b3JpZXM6IEZhY3RvcmllczxPYmo+ID0ge307XG4gICAgZmFjdG9yaWVzW3BhcmFtcy5mdW5jdGlvbk5hbWVdID0gKG9yaWdpbmFsVmFsdWU6IE9ialtGdW5jdGlvbk5hbWVdKTogT2JqW0Z1bmN0aW9uTmFtZV0gPT4ge1xuICAgICAgY29uc3QgcGF0Y2hlZFZhbHVlID0gcGFyYW1zLnBhdGNoSGFuZGxlcihvcmlnaW5hbFZhbHVlKTtcbiAgICAgIGlmICghcGFyYW1zLm9uY2UpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoZWRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQSBgb25jZWAgcGF0Y2ggdW5sb2FkcyB0aGlzIGNvbXBvbmVudCBhZnRlciB0aGUgZmlyc3QgaW52b2NhdGlvbiBcdTIwMTQgcnVubmluZyB0aGUgcmVnaXN0ZXJlZFxuICAgICAgLy8gVW5pbnN0YWxsZXIgYW5kIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwuIGB1bmxvYWRDb21wb25lbnRgIGlzIGFuIGFycm93IHNvIGl0IGNhcHR1cmVzIHRoZVxuICAgICAgLy8gQ29tcG9uZW50IGB0aGlzYDsgdGhlIG5lc3RlZCBgb25jZVBhdGNoZWRWYWx1ZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIHRvIHJlY2VpdmUgdGhlIGNhbGwtdGltZVxuICAgICAgLy8gYHRoaXNgLiBPd24gbWVtYmVycyAoZS5nLiBhIGBEZWJvdW5jZXJgJ3MgYGNhbmNlbGAvYHJ1bmApIGFyZSBjb3BpZWQgb250byBpdCBzbyBmdW5jdGlvbi1saWtlXG4gICAgICAvLyBWYWx1ZXMga2VlcCB3b3JraW5nLlxuICAgICAgY29uc3QgdW5sb2FkQ29tcG9uZW50ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnVubG9hZCgpO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIG9uY2VQYXRjaGVkVmFsdWUodGhpczogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdKTogdW5rbm93biB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocGF0Y2hlZFZhbHVlLCB0aGlzLCBhcmdzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB1bmxvYWRDb21wb25lbnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob25jZVBhdGNoZWRWYWx1ZSwgcGF0Y2hlZFZhbHVlKSBhcyBPYmpbRnVuY3Rpb25OYW1lXTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZWdpc3RlclBhdGNoKHBhcmFtcy5vYmosIGZhY3Rvcmllcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2luZ2xlLW1ldGhvZCBwYXRjaCB1c2luZyBhIHNpbXBsaWZpZWQgaGFuZGxlci5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBPYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAdHlwZVBhcmFtIE1ldGhvZE5hbWUgLSBUaGUgbWV0aG9kIG5hbWUgdG8gcGF0Y2guXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBvZiB0aGUgcGF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJNZXRob2RQYXRjaDxPYmogZXh0ZW5kcyBvYmplY3QsIGNvbnN0IE1ldGhvZE5hbWUgZXh0ZW5kcyBNZXRob2RLZXlzPE9iaj4+KFxuICAgIHBhcmFtczogTW9ua2V5QXJvdW5kQ29tcG9uZW50UmVnaXN0ZXJNZXRob2RQYXRjaFBhcmFtczxPYmosIE1ldGhvZE5hbWU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG5cbiAgICBpZiAocGFyYW1zLnBhdGNoVG9rZW4pIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gcGFyYW1zLm9ialtwYXJhbXMubWV0aG9kTmFtZV0gYXMgR2VuZXJpY0Z1bmN0aW9uO1xuICAgICAgZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpLnNldChvcmlnaW5hbE1ldGhvZCwgcGFyYW1zLnBhdGNoVG9rZW4pO1xuICAgIH1cblxuICAgIHR5cGUgRm4gPSBFeHRyYWN0RnVuY3Rpb248T2JqLCBNZXRob2ROYW1lPjtcblxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvblBhdGNoKHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICBvYmo6IHBhcmFtcy5vYmosXG4gICAgICBvbmNlOiBwYXJhbXMub25jZSA/PyBmYWxzZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKG9yaWdpbmFsTWV0aG9kUmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gb3JpZ2luYWxNZXRob2RSYXcgYXMgRm47XG4gICAgICAgIGNvbnN0IGZpbmFsUGF0Y2hlZE1ldGhvZCA9IHBhcmFtcy5wb3N0UGF0Y2hIYW5kbGVyPy4oe1xuICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLFxuICAgICAgICAgIHBhdGNoZWRNZXRob2RcbiAgICAgICAgfSkgPz8gcGF0Y2hlZE1ldGhvZDtcbiAgICAgICAgcmV0dXJuIGZpbmFsUGF0Y2hlZE1ldGhvZCBhcyBPYmpbTWV0aG9kTmFtZV07XG5cbiAgICAgICAgZnVuY3Rpb24gcGF0Y2hlZE1ldGhvZCh0aGlzOiBPYmosIC4uLm9yaWdpbmFsQXJnczogUGFyYW1ldGVyczxGbj4pOiBSZXR1cm5UeXBlPEZuPiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtdGhpcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMgLS0gV2UgbmVlZCB0byB1c2UgdGhlIGB0aGlzYCBjb250ZXh0LlxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGhpcyA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtcy5wYXRjaEhhbmRsZXIoe1xuICAgICAgICAgICAgZmFsbGJhY2soKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5jYWxsKG9yaWdpbmFsVGhpcywgLi4ub3JpZ2luYWxBcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmlnaW5hbEFyZ3MsXG4gICAgICAgICAgICBvcmlnaW5hbE1ldGhvZCxcbiAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kQm91bmQ6IG9yaWdpbmFsTWV0aG9kLmJpbmQob3JpZ2luYWxUaGlzKSxcbiAgICAgICAgICAgIG9yaWdpbmFsVGhpc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgcGF0Y2ggdXNpbmcgcmF3IGZhY3RvcmllcyAoYWR2YW5jZWQgQVBJKS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBPYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICAgKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBwYXRjaC5cbiAgICogQHBhcmFtIGZhY3RvcmllcyAtIFRoZSBmYWN0b3JpZXMgdG8gYXBwbHkgdG8gdGhlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclBhdGNoPE9iaiBleHRlbmRzIG9iamVjdD4ob2JqOiBPYmosIGZhY3RvcmllczogRmFjdG9yaWVzPE9iaj4pOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuXG4gICAgY29uc3QgdW5pbnN0YWxsZXIgPSBhcm91bmQob2JqLCBmYWN0b3JpZXMpO1xuICAgIHRoaXMucmVnaXN0ZXIodW5pbnN0YWxsZXIpO1xuICB9XG59XG5cbi8qKlxuICogQXBwbGllcyBhIHBhdGNoIHRvIHRoZSBvYmplY3QuXG4gKiBCZXR0ZXIgc3Ryb25nbHktdHlwZWQgdmVyc2lvbiBvZiBgbW9ua2V5LWFyb3VuZGAuXG4gKlxuICogQHR5cGVQYXJhbSBPYmogLSBUaGUgb2JqZWN0IHRvIHBhdGNoLlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gcGF0Y2guXG4gKiBAcGFyYW0gZmFjdG9yaWVzIC0gVGhlIGZhY3RvcmllcyB0byBhcHBseSB0byB0aGUgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIHVuaW5zdGFsbGVyIHRoYXQgcmVtb3ZlcyB0aGUgcGF0Y2ggd2hlbiBjYWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcm91bmQ8T2JqIGV4dGVuZHMgb2JqZWN0PihvYmo6IE9iaiwgZmFjdG9yaWVzOiBGYWN0b3JpZXM8T2JqPik6IFVuaW5zdGFsbGVyIHtcbiAgcmV0dXJuIG9yaWdpbmFsQXJvdW5kKG9iaiBhcyBHZW5lcmljT2JqZWN0LCBmYWN0b3JpZXMgYXMgT3JpZ2luYWxGYWN0b3JpZXM8R2VuZXJpY09iamVjdD4pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZ1bmN0aW9uIGhhcyBhIHNwZWNpZmljIHBhdGNoIHRva2VuLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEBwYXJhbSBwYXRjaFRva2VuIC0gVGhlIHBhdGNoIHRva2VuIHRvIGNoZWNrIGZvci5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyB0aGUgcGF0Y2ggdG9rZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNQYXRjaFRva2VuKGZuOiBHZW5lcmljRnVuY3Rpb24sIHBhdGNoVG9rZW46IHN5bWJvbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0TW9ua2V5QXJvdW5kUGF0Y2hlcygpLmdldChmbikgPT09IHBhdGNoVG9rZW47XG59XG5cbmZ1bmN0aW9uIGdldE1vbmtleUFyb3VuZFBhdGNoZXMoKTogV2Vha01hcDxHZW5lcmljRnVuY3Rpb24sIHN5bWJvbD4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdtb25rZXlBcm91bmRQYXRjaGVzJywgbmV3IFdlYWtNYXA8R2VuZXJpY0Z1bmN0aW9uLCBzeW1ib2w+KCkpLnZhbHVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLFVBQVUsc0JBQXNCO0FBTXpDLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMsbUJBQW1CO0FBK0xyQixNQUFNLDhCQUE4QixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE5QyxzQkFDTCxRQUNNO0FBQ04sU0FBSyxhQUFhO0FBRWxCLFVBQU0sWUFBNEIsQ0FBQztBQUNuQyxjQUFVLE9BQU8sWUFBWSxJQUFJLENBQUMsa0JBQXdEO0FBQ3hGLFlBQU0sZUFBZSxPQUFPLGFBQWEsYUFBYTtBQUN0RCxVQUFJLENBQUMsT0FBTyxNQUFNO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBT0EsWUFBTSxrQkFBa0IsTUFBWTtBQUNsQyxhQUFLLE9BQU87QUFBQSxNQUNkO0FBQ0EsZUFBUyxvQkFBbUMsTUFBMEI7QUFDcEUsWUFBSTtBQUNGLGlCQUFPLFFBQVEsTUFBTSxjQUFjLE1BQU0sSUFBSTtBQUFBLFFBQy9DLFVBQUU7QUFDQSwwQkFBZ0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFDQSxhQUFPLE9BQU8sT0FBTyxrQkFBa0IsWUFBWTtBQUFBLElBQ3JEO0FBRUEsU0FBSyxjQUFjLE9BQU8sS0FBSyxTQUFTO0FBQUEsRUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sb0JBQ0wsUUFDTTtBQUNOLFNBQUssYUFBYTtBQUVsQixRQUFJLE9BQU8sWUFBWTtBQUNyQixZQUFNLGlCQUFpQixPQUFPLElBQUksT0FBTyxVQUFVO0FBQ25ELDZCQUF1QixFQUFFLElBQUksZ0JBQWdCLE9BQU8sVUFBVTtBQUFBLElBQ2hFO0FBSUEsU0FBSyxzQkFBc0I7QUFBQSxNQUN6QixjQUFjLE9BQU87QUFBQSxNQUNyQixLQUFLLE9BQU87QUFBQSxNQUNaLE1BQU0sT0FBTyxRQUFRO0FBQUEsTUFDckIsY0FBYyxDQUFDLHNCQUFzQjtBQUNuQyxjQUFNLGlCQUFpQjtBQUN2QixjQUFNLHFCQUFxQixPQUFPLG1CQUFtQjtBQUFBLFVBQ25EO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQyxLQUFLO0FBQ04sZUFBTztBQUVQLGlCQUFTLGlCQUE0QixjQUE4QztBQUVqRixnQkFBTSxlQUFlO0FBQ3JCLGlCQUFPLE9BQU8sYUFBYTtBQUFBLFlBQ3pCLFdBQVc7QUFDVCxxQkFBTyxlQUFlLEtBQUssY0FBYyxHQUFHLFlBQVk7QUFBQSxZQUMxRDtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxxQkFBcUIsZUFBZSxLQUFLLFlBQVk7QUFBQSxZQUNyRDtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyxjQUFrQyxLQUFVLFdBQWlDO0FBQ2xGLFNBQUssYUFBYTtBQUVsQixVQUFNLGNBQWMsT0FBTyxLQUFLLFNBQVM7QUFDekMsU0FBSyxTQUFTLFdBQVc7QUFBQSxFQUMzQjtBQUNGO0FBV08sU0FBUyxPQUEyQixLQUFVLFdBQXdDO0FBQzNGLFNBQU8sZUFBZSxLQUFzQixTQUE2QztBQUMzRjtBQVNPLFNBQVMsY0FBYyxJQUFxQixZQUE2QjtBQUM5RSxTQUFPLHVCQUF1QixFQUFFLElBQUksRUFBRSxNQUFNO0FBQzlDO0FBRUEsU0FBUyx5QkFBMkQ7QUFDbEUsU0FBTyx5QkFBeUIsdUJBQXVCLG9CQUFJLFFBQWlDLENBQUMsRUFBRTtBQUNqRzsiLAogICJuYW1lcyI6IFtdCn0K
|