@mnaoumov/obsidian-lib 10.12.0 → 11.0.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/components/worker-component/package.json +6 -0
- package/components/worker-pool-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +409 -292
- package/dist/lib/cjs/__merged.d.cts +17 -8
- package/dist/lib/cjs/anchored-suggest.cjs +1 -1
- package/dist/lib/cjs/app.cjs +2 -2
- package/dist/lib/cjs/async-with-notice.cjs +4 -4
- package/dist/lib/cjs/attachment-path.cjs +9 -9
- package/dist/lib/cjs/attachment-path.d.cts +3 -3
- package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
- package/dist/lib/cjs/backlink-index.cjs +5 -5
- package/dist/lib/cjs/backlink.cjs +7 -7
- package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
- package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
- package/dist/lib/cjs/bug-report.cjs +3 -3
- package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
- package/dist/lib/cjs/bulk-operation.cjs +2 -2
- package/dist/lib/cjs/callout.cjs +6 -6
- package/dist/lib/cjs/canvas.cjs +11 -9
- package/dist/lib/cjs/canvas.d.cts +13 -0
- package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
- package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
- package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
- package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
- package/dist/lib/cjs/codemirror/index.cjs +7 -7
- package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
- package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
- package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
- package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
- package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/index.cjs +15 -15
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +6 -6
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
- package/dist/lib/cjs/community-plugins.cjs +3 -3
- package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
- package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
- package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +3 -3
- package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
- package/dist/lib/cjs/components/async-events-component.cjs +1 -1
- package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
- package/dist/lib/cjs/components/component-ex.cjs +21 -11
- package/dist/lib/cjs/components/component-ex.d.cts +11 -0
- package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
- package/dist/lib/cjs/components/disposable-component.cjs +2 -2
- package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -1
- package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +8 -8
- package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
- package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
- package/dist/lib/cjs/components/index.cjs +46 -40
- package/dist/lib/cjs/components/index.d.cts +2 -0
- package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
- package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
- package/dist/lib/cjs/components/plugin-gate-component.cjs +68 -28
- package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
- package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
- package/dist/lib/cjs/components/plugin-settings-component.cjs +113 -17
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
- package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
- package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
- package/dist/lib/cjs/components/registry-component.cjs +2 -2
- package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
- package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/shared-component-pool-component.cjs +6 -6
- package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
- package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
- package/dist/lib/cjs/components/worker-component.cjs +363 -0
- package/dist/lib/cjs/components/worker-component.d.cts +156 -0
- package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
- package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
- package/dist/lib/cjs/components/workspace-layout-state-component.cjs +7 -7
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
- package/dist/lib/cjs/constructors/index.cjs +1 -1
- package/dist/lib/cjs/data-handler.cjs +111 -4
- package/dist/lib/cjs/data-handler.d.cts +92 -1
- package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
- package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
- package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
- package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
- package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
- package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
- package/dist/lib/cjs/data-stores/index.cjs +6 -6
- package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
- package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
- package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
- package/dist/lib/cjs/dataview-link.cjs +2 -2
- package/dist/lib/cjs/dataview.cjs +27 -7
- package/dist/lib/cjs/dataview.d.cts +14 -0
- package/dist/lib/cjs/debug.cjs +3 -3
- package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
- package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
- package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
- package/dist/lib/cjs/desktop-git-runner.cjs +2 -2
- package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
- package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
- package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
- package/dist/lib/cjs/disposable.cjs +150 -0
- package/dist/lib/cjs/disposable.d.cts +39 -0
- package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
- package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
- package/dist/lib/cjs/editor-suggest.cjs +1 -1
- package/dist/lib/cjs/editor.cjs +6 -6
- package/dist/lib/cjs/events.cjs +2 -2
- package/dist/lib/cjs/extensions-registrar.cjs +1 -1
- package/dist/lib/cjs/feature-request.cjs +1 -1
- package/dist/lib/cjs/file-change.cjs +10 -10
- package/dist/lib/cjs/file-explorer.cjs +2 -2
- package/dist/lib/cjs/file-manager.cjs +5 -5
- package/dist/lib/cjs/file-system.cjs +10 -10
- package/dist/lib/cjs/folder-note.cjs +4 -4
- package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
- package/dist/lib/cjs/frontmatter.cjs +5 -5
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/hotkey.cjs +1 -1
- package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
- package/dist/lib/cjs/html-element.cjs +2 -2
- package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
- package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
- package/dist/lib/cjs/i18n/i18n.cjs +7 -7
- package/dist/lib/cjs/i18n/index.cjs +4 -4
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +4 -0
- package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -0
- package/dist/lib/cjs/index.cjs +145 -127
- package/dist/lib/cjs/index.d.cts +6 -0
- package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
- package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/library-styles.cjs +3 -3
- package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
- package/dist/lib/cjs/link.cjs +76 -56
- package/dist/lib/cjs/link.d.cts +20 -14
- package/dist/lib/cjs/logger.cjs +4 -4
- package/dist/lib/cjs/loop.cjs +10 -16
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
- package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
- package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
- package/dist/lib/cjs/markdown-view.cjs +3 -3
- package/dist/lib/cjs/markdown.cjs +12 -12
- package/dist/lib/cjs/metadata-cache.cjs +23 -23
- package/dist/lib/cjs/metadata-cache.d.cts +5 -4
- package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
- package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
- package/dist/lib/cjs/mobile-app-info.cjs +1 -1
- package/dist/lib/cjs/modals/alert.cjs +4 -4
- package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
- package/dist/lib/cjs/modals/confirm.cjs +4 -4
- package/dist/lib/cjs/modals/copy-text-manually.cjs +4 -4
- package/dist/lib/cjs/modals/index.cjs +12 -12
- package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
- package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
- package/dist/lib/cjs/modals/modal.cjs +3 -3
- package/dist/lib/cjs/modals/prompt.cjs +10 -10
- package/dist/lib/cjs/modals/prompt.d.cts +1 -1
- package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +5 -5
- package/dist/lib/cjs/modals/select-item.cjs +6 -6
- package/dist/lib/cjs/modals/select-option.cjs +3 -3
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
- package/dist/lib/cjs/note-priority.cjs +2 -2
- package/dist/lib/cjs/notebook-navigator.cjs +12 -2
- package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
- package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian-settings.cjs +1 -1
- package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
- package/dist/lib/cjs/parse-link.cjs +14 -14
- package/dist/lib/cjs/path-compatibility.cjs +368 -0
- package/dist/lib/cjs/path-compatibility.d.cts +263 -0
- package/dist/lib/cjs/path-settings.cjs +3 -3
- package/dist/lib/cjs/pdf.cjs +2 -2
- package/dist/lib/cjs/plugin/index.cjs +16 -13
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +8 -8
- package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
- package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
- package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +4 -4
- package/dist/lib/cjs/plugin/plugin-instance.cjs +14 -12
- package/dist/lib/cjs/plugin/plugin-instance.d.cts +7 -0
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
- package/dist/lib/cjs/plugin/plugin.cjs +118 -34
- package/dist/lib/cjs/plugin/plugin.d.cts +28 -5
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
- package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
- package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
- package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
- package/dist/lib/cjs/popovers/index.cjs +3 -3
- package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
- package/dist/lib/cjs/popovers/popover.cjs +5 -5
- package/dist/lib/cjs/queue.cjs +8 -8
- package/dist/lib/cjs/react/app-context.cjs +3 -3
- package/dist/lib/cjs/react/index.cjs +1 -1
- package/dist/lib/cjs/reference-definition.cjs +1 -1
- package/dist/lib/cjs/reference.cjs +3 -3
- package/dist/lib/cjs/release-asset.cjs +5 -5
- package/dist/lib/cjs/rendered-markdown.cjs +4 -4
- package/dist/lib/cjs/request-url.cjs +4 -4
- package/dist/lib/cjs/resource-lock.cjs +46 -42
- package/dist/lib/cjs/resource-lock.d.cts +8 -7
- package/dist/lib/cjs/resource-url.cjs +3 -3
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
- package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/index.cjs +30 -30
- package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
- package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
- package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
- package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
- package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
- package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
- package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
- package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
- package/dist/lib/cjs/setting-ex.cjs +26 -26
- package/dist/lib/cjs/setting-group-ex.cjs +2 -2
- package/dist/lib/cjs/settings-recovery.cjs +217 -0
- package/dist/lib/cjs/settings-recovery.d.cts +178 -0
- package/dist/lib/cjs/settings-tabs.cjs +5 -5
- package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
- package/dist/lib/cjs/templater.cjs +14 -4
- package/dist/lib/cjs/templater.d.cts +6 -0
- package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
- package/dist/lib/cjs/transformers/index.cjs +1 -1
- package/dist/lib/cjs/trusted-input.cjs +1 -1
- package/dist/lib/cjs/validation.cjs +4 -4
- package/dist/lib/cjs/vault-delete.cjs +6 -6
- package/dist/lib/cjs/vault-transaction.cjs +5 -5
- package/dist/lib/cjs/vault.cjs +12 -12
- package/dist/lib/cjs/view-registrar.cjs +1 -1
- package/dist/lib/cjs/virtual-file.cjs +16 -14
- package/dist/lib/cjs/virtual-file.d.cts +2 -1
- package/dist/lib/cjs/wasm.cjs +119 -0
- package/dist/lib/cjs/wasm.d.cts +54 -0
- package/dist/lib/cjs/worker-protocol.cjs +209 -0
- package/dist/lib/cjs/worker-protocol.d.cts +282 -0
- package/dist/lib/cjs/workspace.cjs +1 -1
- package/dist/lib/esm/__merged.d.mts +17 -8
- package/dist/lib/esm/__merged.mjs +133 -3
- package/dist/lib/esm/app.mjs +2 -2
- package/dist/lib/esm/attachment-path.d.mts +3 -3
- package/dist/lib/esm/attachment-path.mjs +2 -2
- package/dist/lib/esm/backlink-index.mjs +2 -2
- package/dist/lib/esm/canvas.d.mts +13 -0
- package/dist/lib/esm/canvas.mjs +6 -5
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
- package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
- package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
- package/dist/lib/esm/components/component-ex.d.mts +11 -0
- package/dist/lib/esm/components/component-ex.mjs +19 -6
- package/dist/lib/esm/components/disposable-component.mjs +1 -1
- package/dist/lib/esm/components/index.d.mts +2 -0
- package/dist/lib/esm/components/index.mjs +5 -1
- package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
- package/dist/lib/esm/components/plugin-gate-component.mjs +57 -14
- package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
- package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
- package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
- package/dist/lib/esm/components/plugin-settings-component.mjs +99 -3
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
- package/dist/lib/esm/components/worker-component.d.mts +156 -0
- package/dist/lib/esm/components/worker-component.mjs +279 -0
- package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
- package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
- package/dist/lib/esm/components/workspace-layout-state-component.mjs +1 -1
- package/dist/lib/esm/data-handler.d.mts +92 -1
- package/dist/lib/esm/data-handler.mjs +112 -3
- package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
- package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
- package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
- package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
- package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
- package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
- package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
- package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
- package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
- package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
- package/dist/lib/esm/dataview.d.mts +14 -0
- package/dist/lib/esm/dataview.mjs +19 -1
- package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
- package/dist/lib/esm/demo-vault-helper.mjs +29 -1
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
- package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
- package/dist/lib/esm/disposable.d.mts +39 -0
- package/dist/lib/esm/disposable.mjs +64 -0
- package/dist/lib/esm/file-system.mjs +2 -2
- package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/i18n/locales/en.d.mts +4 -0
- package/dist/lib/esm/i18n/locales/en.mjs +5 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -0
- package/dist/lib/esm/index.d.mts +6 -0
- package/dist/lib/esm/index.mjs +13 -1
- package/dist/lib/esm/link.d.mts +20 -14
- package/dist/lib/esm/link.mjs +57 -38
- package/dist/lib/esm/loop.mjs +2 -8
- package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
- package/dist/lib/esm/metadata-cache.d.mts +5 -4
- package/dist/lib/esm/metadata-cache.mjs +6 -6
- package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
- package/dist/lib/esm/misplaced-attachment.mjs +212 -0
- package/dist/lib/esm/modals/prompt.d.mts +1 -1
- package/dist/lib/esm/modals/prompt.mjs +1 -1
- package/dist/lib/esm/notebook-navigator.d.mts +6 -0
- package/dist/lib/esm/notebook-navigator.mjs +11 -2
- package/dist/lib/esm/parse-link.mjs +4 -4
- package/dist/lib/esm/path-compatibility.d.mts +263 -0
- package/dist/lib/esm/path-compatibility.mjs +277 -0
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +4 -2
- package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
- package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
- package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
- package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-instance.d.mts +7 -0
- package/dist/lib/esm/plugin/plugin-instance.mjs +2 -1
- package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
- package/dist/lib/esm/plugin/plugin.d.mts +28 -5
- package/dist/lib/esm/plugin/plugin.mjs +103 -9
- package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
- package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
- package/dist/lib/esm/release-asset.mjs +1 -1
- package/dist/lib/esm/resource-lock.d.mts +8 -7
- package/dist/lib/esm/resource-lock.mjs +31 -26
- package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
- package/dist/lib/esm/settings-recovery.d.mts +178 -0
- package/dist/lib/esm/settings-recovery.mjs +125 -0
- package/dist/lib/esm/settings-tabs.mjs +2 -2
- package/dist/lib/esm/templater.d.mts +6 -0
- package/dist/lib/esm/templater.mjs +11 -2
- package/dist/lib/esm/vault.mjs +1 -1
- package/dist/lib/esm/virtual-file.d.mts +2 -1
- package/dist/lib/esm/virtual-file.mjs +7 -5
- package/dist/lib/esm/wasm.d.mts +54 -0
- package/dist/lib/esm/wasm.mjs +30 -0
- package/dist/lib/esm/worker-protocol.d.mts +282 -0
- package/dist/lib/esm/worker-protocol.mjs +113 -0
- package/package.json +9 -8
- package/plugin/third-party-plugin/package.json +6 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Whether an attachment sits outside the attachment folder of the notes that use it, and which notes are its
|
|
6
|
+
* proper home.
|
|
7
|
+
*
|
|
8
|
+
* Two things here are easy to get wrong:
|
|
9
|
+
*
|
|
10
|
+
* - **The judgement is about the FOLDER, not the path.** `getAttachmentFilePath` answers about the proper
|
|
11
|
+
* path, folder and templated base name both, so judging on it raw flags every attachment whose NAME does not
|
|
12
|
+
* match a rename template. That is a different defect. So the comparison is folder against folder, through
|
|
13
|
+
* `getAttachmentFolderPathForAttachment`, which also skips the name generation that dominates the cost of
|
|
14
|
+
* the question when `Custom Attachment Location` answers it.
|
|
15
|
+
* - **The proper folder is asked for the REAL attachment, never a dummy.** A folder template may read the
|
|
16
|
+
* attachment's own name, extension or stats, so `getAttachmentFolderPath`'s dummy-file route can answer
|
|
17
|
+
* about a file that does not exist.
|
|
18
|
+
*
|
|
19
|
+
* A reference is judged from the note that makes it: `A.md` linking `B/image.png`, which sits in `B.md`'s folder,
|
|
20
|
+
* is A linking an EXTERNAL attachment, even when B uses it too. Whether such a reference is worth reporting depends
|
|
21
|
+
* on whether the attachment has a proper note anywhere, which is known only after every note has been judged, so
|
|
22
|
+
* {@link MisplacedAttachmentIndex} collects the verdicts and {@link MisplacedAttachmentIndex.getReported} applies
|
|
23
|
+
* the {@link ExternalAttachmentLinkMode} at the end.
|
|
24
|
+
*
|
|
25
|
+
* Rendering is the caller's: this module only judges and collects.
|
|
26
|
+
*/
|
|
27
|
+
import type { App, Reference, TFile } from 'obsidian';
|
|
28
|
+
/**
|
|
29
|
+
* Which references to an attachment outside the referencing note's attachment folder are reported.
|
|
30
|
+
*/
|
|
31
|
+
export declare enum ExternalAttachmentLinkMode {
|
|
32
|
+
/**
|
|
33
|
+
* Never report one: nothing is judged at all.
|
|
34
|
+
*/
|
|
35
|
+
Ignore = "Ignore",
|
|
36
|
+
/**
|
|
37
|
+
* Report every such reference, including one to an attachment filed in the folder of another note that
|
|
38
|
+
* references it too.
|
|
39
|
+
*/
|
|
40
|
+
Report = "Report",
|
|
41
|
+
/**
|
|
42
|
+
* Report such a reference only when no note that references the attachment has it in its own folder.
|
|
43
|
+
*/
|
|
44
|
+
ReportUnowned = "ReportUnowned"
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The folder an attachment sits in, judged against the folder one note's configuration puts its attachments in.
|
|
48
|
+
*/
|
|
49
|
+
export interface AttachmentPlacement {
|
|
50
|
+
/**
|
|
51
|
+
* Whether the attachment sits in {@link AttachmentPlacement.properAttachmentFolderPath}, compared the way the
|
|
52
|
+
* vault's adapter compares names (case-folded on a case-insensitive adapter).
|
|
53
|
+
*/
|
|
54
|
+
readonly isInProperFolder: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* The vault-relative folder the note's configuration puts this attachment in, `/` for the vault root.
|
|
57
|
+
*/
|
|
58
|
+
readonly properAttachmentFolderPath: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parameters for {@link getAttachmentPlacement}.
|
|
62
|
+
*/
|
|
63
|
+
export interface GetAttachmentPlacementParams {
|
|
64
|
+
/**
|
|
65
|
+
* The Obsidian app instance.
|
|
66
|
+
*/
|
|
67
|
+
readonly app: App;
|
|
68
|
+
/**
|
|
69
|
+
* The attachment to judge.
|
|
70
|
+
*/
|
|
71
|
+
readonly attachmentFile: TFile;
|
|
72
|
+
/**
|
|
73
|
+
* The vault-relative path of the note whose configuration the attachment is judged against.
|
|
74
|
+
*/
|
|
75
|
+
readonly notePath: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* One reference to an attachment outside the attachment folder of the note that makes it.
|
|
79
|
+
*
|
|
80
|
+
* The same attachment referenced from two notes is two entries, because the two notes can configure different
|
|
81
|
+
* attachment folders.
|
|
82
|
+
*/
|
|
83
|
+
export interface MisplacedAttachmentEntry {
|
|
84
|
+
/**
|
|
85
|
+
* The attachment's current vault-relative path.
|
|
86
|
+
*/
|
|
87
|
+
readonly attachmentPath: string;
|
|
88
|
+
/**
|
|
89
|
+
* The vault-relative folder the referencing note's configuration puts the attachment in.
|
|
90
|
+
*/
|
|
91
|
+
readonly properAttachmentFolderPath: string;
|
|
92
|
+
/**
|
|
93
|
+
* The reference that reaches the attachment.
|
|
94
|
+
*/
|
|
95
|
+
readonly reference: Reference;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Parameters for {@link recordAttachmentPlacement}.
|
|
99
|
+
*/
|
|
100
|
+
export interface RecordAttachmentPlacementParams {
|
|
101
|
+
/**
|
|
102
|
+
* The Obsidian app instance.
|
|
103
|
+
*/
|
|
104
|
+
readonly app: App;
|
|
105
|
+
/**
|
|
106
|
+
* The file the reference resolved to. Pass only references that resolved: an unresolved one is a broken link,
|
|
107
|
+
* not a misplaced attachment.
|
|
108
|
+
*/
|
|
109
|
+
readonly attachmentFile: TFile;
|
|
110
|
+
/**
|
|
111
|
+
* The index the verdict is recorded in.
|
|
112
|
+
*/
|
|
113
|
+
readonly index: MisplacedAttachmentIndex;
|
|
114
|
+
/**
|
|
115
|
+
* Whether a path is never judged, for example because the user excluded it. Defaults to judging every path.
|
|
116
|
+
*/
|
|
117
|
+
readonly isPathIgnored?: (path: string) => boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Whether a path lies in a shared attachment location, which is anybody's folder, so no reference into it is
|
|
120
|
+
* external. Defaults to no shared location.
|
|
121
|
+
*/
|
|
122
|
+
readonly isSharedAttachmentPath?: (path: string) => boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Whether a note is treated as an attachment (an `.excalidraw.md` file, say), and so judged here. Defaults to
|
|
125
|
+
* no note being one.
|
|
126
|
+
*/
|
|
127
|
+
readonly isTreatedAsAttachment?: (path: string) => boolean;
|
|
128
|
+
/**
|
|
129
|
+
* The vault-relative path of the note that makes the reference.
|
|
130
|
+
*/
|
|
131
|
+
readonly notePath: string;
|
|
132
|
+
/**
|
|
133
|
+
* The reference, kept in the entry so a report can name its line or frontmatter key.
|
|
134
|
+
*/
|
|
135
|
+
readonly reference: Reference;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The verdicts of a walk over every reference to an attachment, grouped by the note that makes the reference.
|
|
139
|
+
*
|
|
140
|
+
* It keeps every external reference, every note that uses each attachment, and each attachment's proper notes:
|
|
141
|
+
* the notes that reference it and whose own folder holds it. Which entries count as reported depends on the
|
|
142
|
+
* {@link ExternalAttachmentLinkMode} and on the proper notes, which are known only once the whole vault has been
|
|
143
|
+
* walked, so ask {@link MisplacedAttachmentIndex.getReported} after the walk.
|
|
144
|
+
*/
|
|
145
|
+
export declare class MisplacedAttachmentIndex extends Map<string, MisplacedAttachmentEntry[]> {
|
|
146
|
+
readonly mode: ExternalAttachmentLinkMode;
|
|
147
|
+
private readonly properNotePathsByAttachment;
|
|
148
|
+
private readonly userNotePathsByAttachment;
|
|
149
|
+
/**
|
|
150
|
+
* Creates an empty index.
|
|
151
|
+
*
|
|
152
|
+
* @param mode - Which external references {@link MisplacedAttachmentIndex.getReported} returns.
|
|
153
|
+
*/
|
|
154
|
+
constructor(mode?: ExternalAttachmentLinkMode);
|
|
155
|
+
/**
|
|
156
|
+
* Records a reference to an attachment outside the referencing note's folder.
|
|
157
|
+
*
|
|
158
|
+
* @param notePath - The referencing note's vault-relative path.
|
|
159
|
+
* @param entry - The reference and the folder the note wants the attachment in.
|
|
160
|
+
*/
|
|
161
|
+
add(notePath: string, entry: MisplacedAttachmentEntry): void;
|
|
162
|
+
/**
|
|
163
|
+
* Records that a note references an attachment, wherever the attachment sits.
|
|
164
|
+
*
|
|
165
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
166
|
+
* @param notePath - The referencing note's vault-relative path.
|
|
167
|
+
*/
|
|
168
|
+
addUser(attachmentPath: string, notePath: string): void;
|
|
169
|
+
/**
|
|
170
|
+
* The notes that use an attachment besides the given one, its proper notes first, each group in walk order.
|
|
171
|
+
*
|
|
172
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
173
|
+
* @param notePath - The note to leave out: the one whose reference is being reported.
|
|
174
|
+
* @returns The other notes' paths.
|
|
175
|
+
*/
|
|
176
|
+
getOtherUserNotePaths(attachmentPath: string, notePath: string): string[];
|
|
177
|
+
/**
|
|
178
|
+
* The proper notes of an attachment: the notes that reference it and whose own folder holds it, in walk order.
|
|
179
|
+
*
|
|
180
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
181
|
+
* @returns The proper notes' paths, empty when the attachment has none.
|
|
182
|
+
*/
|
|
183
|
+
getProperNotePaths(attachmentPath: string): string[];
|
|
184
|
+
/**
|
|
185
|
+
* The entries to report, after the mode is applied, grouped by note, with a note left out once none of its
|
|
186
|
+
* entries survive.
|
|
187
|
+
*
|
|
188
|
+
* @returns The entries to report.
|
|
189
|
+
*/
|
|
190
|
+
getReported(): Map<string, MisplacedAttachmentEntry[]>;
|
|
191
|
+
/**
|
|
192
|
+
* Whether a note is a proper note of an attachment: it references it, and its own folder holds it.
|
|
193
|
+
*
|
|
194
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
195
|
+
* @param notePath - The note's vault-relative path.
|
|
196
|
+
* @returns `true` when the note's own attachment folder holds the attachment.
|
|
197
|
+
*/
|
|
198
|
+
isProperNote(attachmentPath: string, notePath: string): boolean;
|
|
199
|
+
/**
|
|
200
|
+
* Records that an attachment sits in the folder configured for a note that references it, which makes that
|
|
201
|
+
* note its proper note.
|
|
202
|
+
*
|
|
203
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
204
|
+
* @param notePath - The referencing note whose folder holds it.
|
|
205
|
+
*/
|
|
206
|
+
markHomed(attachmentPath: string, notePath: string): void;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Judges where an attachment sits against the attachment folder of one note.
|
|
210
|
+
*
|
|
211
|
+
* Asks the attachment-path seam once, folder-only, for the REAL attachment, so a `Custom Attachment Location`
|
|
212
|
+
* folder template that reads the attachment's own name is honoured and no name is generated.
|
|
213
|
+
*
|
|
214
|
+
* @param params - The attachment and the note.
|
|
215
|
+
* @returns The note's proper folder for the attachment, and whether the attachment is in it.
|
|
216
|
+
*/
|
|
217
|
+
export declare function getAttachmentPlacement(params: GetAttachmentPlacementParams): Promise<AttachmentPlacement>;
|
|
218
|
+
/**
|
|
219
|
+
* Judges one resolved reference and records the verdict in the index.
|
|
220
|
+
*
|
|
221
|
+
* Records nothing under {@link ExternalAttachmentLinkMode.Ignore}, for a note that is not treated as an
|
|
222
|
+
* attachment, and for an ignored or shared path. Otherwise the referencing note becomes a proper note of the
|
|
223
|
+
* attachment when its folder holds it, and the reference becomes an entry when it does not.
|
|
224
|
+
*
|
|
225
|
+
* @param params - The reference, its note, its target and the index.
|
|
226
|
+
* @returns A {@link Promise} that resolves once the verdict is recorded.
|
|
227
|
+
*/
|
|
228
|
+
export declare function recordAttachmentPlacement(params: RecordAttachmentPlacementParams): Promise<void>;
|
|
@@ -0,0 +1,212 @@
|
|
|
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
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import {
|
|
34
|
+
getDataAdapterEx,
|
|
35
|
+
parentFolderPath
|
|
36
|
+
} from "@obsidian-typings/obsidian-public-latest/implementations";
|
|
37
|
+
import {
|
|
38
|
+
AttachmentPathContext,
|
|
39
|
+
getAttachmentFolderPathForAttachment
|
|
40
|
+
} from "./attachment-path.mjs";
|
|
41
|
+
import { isNote } from "./file-system.mjs";
|
|
42
|
+
var ExternalAttachmentLinkMode = /* @__PURE__ */ ((ExternalAttachmentLinkMode2) => {
|
|
43
|
+
ExternalAttachmentLinkMode2["Ignore"] = "Ignore";
|
|
44
|
+
ExternalAttachmentLinkMode2["Report"] = "Report";
|
|
45
|
+
ExternalAttachmentLinkMode2["ReportUnowned"] = "ReportUnowned";
|
|
46
|
+
return ExternalAttachmentLinkMode2;
|
|
47
|
+
})(ExternalAttachmentLinkMode || {});
|
|
48
|
+
class MisplacedAttachmentIndex extends Map {
|
|
49
|
+
/**
|
|
50
|
+
* Creates an empty index.
|
|
51
|
+
*
|
|
52
|
+
* @param mode - Which external references {@link MisplacedAttachmentIndex.getReported} returns.
|
|
53
|
+
*/
|
|
54
|
+
constructor(mode = "Report" /* Report */) {
|
|
55
|
+
super();
|
|
56
|
+
this.mode = mode;
|
|
57
|
+
}
|
|
58
|
+
mode;
|
|
59
|
+
properNotePathsByAttachment = /* @__PURE__ */ new Map();
|
|
60
|
+
userNotePathsByAttachment = /* @__PURE__ */ new Map();
|
|
61
|
+
/**
|
|
62
|
+
* Records a reference to an attachment outside the referencing note's folder.
|
|
63
|
+
*
|
|
64
|
+
* @param notePath - The referencing note's vault-relative path.
|
|
65
|
+
* @param entry - The reference and the folder the note wants the attachment in.
|
|
66
|
+
*/
|
|
67
|
+
add(notePath, entry) {
|
|
68
|
+
let entries = this.get(notePath);
|
|
69
|
+
if (!entries) {
|
|
70
|
+
entries = [];
|
|
71
|
+
this.set(notePath, entries);
|
|
72
|
+
}
|
|
73
|
+
entries.push(entry);
|
|
74
|
+
this.addUser(entry.attachmentPath, notePath);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Records that a note references an attachment, wherever the attachment sits.
|
|
78
|
+
*
|
|
79
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
80
|
+
* @param notePath - The referencing note's vault-relative path.
|
|
81
|
+
*/
|
|
82
|
+
addUser(attachmentPath, notePath) {
|
|
83
|
+
addToSetMap(this.userNotePathsByAttachment, attachmentPath, notePath);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The notes that use an attachment besides the given one, its proper notes first, each group in walk order.
|
|
87
|
+
*
|
|
88
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
89
|
+
* @param notePath - The note to leave out: the one whose reference is being reported.
|
|
90
|
+
* @returns The other notes' paths.
|
|
91
|
+
*/
|
|
92
|
+
getOtherUserNotePaths(attachmentPath, notePath) {
|
|
93
|
+
const properNotePaths = this.getProperNotePaths(attachmentPath);
|
|
94
|
+
const userNotePaths = [...this.userNotePathsByAttachment.get(attachmentPath) ?? []];
|
|
95
|
+
return [...properNotePaths, ...userNotePaths.filter((path) => !properNotePaths.includes(path))].filter((path) => path !== notePath);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The proper notes of an attachment: the notes that reference it and whose own folder holds it, in walk order.
|
|
99
|
+
*
|
|
100
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
101
|
+
* @returns The proper notes' paths, empty when the attachment has none.
|
|
102
|
+
*/
|
|
103
|
+
getProperNotePaths(attachmentPath) {
|
|
104
|
+
return [...this.properNotePathsByAttachment.get(attachmentPath) ?? []];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The entries to report, after the mode is applied, grouped by note, with a note left out once none of its
|
|
108
|
+
* entries survive.
|
|
109
|
+
*
|
|
110
|
+
* @returns The entries to report.
|
|
111
|
+
*/
|
|
112
|
+
getReported() {
|
|
113
|
+
const reported = /* @__PURE__ */ new Map();
|
|
114
|
+
if (this.mode === "Ignore" /* Ignore */) {
|
|
115
|
+
return reported;
|
|
116
|
+
}
|
|
117
|
+
for (const [notePath, entries] of this) {
|
|
118
|
+
const surviving = this.mode === "ReportUnowned" /* ReportUnowned */ ? entries.filter((entry) => !this.properNotePathsByAttachment.has(entry.attachmentPath)) : entries;
|
|
119
|
+
if (surviving.length > 0) {
|
|
120
|
+
reported.set(notePath, surviving);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return reported;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Whether a note is a proper note of an attachment: it references it, and its own folder holds it.
|
|
127
|
+
*
|
|
128
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
129
|
+
* @param notePath - The note's vault-relative path.
|
|
130
|
+
* @returns `true` when the note's own attachment folder holds the attachment.
|
|
131
|
+
*/
|
|
132
|
+
isProperNote(attachmentPath, notePath) {
|
|
133
|
+
return this.properNotePathsByAttachment.get(attachmentPath)?.has(notePath) ?? false;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Records that an attachment sits in the folder configured for a note that references it, which makes that
|
|
137
|
+
* note its proper note.
|
|
138
|
+
*
|
|
139
|
+
* @param attachmentPath - The attachment's vault-relative path.
|
|
140
|
+
* @param notePath - The referencing note whose folder holds it.
|
|
141
|
+
*/
|
|
142
|
+
markHomed(attachmentPath, notePath) {
|
|
143
|
+
addToSetMap(this.properNotePathsByAttachment, attachmentPath, notePath);
|
|
144
|
+
this.addUser(attachmentPath, notePath);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async function getAttachmentPlacement(params) {
|
|
148
|
+
const { app, attachmentFile, notePath } = params;
|
|
149
|
+
const properAttachmentFolderPath = await getAttachmentFolderPathForAttachment({
|
|
150
|
+
app,
|
|
151
|
+
attachmentPathOrFile: attachmentFile,
|
|
152
|
+
context: AttachmentPathContext.Unknown,
|
|
153
|
+
notePathOrFile: notePath
|
|
154
|
+
});
|
|
155
|
+
const isInsensitive = getDataAdapterEx(app).insensitive;
|
|
156
|
+
return {
|
|
157
|
+
isInProperFolder: fold(parentFolderPath(attachmentFile.path)) === fold(properAttachmentFolderPath),
|
|
158
|
+
properAttachmentFolderPath
|
|
159
|
+
};
|
|
160
|
+
function fold(value) {
|
|
161
|
+
return isInsensitive ? value.toLowerCase() : value;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async function recordAttachmentPlacement(params) {
|
|
165
|
+
const {
|
|
166
|
+
app,
|
|
167
|
+
attachmentFile,
|
|
168
|
+
index,
|
|
169
|
+
isPathIgnored = isNone,
|
|
170
|
+
isSharedAttachmentPath = isNone,
|
|
171
|
+
isTreatedAsAttachment = isNone,
|
|
172
|
+
notePath,
|
|
173
|
+
reference
|
|
174
|
+
} = params;
|
|
175
|
+
if (index.mode === "Ignore" /* Ignore */) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (isNote(attachmentFile) && !isTreatedAsAttachment(attachmentFile.path)) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (isPathIgnored(attachmentFile.path) || isSharedAttachmentPath(attachmentFile.path)) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const placement = await getAttachmentPlacement({ app, attachmentFile, notePath });
|
|
185
|
+
if (placement.isInProperFolder) {
|
|
186
|
+
index.markHomed(attachmentFile.path, notePath);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
index.add(notePath, {
|
|
190
|
+
attachmentPath: attachmentFile.path,
|
|
191
|
+
properAttachmentFolderPath: placement.properAttachmentFolderPath,
|
|
192
|
+
reference
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
function addToSetMap(map, key, value) {
|
|
196
|
+
let set = map.get(key);
|
|
197
|
+
if (!set) {
|
|
198
|
+
set = /* @__PURE__ */ new Set();
|
|
199
|
+
map.set(key, set);
|
|
200
|
+
}
|
|
201
|
+
set.add(value);
|
|
202
|
+
}
|
|
203
|
+
function isNone() {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
export {
|
|
207
|
+
ExternalAttachmentLinkMode,
|
|
208
|
+
MisplacedAttachmentIndex,
|
|
209
|
+
getAttachmentPlacement,
|
|
210
|
+
recordAttachmentPlacement
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXNwbGFjZWQtYXR0YWNobWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogV2hldGhlciBhbiBhdHRhY2htZW50IHNpdHMgb3V0c2lkZSB0aGUgYXR0YWNobWVudCBmb2xkZXIgb2YgdGhlIG5vdGVzIHRoYXQgdXNlIGl0LCBhbmQgd2hpY2ggbm90ZXMgYXJlIGl0c1xuICogcHJvcGVyIGhvbWUuXG4gKlxuICogVHdvIHRoaW5ncyBoZXJlIGFyZSBlYXN5IHRvIGdldCB3cm9uZzpcbiAqXG4gKiAtICoqVGhlIGp1ZGdlbWVudCBpcyBhYm91dCB0aGUgRk9MREVSLCBub3QgdGhlIHBhdGguKiogYGdldEF0dGFjaG1lbnRGaWxlUGF0aGAgYW5zd2VycyBhYm91dCB0aGUgcHJvcGVyXG4gKiAgIHBhdGgsIGZvbGRlciBhbmQgdGVtcGxhdGVkIGJhc2UgbmFtZSBib3RoLCBzbyBqdWRnaW5nIG9uIGl0IHJhdyBmbGFncyBldmVyeSBhdHRhY2htZW50IHdob3NlIE5BTUUgZG9lcyBub3RcbiAqICAgbWF0Y2ggYSByZW5hbWUgdGVtcGxhdGUuIFRoYXQgaXMgYSBkaWZmZXJlbnQgZGVmZWN0LiBTbyB0aGUgY29tcGFyaXNvbiBpcyBmb2xkZXIgYWdhaW5zdCBmb2xkZXIsIHRocm91Z2hcbiAqICAgYGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoRm9yQXR0YWNobWVudGAsIHdoaWNoIGFsc28gc2tpcHMgdGhlIG5hbWUgZ2VuZXJhdGlvbiB0aGF0IGRvbWluYXRlcyB0aGUgY29zdCBvZlxuICogICB0aGUgcXVlc3Rpb24gd2hlbiBgQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb25gIGFuc3dlcnMgaXQuXG4gKiAtICoqVGhlIHByb3BlciBmb2xkZXIgaXMgYXNrZWQgZm9yIHRoZSBSRUFMIGF0dGFjaG1lbnQsIG5ldmVyIGEgZHVtbXkuKiogQSBmb2xkZXIgdGVtcGxhdGUgbWF5IHJlYWQgdGhlXG4gKiAgIGF0dGFjaG1lbnQncyBvd24gbmFtZSwgZXh0ZW5zaW9uIG9yIHN0YXRzLCBzbyBgZ2V0QXR0YWNobWVudEZvbGRlclBhdGhgJ3MgZHVtbXktZmlsZSByb3V0ZSBjYW4gYW5zd2VyXG4gKiAgIGFib3V0IGEgZmlsZSB0aGF0IGRvZXMgbm90IGV4aXN0LlxuICpcbiAqIEEgcmVmZXJlbmNlIGlzIGp1ZGdlZCBmcm9tIHRoZSBub3RlIHRoYXQgbWFrZXMgaXQ6IGBBLm1kYCBsaW5raW5nIGBCL2ltYWdlLnBuZ2AsIHdoaWNoIHNpdHMgaW4gYEIubWRgJ3MgZm9sZGVyLFxuICogaXMgQSBsaW5raW5nIGFuIEVYVEVSTkFMIGF0dGFjaG1lbnQsIGV2ZW4gd2hlbiBCIHVzZXMgaXQgdG9vLiBXaGV0aGVyIHN1Y2ggYSByZWZlcmVuY2UgaXMgd29ydGggcmVwb3J0aW5nIGRlcGVuZHNcbiAqIG9uIHdoZXRoZXIgdGhlIGF0dGFjaG1lbnQgaGFzIGEgcHJvcGVyIG5vdGUgYW55d2hlcmUsIHdoaWNoIGlzIGtub3duIG9ubHkgYWZ0ZXIgZXZlcnkgbm90ZSBoYXMgYmVlbiBqdWRnZWQsIHNvXG4gKiB7QGxpbmsgTWlzcGxhY2VkQXR0YWNobWVudEluZGV4fSBjb2xsZWN0cyB0aGUgdmVyZGljdHMgYW5kIHtAbGluayBNaXNwbGFjZWRBdHRhY2htZW50SW5kZXguZ2V0UmVwb3J0ZWR9IGFwcGxpZXNcbiAqIHRoZSB7QGxpbmsgRXh0ZXJuYWxBdHRhY2htZW50TGlua01vZGV9IGF0IHRoZSBlbmQuXG4gKlxuICogUmVuZGVyaW5nIGlzIHRoZSBjYWxsZXInczogdGhpcyBtb2R1bGUgb25seSBqdWRnZXMgYW5kIGNvbGxlY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBSZWZlcmVuY2UsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgZ2V0RGF0YUFkYXB0ZXJFeCxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRQYXRoQ29udGV4dCxcbiAgZ2V0QXR0YWNobWVudEZvbGRlclBhdGhGb3JBdHRhY2htZW50XG59IGZyb20gJy4vYXR0YWNobWVudC1wYXRoLnRzJztcbmltcG9ydCB7IGlzTm90ZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG4vKipcbiAqIFdoaWNoIHJlZmVyZW5jZXMgdG8gYW4gYXR0YWNobWVudCBvdXRzaWRlIHRoZSByZWZlcmVuY2luZyBub3RlJ3MgYXR0YWNobWVudCBmb2xkZXIgYXJlIHJlcG9ydGVkLlxuICovXG5leHBvcnQgZW51bSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZSB7XG4gIC8qKlxuICAgKiBOZXZlciByZXBvcnQgb25lOiBub3RoaW5nIGlzIGp1ZGdlZCBhdCBhbGwuXG4gICAqL1xuICBJZ25vcmUgPSAnSWdub3JlJyxcblxuICAvKipcbiAgICogUmVwb3J0IGV2ZXJ5IHN1Y2ggcmVmZXJlbmNlLCBpbmNsdWRpbmcgb25lIHRvIGFuIGF0dGFjaG1lbnQgZmlsZWQgaW4gdGhlIGZvbGRlciBvZiBhbm90aGVyIG5vdGUgdGhhdFxuICAgKiByZWZlcmVuY2VzIGl0IHRvby5cbiAgICovXG4gIFJlcG9ydCA9ICdSZXBvcnQnLFxuXG4gIC8qKlxuICAgKiBSZXBvcnQgc3VjaCBhIHJlZmVyZW5jZSBvbmx5IHdoZW4gbm8gbm90ZSB0aGF0IHJlZmVyZW5jZXMgdGhlIGF0dGFjaG1lbnQgaGFzIGl0IGluIGl0cyBvd24gZm9sZGVyLlxuICAgKi9cbiAgUmVwb3J0VW5vd25lZCA9ICdSZXBvcnRVbm93bmVkJ1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYW4gYXR0YWNobWVudCBzaXRzIGluLCBqdWRnZWQgYWdhaW5zdCB0aGUgZm9sZGVyIG9uZSBub3RlJ3MgY29uZmlndXJhdGlvbiBwdXRzIGl0cyBhdHRhY2htZW50cyBpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50UGxhY2VtZW50IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGF0dGFjaG1lbnQgc2l0cyBpbiB7QGxpbmsgQXR0YWNobWVudFBsYWNlbWVudC5wcm9wZXJBdHRhY2htZW50Rm9sZGVyUGF0aH0sIGNvbXBhcmVkIHRoZSB3YXkgdGhlXG4gICAqIHZhdWx0J3MgYWRhcHRlciBjb21wYXJlcyBuYW1lcyAoY2FzZS1mb2xkZWQgb24gYSBjYXNlLWluc2Vuc2l0aXZlIGFkYXB0ZXIpLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNJblByb3BlckZvbGRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGUgbm90ZSdzIGNvbmZpZ3VyYXRpb24gcHV0cyB0aGlzIGF0dGFjaG1lbnQgaW4sIGAvYCBmb3IgdGhlIHZhdWx0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJBdHRhY2htZW50Rm9sZGVyUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50UGxhY2VtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdHRhY2htZW50UGxhY2VtZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGF0dGFjaG1lbnQgdG8ganVkZ2UuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZTogVEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdC1yZWxhdGl2ZSBwYXRoIG9mIHRoZSBub3RlIHdob3NlIGNvbmZpZ3VyYXRpb24gdGhlIGF0dGFjaG1lbnQgaXMganVkZ2VkIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSByZWZlcmVuY2UgdG8gYW4gYXR0YWNobWVudCBvdXRzaWRlIHRoZSBhdHRhY2htZW50IGZvbGRlciBvZiB0aGUgbm90ZSB0aGF0IG1ha2VzIGl0LlxuICpcbiAqIFRoZSBzYW1lIGF0dGFjaG1lbnQgcmVmZXJlbmNlZCBmcm9tIHR3byBub3RlcyBpcyB0d28gZW50cmllcywgYmVjYXVzZSB0aGUgdHdvIG5vdGVzIGNhbiBjb25maWd1cmUgZGlmZmVyZW50XG4gKiBhdHRhY2htZW50IGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlzcGxhY2VkQXR0YWNobWVudEVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBhdHRhY2htZW50J3MgY3VycmVudCB2YXVsdC1yZWxhdGl2ZSBwYXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudFBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIGZvbGRlciB0aGUgcmVmZXJlbmNpbmcgbm90ZSdzIGNvbmZpZ3VyYXRpb24gcHV0cyB0aGUgYXR0YWNobWVudCBpbi5cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlckF0dGFjaG1lbnRGb2xkZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgdGhhdCByZWFjaGVzIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlOiBSZWZlcmVuY2U7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlY29yZEF0dGFjaG1lbnRQbGFjZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZEF0dGFjaG1lbnRQbGFjZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSB0aGUgcmVmZXJlbmNlIHJlc29sdmVkIHRvLiBQYXNzIG9ubHkgcmVmZXJlbmNlcyB0aGF0IHJlc29sdmVkOiBhbiB1bnJlc29sdmVkIG9uZSBpcyBhIGJyb2tlbiBsaW5rLFxuICAgKiBub3QgYSBtaXNwbGFjZWQgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlOiBURmlsZTtcblxuICAvKipcbiAgICogVGhlIGluZGV4IHRoZSB2ZXJkaWN0IGlzIHJlY29yZGVkIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXg6IE1pc3BsYWNlZEF0dGFjaG1lbnRJbmRleDtcblxuICAvKipcbiAgICogV2hldGhlciBhIHBhdGggaXMgbmV2ZXIganVkZ2VkLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHRoZSB1c2VyIGV4Y2x1ZGVkIGl0LiBEZWZhdWx0cyB0byBqdWRnaW5nIGV2ZXJ5IHBhdGguXG4gICAqL1xuICByZWFkb25seSBpc1BhdGhJZ25vcmVkPzogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhIHBhdGggbGllcyBpbiBhIHNoYXJlZCBhdHRhY2htZW50IGxvY2F0aW9uLCB3aGljaCBpcyBhbnlib2R5J3MgZm9sZGVyLCBzbyBubyByZWZlcmVuY2UgaW50byBpdCBpc1xuICAgKiBleHRlcm5hbC4gRGVmYXVsdHMgdG8gbm8gc2hhcmVkIGxvY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNTaGFyZWRBdHRhY2htZW50UGF0aD86IChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBub3RlIGlzIHRyZWF0ZWQgYXMgYW4gYXR0YWNobWVudCAoYW4gYC5leGNhbGlkcmF3Lm1kYCBmaWxlLCBzYXkpLCBhbmQgc28ganVkZ2VkIGhlcmUuIERlZmF1bHRzIHRvXG4gICAqIG5vIG5vdGUgYmVpbmcgb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNUcmVhdGVkQXNBdHRhY2htZW50PzogKHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggb2YgdGhlIG5vdGUgdGhhdCBtYWtlcyB0aGUgcmVmZXJlbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSwga2VwdCBpbiB0aGUgZW50cnkgc28gYSByZXBvcnQgY2FuIG5hbWUgaXRzIGxpbmUgb3IgZnJvbnRtYXR0ZXIga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlOiBSZWZlcmVuY2U7XG59XG5cbi8qKlxuICogVGhlIHZlcmRpY3RzIG9mIGEgd2FsayBvdmVyIGV2ZXJ5IHJlZmVyZW5jZSB0byBhbiBhdHRhY2htZW50LCBncm91cGVkIGJ5IHRoZSBub3RlIHRoYXQgbWFrZXMgdGhlIHJlZmVyZW5jZS5cbiAqXG4gKiBJdCBrZWVwcyBldmVyeSBleHRlcm5hbCByZWZlcmVuY2UsIGV2ZXJ5IG5vdGUgdGhhdCB1c2VzIGVhY2ggYXR0YWNobWVudCwgYW5kIGVhY2ggYXR0YWNobWVudCdzIHByb3BlciBub3RlczpcbiAqIHRoZSBub3RlcyB0aGF0IHJlZmVyZW5jZSBpdCBhbmQgd2hvc2Ugb3duIGZvbGRlciBob2xkcyBpdC4gV2hpY2ggZW50cmllcyBjb3VudCBhcyByZXBvcnRlZCBkZXBlbmRzIG9uIHRoZVxuICoge0BsaW5rIEV4dGVybmFsQXR0YWNobWVudExpbmtNb2RlfSBhbmQgb24gdGhlIHByb3BlciBub3Rlcywgd2hpY2ggYXJlIGtub3duIG9ubHkgb25jZSB0aGUgd2hvbGUgdmF1bHQgaGFzIGJlZW5cbiAqIHdhbGtlZCwgc28gYXNrIHtAbGluayBNaXNwbGFjZWRBdHRhY2htZW50SW5kZXguZ2V0UmVwb3J0ZWR9IGFmdGVyIHRoZSB3YWxrLlxuICovXG5leHBvcnQgY2xhc3MgTWlzcGxhY2VkQXR0YWNobWVudEluZGV4IGV4dGVuZHMgTWFwPHN0cmluZywgTWlzcGxhY2VkQXR0YWNobWVudEVudHJ5W10+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJOb3RlUGF0aHNCeUF0dGFjaG1lbnQgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlck5vdGVQYXRoc0J5QXR0YWNobWVudCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbXB0eSBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGUgLSBXaGljaCBleHRlcm5hbCByZWZlcmVuY2VzIHtAbGluayBNaXNwbGFjZWRBdHRhY2htZW50SW5kZXguZ2V0UmVwb3J0ZWR9IHJldHVybnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG1vZGUgPSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZS5SZXBvcnQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSByZWZlcmVuY2UgdG8gYW4gYXR0YWNobWVudCBvdXRzaWRlIHRoZSByZWZlcmVuY2luZyBub3RlJ3MgZm9sZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gbm90ZVBhdGggLSBUaGUgcmVmZXJlbmNpbmcgbm90ZSdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqIEBwYXJhbSBlbnRyeSAtIFRoZSByZWZlcmVuY2UgYW5kIHRoZSBmb2xkZXIgdGhlIG5vdGUgd2FudHMgdGhlIGF0dGFjaG1lbnQgaW4uXG4gICAqL1xuICBwdWJsaWMgYWRkKG5vdGVQYXRoOiBzdHJpbmcsIGVudHJ5OiBNaXNwbGFjZWRBdHRhY2htZW50RW50cnkpOiB2b2lkIHtcbiAgICBsZXQgZW50cmllcyA9IHRoaXMuZ2V0KG5vdGVQYXRoKTtcbiAgICBpZiAoIWVudHJpZXMpIHtcbiAgICAgIGVudHJpZXMgPSBbXTtcbiAgICAgIHRoaXMuc2V0KG5vdGVQYXRoLCBlbnRyaWVzKTtcbiAgICB9XG4gICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB0aGlzLmFkZFVzZXIoZW50cnkuYXR0YWNobWVudFBhdGgsIG5vdGVQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoYXQgYSBub3RlIHJlZmVyZW5jZXMgYW4gYXR0YWNobWVudCwgd2hlcmV2ZXIgdGhlIGF0dGFjaG1lbnQgc2l0cy5cbiAgICpcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRQYXRoIC0gVGhlIGF0dGFjaG1lbnQncyB2YXVsdC1yZWxhdGl2ZSBwYXRoLlxuICAgKiBAcGFyYW0gbm90ZVBhdGggLSBUaGUgcmVmZXJlbmNpbmcgbm90ZSdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqL1xuICBwdWJsaWMgYWRkVXNlcihhdHRhY2htZW50UGF0aDogc3RyaW5nLCBub3RlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgYWRkVG9TZXRNYXAodGhpcy51c2VyTm90ZVBhdGhzQnlBdHRhY2htZW50LCBhdHRhY2htZW50UGF0aCwgbm90ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBub3RlcyB0aGF0IHVzZSBhbiBhdHRhY2htZW50IGJlc2lkZXMgdGhlIGdpdmVuIG9uZSwgaXRzIHByb3BlciBub3RlcyBmaXJzdCwgZWFjaCBncm91cCBpbiB3YWxrIG9yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gYXR0YWNobWVudFBhdGggLSBUaGUgYXR0YWNobWVudCdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBub3RlIHRvIGxlYXZlIG91dDogdGhlIG9uZSB3aG9zZSByZWZlcmVuY2UgaXMgYmVpbmcgcmVwb3J0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBvdGhlciBub3RlcycgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0T3RoZXJVc2VyTm90ZVBhdGhzKGF0dGFjaG1lbnRQYXRoOiBzdHJpbmcsIG5vdGVQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcHJvcGVyTm90ZVBhdGhzID0gdGhpcy5nZXRQcm9wZXJOb3RlUGF0aHMoYXR0YWNobWVudFBhdGgpO1xuICAgIGNvbnN0IHVzZXJOb3RlUGF0aHMgPSBbLi4udGhpcy51c2VyTm90ZVBhdGhzQnlBdHRhY2htZW50LmdldChhdHRhY2htZW50UGF0aCkgPz8gW11dO1xuICAgIHJldHVybiBbLi4ucHJvcGVyTm90ZVBhdGhzLCAuLi51c2VyTm90ZVBhdGhzLmZpbHRlcigocGF0aCkgPT4gIXByb3Blck5vdGVQYXRocy5pbmNsdWRlcyhwYXRoKSldLmZpbHRlcigocGF0aCkgPT4gcGF0aCAhPT0gbm90ZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXIgbm90ZXMgb2YgYW4gYXR0YWNobWVudDogdGhlIG5vdGVzIHRoYXQgcmVmZXJlbmNlIGl0IGFuZCB3aG9zZSBvd24gZm9sZGVyIGhvbGRzIGl0LCBpbiB3YWxrIG9yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gYXR0YWNobWVudFBhdGggLSBUaGUgYXR0YWNobWVudCdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqIEByZXR1cm5zIFRoZSBwcm9wZXIgbm90ZXMnIHBhdGhzLCBlbXB0eSB3aGVuIHRoZSBhdHRhY2htZW50IGhhcyBub25lLlxuICAgKi9cbiAgcHVibGljIGdldFByb3Blck5vdGVQYXRocyhhdHRhY2htZW50UGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5wcm9wZXJOb3RlUGF0aHNCeUF0dGFjaG1lbnQuZ2V0KGF0dGFjaG1lbnRQYXRoKSA/PyBbXV07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVudHJpZXMgdG8gcmVwb3J0LCBhZnRlciB0aGUgbW9kZSBpcyBhcHBsaWVkLCBncm91cGVkIGJ5IG5vdGUsIHdpdGggYSBub3RlIGxlZnQgb3V0IG9uY2Ugbm9uZSBvZiBpdHNcbiAgICogZW50cmllcyBzdXJ2aXZlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZW50cmllcyB0byByZXBvcnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVwb3J0ZWQoKTogTWFwPHN0cmluZywgTWlzcGxhY2VkQXR0YWNobWVudEVudHJ5W10+IHtcbiAgICBjb25zdCByZXBvcnRlZCA9IG5ldyBNYXA8c3RyaW5nLCBNaXNwbGFjZWRBdHRhY2htZW50RW50cnlbXT4oKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZS5JZ25vcmUpIHtcbiAgICAgIHJldHVybiByZXBvcnRlZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtub3RlUGF0aCwgZW50cmllc10gb2YgdGhpcykge1xuICAgICAgY29uc3Qgc3Vydml2aW5nID0gdGhpcy5tb2RlID09PSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZS5SZXBvcnRVbm93bmVkXG4gICAgICAgID8gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiAhdGhpcy5wcm9wZXJOb3RlUGF0aHNCeUF0dGFjaG1lbnQuaGFzKGVudHJ5LmF0dGFjaG1lbnRQYXRoKSlcbiAgICAgICAgOiBlbnRyaWVzO1xuICAgICAgaWYgKHN1cnZpdmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydGVkLnNldChub3RlUGF0aCwgc3Vydml2aW5nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcG9ydGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBub3RlIGlzIGEgcHJvcGVyIG5vdGUgb2YgYW4gYXR0YWNobWVudDogaXQgcmVmZXJlbmNlcyBpdCwgYW5kIGl0cyBvd24gZm9sZGVyIGhvbGRzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gYXR0YWNobWVudFBhdGggLSBUaGUgYXR0YWNobWVudCdzIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBub3RlJ3MgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIG5vdGUncyBvd24gYXR0YWNobWVudCBmb2xkZXIgaG9sZHMgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICBwdWJsaWMgaXNQcm9wZXJOb3RlKGF0dGFjaG1lbnRQYXRoOiBzdHJpbmcsIG5vdGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJOb3RlUGF0aHNCeUF0dGFjaG1lbnQuZ2V0KGF0dGFjaG1lbnRQYXRoKT8uaGFzKG5vdGVQYXRoKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoYXQgYW4gYXR0YWNobWVudCBzaXRzIGluIHRoZSBmb2xkZXIgY29uZmlndXJlZCBmb3IgYSBub3RlIHRoYXQgcmVmZXJlbmNlcyBpdCwgd2hpY2ggbWFrZXMgdGhhdFxuICAgKiBub3RlIGl0cyBwcm9wZXIgbm90ZS5cbiAgICpcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRQYXRoIC0gVGhlIGF0dGFjaG1lbnQncyB2YXVsdC1yZWxhdGl2ZSBwYXRoLlxuICAgKiBAcGFyYW0gbm90ZVBhdGggLSBUaGUgcmVmZXJlbmNpbmcgbm90ZSB3aG9zZSBmb2xkZXIgaG9sZHMgaXQuXG4gICAqL1xuICBwdWJsaWMgbWFya0hvbWVkKGF0dGFjaG1lbnRQYXRoOiBzdHJpbmcsIG5vdGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBhZGRUb1NldE1hcCh0aGlzLnByb3Blck5vdGVQYXRoc0J5QXR0YWNobWVudCwgYXR0YWNobWVudFBhdGgsIG5vdGVQYXRoKTtcbiAgICB0aGlzLmFkZFVzZXIoYXR0YWNobWVudFBhdGgsIG5vdGVQYXRoKTtcbiAgfVxufVxuXG4vKipcbiAqIEp1ZGdlcyB3aGVyZSBhbiBhdHRhY2htZW50IHNpdHMgYWdhaW5zdCB0aGUgYXR0YWNobWVudCBmb2xkZXIgb2Ygb25lIG5vdGUuXG4gKlxuICogQXNrcyB0aGUgYXR0YWNobWVudC1wYXRoIHNlYW0gb25jZSwgZm9sZGVyLW9ubHksIGZvciB0aGUgUkVBTCBhdHRhY2htZW50LCBzbyBhIGBDdXN0b20gQXR0YWNobWVudCBMb2NhdGlvbmBcbiAqIGZvbGRlciB0ZW1wbGF0ZSB0aGF0IHJlYWRzIHRoZSBhdHRhY2htZW50J3Mgb3duIG5hbWUgaXMgaG9ub3VyZWQgYW5kIG5vIG5hbWUgaXMgZ2VuZXJhdGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgYXR0YWNobWVudCBhbmQgdGhlIG5vdGUuXG4gKiBAcmV0dXJucyBUaGUgbm90ZSdzIHByb3BlciBmb2xkZXIgZm9yIHRoZSBhdHRhY2htZW50LCBhbmQgd2hldGhlciB0aGUgYXR0YWNobWVudCBpcyBpbiBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF0dGFjaG1lbnRQbGFjZW1lbnQocGFyYW1zOiBHZXRBdHRhY2htZW50UGxhY2VtZW50UGFyYW1zKTogUHJvbWlzZTxBdHRhY2htZW50UGxhY2VtZW50PiB7XG4gIGNvbnN0IHsgYXBwLCBhdHRhY2htZW50RmlsZSwgbm90ZVBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgcHJvcGVyQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aEZvckF0dGFjaG1lbnQoe1xuICAgIGFwcCxcbiAgICBhdHRhY2htZW50UGF0aE9yRmlsZTogYXR0YWNobWVudEZpbGUsXG4gICAgY29udGV4dDogQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd24sXG4gICAgbm90ZVBhdGhPckZpbGU6IG5vdGVQYXRoXG4gIH0pO1xuXG4gIC8vIEZvbGQgYXMgYGlzQXRQcm9wZXJBdHRhY2htZW50UGF0aGAgZG9lcywgc28gYSBjYXNlLWluc2Vuc2l0aXZlIGFkYXB0ZXIgZG9lcyBub3QgcmVwb3J0IGEgZm9sZGVyIHRoYXQgZGlmZmVyc1xuICAvLyBvbmx5IGluIGNhc2UuXG4gIGNvbnN0IGlzSW5zZW5zaXRpdmUgPSBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmU7XG4gIHJldHVybiB7XG4gICAgaXNJblByb3BlckZvbGRlcjogZm9sZChwYXJlbnRGb2xkZXJQYXRoKGF0dGFjaG1lbnRGaWxlLnBhdGgpKSA9PT0gZm9sZChwcm9wZXJBdHRhY2htZW50Rm9sZGVyUGF0aCksXG4gICAgcHJvcGVyQXR0YWNobWVudEZvbGRlclBhdGhcbiAgfTtcblxuICBmdW5jdGlvbiBmb2xkKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBpc0luc2Vuc2l0aXZlID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSnVkZ2VzIG9uZSByZXNvbHZlZCByZWZlcmVuY2UgYW5kIHJlY29yZHMgdGhlIHZlcmRpY3QgaW4gdGhlIGluZGV4LlxuICpcbiAqIFJlY29yZHMgbm90aGluZyB1bmRlciB7QGxpbmsgRXh0ZXJuYWxBdHRhY2htZW50TGlua01vZGUuSWdub3JlfSwgZm9yIGEgbm90ZSB0aGF0IGlzIG5vdCB0cmVhdGVkIGFzIGFuXG4gKiBhdHRhY2htZW50LCBhbmQgZm9yIGFuIGlnbm9yZWQgb3Igc2hhcmVkIHBhdGguIE90aGVyd2lzZSB0aGUgcmVmZXJlbmNpbmcgbm90ZSBiZWNvbWVzIGEgcHJvcGVyIG5vdGUgb2YgdGhlXG4gKiBhdHRhY2htZW50IHdoZW4gaXRzIGZvbGRlciBob2xkcyBpdCwgYW5kIHRoZSByZWZlcmVuY2UgYmVjb21lcyBhbiBlbnRyeSB3aGVuIGl0IGRvZXMgbm90LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcmVmZXJlbmNlLCBpdHMgbm90ZSwgaXRzIHRhcmdldCBhbmQgdGhlIGluZGV4LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSB2ZXJkaWN0IGlzIHJlY29yZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb3JkQXR0YWNobWVudFBsYWNlbWVudChwYXJhbXM6IFJlY29yZEF0dGFjaG1lbnRQbGFjZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhdHRhY2htZW50RmlsZSxcbiAgICBpbmRleCxcbiAgICBpc1BhdGhJZ25vcmVkID0gaXNOb25lLFxuICAgIGlzU2hhcmVkQXR0YWNobWVudFBhdGggPSBpc05vbmUsXG4gICAgaXNUcmVhdGVkQXNBdHRhY2htZW50ID0gaXNOb25lLFxuICAgIG5vdGVQYXRoLFxuICAgIHJlZmVyZW5jZVxuICB9ID0gcGFyYW1zO1xuXG4gIGlmIChpbmRleC5tb2RlID09PSBFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZS5JZ25vcmUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaXNOb3RlKGF0dGFjaG1lbnRGaWxlKSAmJiAhaXNUcmVhdGVkQXNBdHRhY2htZW50KGF0dGFjaG1lbnRGaWxlLnBhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzUGF0aElnbm9yZWQoYXR0YWNobWVudEZpbGUucGF0aCkgfHwgaXNTaGFyZWRBdHRhY2htZW50UGF0aChhdHRhY2htZW50RmlsZS5wYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBsYWNlbWVudCA9IGF3YWl0IGdldEF0dGFjaG1lbnRQbGFjZW1lbnQoeyBhcHAsIGF0dGFjaG1lbnRGaWxlLCBub3RlUGF0aCB9KTtcblxuICBpZiAocGxhY2VtZW50LmlzSW5Qcm9wZXJGb2xkZXIpIHtcbiAgICBpbmRleC5tYXJrSG9tZWQoYXR0YWNobWVudEZpbGUucGF0aCwgbm90ZVBhdGgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluZGV4LmFkZChub3RlUGF0aCwge1xuICAgIGF0dGFjaG1lbnRQYXRoOiBhdHRhY2htZW50RmlsZS5wYXRoLFxuICAgIHByb3BlckF0dGFjaG1lbnRGb2xkZXJQYXRoOiBwbGFjZW1lbnQucHJvcGVyQXR0YWNobWVudEZvbGRlclBhdGgsXG4gICAgcmVmZXJlbmNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRUb1NldE1hcChtYXA6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Piwga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgbGV0IHNldCA9IG1hcC5nZXQoa2V5KTtcbiAgaWYgKCFzZXQpIHtcbiAgICBzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBtYXAuc2V0KGtleSwgc2V0KTtcbiAgfVxuICBzZXQuYWRkKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNOb25lKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmFsc2U7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFLaEIsSUFBSyw2QkFBTCxrQkFBS0EsZ0NBQUw7QUFJTCxFQUFBQSw0QkFBQSxZQUFTO0FBTVQsRUFBQUEsNEJBQUEsWUFBUztBQUtULEVBQUFBLDRCQUFBLG1CQUFnQjtBQWZOLFNBQUFBO0FBQUEsR0FBQTtBQXFJTCxNQUFNLGlDQUFpQyxJQUF3QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVM3RSxZQUE0QixPQUFPLHVCQUFtQztBQUMzRSxVQUFNO0FBRDJCO0FBQUEsRUFFbkM7QUFBQSxFQUZtQztBQUFBLEVBUmxCLDhCQUE4QixvQkFBSSxJQUF5QjtBQUFBLEVBQzNELDRCQUE0QixvQkFBSSxJQUF5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBaUJuRSxJQUFJLFVBQWtCLE9BQXVDO0FBQ2xFLFFBQUksVUFBVSxLQUFLLElBQUksUUFBUTtBQUMvQixRQUFJLENBQUMsU0FBUztBQUNaLGdCQUFVLENBQUM7QUFDWCxXQUFLLElBQUksVUFBVSxPQUFPO0FBQUEsSUFDNUI7QUFDQSxZQUFRLEtBQUssS0FBSztBQUNsQixTQUFLLFFBQVEsTUFBTSxnQkFBZ0IsUUFBUTtBQUFBLEVBQzdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxRQUFRLGdCQUF3QixVQUF3QjtBQUM3RCxnQkFBWSxLQUFLLDJCQUEyQixnQkFBZ0IsUUFBUTtBQUFBLEVBQ3RFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNPLHNCQUFzQixnQkFBd0IsVUFBNEI7QUFDL0UsVUFBTSxrQkFBa0IsS0FBSyxtQkFBbUIsY0FBYztBQUM5RCxVQUFNLGdCQUFnQixDQUFDLEdBQUcsS0FBSywwQkFBMEIsSUFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDO0FBQ2xGLFdBQU8sQ0FBQyxHQUFHLGlCQUFpQixHQUFHLGNBQWMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLFNBQVMsUUFBUTtBQUFBLEVBQ3BJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxtQkFBbUIsZ0JBQWtDO0FBQzFELFdBQU8sQ0FBQyxHQUFHLEtBQUssNEJBQTRCLElBQUksY0FBYyxLQUFLLENBQUMsQ0FBQztBQUFBLEVBQ3ZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxjQUF1RDtBQUM1RCxVQUFNLFdBQVcsb0JBQUksSUFBd0M7QUFDN0QsUUFBSSxLQUFLLFNBQVMsdUJBQW1DO0FBQ25ELGFBQU87QUFBQSxJQUNUO0FBRUEsZUFBVyxDQUFDLFVBQVUsT0FBTyxLQUFLLE1BQU07QUFDdEMsWUFBTSxZQUFZLEtBQUssU0FBUyxzQ0FDNUIsUUFBUSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssNEJBQTRCLElBQUksTUFBTSxjQUFjLENBQUMsSUFDckY7QUFDSixVQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLGlCQUFTLElBQUksVUFBVSxTQUFTO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sYUFBYSxnQkFBd0IsVUFBMkI7QUFDckUsV0FBTyxLQUFLLDRCQUE0QixJQUFJLGNBQWMsR0FBRyxJQUFJLFFBQVEsS0FBSztBQUFBLEVBQ2hGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNPLFVBQVUsZ0JBQXdCLFVBQXdCO0FBQy9ELGdCQUFZLEtBQUssNkJBQTZCLGdCQUFnQixRQUFRO0FBQ3RFLFNBQUssUUFBUSxnQkFBZ0IsUUFBUTtBQUFBLEVBQ3ZDO0FBQ0Y7QUFXQSxlQUFzQix1QkFBdUIsUUFBb0U7QUFDL0csUUFBTSxFQUFFLEtBQUssZ0JBQWdCLFNBQVMsSUFBSTtBQUMxQyxRQUFNLDZCQUE2QixNQUFNLHFDQUFxQztBQUFBLElBQzVFO0FBQUEsSUFDQSxzQkFBc0I7QUFBQSxJQUN0QixTQUFTLHNCQUFzQjtBQUFBLElBQy9CLGdCQUFnQjtBQUFBLEVBQ2xCLENBQUM7QUFJRCxRQUFNLGdCQUFnQixpQkFBaUIsR0FBRyxFQUFFO0FBQzVDLFNBQU87QUFBQSxJQUNMLGtCQUFrQixLQUFLLGlCQUFpQixlQUFlLElBQUksQ0FBQyxNQUFNLEtBQUssMEJBQTBCO0FBQUEsSUFDakc7QUFBQSxFQUNGO0FBRUEsV0FBUyxLQUFLLE9BQXVCO0FBQ25DLFdBQU8sZ0JBQWdCLE1BQU0sWUFBWSxJQUFJO0FBQUEsRUFDL0M7QUFDRjtBQVlBLGVBQXNCLDBCQUEwQixRQUF3RDtBQUN0RyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxnQkFBZ0I7QUFBQSxJQUNoQix5QkFBeUI7QUFBQSxJQUN6Qix3QkFBd0I7QUFBQSxJQUN4QjtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixNQUFJLE1BQU0sU0FBUyx1QkFBbUM7QUFDcEQ7QUFBQSxFQUNGO0FBRUEsTUFBSSxPQUFPLGNBQWMsS0FBSyxDQUFDLHNCQUFzQixlQUFlLElBQUksR0FBRztBQUN6RTtBQUFBLEVBQ0Y7QUFFQSxNQUFJLGNBQWMsZUFBZSxJQUFJLEtBQUssdUJBQXVCLGVBQWUsSUFBSSxHQUFHO0FBQ3JGO0FBQUEsRUFDRjtBQUVBLFFBQU0sWUFBWSxNQUFNLHVCQUF1QixFQUFFLEtBQUssZ0JBQWdCLFNBQVMsQ0FBQztBQUVoRixNQUFJLFVBQVUsa0JBQWtCO0FBQzlCLFVBQU0sVUFBVSxlQUFlLE1BQU0sUUFBUTtBQUM3QztBQUFBLEVBQ0Y7QUFFQSxRQUFNLElBQUksVUFBVTtBQUFBLElBQ2xCLGdCQUFnQixlQUFlO0FBQUEsSUFDL0IsNEJBQTRCLFVBQVU7QUFBQSxJQUN0QztBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBUyxZQUFZLEtBQStCLEtBQWEsT0FBcUI7QUFDcEYsTUFBSSxNQUFNLElBQUksSUFBSSxHQUFHO0FBQ3JCLE1BQUksQ0FBQyxLQUFLO0FBQ1IsVUFBTSxvQkFBSSxJQUFZO0FBQ3RCLFFBQUksSUFBSSxLQUFLLEdBQUc7QUFBQSxFQUNsQjtBQUNBLE1BQUksSUFBSSxLQUFLO0FBQ2Y7QUFFQSxTQUFTLFNBQWtCO0FBQ3pCLFNBQU87QUFDVDsiLCJuYW1lcyI6WyJFeHRlcm5hbEF0dGFjaG1lbnRMaW5rTW9kZSJdfQ==
|
|
@@ -73,7 +73,7 @@ export interface PromptParams extends ModalParamsBase {
|
|
|
73
73
|
* @param value - The input value to validate.
|
|
74
74
|
* @returns an error message if the value is invalid, or `null` if the value is valid.
|
|
75
75
|
*/
|
|
76
|
-
readonly valueValidator?: (value: string) => Promisable<MaybeReturn<string>>;
|
|
76
|
+
readonly valueValidator?: (value: string) => Promisable<MaybeReturn<null | string>>;
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
79
|
* Displays a prompt modal in Obsidian to get user input.
|
|
@@ -156,4 +156,4 @@ async function prompt(params) {
|
|
|
156
156
|
export {
|
|
157
157
|
prompt
|
|
158
158
|
};
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvcHJvbXB0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBkaXNwbGF5aW5nIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBmdW5jdGlvbiB0byBkaXNwbGF5IGEgbW9kYWwgdGhhdCBwcm9tcHRzIHRoZSB1c2VyIGZvciBpbnB1dC4gVGhlIG1vZGFsIGluY2x1ZGVzIFwiT0tcIiBhbmQgXCJDYW5jZWxcIiBidXR0b25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZSc7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBjb252ZXJ0QXN5bmNUb1N5bmMsXG4gIGludm9rZUFzeW5jU2FmZWx5XG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uQ29tcG9uZW50LFxuICBUZXh0Q29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUge1xuICBNb2RhbENvbW1hbmRCdWlsZGVyLFxuICBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zLFxuICBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZVxufSBmcm9tICcuL21vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zLFxuICBNb2RhbFBhcmFtc0Jhc2Vcbn0gZnJvbSAnLi9tb2RhbC50cyc7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGFwcGx5U3BlbGxjaGVja01vZGUgfSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBTcGVsbGNoZWNrTW9kZSB9IGZyb20gJy4uL29ic2lkaWFuLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIE1vZGFsQmFzZSxcbiAgc2hvd01vZGFsXG59IGZyb20gJy4vbW9kYWwudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwcm9tcHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdFBhcmFtcyBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBIHRleHQgZm9yIHRoZSBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dHJhIGNvbnRyb2xzIOKAlCBjaGVja2JveGVzLCBkcm9wZG93bnMgYW5kIGtleWJvYXJkIHNob3J0Y3V0cyDigJQgcmVuZGVyZWQgYXMgYSBzdHJpcCBhbG9uZyB0aGUgYm90dG9tXG4gICAqIG9mIHRoZSBtb2RhbCwgc28gYSBjYWxsZXIgZ2V0cyBhIHRleHQgaW5wdXQgcGx1cyBvcHRpb25zIHdpdGggbm8gYmVzcG9rZSBtb2RhbCBvZiBpdHMgb3duLlxuICAgKlxuICAgKiBIYW5kIGl0IGEgY29uZmlndXJlZCB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlcn07IHRoZSBtb2RhbCBidWlsZHMgaXQuIFRoZSBzdHJpcCBpcyByZW5kZXJlZCBhZnRlclxuICAgKiB0aGUgYnV0dG9ucywgc28gaXQgc2l0cyBhbG9uZyB0aGUgYm90dG9tIGVkZ2Ugd2hlcmUgYSBgU3VnZ2VzdE1vZGFsYCdzIGluc3RydWN0aW9uIGJhciBzaXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZEJ1aWxkZXI/OiBNb2RhbENvbW1hbmRCdWlsZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgd2F5IHtAbGluayBQcm9tcHRQYXJhbXMuY29tbWFuZEJ1aWxkZXJ9J3MgY29udHJvbHMgYXJlIHJlbmRlcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zYFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZHNSZW5kZXJNb2RlPzogTW9kYWxDb21tYW5kc1JlbmRlck1vZGU7XG5cbiAgLyoqXG4gICAqIEEgZGVmYXVsdCB2YWx1ZSB0byBwcmUtZmlsbCB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSB0ZXh0IGZvciB0aGUgXCJPS1wiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9rQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZSBkZWNpZGluZyB3aGV0aGVyIHRoZSBpbnB1dCBpcyBzcGVsbC1jaGVja2VkLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB3aGF0IHRoaXMgbW9kYWwgaGFzIGFsd2F5cyBkb25lLCBzbyBwYXNzaW5nIG5vdGhpbmcgY2hhbmdlcyBub3RoaW5nOiB0aGUgaW5wdXQgZm9sbG93c1xuICAgKiBgRWRpdG9yID4gU3BlbGxjaGVja2AsIGxpa2UgT2JzaWRpYW4ncyBvd24gbmFtZS1lbnRyeSBzdXJmYWNlcy4gUGFzcyB7QGxpbmsgU3BlbGxjaGVja01vZGUuT2ZmfSBmb3IgYVxuICAgKiBib3ggdGhhdCBpcyByZWFsbHkgYSBzZWFyY2ggZmllbGQsIG9yIHtAbGluayBTcGVsbGNoZWNrTW9kZS5BbHdheXNPbn0gdG8gc3BlbGwtY2hlY2sgaXQgd2hhdGV2ZXIgdGhlXG4gICAqIHZhdWx0IHNldHRpbmcgc2F5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYFNwZWxsY2hlY2tNb2RlLkZvbGxvd09ic2lkaWFuU2V0dGluZ2BcbiAgICovXG4gIHJlYWRvbmx5IHNwZWxsY2hlY2tNb2RlPzogU3BlbGxjaGVja01vZGU7XG5cbiAgLyoqXG4gICAqIEEgdGl0bGUgb2YgdGhlIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGlucHV0IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5wdXQgdmFsdWUgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQsIG9yIGBudWxsYCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZVZhbGlkYXRvcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPHN0cmluZz4+O1xufVxuXG50eXBlIFByb21wdE1vZGFsQ29uc3RydWN0b3JQYXJhbXMgPSBNb2RhbEJhc2VDb25zdHJ1Y3RvclBhcmFtczxudWxsIHwgc3RyaW5nPiAmIFByb21wdFBhcmFtcztcblxuY2xhc3MgUHJvbXB0TW9kYWwgZXh0ZW5kcyBNb2RhbEJhc2U8bnVsbCB8IHN0cmluZz4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kQnVpbGRlcjogTW9kYWxDb21tYW5kQnVpbGRlciB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZHNSZW5kZXJNb2RlOiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc09rQ2xpY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzVG91Y2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IG9rQnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3BlbGxjaGVja01vZGU6IFNwZWxsY2hlY2tNb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICBwcml2YXRlIHZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsdWVWYWxpZGF0b3I6ICh2YWx1ZTogc3RyaW5nKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPHN0cmluZz4+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFByb21wdE1vZGFsQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuYWRkQ3NzQ2xhc3NlcyhDc3NDbGFzcy5Qcm9tcHRNb2RhbCk7XG4gICAgdGhpcy5jYW5jZWxCdXR0b25UZXh0ID0gcGFyYW1zLmNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLmNhbmNlbCk7XG4gICAgdGhpcy5jb21tYW5kQnVpbGRlciA9IHBhcmFtcy5jb21tYW5kQnVpbGRlciA/PyBudWxsO1xuICAgIHRoaXMuY29tbWFuZHNSZW5kZXJNb2RlID0gcGFyYW1zLmNvbW1hbmRzUmVuZGVyTW9kZTtcbiAgICB0aGlzLm9rQnV0dG9uVGV4dCA9IHBhcmFtcy5va0J1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLm9rKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGFyYW1zLnBsYWNlaG9sZGVyID8/ICcnO1xuICAgIHRoaXMuc3BlbGxjaGVja01vZGUgPSBwYXJhbXMuc3BlbGxjaGVja01vZGUgPz8gU3BlbGxjaGVja01vZGUuRm9sbG93T2JzaWRpYW5TZXR0aW5nO1xuICAgIHRoaXMudGl0bGUgPSBwYXJhbXMudGl0bGUgPz8gJyc7XG4gICAgdGhpcy52YWx1ZVZhbGlkYXRvciA9IHBhcmFtcy52YWx1ZVZhbGlkYXRvciA/PyBub29wO1xuICAgIHRoaXMudmFsdWUgPSBwYXJhbXMuZGVmYXVsdFZhbHVlID8/ICcnO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh0aGlzLmlzT2tDbGlja2VkID8gdGhpcy52YWx1ZSA6IG51bGwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlRWwuc2V0VGV4dCh0aGlzLnRpdGxlKTtcbiAgICBjb25zdCB0ZXh0Q29tcG9uZW50ID0gbmV3IFRleHRDb21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIGNvbnN0IGlucHV0RWwgPSB0ZXh0Q29tcG9uZW50LmlucHV0RWw7XG4gICAgLy8gYEFic3RyYWN0VGV4dENvbXBvbmVudGAgZm9yY2VzIGBzcGVsbGNoZWNrPVwiZmFsc2VcImAgb24gZXZlcnkgdGV4dCBjb21wb25lbnQsIHNvIHRoZSBtb2RlIGhhcyB0byBiZSBhcHBsaWVkIGhlcmUuXG4gICAgLy8gT2JzaWRpYW4ncyBvd24gZmlsZSBleHBsb3JlciByZWFkcyB0aGUgc2FtZSBjb25maWcgd2hlbiBpdCBzdGFydHMgYW4gaW5saW5lIHJlbmFtZS5cbiAgICBhcHBseVNwZWxsY2hlY2tNb2RlKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBlbGVtZW50OiBpbnB1dEVsLFxuICAgICAgc3BlbGxjaGVja01vZGU6IHRoaXMuc3BlbGxjaGVja01vZGVcbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkYXRlID0gYXN5bmMgKHNob3VsZFJlcG9ydDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYXdhaXQgdGhpcy52YWx1ZVZhbGlkYXRvcihpbnB1dEVsLnZhbHVlKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpbnB1dEVsLnNldEN1c3RvbVZhbGlkaXR5KGVycm9yTWVzc2FnZSA/PyAnJyk7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0KSB7XG4gICAgICAgIGlucHV0RWwucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlSW5wdXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKGlucHV0RWwpO1xuICAgICAgYXdhaXQgdmFsaWRhdGUodHJ1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgdmFsaWRhdGUodGhpcy5pc1RvdWNoZWQpO1xuICAgIH07XG5cbiAgICB0ZXh0Q29tcG9uZW50LnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHRleHRDb21wb25lbnQuaW5wdXRFbC5zZWxlY3QoKTtcbiAgICB0ZXh0Q29tcG9uZW50LnNldFBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIGlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuVGV4dEJveCk7XG4gICAgLy8gVGhlIG1vZGFsIG9wZW5zIGludmFsaWQgYnkgZGVzaWduIChzZWUgYmVsb3cpLCBzbyB0aGUgaW52YWxpZCBzdHlsaW5nIGlzIGRlZmVycmVkIHVudGlsIHRvdWNoZWQuXG4gICAgaW5wdXRFbC5hZGRDbGFzcyhDc3NDbGFzcy5VbnRvdWNoZWQpO1xuICAgIHRleHRDb21wb25lbnQub25DaGFuZ2UoKG5ld1ZhbHVlKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKCRldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPaygkZXZlbnQsIHRleHRDb21wb25lbnQpO1xuICAgICAgfSBlbHNlIGlmICgkZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGNvbnZlcnRBc3luY1RvU3luYyhoYW5kbGVJbnB1dCkpO1xuICAgIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBjb252ZXJ0QXN5bmNUb1N5bmMoaGFuZGxlRm9jdXMpKTtcbiAgICAvLyBUaGUgbW9kYWwgbXVzdCBzdGFydCBvdXQgaW52YWxpZCBzbyBPSyByZWZ1c2VzLCBidXQgdGhlIHZhbGlkaXR5IGlzIG5vdCByZXBvcnRlZCB1bnRpbCB0aGUgdXNlciB0eXBlcyBvciBzdWJtaXRzLlxuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHZhbGlkYXRlKGZhbHNlKSk7XG4gICAgY29uc3Qgb2tCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRoaXMuY29udGVudEVsKTtcbiAgICBva0J1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMub2tCdXR0b25UZXh0KTtcbiAgICBva0J1dHRvbi5zZXRDdGEoKTtcbiAgICBva0J1dHRvbi5vbkNsaWNrKCgkZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlT2soJGV2ZW50LCB0ZXh0Q29tcG9uZW50KTtcbiAgICB9KTtcbiAgICBva0J1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5Pa0J1dHRvbik7XG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jYW5jZWxCdXR0b25UZXh0KTtcbiAgICBjYW5jZWxCdXR0b24ub25DbGljayh0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICAgIGNhbmNlbEJ1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5DYW5jZWxCdXR0b24pO1xuXG4gICAgLy8gQnVpbHQgbGFzdCBzbyB0aGUgc3RyaXAgbGFuZHMgYWxvbmcgdGhlIG1vZGFsJ3MgYm90dG9tIGVkZ2UsIHdoZXJlIGEgYFN1Z2dlc3RNb2RhbGAncyBpbnN0cnVjdGlvblxuICAgIC8vIGJhciBzaXRzLlxuICAgIHRoaXMuY29tbWFuZEJ1aWxkZXI/LmJ1aWxkKHRoaXMsIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zPih7IHJlbmRlck1vZGU6IHRoaXMuY29tbWFuZHNSZW5kZXJNb2RlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT2soJGV2ZW50OiBFdmVudCwgdGV4dENvbXBvbmVudDogVGV4dENvbXBvbmVudCk6IHZvaWQge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGV4dENvbXBvbmVudC5pbnB1dEVsLmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgdGhpcy5tYXJrVG91Y2hlZCh0ZXh0Q29tcG9uZW50LmlucHV0RWwpO1xuICAgICAgdGV4dENvbXBvbmVudC5pbnB1dEVsLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc09rQ2xpY2tlZCA9IHRydWU7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrVG91Y2hlZChpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlO1xuICAgIGlucHV0RWwucmVtb3ZlQ2xhc3MoQ3NzQ2xhc3MuVW50b3VjaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BsYXlzIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuIHRvIGdldCB1c2VyIGlucHV0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHByb21wdCBtb2RhbC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdXNlciBpbnB1dCBvciBgbnVsbGAgaWYgdGhlIHByb21wdCB3YXMgY2FuY2VsbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbXB0KHBhcmFtczogUHJvbXB0UGFyYW1zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBzaG93TW9kYWw8bnVsbCB8IHN0cmluZz4oKHByb21pc2VSZXNvbHZlKSA9PlxuICAgIG5ldyBQcm9tcHRNb2RhbCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBwcm9taXNlUmVzb2x2ZVxuICAgIH0pXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsU0FBUyxtQ0FBbUM7QUFDNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFZUCxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLFNBQVM7QUFDbEIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUE0RVAsTUFBTSxvQkFBb0IsVUFBeUI7QUFBQSxFQUNoQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDVCxjQUFjO0FBQUEsRUFDZCxZQUFZO0FBQUEsRUFDSDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ1Q7QUFBQSxFQUNTO0FBQUEsRUFFVixZQUFZLFFBQXNDO0FBQ3ZELFVBQU0sTUFBTTtBQUNaLFNBQUssY0FBYyxTQUFTLFdBQVc7QUFDdkMsU0FBSyxtQkFBbUIsT0FBTyxvQkFBb0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLFFBQVEsTUFBTTtBQUN4RixTQUFLLGlCQUFpQixPQUFPLGtCQUFrQjtBQUMvQyxTQUFLLHFCQUFxQixPQUFPO0FBQ2pDLFNBQUssZUFBZSxPQUFPLGdCQUFnQixFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksUUFBUSxFQUFFO0FBQzVFLFNBQUssY0FBYyxPQUFPLGVBQWU7QUFDekMsU0FBSyxpQkFBaUIsT0FBTyxrQkFBa0IsZUFBZTtBQUM5RCxTQUFLLFFBQVEsT0FBTyxTQUFTO0FBQzdCLFNBQUssaUJBQWlCLE9BQU8sa0JBQWtCO0FBQy9DLFNBQUssUUFBUSxPQUFPLGdCQUFnQjtBQUFBLEVBQ3RDO0FBQUEsRUFFZ0IsVUFBZ0I7QUFDOUIsU0FBSyxlQUFlLEtBQUssY0FBYyxLQUFLLFFBQVEsSUFBSTtBQUFBLEVBQzFEO0FBQUEsRUFFZ0IsU0FBZTtBQUM3QixTQUFLLFFBQVEsUUFBUSxLQUFLLEtBQUs7QUFDL0IsVUFBTSxnQkFBZ0IsSUFBSSxjQUFjLEtBQUssU0FBUztBQUN0RCxVQUFNLFVBQVUsY0FBYztBQUc5Qix3QkFBb0I7QUFBQSxNQUNsQixLQUFLLEtBQUs7QUFBQSxNQUNWLFNBQVM7QUFBQSxNQUNULGdCQUFnQixLQUFLO0FBQUEsSUFDdkIsQ0FBQztBQUVELFVBQU0sV0FBVyxPQUFPLGlCQUF5QztBQUMvRCxZQUFNLGVBQWUsTUFBTSxLQUFLLGVBQWUsUUFBUSxLQUFLO0FBQzVELGNBQVEsa0JBQWtCLGdCQUFnQixFQUFFO0FBQzVDLFVBQUksY0FBYztBQUNoQixnQkFBUSxlQUFlO0FBQUEsTUFDekI7QUFBQSxJQUNGO0FBRUEsVUFBTSxjQUFjLFlBQTJCO0FBQzdDLFdBQUssWUFBWSxPQUFPO0FBQ3hCLFlBQU0sU0FBUyxJQUFJO0FBQUEsSUFDckI7QUFFQSxVQUFNLGNBQWMsWUFBMkI7QUFDN0MsWUFBTSxTQUFTLEtBQUssU0FBUztBQUFBLElBQy9CO0FBRUEsa0JBQWMsU0FBUyxLQUFLLEtBQUs7QUFDakMsa0JBQWMsUUFBUSxPQUFPO0FBQzdCLGtCQUFjLGVBQWUsS0FBSyxXQUFXO0FBQzdDLFlBQVEsU0FBUyxTQUFTLE9BQU87QUFFakMsWUFBUSxTQUFTLFNBQVMsU0FBUztBQUNuQyxrQkFBYyxTQUFTLENBQUMsYUFBYTtBQUNuQyxXQUFLLFFBQVE7QUFBQSxJQUNmLENBQUM7QUFDRCxZQUFRLGlCQUFpQixXQUFXLENBQUMsV0FBMEI7QUFDN0QsVUFBSSxPQUFPLFFBQVEsU0FBUztBQUMxQixhQUFLLFNBQVMsUUFBUSxhQUFhO0FBQUEsTUFDckMsV0FBVyxPQUFPLFFBQVEsVUFBVTtBQUNsQyxhQUFLLE1BQU07QUFBQSxNQUNiO0FBQUEsSUFDRixDQUFDO0FBQ0QsWUFBUSxpQkFBaUIsU0FBUyxtQkFBbUIsV0FBVyxDQUFDO0FBQ2pFLFlBQVEsaUJBQWlCLFNBQVMsbUJBQW1CLFdBQVcsQ0FBQztBQUVqRSxzQkFBa0IsTUFBTSxTQUFTLEtBQUssQ0FBQztBQUN2QyxVQUFNLFdBQVcsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTO0FBQ25ELGFBQVMsY0FBYyxLQUFLLFlBQVk7QUFDeEMsYUFBUyxPQUFPO0FBQ2hCLGFBQVMsUUFBUSxDQUFDLFdBQVc7QUFDM0IsV0FBSyxTQUFTLFFBQVEsYUFBYTtBQUFBLElBQ3JDLENBQUM7QUFDRCxhQUFTLFNBQVMsU0FBUyxRQUFRO0FBQ25DLFVBQU0sZUFBZSxJQUFJLGdCQUFnQixLQUFLLFNBQVM7QUFDdkQsaUJBQWEsY0FBYyxLQUFLLGdCQUFnQjtBQUNoRCxpQkFBYSxRQUFRLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQztBQUMxQyxpQkFBYSxTQUFTLFNBQVMsWUFBWTtBQUkzQyxTQUFLLGdCQUFnQixNQUFNLE1BQU0sNEJBQTZELEVBQUUsWUFBWSxLQUFLLG1CQUFtQixDQUFDLENBQUM7QUFBQSxFQUN4STtBQUFBLEVBRVEsU0FBUyxRQUFlLGVBQW9DO0FBQ2xFLFdBQU8sZUFBZTtBQUN0QixRQUFJLENBQUMsY0FBYyxRQUFRLGNBQWMsR0FBRztBQUMxQyxXQUFLLFlBQVksY0FBYyxPQUFPO0FBQ3RDLG9CQUFjLFFBQVEsZUFBZTtBQUNyQztBQUFBLElBQ0Y7QUFFQSxTQUFLLGNBQWM7QUFDbkIsU0FBSyxNQUFNO0FBQUEsRUFDYjtBQUFBLEVBRVEsWUFBWSxTQUFpQztBQUNuRCxTQUFLLFlBQVk7QUFDakIsWUFBUSxZQUFZLFNBQVMsU0FBUztBQUFBLEVBQ3hDO0FBQ0Y7QUFRQSxlQUFzQixPQUFPLFFBQThDO0FBQ3pFLFNBQU8sTUFBTTtBQUFBLElBQXlCLENBQUMsbUJBQ3JDLElBQUksWUFBWTtBQUFBLE1BQ2QsR0FBRztBQUFBLE1BQ0g7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvcHJvbXB0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBkaXNwbGF5aW5nIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBmdW5jdGlvbiB0byBkaXNwbGF5IGEgbW9kYWwgdGhhdCBwcm9tcHRzIHRoZSB1c2VyIGZvciBpbnB1dC4gVGhlIG1vZGFsIGluY2x1ZGVzIFwiT0tcIiBhbmQgXCJDYW5jZWxcIiBidXR0b25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZSc7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBjb252ZXJ0QXN5bmNUb1N5bmMsXG4gIGludm9rZUFzeW5jU2FmZWx5XG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHtcbiAgQnV0dG9uQ29tcG9uZW50LFxuICBUZXh0Q29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUge1xuICBNb2RhbENvbW1hbmRCdWlsZGVyLFxuICBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zLFxuICBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZVxufSBmcm9tICcuL21vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zLFxuICBNb2RhbFBhcmFtc0Jhc2Vcbn0gZnJvbSAnLi9tb2RhbC50cyc7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGFwcGx5U3BlbGxjaGVja01vZGUgfSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBTcGVsbGNoZWNrTW9kZSB9IGZyb20gJy4uL29ic2lkaWFuLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIE1vZGFsQmFzZSxcbiAgc2hvd01vZGFsXG59IGZyb20gJy4vbW9kYWwudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwcm9tcHR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdFBhcmFtcyBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBIHRleHQgZm9yIHRoZSBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dHJhIGNvbnRyb2xzIOKAlCBjaGVja2JveGVzLCBkcm9wZG93bnMgYW5kIGtleWJvYXJkIHNob3J0Y3V0cyDigJQgcmVuZGVyZWQgYXMgYSBzdHJpcCBhbG9uZyB0aGUgYm90dG9tXG4gICAqIG9mIHRoZSBtb2RhbCwgc28gYSBjYWxsZXIgZ2V0cyBhIHRleHQgaW5wdXQgcGx1cyBvcHRpb25zIHdpdGggbm8gYmVzcG9rZSBtb2RhbCBvZiBpdHMgb3duLlxuICAgKlxuICAgKiBIYW5kIGl0IGEgY29uZmlndXJlZCB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlcn07IHRoZSBtb2RhbCBidWlsZHMgaXQuIFRoZSBzdHJpcCBpcyByZW5kZXJlZCBhZnRlclxuICAgKiB0aGUgYnV0dG9ucywgc28gaXQgc2l0cyBhbG9uZyB0aGUgYm90dG9tIGVkZ2Ugd2hlcmUgYSBgU3VnZ2VzdE1vZGFsYCdzIGluc3RydWN0aW9uIGJhciBzaXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZEJ1aWxkZXI/OiBNb2RhbENvbW1hbmRCdWlsZGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgd2F5IHtAbGluayBQcm9tcHRQYXJhbXMuY29tbWFuZEJ1aWxkZXJ9J3MgY29udHJvbHMgYXJlIHJlbmRlcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zYFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZHNSZW5kZXJNb2RlPzogTW9kYWxDb21tYW5kc1JlbmRlck1vZGU7XG5cbiAgLyoqXG4gICAqIEEgZGVmYXVsdCB2YWx1ZSB0byBwcmUtZmlsbCB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSB0ZXh0IGZvciB0aGUgXCJPS1wiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9rQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZSBkZWNpZGluZyB3aGV0aGVyIHRoZSBpbnB1dCBpcyBzcGVsbC1jaGVja2VkLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB3aGF0IHRoaXMgbW9kYWwgaGFzIGFsd2F5cyBkb25lLCBzbyBwYXNzaW5nIG5vdGhpbmcgY2hhbmdlcyBub3RoaW5nOiB0aGUgaW5wdXQgZm9sbG93c1xuICAgKiBgRWRpdG9yID4gU3BlbGxjaGVja2AsIGxpa2UgT2JzaWRpYW4ncyBvd24gbmFtZS1lbnRyeSBzdXJmYWNlcy4gUGFzcyB7QGxpbmsgU3BlbGxjaGVja01vZGUuT2ZmfSBmb3IgYVxuICAgKiBib3ggdGhhdCBpcyByZWFsbHkgYSBzZWFyY2ggZmllbGQsIG9yIHtAbGluayBTcGVsbGNoZWNrTW9kZS5BbHdheXNPbn0gdG8gc3BlbGwtY2hlY2sgaXQgd2hhdGV2ZXIgdGhlXG4gICAqIHZhdWx0IHNldHRpbmcgc2F5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYFNwZWxsY2hlY2tNb2RlLkZvbGxvd09ic2lkaWFuU2V0dGluZ2BcbiAgICovXG4gIHJlYWRvbmx5IHNwZWxsY2hlY2tNb2RlPzogU3BlbGxjaGVja01vZGU7XG5cbiAgLyoqXG4gICAqIEEgdGl0bGUgb2YgdGhlIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGlucHV0IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5wdXQgdmFsdWUgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQsIG9yIGBudWxsYCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZVZhbGlkYXRvcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPG51bGwgfCBzdHJpbmc+Pjtcbn1cblxudHlwZSBQcm9tcHRNb2RhbENvbnN0cnVjdG9yUGFyYW1zID0gTW9kYWxCYXNlQ29uc3RydWN0b3JQYXJhbXM8bnVsbCB8IHN0cmluZz4gJiBQcm9tcHRQYXJhbXM7XG5cbmNsYXNzIFByb21wdE1vZGFsIGV4dGVuZHMgTW9kYWxCYXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZEJ1aWxkZXI6IE1vZGFsQ29tbWFuZEJ1aWxkZXIgfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbW1hbmRzUmVuZGVyTW9kZTogTW9kYWxDb21tYW5kc1JlbmRlck1vZGUgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNPa0NsaWNrZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1RvdWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBva0J1dHRvblRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNwZWxsY2hlY2tNb2RlOiBTcGVsbGNoZWNrTW9kZTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbiAgcHJpdmF0ZSB2YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlVmFsaWRhdG9yOiAodmFsdWU6IHN0cmluZykgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxudWxsIHwgc3RyaW5nPj47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUHJvbXB0TW9kYWxDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5hZGRDc3NDbGFzc2VzKENzc0NsYXNzLlByb21wdE1vZGFsKTtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvblRleHQgPSBwYXJhbXMuY2FuY2VsQnV0dG9uVGV4dCA/PyB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1dHRvbnMuY2FuY2VsKTtcbiAgICB0aGlzLmNvbW1hbmRCdWlsZGVyID0gcGFyYW1zLmNvbW1hbmRCdWlsZGVyID8/IG51bGw7XG4gICAgdGhpcy5jb21tYW5kc1JlbmRlck1vZGUgPSBwYXJhbXMuY29tbWFuZHNSZW5kZXJNb2RlO1xuICAgIHRoaXMub2tCdXR0b25UZXh0ID0gcGFyYW1zLm9rQnV0dG9uVGV4dCA/PyB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1dHRvbnMub2spO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwYXJhbXMucGxhY2Vob2xkZXIgPz8gJyc7XG4gICAgdGhpcy5zcGVsbGNoZWNrTW9kZSA9IHBhcmFtcy5zcGVsbGNoZWNrTW9kZSA/PyBTcGVsbGNoZWNrTW9kZS5Gb2xsb3dPYnNpZGlhblNldHRpbmc7XG4gICAgdGhpcy50aXRsZSA9IHBhcmFtcy50aXRsZSA/PyAnJztcbiAgICB0aGlzLnZhbHVlVmFsaWRhdG9yID0gcGFyYW1zLnZhbHVlVmFsaWRhdG9yID8/IG5vb3A7XG4gICAgdGhpcy52YWx1ZSA9IHBhcmFtcy5kZWZhdWx0VmFsdWUgPz8gJyc7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnByb21pc2VSZXNvbHZlKHRoaXMuaXNPa0NsaWNrZWQgPyB0aGlzLnZhbHVlIDogbnVsbCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMudGl0bGVFbC5zZXRUZXh0KHRoaXMudGl0bGUpO1xuICAgIGNvbnN0IHRleHRDb21wb25lbnQgPSBuZXcgVGV4dENvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgY29uc3QgaW5wdXRFbCA9IHRleHRDb21wb25lbnQuaW5wdXRFbDtcbiAgICAvLyBgQWJzdHJhY3RUZXh0Q29tcG9uZW50YCBmb3JjZXMgYHNwZWxsY2hlY2s9XCJmYWxzZVwiYCBvbiBldmVyeSB0ZXh0IGNvbXBvbmVudCwgc28gdGhlIG1vZGUgaGFzIHRvIGJlIGFwcGxpZWQgaGVyZS5cbiAgICAvLyBPYnNpZGlhbidzIG93biBmaWxlIGV4cGxvcmVyIHJlYWRzIHRoZSBzYW1lIGNvbmZpZyB3aGVuIGl0IHN0YXJ0cyBhbiBpbmxpbmUgcmVuYW1lLlxuICAgIGFwcGx5U3BlbGxjaGVja01vZGUoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIGVsZW1lbnQ6IGlucHV0RWwsXG4gICAgICBzcGVsbGNoZWNrTW9kZTogdGhpcy5zcGVsbGNoZWNrTW9kZVxuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGUgPSBhc3luYyAoc2hvdWxkUmVwb3J0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBhd2FpdCB0aGlzLnZhbHVlVmFsaWRhdG9yKGlucHV0RWwudmFsdWUpIGFzIG51bGwgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpbnB1dEVsLnNldEN1c3RvbVZhbGlkaXR5KGVycm9yTWVzc2FnZSA/PyAnJyk7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0KSB7XG4gICAgICAgIGlucHV0RWwucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlSW5wdXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKGlucHV0RWwpO1xuICAgICAgYXdhaXQgdmFsaWRhdGUodHJ1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgYXdhaXQgdmFsaWRhdGUodGhpcy5pc1RvdWNoZWQpO1xuICAgIH07XG5cbiAgICB0ZXh0Q29tcG9uZW50LnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHRleHRDb21wb25lbnQuaW5wdXRFbC5zZWxlY3QoKTtcbiAgICB0ZXh0Q29tcG9uZW50LnNldFBsYWNlaG9sZGVyKHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIGlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuVGV4dEJveCk7XG4gICAgLy8gVGhlIG1vZGFsIG9wZW5zIGludmFsaWQgYnkgZGVzaWduIChzZWUgYmVsb3cpLCBzbyB0aGUgaW52YWxpZCBzdHlsaW5nIGlzIGRlZmVycmVkIHVudGlsIHRvdWNoZWQuXG4gICAgaW5wdXRFbC5hZGRDbGFzcyhDc3NDbGFzcy5VbnRvdWNoZWQpO1xuICAgIHRleHRDb21wb25lbnQub25DaGFuZ2UoKG5ld1ZhbHVlKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKCRldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPaygkZXZlbnQsIHRleHRDb21wb25lbnQpO1xuICAgICAgfSBlbHNlIGlmICgkZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGNvbnZlcnRBc3luY1RvU3luYyhoYW5kbGVJbnB1dCkpO1xuICAgIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBjb252ZXJ0QXN5bmNUb1N5bmMoaGFuZGxlRm9jdXMpKTtcbiAgICAvLyBUaGUgbW9kYWwgbXVzdCBzdGFydCBvdXQgaW52YWxpZCBzbyBPSyByZWZ1c2VzLCBidXQgdGhlIHZhbGlkaXR5IGlzIG5vdCByZXBvcnRlZCB1bnRpbCB0aGUgdXNlciB0eXBlcyBvciBzdWJtaXRzLlxuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHZhbGlkYXRlKGZhbHNlKSk7XG4gICAgY29uc3Qgb2tCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRoaXMuY29udGVudEVsKTtcbiAgICBva0J1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMub2tCdXR0b25UZXh0KTtcbiAgICBva0J1dHRvbi5zZXRDdGEoKTtcbiAgICBva0J1dHRvbi5vbkNsaWNrKCgkZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlT2soJGV2ZW50LCB0ZXh0Q29tcG9uZW50KTtcbiAgICB9KTtcbiAgICBva0J1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5Pa0J1dHRvbik7XG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jYW5jZWxCdXR0b25UZXh0KTtcbiAgICBjYW5jZWxCdXR0b24ub25DbGljayh0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICAgIGNhbmNlbEJ1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5DYW5jZWxCdXR0b24pO1xuXG4gICAgLy8gQnVpbHQgbGFzdCBzbyB0aGUgc3RyaXAgbGFuZHMgYWxvbmcgdGhlIG1vZGFsJ3MgYm90dG9tIGVkZ2UsIHdoZXJlIGEgYFN1Z2dlc3RNb2RhbGAncyBpbnN0cnVjdGlvblxuICAgIC8vIGJhciBzaXRzLlxuICAgIHRoaXMuY29tbWFuZEJ1aWxkZXI/LmJ1aWxkKHRoaXMsIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zPih7IHJlbmRlck1vZGU6IHRoaXMuY29tbWFuZHNSZW5kZXJNb2RlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT2soJGV2ZW50OiBFdmVudCwgdGV4dENvbXBvbmVudDogVGV4dENvbXBvbmVudCk6IHZvaWQge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGV4dENvbXBvbmVudC5pbnB1dEVsLmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgdGhpcy5tYXJrVG91Y2hlZCh0ZXh0Q29tcG9uZW50LmlucHV0RWwpO1xuICAgICAgdGV4dENvbXBvbmVudC5pbnB1dEVsLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc09rQ2xpY2tlZCA9IHRydWU7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrVG91Y2hlZChpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlO1xuICAgIGlucHV0RWwucmVtb3ZlQ2xhc3MoQ3NzQ2xhc3MuVW50b3VjaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BsYXlzIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuIHRvIGdldCB1c2VyIGlucHV0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHByb21wdCBtb2RhbC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdXNlciBpbnB1dCBvciBgbnVsbGAgaWYgdGhlIHByb21wdCB3YXMgY2FuY2VsbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbXB0KHBhcmFtczogUHJvbXB0UGFyYW1zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBzaG93TW9kYWw8bnVsbCB8IHN0cmluZz4oKHByb21pc2VSZXNvbHZlKSA9PlxuICAgIG5ldyBQcm9tcHRNb2RhbCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBwcm9taXNlUmVzb2x2ZVxuICAgIH0pXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsU0FBUyxtQ0FBbUM7QUFDNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFZUCxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLFNBQVM7QUFDbEIsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUE0RVAsTUFBTSxvQkFBb0IsVUFBeUI7QUFBQSxFQUNoQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDVCxjQUFjO0FBQUEsRUFDZCxZQUFZO0FBQUEsRUFDSDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FB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
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* none of which apply to a file/folder command surface.
|
|
19
19
|
*/
|
|
20
20
|
import type { App, MenuItem, TFile, TFolder } from 'obsidian';
|
|
21
|
+
import type { ThirdPartyPluginAdapter } from './plugin/third-party-plugin.mjs';
|
|
21
22
|
/**
|
|
22
23
|
* `Notebook Navigator`'s public API object, narrowed to what this library uses.
|
|
23
24
|
*/
|
|
@@ -130,3 +131,8 @@ export declare const NOTEBOOK_NAVIGATOR_PLUGIN_ID = "notebook-navigator";
|
|
|
130
131
|
* @returns The API, or `null` when `Notebook Navigator` is not there to talk to.
|
|
131
132
|
*/
|
|
132
133
|
export declare function resolveNotebookNavigatorApi(app: App): NotebookNavigatorApi | null;
|
|
134
|
+
/**
|
|
135
|
+
* The {@link ThirdPartyPluginAdapter} of `Notebook Navigator`, for `watchThirdPartyPluginApi`, the waits and
|
|
136
|
+
* `createThirdPartyPluginDependency`. It reads `plugin.api` and verifies both menu registrars.
|
|
137
|
+
*/
|
|
138
|
+
export declare const NOTEBOOK_NAVIGATOR_PLUGIN_ADAPTER: ThirdPartyPluginAdapter<NotebookNavigatorApi>;
|