@mnaoumov/obsidian-lib 10.4.1 → 10.5.1

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.
Files changed (118) hide show
  1. package/README.md +6 -0
  2. package/codemirror/incremental-parse-state-field/package.json +6 -0
  3. package/codemirror/markdown-editor-views/package.json +6 -0
  4. package/codemirror/range-set/package.json +6 -0
  5. package/command-handlers/open-bug-report-command-handler/package.json +6 -0
  6. package/components/embeddable-markdown-editor-component/package.json +6 -0
  7. package/components/reconfigurable-editor-extension-component/package.json +6 -0
  8. package/dist/lib/cjs/__merged.cjs +54 -1
  9. package/dist/lib/cjs/__merged.d.cts +14 -3
  10. package/dist/lib/cjs/attachment-path.cjs +3 -2
  11. package/dist/lib/cjs/backlink-index.cjs +44 -8
  12. package/dist/lib/cjs/backlink-index.d.cts +23 -0
  13. package/dist/lib/cjs/bug-report.cjs +241 -0
  14. package/dist/lib/cjs/bug-report.d.cts +161 -0
  15. package/dist/lib/cjs/bulk-operation-progress.cjs +16 -1
  16. package/dist/lib/cjs/bulk-operation-progress.d.cts +22 -0
  17. package/dist/lib/cjs/case-insensitive-file-index.cjs +9 -1
  18. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +162 -0
  19. package/dist/lib/cjs/codemirror/incremental-parse-state-field.d.cts +37 -0
  20. package/dist/lib/cjs/codemirror/index.cjs +10 -1
  21. package/dist/lib/cjs/codemirror/index.d.cts +3 -0
  22. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +142 -0
  23. package/dist/lib/cjs/codemirror/markdown-editor-views.d.cts +34 -0
  24. package/dist/lib/cjs/codemirror/range-set.cjs +106 -0
  25. package/dist/lib/cjs/codemirror/range-set.d.cts +35 -0
  26. package/dist/lib/cjs/command-handlers/index.cjs +4 -1
  27. package/dist/lib/cjs/command-handlers/index.d.cts +1 -0
  28. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +139 -0
  29. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +53 -0
  30. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +6 -3
  31. package/dist/lib/cjs/community-plugins.cjs +19 -2
  32. package/dist/lib/cjs/community-plugins.d.cts +14 -0
  33. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +5 -2
  34. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +374 -0
  35. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +221 -0
  36. package/dist/lib/cjs/components/index.cjs +7 -1
  37. package/dist/lib/cjs/components/index.d.cts +2 -0
  38. package/dist/lib/cjs/components/plugin-gate-component.cjs +6 -3
  39. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +200 -0
  40. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.d.cts +96 -0
  41. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +105 -2
  42. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +38 -13
  43. package/dist/lib/cjs/desktop-bulk-operation-git.d.cts +21 -1
  44. package/dist/lib/cjs/desktop-operating-system.cjs +101 -0
  45. package/dist/lib/cjs/desktop-operating-system.d.cts +15 -0
  46. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  47. package/dist/lib/cjs/i18n/locales/en.cjs +2 -1
  48. package/dist/lib/cjs/i18n/locales/en.d.cts +1 -0
  49. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +1 -0
  50. package/dist/lib/cjs/index.cjs +16 -1
  51. package/dist/lib/cjs/index.d.cts +5 -0
  52. package/dist/lib/cjs/menu.cjs +118 -0
  53. package/dist/lib/cjs/menu.d.cts +65 -0
  54. package/dist/lib/cjs/mobile-app-info.cjs +167 -0
  55. package/dist/lib/cjs/mobile-app-info.d.cts +32 -0
  56. package/dist/lib/cjs/modals/modal.cjs +8 -5
  57. package/dist/lib/cjs/modals/modal.d.cts +4 -0
  58. package/dist/lib/cjs/obsidian-settings.cjs +2 -2
  59. package/dist/lib/cjs/plugin/plugin.cjs +5 -2
  60. package/dist/lib/cjs/plugin/plugin.d.cts +2 -0
  61. package/dist/lib/cjs/settings-modal.cjs +103 -0
  62. package/dist/lib/cjs/settings-modal.d.cts +33 -0
  63. package/dist/lib/esm/__merged.d.mts +14 -3
  64. package/dist/lib/esm/__merged.mjs +50 -2
  65. package/dist/lib/esm/attachment-path.mjs +3 -2
  66. package/dist/lib/esm/backlink-index.d.mts +23 -0
  67. package/dist/lib/esm/backlink-index.mjs +42 -7
  68. package/dist/lib/esm/bug-report.d.mts +161 -0
  69. package/dist/lib/esm/bug-report.mjs +141 -0
  70. package/dist/lib/esm/bulk-operation-progress.d.mts +22 -0
  71. package/dist/lib/esm/bulk-operation-progress.mjs +14 -1
  72. package/dist/lib/esm/case-insensitive-file-index.mjs +9 -1
  73. package/dist/lib/esm/codemirror/incremental-parse-state-field.d.mts +37 -0
  74. package/dist/lib/esm/codemirror/incremental-parse-state-field.mjs +74 -0
  75. package/dist/lib/esm/codemirror/index.d.mts +3 -0
  76. package/dist/lib/esm/codemirror/index.mjs +7 -1
  77. package/dist/lib/esm/codemirror/markdown-editor-views.d.mts +34 -0
  78. package/dist/lib/esm/codemirror/markdown-editor-views.mjs +53 -0
  79. package/dist/lib/esm/codemirror/range-set.d.mts +35 -0
  80. package/dist/lib/esm/codemirror/range-set.mjs +18 -0
  81. package/dist/lib/esm/command-handlers/index.d.mts +1 -0
  82. package/dist/lib/esm/command-handlers/index.mjs +3 -1
  83. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +53 -0
  84. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +51 -0
  85. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -3
  86. package/dist/lib/esm/community-plugins.d.mts +14 -0
  87. package/dist/lib/esm/community-plugins.mjs +18 -2
  88. package/dist/lib/esm/components/bulk-operation-commit-component.mjs +5 -2
  89. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +221 -0
  90. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +293 -0
  91. package/dist/lib/esm/components/index.d.mts +2 -0
  92. package/dist/lib/esm/components/index.mjs +5 -1
  93. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -3
  94. package/dist/lib/esm/components/reconfigurable-editor-extension-component.d.mts +96 -0
  95. package/dist/lib/esm/components/reconfigurable-editor-extension-component.mjs +112 -0
  96. package/dist/lib/esm/components/rename-delete-handler-component.mjs +105 -2
  97. package/dist/lib/esm/desktop-bulk-operation-git.d.mts +21 -1
  98. package/dist/lib/esm/desktop-bulk-operation-git.mjs +38 -13
  99. package/dist/lib/esm/desktop-operating-system.d.mts +15 -0
  100. package/dist/lib/esm/desktop-operating-system.mjs +16 -0
  101. package/dist/lib/esm/generated-during-build.mjs +1 -1
  102. package/dist/lib/esm/i18n/locales/en.d.mts +1 -0
  103. package/dist/lib/esm/i18n/locales/en.mjs +2 -1
  104. package/dist/lib/esm/i18n/locales/translations-map.d.mts +1 -0
  105. package/dist/lib/esm/index.d.mts +5 -0
  106. package/dist/lib/esm/index.mjs +11 -1
  107. package/dist/lib/esm/menu.d.mts +65 -0
  108. package/dist/lib/esm/menu.mjs +30 -0
  109. package/dist/lib/esm/mobile-app-info.d.mts +32 -0
  110. package/dist/lib/esm/mobile-app-info.mjs +84 -0
  111. package/dist/lib/esm/modals/modal.d.mts +4 -0
  112. package/dist/lib/esm/modals/modal.mjs +8 -5
  113. package/dist/lib/esm/obsidian-settings.mjs +6 -3
  114. package/dist/lib/esm/plugin/plugin.d.mts +2 -0
  115. package/dist/lib/esm/plugin/plugin.mjs +5 -2
  116. package/dist/lib/esm/settings-modal.d.mts +33 -0
  117. package/dist/lib/esm/settings-modal.mjs +15 -0
  118. package/package.json +9 -8
@@ -0,0 +1,141 @@
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
+ apiVersion,
35
+ Platform
36
+ } from "obsidian";
37
+ import { getMobileAppInfo } from "./mobile-app-info.mjs";
38
+ var BugReportIssueFormFieldId = /* @__PURE__ */ ((BugReportIssueFormFieldId2) => {
39
+ BugReportIssueFormFieldId2["Environment"] = "environment";
40
+ BugReportIssueFormFieldId2["ObsidianVersion"] = "obsidian-version";
41
+ BugReportIssueFormFieldId2["OperatingSystem"] = "operating-system";
42
+ BugReportIssueFormFieldId2["PluginVersion"] = "plugin-version";
43
+ return BugReportIssueFormFieldId2;
44
+ })(BugReportIssueFormFieldId || {});
45
+ const BUG_REPORT_ISSUE_FORM_TEMPLATE = "bug_report.yml";
46
+ const UNKNOWN = "unknown";
47
+ function formatBugReportEnvironment(environment) {
48
+ const enabledPlugins = environment.enabledPlugins.length === 0 ? "none" : environment.enabledPlugins.map((pluginInfo) => formatPluginInfo(pluginInfo)).join(", ");
49
+ return `- Plugin: ${formatPluginInfo(environment.plugin)}
50
+ - Obsidian: ${environment.obsidianVersion} (installer ${environment.installerVersion})
51
+ - Platform: ${environment.platform}
52
+ - Operating system: ${environment.operatingSystem}
53
+ - Other enabled plugins: ${enabledPlugins}`;
54
+ }
55
+ async function getBugReportEnvironment(params) {
56
+ const { app, pluginId } = params;
57
+ const { installerVersion, operatingSystem } = await getAppAndOperatingSystem();
58
+ return {
59
+ enabledPlugins: [...app.plugins.enabledPlugins].filter((id) => id !== pluginId).sort().map((id) => getPluginInfo(app, id)),
60
+ installerVersion,
61
+ obsidianVersion: apiVersion,
62
+ operatingSystem,
63
+ platform: getPlatformName(),
64
+ plugin: getPluginInfo(app, pluginId)
65
+ };
66
+ }
67
+ async function getBugReportIssueFormUrl(params) {
68
+ const environment = await getBugReportEnvironment(params);
69
+ return getGitHubIssueFormUrl({
70
+ fields: {
71
+ ["environment" /* Environment */]: formatBugReportEnvironment(environment),
72
+ ["obsidian-version" /* ObsidianVersion */]: environment.obsidianVersion,
73
+ ["operating-system" /* OperatingSystem */]: environment.operatingSystem,
74
+ ["plugin-version" /* PluginVersion */]: environment.plugin.version ?? UNKNOWN
75
+ },
76
+ gitHubRepo: params.gitHubRepo,
77
+ template: BUG_REPORT_ISSUE_FORM_TEMPLATE,
78
+ ...params.title !== void 0 && { title: params.title }
79
+ });
80
+ }
81
+ function getGitHubIssueFormUrl(params) {
82
+ const searchParams = new URLSearchParams({ template: params.template });
83
+ if (params.title !== void 0) {
84
+ searchParams.set("title", params.title);
85
+ }
86
+ for (const [fieldId, value] of Object.entries(params.fields ?? {})) {
87
+ searchParams.set(fieldId, value);
88
+ }
89
+ return `https://github.com/${params.gitHubRepo}/issues/new?${searchParams.toString()}`;
90
+ }
91
+ function formatPluginInfo(pluginInfo) {
92
+ return `\`${pluginInfo.id}\` ${pluginInfo.version ?? UNKNOWN}`;
93
+ }
94
+ async function getAppAndOperatingSystem() {
95
+ if (Platform.isMobileApp) {
96
+ const mobileAppInfo = await getMobileAppInfo();
97
+ return {
98
+ installerVersion: mobileAppInfo?.installerVersion ?? UNKNOWN,
99
+ operatingSystem: mobileAppInfo?.operatingSystem ?? UNKNOWN
100
+ };
101
+ }
102
+ if (!Platform.isDesktopApp) {
103
+ return { installerVersion: UNKNOWN, operatingSystem: UNKNOWN };
104
+ }
105
+ const { getDesktopOperatingSystem } = await import("./desktop-operating-system.mjs");
106
+ const build = Platform.build;
107
+ return {
108
+ installerVersion: typeof build === "string" ? build : UNKNOWN,
109
+ operatingSystem: getDesktopOperatingSystem()
110
+ };
111
+ }
112
+ function getPlatformName() {
113
+ if (Platform.isAndroidApp) {
114
+ return "Android";
115
+ }
116
+ if (Platform.isIosApp) {
117
+ return "iOS";
118
+ }
119
+ if (Platform.isMacOS) {
120
+ return "macOS";
121
+ }
122
+ if (Platform.isWin) {
123
+ return "Windows";
124
+ }
125
+ return Platform.isLinux ? "Linux" : UNKNOWN;
126
+ }
127
+ function getPluginInfo(app, pluginId) {
128
+ return {
129
+ id: pluginId,
130
+ version: app.plugins.manifests[pluginId]?.version ?? null
131
+ };
132
+ }
133
+ export {
134
+ BUG_REPORT_ISSUE_FORM_TEMPLATE,
135
+ BugReportIssueFormFieldId,
136
+ formatBugReportEnvironment,
137
+ getBugReportEnvironment,
138
+ getBugReportIssueFormUrl,
139
+ getGitHubIssueFormUrl
140
+ };
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciBhIHBsdWdpbidzIGJ1ZyByZXBvcnRzOiB0aGUgZW52aXJvbm1lbnQgYSByZXBvcnQgbmVlZHMsIGFuZCBhIGxpbmsgdG8gYSBHaXRIdWIgaXNzdWUgZm9ybVxuICogcHJlZmlsbGVkIHdpdGggaXQuXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm0tbG9hZGFibGU6IHRoZSBkZXNrdG9wIG9wZXJhdGluZy1zeXN0ZW0gbG9va3VwIHJlYWRzIGBub2RlOm9zYCwgc28gaXQgaXMgaW1wb3J0ZWRcbiAqIGR5bmFtaWNhbGx5LCBvbiBkZXNrdG9wIG9ubHkuXG4gKlxuICogVGhlIGRlc2t0b3AgaW5zdGFsbGVyIHZlcnNpb24gaXMgYFBsYXRmb3JtLmJ1aWxkYCwgd2hpY2ggbm8gcHVibGljIHR5cGluZyBkZWNsYXJlczogT2JzaWRpYW4ncyBkZXNrdG9wXG4gKiBzdGFydHVwIHNldHMgaXQgZnJvbSBFbGVjdHJvbidzIGBhcHAuZ2V0VmVyc2lvbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgKSwgc28gaXQgaXMgcmVhZFxuICogc3RydWN0dXJhbGx5IGhlcmUsIGFuZCByZWFkcyBhcyBgdW5rbm93bmAgaWYgYSBsYXRlciB2ZXJzaW9uIGRyb3BzIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBhcGlWZXJzaW9uLFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE1vYmlsZUFwcEluZm8gfSBmcm9tICcuL21vYmlsZS1hcHAtaW5mby50cyc7XG5cbi8qKlxuICogVGhlIGlkcyBvZiB0aGUgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtJ3MgZmllbGRzIHRoYXQge0BsaW5rIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybH0gcHJlZmlsbHMuIEdpdEh1YlxuICogcHJlZmlsbHMgYSBmaWVsZCBmcm9tIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGFmdGVyIHRoZSBmaWVsZCdzIGBpZGAsIHNvIGEgZm9ybSBtdXN0IGdpdmUgaXRzIGZpZWxkc1xuICogdGhlc2UgaWRzIGZvciB0aGVtIHRvIGJlIGZpbGxlZC5cbiAqL1xuZXhwb3J0IGVudW0gQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZCB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgZW52aXJvbm1lbnQsIGFzIHtAbGluayBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudH0gcmVuZGVycyBpdC5cbiAgICovXG4gIEVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyxcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICBPYnNpZGlhblZlcnNpb24gPSAnb2JzaWRpYW4tdmVyc2lvbicsXG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgT3BlcmF0aW5nU3lzdGVtID0gJ29wZXJhdGluZy1zeXN0ZW0nLFxuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIHZlcnNpb24uXG4gICAqL1xuICBQbHVnaW5WZXJzaW9uID0gJ3BsdWdpbi12ZXJzaW9uJ1xufVxuXG4vKipcbiAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICovXG5leHBvcnQgY29uc3QgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFID0gJ2J1Z19yZXBvcnQueW1sJztcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBvdGhlciBlbmFibGVkIHBsdWdpbnMsIHNvcnRlZCBieSBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWRQbHVnaW5zOiByZWFkb25seSBCdWdSZXBvcnRQbHVnaW5JbmZvW107XG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsZWQgYXBwJ3MgdmVyc2lvbiwgd2hpY2ggY2FuIGxhZyBiZWhpbmQge0BsaW5rIG9ic2lkaWFuVmVyc2lvbn0uXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsZXJWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmFtZSBhbmQgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGluZ1N5c3RlbTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm06IGBBbmRyb2lkYCwgYGlPU2AsIGBtYWNPU2AsIGBXaW5kb3dzYCwgYExpbnV4YCBvciBgdW5rbm93bmAuXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogQnVnUmVwb3J0UGx1Z2luSW5mbztcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiwgYXMgYSBidWcgcmVwb3J0IG5hbWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydFBsdWdpbkluZm8ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGluc3RhbGxlZCB2ZXJzaW9uLCBvciBgbnVsbGAgd2hlbiBpdHMgbWFuaWZlc3QgaXMgbm90IGtub3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogbnVsbCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Z1JlcG9ydEVudmlyb25tZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRCdWdSZXBvcnRJc3N1ZUZvcm1VcmxQYXJhbXMgZXh0ZW5kcyBHZXRCdWdSZXBvcnRFbnZpcm9ubWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgR2l0SHViIHJlcG9zaXRvcnksIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGdpdEh1YlJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlzc3VlJ3MgdGl0bGUuIExlYXZlIGl0IG91dCB0byBrZWVwIHRoZSBmb3JtJ3Mgb3duIGRlZmF1bHQgdGl0bGUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0R2l0SHViSXNzdWVGb3JtVXJsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRHaXRIdWJJc3N1ZUZvcm1VcmxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcyB0byBwcmVmaWxsLCBrZXllZCBieSBmaWVsZCBgaWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSdzIGZpbGUgbmFtZSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlzc3VlJ3MgdGl0bGUuIExlYXZlIGl0IG91dCB0byBrZWVwIHRoZSBmb3JtJ3Mgb3duIGRlZmF1bHQgdGl0bGUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwcEFuZE9wZXJhdGluZ1N5c3RlbSB7XG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgb3BlcmF0aW5nU3lzdGVtOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQbGF0Zm9ybVdpdGhCdWlsZCB7XG4gIHJlYWRvbmx5IGJ1aWxkPzogdW5rbm93bjtcbn1cblxuY29uc3QgVU5LTk9XTiA9ICd1bmtub3duJztcblxuLyoqXG4gKiBSZW5kZXJzIGEgYnVnIHJlcG9ydCdzIGVudmlyb25tZW50IGFzIGEgTWFya2Rvd24gbGlzdC5cbiAqXG4gKiBAcGFyYW0gZW52aXJvbm1lbnQgLSBUaGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyBUaGUgTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudChlbnZpcm9ubWVudDogQnVnUmVwb3J0RW52aXJvbm1lbnQpOiBzdHJpbmcge1xuICBjb25zdCBlbmFibGVkUGx1Z2lucyA9IGVudmlyb25tZW50LmVuYWJsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMFxuICAgID8gJ25vbmUnXG4gICAgOiBlbnZpcm9ubWVudC5lbmFibGVkUGx1Z2lucy5tYXAoKHBsdWdpbkluZm8pID0+IGZvcm1hdFBsdWdpbkluZm8ocGx1Z2luSW5mbykpLmpvaW4oJywgJyk7XG5cbiAgcmV0dXJuIGAtIFBsdWdpbjogJHtmb3JtYXRQbHVnaW5JbmZvKGVudmlyb25tZW50LnBsdWdpbil9XFxuYFxuICAgICsgYC0gT2JzaWRpYW46ICR7ZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9ufSAoaW5zdGFsbGVyICR7ZW52aXJvbm1lbnQuaW5zdGFsbGVyVmVyc2lvbn0pXFxuYFxuICAgICsgYC0gUGxhdGZvcm06ICR7ZW52aXJvbm1lbnQucGxhdGZvcm19XFxuYFxuICAgICsgYC0gT3BlcmF0aW5nIHN5c3RlbTogJHtlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW19XFxuYFxuICAgICsgYC0gT3RoZXIgZW5hYmxlZCBwbHVnaW5zOiAke2VuYWJsZWRQbHVnaW5zfWA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzOiB0aGUgcGx1Z2luJ3MgdmVyc2lvbiwgdGhlIG90aGVyIGVuYWJsZWQgcGx1Z2lucywgdGhlXG4gKiBPYnNpZGlhbiBhbmQgaW5zdGFsbGVyIHZlcnNpb25zLCB0aGUgcGxhdGZvcm0gYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ1Z1JlcG9ydEVudmlyb25tZW50KHBhcmFtczogR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMpOiBQcm9taXNlPEJ1Z1JlcG9ydEVudmlyb25tZW50PiB7XG4gIGNvbnN0IHsgYXBwLCBwbHVnaW5JZCB9ID0gcGFyYW1zO1xuICBjb25zdCB7IGluc3RhbGxlclZlcnNpb24sIG9wZXJhdGluZ1N5c3RlbSB9ID0gYXdhaXQgZ2V0QXBwQW5kT3BlcmF0aW5nU3lzdGVtKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkUGx1Z2luczogWy4uLmFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zXVxuICAgICAgLmZpbHRlcigoaWQpID0+IGlkICE9PSBwbHVnaW5JZClcbiAgICAgIC5zb3J0KClcbiAgICAgIC5tYXAoKGlkKSA9PiBnZXRQbHVnaW5JbmZvKGFwcCwgaWQpKSxcbiAgICBpbnN0YWxsZXJWZXJzaW9uLFxuICAgIG9ic2lkaWFuVmVyc2lvbjogYXBpVmVyc2lvbixcbiAgICBvcGVyYXRpbmdTeXN0ZW0sXG4gICAgcGxhdGZvcm06IGdldFBsYXRmb3JtTmFtZSgpLFxuICAgIHBsdWdpbjogZ2V0UGx1Z2luSW5mbyhhcHAsIHBsdWdpbklkKVxuICB9O1xufVxuXG4vKipcbiAqIEdldHMgYSBsaW5rIHRvIGEgcGx1Z2luJ3MgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtICh7QGxpbmsgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFfSksIHByZWZpbGxlZCB3aXRoXG4gKiB0aGUgZW52aXJvbm1lbnQsIGluIHRoZSBmaWVsZHMge0BsaW5rIEJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWR9IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsKHBhcmFtczogR2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudChwYXJhbXMpO1xuXG4gIHJldHVybiBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmwoe1xuICAgIGZpZWxkczoge1xuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuRW52aXJvbm1lbnRdOiBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudChlbnZpcm9ubWVudCksXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5PYnNpZGlhblZlcnNpb25dOiBlbnZpcm9ubWVudC5vYnNpZGlhblZlcnNpb24sXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5PcGVyYXRpbmdTeXN0ZW1dOiBlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW0sXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5QbHVnaW5WZXJzaW9uXTogZW52aXJvbm1lbnQucGx1Z2luLnZlcnNpb24gPz8gVU5LTk9XTlxuICAgIH0sXG4gICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgdGVtcGxhdGU6IEJVR19SRVBPUlRfSVNTVUVfRk9STV9URU1QTEFURSxcbiAgICAuLi5wYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCAmJiB7IHRpdGxlOiBwYXJhbXMudGl0bGUgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGluayB0aGF0IG9wZW5zIGEgR2l0SHViIGlzc3VlIGZvcm0gd2l0aCBmaWVsZHMgcHJlZmlsbGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2l0SHViSXNzdWVGb3JtVXJsKHBhcmFtczogR2V0R2l0SHViSXNzdWVGb3JtVXJsUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IHRlbXBsYXRlOiBwYXJhbXMudGVtcGxhdGUgfSk7XG4gIGlmIChwYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlYXJjaFBhcmFtcy5zZXQoJ3RpdGxlJywgcGFyYW1zLnRpdGxlKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2ZpZWxkSWQsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMuZmllbGRzID8/IHt9KSkge1xuICAgIHNlYXJjaFBhcmFtcy5zZXQoZmllbGRJZCwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGBodHRwczovL2dpdGh1Yi5jb20vJHtwYXJhbXMuZ2l0SHViUmVwb30vaXNzdWVzL25ldz8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBsdWdpbkluZm8ocGx1Z2luSW5mbzogQnVnUmVwb3J0UGx1Z2luSW5mbyk6IHN0cmluZyB7XG4gIHJldHVybiBgXFxgJHtwbHVnaW5JbmZvLmlkfVxcYCAke3BsdWdpbkluZm8udmVyc2lvbiA/PyBVTktOT1dOfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFwcEFuZE9wZXJhdGluZ1N5c3RlbSgpOiBQcm9taXNlPEFwcEFuZE9wZXJhdGluZ1N5c3RlbT4ge1xuICBpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHApIHtcbiAgICBjb25zdCBtb2JpbGVBcHBJbmZvID0gYXdhaXQgZ2V0TW9iaWxlQXBwSW5mbygpO1xuICAgIHJldHVybiB7XG4gICAgICBpbnN0YWxsZXJWZXJzaW9uOiBtb2JpbGVBcHBJbmZvPy5pbnN0YWxsZXJWZXJzaW9uID8/IFVOS05PV04sXG4gICAgICBvcGVyYXRpbmdTeXN0ZW06IG1vYmlsZUFwcEluZm8/Lm9wZXJhdGluZ1N5c3RlbSA/PyBVTktOT1dOXG4gICAgfTtcbiAgfVxuXG4gIGlmICghUGxhdGZvcm0uaXNEZXNrdG9wQXBwKSB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVyVmVyc2lvbjogVU5LTk9XTiwgb3BlcmF0aW5nU3lzdGVtOiBVTktOT1dOIH07XG4gIH1cblxuICAvLyBDb25kaXRpb25hbCBpbXBvcnQgb2YgdGhlIGRlc2t0b3Atb25seSBsb29rdXAsIHdoaWNoIHJlYWRzIGBub2RlOm9zYDsgdGhpcyBicmFuY2ggcnVucyBvbmx5IG9uIGRlc2t0b3AuXG4gIGNvbnN0IHsgZ2V0RGVza3RvcE9wZXJhdGluZ1N5c3RlbSB9ID0gYXdhaXQgaW1wb3J0KCcuL2Rlc2t0b3Atb3BlcmF0aW5nLXN5c3RlbS50cycpO1xuICBjb25zdCBidWlsZCA9IChQbGF0Zm9ybSBhcyBQbGF0Zm9ybVdpdGhCdWlsZCkuYnVpbGQ7XG4gIHJldHVybiB7XG4gICAgaW5zdGFsbGVyVmVyc2lvbjogdHlwZW9mIGJ1aWxkID09PSAnc3RyaW5nJyA/IGJ1aWxkIDogVU5LTk9XTixcbiAgICBvcGVyYXRpbmdTeXN0ZW06IGdldERlc2t0b3BPcGVyYXRpbmdTeXN0ZW0oKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRQbGF0Zm9ybU5hbWUoKTogc3RyaW5nIHtcbiAgaWYgKFBsYXRmb3JtLmlzQW5kcm9pZEFwcCkge1xuICAgIHJldHVybiAnQW5kcm9pZCc7XG4gIH1cbiAgaWYgKFBsYXRmb3JtLmlzSW9zQXBwKSB7XG4gICAgcmV0dXJuICdpT1MnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc01hY09TKSB7XG4gICAgcmV0dXJuICdtYWNPUyc7XG4gIH1cbiAgaWYgKFBsYXRmb3JtLmlzV2luKSB7XG4gICAgcmV0dXJuICdXaW5kb3dzJztcbiAgfVxuICByZXR1cm4gUGxhdGZvcm0uaXNMaW51eCA/ICdMaW51eCcgOiBVTktOT1dOO1xufVxuXG5mdW5jdGlvbiBnZXRQbHVnaW5JbmZvKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nKTogQnVnUmVwb3J0UGx1Z2luSW5mbyB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHBsdWdpbklkLFxuICAgIHZlcnNpb246IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0/LnZlcnNpb24gPz8gbnVsbFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsd0JBQXdCO0FBTzFCLElBQUssNEJBQUwsa0JBQUtBLCtCQUFMO0FBSUwsRUFBQUEsMkJBQUEsaUJBQWM7QUFLZCxFQUFBQSwyQkFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsMkJBQUEscUJBQWtCO0FBS2xCLEVBQUFBLDJCQUFBLG1CQUFnQjtBQW5CTixTQUFBQTtBQUFBLEdBQUE7QUF5QkwsTUFBTSxpQ0FBaUM7QUFvSDlDLE1BQU0sVUFBVTtBQVFULFNBQVMsMkJBQTJCLGFBQTJDO0FBQ3BGLFFBQU0saUJBQWlCLFlBQVksZUFBZSxXQUFXLElBQ3pELFNBQ0EsWUFBWSxlQUFlLElBQUksQ0FBQyxlQUFlLGlCQUFpQixVQUFVLENBQUMsRUFBRSxLQUFLLElBQUk7QUFFMUYsU0FBTyxhQUFhLGlCQUFpQixZQUFZLE1BQU0sQ0FBQztBQUFBLGNBQ3JDLFlBQVksZUFBZSxlQUFlLFlBQVksZ0JBQWdCO0FBQUEsY0FDdEUsWUFBWSxRQUFRO0FBQUEsc0JBQ1osWUFBWSxlQUFlO0FBQUEsMkJBQ3RCLGNBQWM7QUFDaEQ7QUFTQSxlQUFzQix3QkFBd0IsUUFBc0U7QUFDbEgsUUFBTSxFQUFFLEtBQUssU0FBUyxJQUFJO0FBQzFCLFFBQU0sRUFBRSxrQkFBa0IsZ0JBQWdCLElBQUksTUFBTSx5QkFBeUI7QUFFN0UsU0FBTztBQUFBLElBQ0wsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLFFBQVEsY0FBYyxFQUMzQyxPQUFPLENBQUMsT0FBTyxPQUFPLFFBQVEsRUFDOUIsS0FBSyxFQUNMLElBQUksQ0FBQyxPQUFPLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBQSxJQUNyQztBQUFBLElBQ0EsaUJBQWlCO0FBQUEsSUFDakI7QUFBQSxJQUNBLFVBQVUsZ0JBQWdCO0FBQUEsSUFDMUIsUUFBUSxjQUFjLEtBQUssUUFBUTtBQUFBLEVBQ3JDO0FBQ0Y7QUFTQSxlQUFzQix5QkFBeUIsUUFBeUQ7QUFDdEcsUUFBTSxjQUFjLE1BQU0sd0JBQXdCLE1BQU07QUFFeEQsU0FBTyxzQkFBc0I7QUFBQSxJQUMzQixRQUFRO0FBQUEsTUFDTixDQUFDLCtCQUFxQyxHQUFHLDJCQUEyQixXQUFXO0FBQUEsTUFDL0UsQ0FBQyx3Q0FBeUMsR0FBRyxZQUFZO0FBQUEsTUFDekQsQ0FBQyx3Q0FBeUMsR0FBRyxZQUFZO0FBQUEsTUFDekQsQ0FBQyxvQ0FBdUMsR0FBRyxZQUFZLE9BQU8sV0FBVztBQUFBLElBQzNFO0FBQUEsSUFDQSxZQUFZLE9BQU87QUFBQSxJQUNuQixVQUFVO0FBQUEsSUFDVixHQUFHLE9BQU8sVUFBVSxVQUFhLEVBQUUsT0FBTyxPQUFPLE1BQU07QUFBQSxFQUN6RCxDQUFDO0FBQ0g7QUFRTyxTQUFTLHNCQUFzQixRQUE2QztBQUNqRixRQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxVQUFVLE9BQU8sU0FBUyxDQUFDO0FBQ3RFLE1BQUksT0FBTyxVQUFVLFFBQVc7QUFDOUIsaUJBQWEsSUFBSSxTQUFTLE9BQU8sS0FBSztBQUFBLEVBQ3hDO0FBRUEsYUFBVyxDQUFDLFNBQVMsS0FBSyxLQUFLLE9BQU8sUUFBUSxPQUFPLFVBQVUsQ0FBQyxDQUFDLEdBQUc7QUFDbEUsaUJBQWEsSUFBSSxTQUFTLEtBQUs7QUFBQSxFQUNqQztBQUVBLFNBQU8sc0JBQXNCLE9BQU8sVUFBVSxlQUFlLGFBQWEsU0FBUyxDQUFDO0FBQ3RGO0FBRUEsU0FBUyxpQkFBaUIsWUFBeUM7QUFDakUsU0FBTyxLQUFLLFdBQVcsRUFBRSxNQUFNLFdBQVcsV0FBVyxPQUFPO0FBQzlEO0FBRUEsZUFBZSwyQkFBMkQ7QUFDeEUsTUFBSSxTQUFTLGFBQWE7QUFDeEIsVUFBTSxnQkFBZ0IsTUFBTSxpQkFBaUI7QUFDN0MsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLGVBQWUsb0JBQW9CO0FBQUEsTUFDckQsaUJBQWlCLGVBQWUsbUJBQW1CO0FBQUEsSUFDckQ7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLFNBQVMsY0FBYztBQUMxQixXQUFPLEVBQUUsa0JBQWtCLFNBQVMsaUJBQWlCLFFBQVE7QUFBQSxFQUMvRDtBQUdBLFFBQU0sRUFBRSwwQkFBMEIsSUFBSSxNQUFNLE9BQU8sK0JBQStCO0FBQ2xGLFFBQU0sUUFBUyxTQUErQjtBQUM5QyxTQUFPO0FBQUEsSUFDTCxrQkFBa0IsT0FBTyxVQUFVLFdBQVcsUUFBUTtBQUFBLElBQ3RELGlCQUFpQiwwQkFBMEI7QUFBQSxFQUM3QztBQUNGO0FBRUEsU0FBUyxrQkFBMEI7QUFDakMsTUFBSSxTQUFTLGNBQWM7QUFDekIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFNBQVMsVUFBVTtBQUNyQixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksU0FBUyxTQUFTO0FBQ3BCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxTQUFTLE9BQU87QUFDbEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLFNBQVMsVUFBVSxVQUFVO0FBQ3RDO0FBRUEsU0FBUyxjQUFjLEtBQVUsVUFBdUM7QUFDdEUsU0FBTztBQUFBLElBQ0wsSUFBSTtBQUFBLElBQ0osU0FBUyxJQUFJLFFBQVEsVUFBVSxRQUFRLEdBQUcsV0FBVztBQUFBLEVBQ3ZEO0FBQ0Y7IiwibmFtZXMiOlsiQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZCJdfQ==
@@ -10,6 +10,11 @@
10
10
  * {@link loop} reports after every item it processes. Code that drives a bulk operation without `loop()` calls
11
11
  * {@link reportBulkOperationProgress} itself.
12
12
  *
13
+ * An operation waiting on the user (a confirmation, a picker) makes no progress, yet it is not hung. While such a
14
+ * dialog is open, {@link holdBulkOperationWhile} reports on an interval, scoped to that one promise: the timer
15
+ * stops the moment the dialog settles, so a hung operation outside a dialog still goes stale. Every modal helper of
16
+ * this library already holds through `showModal`.
17
+ *
13
18
  * The listener set lives in the shared-state bag under a versioned key, so a `loop()` bundled by one plugin's copy
14
19
  * of this library reaches a listener registered by another's. Its shape is a cross-copy wire format: a `Set` of
15
20
  * plain functions, read structurally.
@@ -18,6 +23,23 @@
18
23
  * A listener notified whenever a bulk operation makes progress.
19
24
  */
20
25
  export type BulkOperationProgressListener = () => void;
26
+ /**
27
+ * How often {@link holdBulkOperationWhile} reports progress while its promise is pending, well inside the lock's
28
+ * staleness window.
29
+ */
30
+ export declare const BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS = 10000;
31
+ /**
32
+ * Keeps a bulk operation's lease lock fresh while it waits on something that is not progress but not a hang either,
33
+ * such as a dialog waiting for the user.
34
+ *
35
+ * Reports progress at once, then every {@link BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS} while the promise is
36
+ * pending, and once more when it settles. Outside a bulk operation it costs one interval and nothing else.
37
+ *
38
+ * @typeParam T - The type of the promise's value.
39
+ * @param promise - The promise to wait for.
40
+ * @returns The promise's value.
41
+ */
42
+ export declare function holdBulkOperationWhile<T>(promise: Promise<T>): Promise<T>;
21
43
  /**
22
44
  * Subscribes to bulk-operation progress.
23
45
  *
@@ -5,6 +5,17 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  import { getObsidianLibState } from "./obsidian-lib-state.mjs";
7
7
  const BULK_OPERATION_PROGRESS_STATE_KEY = "bulkOperationProgressV1";
8
+ const BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS = 1e4;
9
+ async function holdBulkOperationWhile(promise) {
10
+ reportBulkOperationProgress();
11
+ const intervalId = window.setInterval(reportBulkOperationProgress, BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS);
12
+ try {
13
+ return await promise;
14
+ } finally {
15
+ window.clearInterval(intervalId);
16
+ reportBulkOperationProgress();
17
+ }
18
+ }
8
19
  function registerBulkOperationProgressListener(listener) {
9
20
  const listeners = getListeners();
10
21
  listeners.add(listener);
@@ -25,7 +36,9 @@ function getListeners() {
25
36
  return getObsidianLibState(BULK_OPERATION_PROGRESS_STATE_KEY, /* @__PURE__ */ new Set()).value;
26
37
  }
27
38
  export {
39
+ BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS,
40
+ holdBulkOperationWhile,
28
41
  registerBulkOperationProgressListener,
29
42
  reportBulkOperationProgress
30
43
  };
31
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1bGstb3BlcmF0aW9uLXByb2dyZXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZWFsbS13aWRlIHByb2dyZXNzIHNpZ25hbCBmb3IgYnVsayBvcGVyYXRpb25zLlxuICpcbiAqIEEgYnVsayBvcGVyYXRpb24gd3JhcHBlZCBpbiBnaXQgY29tbWl0cyBob2xkcyBhIGxlYXNlIGxvY2sgd2hvc2UgaGVhcnRiZWF0IG11c3QgYmUgcmVmcmVzaGVkIGJ5IHRoZSBvcGVyYXRpb24nc1xuICogb3duIHByb2dyZXNzLCBuZXZlciBieSBhIGZyZWUtcnVubmluZyB0aW1lciwgc28gYSBodW5nIG9wZXJhdGlvbiBnb2VzIHN0YWxlIGxpa2UgYSBjcmFzaGVkIG9uZS4gUmF0aGVyIHRoYW5cbiAqIHRocmVhZGluZyBhIGNhbGxiYWNrIHRocm91Z2ggZXZlcnkgcGx1Z2luJ3MgY2FsbCBjaGFpbiwgdGhlIHdyYXBwZXIgc3Vic2NyaWJlcyBoZXJlIHdoaWxlIGl0IHJ1bnMsIGFuZFxuICoge0BsaW5rIGxvb3B9IHJlcG9ydHMgYWZ0ZXIgZXZlcnkgaXRlbSBpdCBwcm9jZXNzZXMuIENvZGUgdGhhdCBkcml2ZXMgYSBidWxrIG9wZXJhdGlvbiB3aXRob3V0IGBsb29wKClgIGNhbGxzXG4gKiB7QGxpbmsgcmVwb3J0QnVsa09wZXJhdGlvblByb2dyZXNzfSBpdHNlbGYuXG4gKlxuICogVGhlIGxpc3RlbmVyIHNldCBsaXZlcyBpbiB0aGUgc2hhcmVkLXN0YXRlIGJhZyB1bmRlciBhIHZlcnNpb25lZCBrZXksIHNvIGEgYGxvb3AoKWAgYnVuZGxlZCBieSBvbmUgcGx1Z2luJ3MgY29weVxuICogb2YgdGhpcyBsaWJyYXJ5IHJlYWNoZXMgYSBsaXN0ZW5lciByZWdpc3RlcmVkIGJ5IGFub3RoZXIncy4gSXRzIHNoYXBlIGlzIGEgY3Jvc3MtY29weSB3aXJlIGZvcm1hdDogYSBgU2V0YCBvZlxuICogcGxhaW4gZnVuY3Rpb25zLCByZWFkIHN0cnVjdHVyYWxseS5cbiAqL1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkxpYlN0YXRlIH0gZnJvbSAnLi9vYnNpZGlhbi1saWItc3RhdGUudHMnO1xuXG4vKipcbiAqIEEgbGlzdGVuZXIgbm90aWZpZWQgd2hlbmV2ZXIgYSBidWxrIG9wZXJhdGlvbiBtYWtlcyBwcm9ncmVzcy5cbiAqL1xuZXhwb3J0IHR5cGUgQnVsa09wZXJhdGlvblByb2dyZXNzTGlzdGVuZXIgPSAoKSA9PiB2b2lkO1xuXG5jb25zdCBCVUxLX09QRVJBVElPTl9QUk9HUkVTU19TVEFURV9LRVkgPSAnYnVsa09wZXJhdGlvblByb2dyZXNzVjEnO1xuXG4vKipcbiAqIFN1YnNjcmliZXMgdG8gYnVsay1vcGVyYXRpb24gcHJvZ3Jlc3MuXG4gKlxuICogQHBhcmFtIGxpc3RlbmVyIC0gVGhlIGxpc3RlbmVyIHRvIG5vdGlmeSBvbiBldmVyeSBwcm9ncmVzcyByZXBvcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgdW5zdWJzY3JpYmVzIHRoZSBsaXN0ZW5lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQnVsa09wZXJhdGlvblByb2dyZXNzTGlzdGVuZXIobGlzdGVuZXI6IEJ1bGtPcGVyYXRpb25Qcm9ncmVzc0xpc3RlbmVyKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycygpO1xuICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHRoYXQgYSBidWxrIG9wZXJhdGlvbiBoYXMgbWFkZSBwcm9ncmVzcywgc3VjaCBhcyBmaW5pc2hpbmcgb25lIGl0ZW0uXG4gKlxuICogQSBsaXN0ZW5lciB0aGF0IHRocm93cyBpcyBza2lwcGVkLCBzbyBhIHByb2dyZXNzIHJlcG9ydCBjYW4gbmV2ZXIgZmFpbCB0aGUgb3BlcmF0aW9uIHJlcG9ydGluZyBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydEJ1bGtPcGVyYXRpb25Qcm9ncmVzcygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBnZXRMaXN0ZW5lcnMoKSkge1xuICAgIHRyeSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdCdWxrIG9wZXJhdGlvbiBwcm9ncmVzcyBsaXN0ZW5lciBmYWlsZWQnLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldExpc3RlbmVycygpOiBTZXQ8QnVsa09wZXJhdGlvblByb2dyZXNzTGlzdGVuZXI+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuTGliU3RhdGUoQlVMS19PUEVSQVRJT05fUFJPR1JFU1NfU1RBVEVfS0VZLCBuZXcgU2V0PEJ1bGtPcGVyYXRpb25Qcm9ncmVzc0xpc3RlbmVyPigpKS52YWx1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBZ0JBLFNBQVMsMkJBQTJCO0FBT3BDLE1BQU0sb0NBQW9DO0FBUW5DLFNBQVMsc0NBQXNDLFVBQXFEO0FBQ3pHLFFBQU0sWUFBWSxhQUFhO0FBQy9CLFlBQVUsSUFBSSxRQUFRO0FBQ3RCLFNBQU8sTUFBTTtBQUNYLGNBQVUsT0FBTyxRQUFRO0FBQUEsRUFDM0I7QUFDRjtBQU9PLFNBQVMsOEJBQW9DO0FBQ2xELGFBQVcsWUFBWSxhQUFhLEdBQUc7QUFDckMsUUFBSTtBQUNGLGVBQVM7QUFBQSxJQUNYLFNBQVMsT0FBTztBQUNkLGNBQVEsTUFBTSwyQ0FBMkMsS0FBSztBQUFBLElBQ2hFO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUyxlQUFtRDtBQUMxRCxTQUFPLG9CQUFvQixtQ0FBbUMsb0JBQUksSUFBbUMsQ0FBQyxFQUFFO0FBQzFHOyIsCiAgIm5hbWVzIjogW10KfQo=
44
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1bGstb3BlcmF0aW9uLXByb2dyZXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZWFsbS13aWRlIHByb2dyZXNzIHNpZ25hbCBmb3IgYnVsayBvcGVyYXRpb25zLlxuICpcbiAqIEEgYnVsayBvcGVyYXRpb24gd3JhcHBlZCBpbiBnaXQgY29tbWl0cyBob2xkcyBhIGxlYXNlIGxvY2sgd2hvc2UgaGVhcnRiZWF0IG11c3QgYmUgcmVmcmVzaGVkIGJ5IHRoZSBvcGVyYXRpb24nc1xuICogb3duIHByb2dyZXNzLCBuZXZlciBieSBhIGZyZWUtcnVubmluZyB0aW1lciwgc28gYSBodW5nIG9wZXJhdGlvbiBnb2VzIHN0YWxlIGxpa2UgYSBjcmFzaGVkIG9uZS4gUmF0aGVyIHRoYW5cbiAqIHRocmVhZGluZyBhIGNhbGxiYWNrIHRocm91Z2ggZXZlcnkgcGx1Z2luJ3MgY2FsbCBjaGFpbiwgdGhlIHdyYXBwZXIgc3Vic2NyaWJlcyBoZXJlIHdoaWxlIGl0IHJ1bnMsIGFuZFxuICoge0BsaW5rIGxvb3B9IHJlcG9ydHMgYWZ0ZXIgZXZlcnkgaXRlbSBpdCBwcm9jZXNzZXMuIENvZGUgdGhhdCBkcml2ZXMgYSBidWxrIG9wZXJhdGlvbiB3aXRob3V0IGBsb29wKClgIGNhbGxzXG4gKiB7QGxpbmsgcmVwb3J0QnVsa09wZXJhdGlvblByb2dyZXNzfSBpdHNlbGYuXG4gKlxuICogQW4gb3BlcmF0aW9uIHdhaXRpbmcgb24gdGhlIHVzZXIgKGEgY29uZmlybWF0aW9uLCBhIHBpY2tlcikgbWFrZXMgbm8gcHJvZ3Jlc3MsIHlldCBpdCBpcyBub3QgaHVuZy4gV2hpbGUgc3VjaCBhXG4gKiBkaWFsb2cgaXMgb3Blbiwge0BsaW5rIGhvbGRCdWxrT3BlcmF0aW9uV2hpbGV9IHJlcG9ydHMgb24gYW4gaW50ZXJ2YWwsIHNjb3BlZCB0byB0aGF0IG9uZSBwcm9taXNlOiB0aGUgdGltZXJcbiAqIHN0b3BzIHRoZSBtb21lbnQgdGhlIGRpYWxvZyBzZXR0bGVzLCBzbyBhIGh1bmcgb3BlcmF0aW9uIG91dHNpZGUgYSBkaWFsb2cgc3RpbGwgZ29lcyBzdGFsZS4gRXZlcnkgbW9kYWwgaGVscGVyIG9mXG4gKiB0aGlzIGxpYnJhcnkgYWxyZWFkeSBob2xkcyB0aHJvdWdoIGBzaG93TW9kYWxgLlxuICpcbiAqIFRoZSBsaXN0ZW5lciBzZXQgbGl2ZXMgaW4gdGhlIHNoYXJlZC1zdGF0ZSBiYWcgdW5kZXIgYSB2ZXJzaW9uZWQga2V5LCBzbyBhIGBsb29wKClgIGJ1bmRsZWQgYnkgb25lIHBsdWdpbidzIGNvcHlcbiAqIG9mIHRoaXMgbGlicmFyeSByZWFjaGVzIGEgbGlzdGVuZXIgcmVnaXN0ZXJlZCBieSBhbm90aGVyJ3MuIEl0cyBzaGFwZSBpcyBhIGNyb3NzLWNvcHkgd2lyZSBmb3JtYXQ6IGEgYFNldGAgb2ZcbiAqIHBsYWluIGZ1bmN0aW9ucywgcmVhZCBzdHJ1Y3R1cmFsbHkuXG4gKi9cblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tbGliLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIGxpc3RlbmVyIG5vdGlmaWVkIHdoZW5ldmVyIGEgYnVsayBvcGVyYXRpb24gbWFrZXMgcHJvZ3Jlc3MuXG4gKi9cbmV4cG9ydCB0eXBlIEJ1bGtPcGVyYXRpb25Qcm9ncmVzc0xpc3RlbmVyID0gKCkgPT4gdm9pZDtcblxuY29uc3QgQlVMS19PUEVSQVRJT05fUFJPR1JFU1NfU1RBVEVfS0VZID0gJ2J1bGtPcGVyYXRpb25Qcm9ncmVzc1YxJztcblxuLyoqXG4gKiBIb3cgb2Z0ZW4ge0BsaW5rIGhvbGRCdWxrT3BlcmF0aW9uV2hpbGV9IHJlcG9ydHMgcHJvZ3Jlc3Mgd2hpbGUgaXRzIHByb21pc2UgaXMgcGVuZGluZywgd2VsbCBpbnNpZGUgdGhlIGxvY2snc1xuICogc3RhbGVuZXNzIHdpbmRvdy5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVTEtfT1BFUkFUSU9OX0hPTERfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMTBfMDAwO1xuXG4vKipcbiAqIEtlZXBzIGEgYnVsayBvcGVyYXRpb24ncyBsZWFzZSBsb2NrIGZyZXNoIHdoaWxlIGl0IHdhaXRzIG9uIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBwcm9ncmVzcyBidXQgbm90IGEgaGFuZyBlaXRoZXIsXG4gKiBzdWNoIGFzIGEgZGlhbG9nIHdhaXRpbmcgZm9yIHRoZSB1c2VyLlxuICpcbiAqIFJlcG9ydHMgcHJvZ3Jlc3MgYXQgb25jZSwgdGhlbiBldmVyeSB7QGxpbmsgQlVMS19PUEVSQVRJT05fSE9MRF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFN9IHdoaWxlIHRoZSBwcm9taXNlIGlzXG4gKiBwZW5kaW5nLCBhbmQgb25jZSBtb3JlIHdoZW4gaXQgc2V0dGxlcy4gT3V0c2lkZSBhIGJ1bGsgb3BlcmF0aW9uIGl0IGNvc3RzIG9uZSBpbnRlcnZhbCBhbmQgbm90aGluZyBlbHNlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBwcm9taXNlJ3MgdmFsdWUuXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIHdhaXQgZm9yLlxuICogQHJldHVybnMgVGhlIHByb21pc2UncyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhvbGRCdWxrT3BlcmF0aW9uV2hpbGU8VD4ocHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICByZXBvcnRCdWxrT3BlcmF0aW9uUHJvZ3Jlc3MoKTtcbiAgY29uc3QgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChyZXBvcnRCdWxrT3BlcmF0aW9uUHJvZ3Jlc3MsIEJVTEtfT1BFUkFUSU9OX0hPTERfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcHJvbWlzZTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICByZXBvcnRCdWxrT3BlcmF0aW9uUHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG4vKipcbiAqIFN1YnNjcmliZXMgdG8gYnVsay1vcGVyYXRpb24gcHJvZ3Jlc3MuXG4gKlxuICogQHBhcmFtIGxpc3RlbmVyIC0gVGhlIGxpc3RlbmVyIHRvIG5vdGlmeSBvbiBldmVyeSBwcm9ncmVzcyByZXBvcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgdW5zdWJzY3JpYmVzIHRoZSBsaXN0ZW5lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQnVsa09wZXJhdGlvblByb2dyZXNzTGlzdGVuZXIobGlzdGVuZXI6IEJ1bGtPcGVyYXRpb25Qcm9ncmVzc0xpc3RlbmVyKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycygpO1xuICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHRoYXQgYSBidWxrIG9wZXJhdGlvbiBoYXMgbWFkZSBwcm9ncmVzcywgc3VjaCBhcyBmaW5pc2hpbmcgb25lIGl0ZW0uXG4gKlxuICogQSBsaXN0ZW5lciB0aGF0IHRocm93cyBpcyBza2lwcGVkLCBzbyBhIHByb2dyZXNzIHJlcG9ydCBjYW4gbmV2ZXIgZmFpbCB0aGUgb3BlcmF0aW9uIHJlcG9ydGluZyBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydEJ1bGtPcGVyYXRpb25Qcm9ncmVzcygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBnZXRMaXN0ZW5lcnMoKSkge1xuICAgIHRyeSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdCdWxrIG9wZXJhdGlvbiBwcm9ncmVzcyBsaXN0ZW5lciBmYWlsZWQnLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldExpc3RlbmVycygpOiBTZXQ8QnVsa09wZXJhdGlvblByb2dyZXNzTGlzdGVuZXI+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuTGliU3RhdGUoQlVMS19PUEVSQVRJT05fUFJPR1JFU1NfU1RBVEVfS0VZLCBuZXcgU2V0PEJ1bGtPcGVyYXRpb25Qcm9ncmVzc0xpc3RlbmVyPigpKS52YWx1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBcUJBLFNBQVMsMkJBQTJCO0FBT3BDLE1BQU0sb0NBQW9DO0FBTW5DLE1BQU0sK0NBQStDO0FBYTVELGVBQXNCLHVCQUEwQixTQUFpQztBQUMvRSw4QkFBNEI7QUFDNUIsUUFBTSxhQUFhLE9BQU8sWUFBWSw2QkFBNkIsNENBQTRDO0FBQy9HLE1BQUk7QUFDRixXQUFPLE1BQU07QUFBQSxFQUNmLFVBQUU7QUFDQSxXQUFPLGNBQWMsVUFBVTtBQUMvQixnQ0FBNEI7QUFBQSxFQUM5QjtBQUNGO0FBUU8sU0FBUyxzQ0FBc0MsVUFBcUQ7QUFDekcsUUFBTSxZQUFZLGFBQWE7QUFDL0IsWUFBVSxJQUFJLFFBQVE7QUFDdEIsU0FBTyxNQUFNO0FBQ1gsY0FBVSxPQUFPLFFBQVE7QUFBQSxFQUMzQjtBQUNGO0FBT08sU0FBUyw4QkFBb0M7QUFDbEQsYUFBVyxZQUFZLGFBQWEsR0FBRztBQUNyQyxRQUFJO0FBQ0YsZUFBUztBQUFBLElBQ1gsU0FBUyxPQUFPO0FBQ2QsY0FBUSxNQUFNLDJDQUEyQyxLQUFLO0FBQUEsSUFDaEU7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGVBQW1EO0FBQzFELFNBQU8sb0JBQW9CLG1DQUFtQyxvQkFBSSxJQUFtQyxDQUFDLEVBQUU7QUFDMUc7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -31,6 +31,7 @@ ensureBrowserProcess();
31
31
  })();
32
32
 
33
33
  import { snapshot } from "@mnaoumov/typescript-lib/array";
34
+ import { TFolder } from "obsidian";
34
35
  import { getObsidianLibState } from "./obsidian-lib-state.mjs";
35
36
  const STATE_KEY = "caseInsensitiveFileIndex";
36
37
  class CaseInsensitiveFileIndex {
@@ -60,7 +61,11 @@ class CaseInsensitiveFileIndex {
60
61
  */
61
62
  delete(path) {
62
63
  const key = path.toLowerCase();
64
+ const abstractFile = this.map.get(key);
63
65
  this.map.delete(key);
66
+ if (abstractFile && !(abstractFile instanceof TFolder)) {
67
+ return;
68
+ }
64
69
  const descendantPrefix = `${key}/`;
65
70
  for (const existingKey of snapshot(this.map.keys())) {
66
71
  if (existingKey.startsWith(descendantPrefix)) {
@@ -102,6 +107,9 @@ class CaseInsensitiveFileIndex {
102
107
  const newKey = newAbstractFile.path.toLowerCase();
103
108
  this.map.delete(oldKey);
104
109
  this.map.set(newKey, newAbstractFile);
110
+ if (!(newAbstractFile instanceof TFolder)) {
111
+ return;
112
+ }
105
113
  const oldDescendantPrefix = `${oldKey}/`;
106
114
  const newDescendantPrefix = `${newKey}/`;
107
115
  for (const [existingKey, existingValue] of snapshot(this.map)) {
@@ -132,4 +140,4 @@ export {
132
140
  setCaseInsensitiveFileIndex,
133
141
  unsetCaseInsensitiveFileIndex
134
142
  };
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIGFuIG9wdC1pbiBPKDEpIGNhc2UtaW5zZW5zaXRpdmUgcmVzb2x2ZXIgZm9yIE9ic2lkaWFuIHZhdWx0cy5cbiAqXG4gKiBPYnNpZGlhbidzIG5hdGl2ZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9ic2lkaWFuLm1kL1JlZmVyZW5jZS9UeXBlU2NyaXB0K0FQSS9WYXVsdCB8IFZhdWx0fSByZXNvbHZlc1xuICogYSBzdHJpbmcgcGF0aCBjYXNlLWluc2Vuc2l0aXZlbHkgKHRoZSBXaW5kb3dzL21hY09TIGRlZmF1bHQpIGluIE8oMSkgb24gYSBoaXQgYnV0IHdpdGggYW5cbiAqIE8odmF1bHQpIHNjYW4gb24gYSBtaXNzLiBUaGUgbWlzcyBjYXNlIGlzIHRoZSBob3Qgb25lIGR1cmluZyBkZWxldGlvbiBjYXNjYWRlcywgd2hlcmUgZXh0ZW5zaW9uXG4gKiBjaGVja3MgYW5kIGNhY2hlIGxvb2t1cHMgYXJlIHBlcmZvcm1lZCBvbiBhbHJlYWR5LXJlbW92ZWQgcGF0aHMuIFRoaXMgbW9kdWxlIGJhY2tzIHRoZVxuICogY2FzZS1pbnNlbnNpdGl2ZSBsb29rdXAgd2l0aCBhIGBsb3dlcmNhc2UtcGF0aCDihpIgVEFic3RyYWN0RmlsZWAgaW5kZXggc28gbWlzc2VzIGFyZSBPKDEpIHRvby5cbiAqXG4gKiBUaGUgaW5kZXggaXMgZXhwbGljaXRseSBvcHQtaW46IGEgY29uc3VtZXIgaW5zdGFsbHMgaXQgYnkgbG9hZGluZyBhXG4gKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9ic2lkaWFuLm1kL1JlZmVyZW5jZS9UeXBlU2NyaXB0K0FQSS9Db21wb25lbnQgfCBDb21wb25lbnR9IHRoYXQga2VlcHMgaXQgaW5cbiAqIHN5bmMgd2l0aCBgY3JlYXRlYC9gZGVsZXRlYC9gcmVuYW1lYCBldmVudHMgKHNlZSBgQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4Q29tcG9uZW50YCkuIFVudGlsIHRoZW4sXG4gKiB0aGUgcmVzb2x1dGlvbiBsYXllciBmYWxscyBiYWNrIHRvIHRoZSBuYXRpdmUgKE8odmF1bHQpLW9uLW1pc3MpIGxvb2t1cCwgc28gYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgc25hcHNob3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXJyYXknO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkxpYlN0YXRlIH0gZnJvbSAnLi9vYnNpZGlhbi1saWItc3RhdGUudHMnO1xuXG5jb25zdCBTVEFURV9LRVkgPSAnY2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4JztcblxuLyoqXG4gKiBBbiBPKDEpIGNhc2UtaW5zZW5zaXRpdmUgaW5kZXggb2YgdGhlIGxvYWRlZCBmaWxlcyBhbmQgZm9sZGVycyBvZiBhIHNpbmdsZSB2YXVsdC5cbiAqXG4gKiBUaGUgaW5kZXggbWFwcyB0aGUgbG93ZXJjYXNlZCBwYXRoIG9mIGVhY2ggYWJzdHJhY3QgZmlsZSB0byB0aGUgYWJzdHJhY3QgZmlsZSBpdHNlbGYuIEl0IGlzIGtlcHRcbiAqIGluIHN5bmMgYnkgYW4gb3duaW5nIGNvbXBvbmVudCB0aGF0IGZvcndhcmRzIGBjcmVhdGVgL2BkZWxldGVgL2ByZW5hbWVgIHZhdWx0IGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFRBYnN0cmFjdEZpbGU+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdob3NlIHZhdWx0IHRoaXMgaW5kZXggbWlycm9ycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHApIHt9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gYWJzdHJhY3QgZmlsZSB0byB0aGUgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IHZvaWQge1xuICAgIHRoaXMubWFwLnNldChhYnN0cmFjdEZpbGUucGF0aC50b0xvd2VyQ2FzZSgpLCBhYnN0cmFjdEZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGFic3RyYWN0IGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggZnJvbSB0aGUgaW5kZXgsIGFsb25nIHdpdGggYWxsIG9mIGl0cyBkZXNjZW5kYW50c1xuICAgKiAoZm9yIGZvbGRlciBkZWxldGlvbnMsIHdoZXJlIE9ic2lkaWFuIHJlbW92ZXMgdGhlIHdob2xlIHN1YnRyZWUpLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBhYnN0cmFjdCBmaWxlIHRvIHJlbW92ZS5cbiAgICovXG4gIHB1YmxpYyBkZWxldGUocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMubWFwLmRlbGV0ZShrZXkpO1xuICAgIGNvbnN0IGRlc2NlbmRhbnRQcmVmaXggPSBgJHtrZXl9L2A7XG4gICAgZm9yIChjb25zdCBleGlzdGluZ0tleSBvZiBzbmFwc2hvdCh0aGlzLm1hcC5rZXlzKCkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdLZXkuc3RhcnRzV2l0aChkZXNjZW5kYW50UHJlZml4KSkge1xuICAgICAgICB0aGlzLm1hcC5kZWxldGUoZXhpc3RpbmdLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBhYnN0cmFjdCBmaWxlIGJ5IGl0cyBwYXRoLCBjYXNlLWluc2Vuc2l0aXZlbHksIGluIE8oMSkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gcmVzb2x2ZS5cbiAgICogQHJldHVybnMgVGhlIGFic3RyYWN0IGZpbGUgaWYgZm91bmQsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAqL1xuICBwdWJsaWMgZ2V0KHBhdGg6IHN0cmluZyk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KHBhdGgudG9Mb3dlckNhc2UoKSkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGlzIGluZGV4IG1pcnJvcnMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uJ3MgdmF1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UgdG8gY2hlY2sgYWdhaW5zdC5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoaXMgaW5kZXggYmVsb25ncyB0byB0aGUgZ2l2ZW4gYXBwbGljYXRpb24sIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIG93bnNBcHAoYXBwOiBBcHApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hcHAgPT09IGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1rZXlzIGFuIGFic3RyYWN0IGZpbGUgKGFuZCwgZm9yIGZvbGRlcnMsIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMpIGFmdGVyIGEgcmVuYW1lLlxuICAgKlxuICAgKiBPYnNpZGlhbiBmaXJlcyBhIHNpbmdsZSBgcmVuYW1lYCBldmVudCBmb3IgdGhlIHJlbmFtZWQgYWJzdHJhY3QgZmlsZSBhbmQgdXBkYXRlcyBpdHNcbiAgICogZGVzY2VuZGFudHMnIHBhdGhzIGluIHBsYWNlIHdpdGhvdXQgZmlyaW5nIHBlci1kZXNjZW5kYW50IGV2ZW50cywgc28gZGVzY2VuZGFudCBrZXlzIGFyZVxuICAgKiByZWNvbXB1dGVkIGhlcmUgYnkgc3dhcHBpbmcgdGhlIG9sZCBwYXRoIHByZWZpeCBmb3IgdGhlIG5ldyBvbmUuIEhhbmRsZXMgY2FzZS1vbmx5IHJlbmFtZXMgKHRoZVxuICAgKiBvbGQgYW5kIG5ldyBrZXlzIGNvaW5jaWRlKS5cbiAgICpcbiAgICogQHBhcmFtIG9sZFBhdGggLSBUaGUgcGF0aCB0aGUgYWJzdHJhY3QgZmlsZSBoYWQgYmVmb3JlIHRoZSByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdBYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB3aXRoIGl0cyB1cGRhdGVkIChwb3N0LXJlbmFtZSkgcGF0aC5cbiAgICovXG4gIHB1YmxpYyByZW5hbWUob2xkUGF0aDogc3RyaW5nLCBuZXdBYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRLZXkgPSBvbGRQYXRoLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbmV3S2V5ID0gbmV3QWJzdHJhY3RGaWxlLnBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLm1hcC5kZWxldGUob2xkS2V5KTtcbiAgICB0aGlzLm1hcC5zZXQobmV3S2V5LCBuZXdBYnN0cmFjdEZpbGUpO1xuXG4gICAgY29uc3Qgb2xkRGVzY2VuZGFudFByZWZpeCA9IGAke29sZEtleX0vYDtcbiAgICBjb25zdCBuZXdEZXNjZW5kYW50UHJlZml4ID0gYCR7bmV3S2V5fS9gO1xuICAgIGZvciAoY29uc3QgW2V4aXN0aW5nS2V5LCBleGlzdGluZ1ZhbHVlXSBvZiBzbmFwc2hvdCh0aGlzLm1hcCkpIHtcbiAgICAgIGlmICghZXhpc3RpbmdLZXkuc3RhcnRzV2l0aChvbGREZXNjZW5kYW50UHJlZml4KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAuZGVsZXRlKGV4aXN0aW5nS2V5KTtcbiAgICAgIHRoaXMubWFwLnNldChuZXdEZXNjZW5kYW50UHJlZml4ICsgZXhpc3RpbmdLZXkuc2xpY2Uob2xkRGVzY2VuZGFudFByZWZpeC5sZW5ndGgpLCBleGlzdGluZ1ZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGluc3RhbGxlZCBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgaW5kZXggZm9yIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiwgaWYgYW55LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hvc2UgaW5kZXggdG8gcmV0cmlldmUuXG4gKiBAcmV0dXJucyBUaGUgaW5kZXggaWYgb25lIGlzIGluc3RhbGxlZCBmb3IgdGhpcyBhcHBsaWNhdGlvbiwgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleChhcHA6IEFwcCk6IENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCB8IG51bGwge1xuICBjb25zdCBpbmRleCA9IGdldE9ic2lkaWFuTGliU3RhdGU8Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4IHwgbnVsbD4oU1RBVEVfS0VZLCBudWxsKS52YWx1ZTtcbiAgcmV0dXJuIGluZGV4Py5vd25zQXBwKGFwcCkgPyBpbmRleCA6IG51bGw7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgaW5kZXggYXMgdGhlIGFjdGl2ZSByZXNvbHZlci5cbiAqXG4gKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5kZXggdG8gaW5zdGFsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleChpbmRleDogQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KTogdm9pZCB7XG4gIGdldE9ic2lkaWFuTGliU3RhdGU8Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4IHwgbnVsbD4oU1RBVEVfS0VZLCBudWxsKS52YWx1ZSA9IGluZGV4O1xufVxuXG4vKipcbiAqIFVuaW5zdGFsbHMgYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgaW5kZXgsIGJ1dCBvbmx5IGlmIGl0IGlzIHRoZSBjdXJyZW50bHktaW5zdGFsbGVkIG9uZS5cbiAqXG4gKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5kZXggdG8gdW5pbnN0YWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5zZXRDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgoaW5kZXg6IENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCk6IHZvaWQge1xuICBjb25zdCB3cmFwcGVyID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggfCBudWxsPihTVEFURV9LRVksIG51bGwpO1xuICBpZiAod3JhcHBlci52YWx1ZSA9PT0gaW5kZXgpIHtcbiAgICB3cmFwcGVyLnZhbHVlID0gbnVsbDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxTQUFTLGdCQUFnQjtBQUV6QixTQUFTLDJCQUEyQjtBQUVwQyxNQUFNLFlBQVk7QUFRWCxNQUFNLHlCQUF5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE3QixZQUErQixLQUFVO0FBQVY7QUFBQSxFQUFXO0FBQUEsRUFBWDtBQUFBLEVBUHJCLE1BQU0sb0JBQUksSUFBMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFjL0MsSUFBSSxjQUFtQztBQUM1QyxTQUFLLElBQUksSUFBSSxhQUFhLEtBQUssWUFBWSxHQUFHLFlBQVk7QUFBQSxFQUM1RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sT0FBTyxNQUFvQjtBQUNoQyxVQUFNLE1BQU0sS0FBSyxZQUFZO0FBQzdCLFNBQUssSUFBSSxPQUFPLEdBQUc7QUFDbkIsVUFBTSxtQkFBbUIsR0FBRyxHQUFHO0FBQy9CLGVBQVcsZUFBZSxTQUFTLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRztBQUNuRCxVQUFJLFlBQVksV0FBVyxnQkFBZ0IsR0FBRztBQUM1QyxhQUFLLElBQUksT0FBTyxXQUFXO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sSUFBSSxNQUFvQztBQUM3QyxXQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLEtBQUs7QUFBQSxFQUM3QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sUUFBUSxLQUFtQjtBQUNoQyxXQUFPLEtBQUssUUFBUTtBQUFBLEVBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYU8sT0FBTyxTQUFpQixpQkFBc0M7QUFDbkUsVUFBTSxTQUFTLFFBQVEsWUFBWTtBQUNuQyxVQUFNLFNBQVMsZ0JBQWdCLEtBQUssWUFBWTtBQUNoRCxTQUFLLElBQUksT0FBTyxNQUFNO0FBQ3RCLFNBQUssSUFBSSxJQUFJLFFBQVEsZUFBZTtBQUVwQyxVQUFNLHNCQUFzQixHQUFHLE1BQU07QUFDckMsVUFBTSxzQkFBc0IsR0FBRyxNQUFNO0FBQ3JDLGVBQVcsQ0FBQyxhQUFhLGFBQWEsS0FBSyxTQUFTLEtBQUssR0FBRyxHQUFHO0FBQzdELFVBQUksQ0FBQyxZQUFZLFdBQVcsbUJBQW1CLEdBQUc7QUFDaEQ7QUFBQSxNQUNGO0FBRUEsV0FBSyxJQUFJLE9BQU8sV0FBVztBQUMzQixXQUFLLElBQUksSUFBSSxzQkFBc0IsWUFBWSxNQUFNLG9CQUFvQixNQUFNLEdBQUcsYUFBYTtBQUFBLElBQ2pHO0FBQUEsRUFDRjtBQUNGO0FBUU8sU0FBUyw0QkFBNEIsS0FBMkM7QUFDckYsUUFBTSxRQUFRLG9CQUFxRCxXQUFXLElBQUksRUFBRTtBQUNwRixTQUFPLE9BQU8sUUFBUSxHQUFHLElBQUksUUFBUTtBQUN2QztBQU9PLFNBQVMsNEJBQTRCLE9BQXVDO0FBQ2pGLHNCQUFxRCxXQUFXLElBQUksRUFBRSxRQUFRO0FBQ2hGO0FBT08sU0FBUyw4QkFBOEIsT0FBdUM7QUFDbkYsUUFBTSxVQUFVLG9CQUFxRCxXQUFXLElBQUk7QUFDcEYsTUFBSSxRQUFRLFVBQVUsT0FBTztBQUMzQixZQUFRLFFBQVE7QUFBQSxFQUNsQjtBQUNGOyIsIm5hbWVzIjpbXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIGFuIG9wdC1pbiBPKDEpIGNhc2UtaW5zZW5zaXRpdmUgcmVzb2x2ZXIgZm9yIE9ic2lkaWFuIHZhdWx0cy5cbiAqXG4gKiBPYnNpZGlhbidzIG5hdGl2ZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9ic2lkaWFuLm1kL1JlZmVyZW5jZS9UeXBlU2NyaXB0K0FQSS9WYXVsdCB8IFZhdWx0fSByZXNvbHZlc1xuICogYSBzdHJpbmcgcGF0aCBjYXNlLWluc2Vuc2l0aXZlbHkgKHRoZSBXaW5kb3dzL21hY09TIGRlZmF1bHQpIGluIE8oMSkgb24gYSBoaXQgYnV0IHdpdGggYW5cbiAqIE8odmF1bHQpIHNjYW4gb24gYSBtaXNzLiBUaGUgbWlzcyBjYXNlIGlzIHRoZSBob3Qgb25lIGR1cmluZyBkZWxldGlvbiBjYXNjYWRlcywgd2hlcmUgZXh0ZW5zaW9uXG4gKiBjaGVja3MgYW5kIGNhY2hlIGxvb2t1cHMgYXJlIHBlcmZvcm1lZCBvbiBhbHJlYWR5LXJlbW92ZWQgcGF0aHMuIFRoaXMgbW9kdWxlIGJhY2tzIHRoZVxuICogY2FzZS1pbnNlbnNpdGl2ZSBsb29rdXAgd2l0aCBhIGBsb3dlcmNhc2UtcGF0aCDihpIgVEFic3RyYWN0RmlsZWAgaW5kZXggc28gbWlzc2VzIGFyZSBPKDEpIHRvby5cbiAqXG4gKiBUaGUgaW5kZXggaXMgZXhwbGljaXRseSBvcHQtaW46IGEgY29uc3VtZXIgaW5zdGFsbHMgaXQgYnkgbG9hZGluZyBhXG4gKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLm9ic2lkaWFuLm1kL1JlZmVyZW5jZS9UeXBlU2NyaXB0K0FQSS9Db21wb25lbnQgfCBDb21wb25lbnR9IHRoYXQga2VlcHMgaXQgaW5cbiAqIHN5bmMgd2l0aCBgY3JlYXRlYC9gZGVsZXRlYC9gcmVuYW1lYCBldmVudHMgKHNlZSBgQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4Q29tcG9uZW50YCkuIFVudGlsIHRoZW4sXG4gKiB0aGUgcmVzb2x1dGlvbiBsYXllciBmYWxscyBiYWNrIHRvIHRoZSBuYXRpdmUgKE8odmF1bHQpLW9uLW1pc3MpIGxvb2t1cCwgc28gYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgc25hcHNob3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXJyYXknO1xuaW1wb3J0IHsgVEZvbGRlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tbGliLXN0YXRlLnRzJztcblxuY29uc3QgU1RBVEVfS0VZID0gJ2Nhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCc7XG5cbi8qKlxuICogQW4gTygxKSBjYXNlLWluc2Vuc2l0aXZlIGluZGV4IG9mIHRoZSBsb2FkZWQgZmlsZXMgYW5kIGZvbGRlcnMgb2YgYSBzaW5nbGUgdmF1bHQuXG4gKlxuICogVGhlIGluZGV4IG1hcHMgdGhlIGxvd2VyY2FzZWQgcGF0aCBvZiBlYWNoIGFic3RyYWN0IGZpbGUgdG8gdGhlIGFic3RyYWN0IGZpbGUgaXRzZWxmLiBJdCBpcyBrZXB0XG4gKiBpbiBzeW5jIGJ5IGFuIG93bmluZyBjb21wb25lbnQgdGhhdCBmb3J3YXJkcyBgY3JlYXRlYC9gZGVsZXRlYC9gcmVuYW1lYCB2YXVsdCBldmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUQWJzdHJhY3RGaWxlPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aG9zZSB2YXVsdCB0aGlzIGluZGV4IG1pcnJvcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGFic3RyYWN0IGZpbGUgdG8gdGhlIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGFic3RyYWN0IGZpbGUgdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZChhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5zZXQoYWJzdHJhY3RGaWxlLnBhdGgudG9Mb3dlckNhc2UoKSwgYWJzdHJhY3RGaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBhYnN0cmFjdCBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoIGZyb20gdGhlIGluZGV4LCBhbG9uZyB3aXRoIGFsbCBvZiBpdHMgZGVzY2VuZGFudHNcbiAgICogKGZvciBmb2xkZXIgZGVsZXRpb25zLCB3aGVyZSBPYnNpZGlhbiByZW1vdmVzIHRoZSB3aG9sZSBzdWJ0cmVlKS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgYWJzdHJhY3QgZmlsZSB0byByZW1vdmUuXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBhYnN0cmFjdEZpbGUgPSB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICB0aGlzLm1hcC5kZWxldGUoa2V5KTtcbiAgICAvLyBPbmx5IGEgZm9sZGVyIGhhcyBkZXNjZW5kYW50czsgc2Nhbm5pbmcgdGhlIHdob2xlIGluZGV4IGZvciBhIGZpbGUncyBtYWRlIGV2ZXJ5IGRlbGV0ZSBPKHZhdWx0KS5cbiAgICBpZiAoYWJzdHJhY3RGaWxlICYmICEoYWJzdHJhY3RGaWxlIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVzY2VuZGFudFByZWZpeCA9IGAke2tleX0vYDtcbiAgICBmb3IgKGNvbnN0IGV4aXN0aW5nS2V5IG9mIHNuYXBzaG90KHRoaXMubWFwLmtleXMoKSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0tleS5zdGFydHNXaXRoKGRlc2NlbmRhbnRQcmVmaXgpKSB7XG4gICAgICAgIHRoaXMubWFwLmRlbGV0ZShleGlzdGluZ0tleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuIGFic3RyYWN0IGZpbGUgYnkgaXRzIHBhdGgsIGNhc2UtaW5zZW5zaXRpdmVseSwgaW4gTygxKS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byByZXNvbHZlLlxuICAgKiBAcmV0dXJucyBUaGUgYWJzdHJhY3QgZmlsZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICovXG4gIHB1YmxpYyBnZXQocGF0aDogc3RyaW5nKTogbnVsbCB8IFRBYnN0cmFjdEZpbGUge1xuICAgIHJldHVybiB0aGlzLm1hcC5nZXQocGF0aC50b0xvd2VyQ2FzZSgpKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgaW5kZXggbWlycm9ycyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24ncyB2YXVsdC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBpbmRleCBiZWxvbmdzIHRvIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgb3duc0FwcChhcHA6IEFwcCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwcCA9PT0gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLWtleXMgYW4gYWJzdHJhY3QgZmlsZSAoYW5kLCBmb3IgZm9sZGVycywgYWxsIG9mIGl0cyBkZXNjZW5kYW50cykgYWZ0ZXIgYSByZW5hbWUuXG4gICAqXG4gICAqIE9ic2lkaWFuIGZpcmVzIGEgc2luZ2xlIGByZW5hbWVgIGV2ZW50IGZvciB0aGUgcmVuYW1lZCBhYnN0cmFjdCBmaWxlIGFuZCB1cGRhdGVzIGl0c1xuICAgKiBkZXNjZW5kYW50cycgcGF0aHMgaW4gcGxhY2Ugd2l0aG91dCBmaXJpbmcgcGVyLWRlc2NlbmRhbnQgZXZlbnRzLCBzbyBkZXNjZW5kYW50IGtleXMgYXJlXG4gICAqIHJlY29tcHV0ZWQgaGVyZSBieSBzd2FwcGluZyB0aGUgb2xkIHBhdGggcHJlZml4IGZvciB0aGUgbmV3IG9uZS4gSGFuZGxlcyBjYXNlLW9ubHkgcmVuYW1lcyAodGhlXG4gICAqIG9sZCBhbmQgbmV3IGtleXMgY29pbmNpZGUpLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aCAtIFRoZSBwYXRoIHRoZSBhYnN0cmFjdCBmaWxlIGhhZCBiZWZvcmUgdGhlIHJlbmFtZS5cbiAgICogQHBhcmFtIG5ld0Fic3RyYWN0RmlsZSAtIFRoZSBhYnN0cmFjdCBmaWxlIHdpdGggaXRzIHVwZGF0ZWQgKHBvc3QtcmVuYW1lKSBwYXRoLlxuICAgKi9cbiAgcHVibGljIHJlbmFtZShvbGRQYXRoOiBzdHJpbmcsIG5ld0Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IHZvaWQge1xuICAgIGNvbnN0IG9sZEtleSA9IG9sZFBhdGgudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBuZXdLZXkgPSBuZXdBYnN0cmFjdEZpbGUucGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMubWFwLmRlbGV0ZShvbGRLZXkpO1xuICAgIHRoaXMubWFwLnNldChuZXdLZXksIG5ld0Fic3RyYWN0RmlsZSk7XG4gICAgLy8gT25seSBhIGZvbGRlciBoYXMgZGVzY2VuZGFudHM7IHNjYW5uaW5nIHRoZSB3aG9sZSBpbmRleCBmb3IgYSBmaWxlJ3MgbWFkZSBldmVyeSByZW5hbWUgTyh2YXVsdCkuXG4gICAgaWYgKCEobmV3QWJzdHJhY3RGaWxlIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGREZXNjZW5kYW50UHJlZml4ID0gYCR7b2xkS2V5fS9gO1xuICAgIGNvbnN0IG5ld0Rlc2NlbmRhbnRQcmVmaXggPSBgJHtuZXdLZXl9L2A7XG4gICAgZm9yIChjb25zdCBbZXhpc3RpbmdLZXksIGV4aXN0aW5nVmFsdWVdIG9mIHNuYXBzaG90KHRoaXMubWFwKSkge1xuICAgICAgaWYgKCFleGlzdGluZ0tleS5zdGFydHNXaXRoKG9sZERlc2NlbmRhbnRQcmVmaXgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1hcC5kZWxldGUoZXhpc3RpbmdLZXkpO1xuICAgICAgdGhpcy5tYXAuc2V0KG5ld0Rlc2NlbmRhbnRQcmVmaXggKyBleGlzdGluZ0tleS5zbGljZShvbGREZXNjZW5kYW50UHJlZml4Lmxlbmd0aCksIGV4aXN0aW5nVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgaW5zdGFsbGVkIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBpbmRleCBmb3IgdGhlIGdpdmVuIGFwcGxpY2F0aW9uLCBpZiBhbnkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aG9zZSBpbmRleCB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIFRoZSBpbmRleCBpZiBvbmUgaXMgaW5zdGFsbGVkIGZvciB0aGlzIGFwcGxpY2F0aW9uLCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KGFwcDogQXBwKTogQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4IHwgbnVsbCB7XG4gIGNvbnN0IGluZGV4ID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggfCBudWxsPihTVEFURV9LRVksIG51bGwpLnZhbHVlO1xuICByZXR1cm4gaW5kZXg/Lm93bnNBcHAoYXBwKSA/IGluZGV4IDogbnVsbDtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBpbmRleCBhcyB0aGUgYWN0aXZlIHJlc29sdmVyLlxuICpcbiAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCB0byBpbnN0YWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KGluZGV4OiBDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgpOiB2b2lkIHtcbiAgZ2V0T2JzaWRpYW5MaWJTdGF0ZTxDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggfCBudWxsPihTVEFURV9LRVksIG51bGwpLnZhbHVlID0gaW5kZXg7XG59XG5cbi8qKlxuICogVW5pbnN0YWxscyBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBpbmRleCwgYnV0IG9ubHkgaWYgaXQgaXMgdGhlIGN1cnJlbnRseS1pbnN0YWxsZWQgb25lLlxuICpcbiAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCB0byB1bmluc3RhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnNldENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleChpbmRleDogQ2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4KTogdm9pZCB7XG4gIGNvbnN0IHdyYXBwZXIgPSBnZXRPYnNpZGlhbkxpYlN0YXRlPENhc2VJbnNlbnNpdGl2ZUZpbGVJbmRleCB8IG51bGw+KFNUQVRFX0tFWSwgbnVsbCk7XG4gIGlmICh3cmFwcGVyLnZhbHVlID09PSBpbmRleCkge1xuICAgIHdyYXBwZXIudmFsdWUgPSBudWxsO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsZUFBZTtBQUV4QixTQUFTLDJCQUEyQjtBQUVwQyxNQUFNLFlBQVk7QUFRWCxNQUFNLHlCQUF5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE3QixZQUErQixLQUFVO0FBQVY7QUFBQSxFQUFXO0FBQUEsRUFBWDtBQUFBLEVBUHJCLE1BQU0sb0JBQUksSUFBMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFjL0MsSUFBSSxjQUFtQztBQUM1QyxTQUFLLElBQUksSUFBSSxhQUFhLEtBQUssWUFBWSxHQUFHLFlBQVk7QUFBQSxFQUM1RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sT0FBTyxNQUFvQjtBQUNoQyxVQUFNLE1BQU0sS0FBSyxZQUFZO0FBQzdCLFVBQU0sZUFBZSxLQUFLLElBQUksSUFBSSxHQUFHO0FBQ3JDLFNBQUssSUFBSSxPQUFPLEdBQUc7QUFFbkIsUUFBSSxnQkFBZ0IsRUFBRSx3QkFBd0IsVUFBVTtBQUN0RDtBQUFBLElBQ0Y7QUFDQSxVQUFNLG1CQUFtQixHQUFHLEdBQUc7QUFDL0IsZUFBVyxlQUFlLFNBQVMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHO0FBQ25ELFVBQUksWUFBWSxXQUFXLGdCQUFnQixHQUFHO0FBQzVDLGFBQUssSUFBSSxPQUFPLFdBQVc7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxJQUFJLE1BQW9DO0FBQzdDLFdBQU8sS0FBSyxJQUFJLElBQUksS0FBSyxZQUFZLENBQUMsS0FBSztBQUFBLEVBQzdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxRQUFRLEtBQW1CO0FBQ2hDLFdBQU8sS0FBSyxRQUFRO0FBQUEsRUFDdEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFhTyxPQUFPLFNBQWlCLGlCQUFzQztBQUNuRSxVQUFNLFNBQVMsUUFBUSxZQUFZO0FBQ25DLFVBQU0sU0FBUyxnQkFBZ0IsS0FBSyxZQUFZO0FBQ2hELFNBQUssSUFBSSxPQUFPLE1BQU07QUFDdEIsU0FBSyxJQUFJLElBQUksUUFBUSxlQUFlO0FBRXBDLFFBQUksRUFBRSwyQkFBMkIsVUFBVTtBQUN6QztBQUFBLElBQ0Y7QUFFQSxVQUFNLHNCQUFzQixHQUFHLE1BQU07QUFDckMsVUFBTSxzQkFBc0IsR0FBRyxNQUFNO0FBQ3JDLGVBQVcsQ0FBQyxhQUFhLGFBQWEsS0FBSyxTQUFTLEtBQUssR0FBRyxHQUFHO0FBQzdELFVBQUksQ0FBQyxZQUFZLFdBQVcsbUJBQW1CLEdBQUc7QUFDaEQ7QUFBQSxNQUNGO0FBRUEsV0FBSyxJQUFJLE9BQU8sV0FBVztBQUMzQixXQUFLLElBQUksSUFBSSxzQkFBc0IsWUFBWSxNQUFNLG9CQUFvQixNQUFNLEdBQUcsYUFBYTtBQUFBLElBQ2pHO0FBQUEsRUFDRjtBQUNGO0FBUU8sU0FBUyw0QkFBNEIsS0FBMkM7QUFDckYsUUFBTSxRQUFRLG9CQUFxRCxXQUFXLElBQUksRUFBRTtBQUNwRixTQUFPLE9BQU8sUUFBUSxHQUFHLElBQUksUUFBUTtBQUN2QztBQU9PLFNBQVMsNEJBQTRCLE9BQXVDO0FBQ2pGLHNCQUFxRCxXQUFXLElBQUksRUFBRSxRQUFRO0FBQ2hGO0FBT08sU0FBUyw4QkFBOEIsT0FBdUM7QUFDbkYsUUFBTSxVQUFVLG9CQUFxRCxXQUFXLElBQUk7QUFDcEYsTUFBSSxRQUFRLFVBQVUsT0FBTztBQUMzQixZQUFRLFFBQVE7QUFBQSxFQUNsQjtBQUNGOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,37 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * A {@link StateField} holding a Lezer syntax tree of the whole document, parsed again incrementally on every change.
6
+ *
7
+ * Each change maps the previous parse's {@link TreeFragment}s through the changed ranges and hands them to the
8
+ * parser, which reuses every fragment the change did not touch. The parse is synchronous and runs to the end of
9
+ * the document, so it suits a grammar a plugin owns (a markup extension, a small DSL) rather than a full language
10
+ * on a large document, where `@codemirror/language`'s time-sliced parser is the better tool.
11
+ *
12
+ * `@lezer/common` is in the module map Obsidian hands to plugins, so this costs a consuming plugin no bundle.
13
+ */
14
+ import type { Parser, Tree } from '@lezer/common';
15
+ import { StateField } from '@codemirror/state';
16
+ import { TreeFragment } from '@lezer/common';
17
+ /**
18
+ * The value of an incremental parse state field.
19
+ */
20
+ export interface IncrementalParse {
21
+ /**
22
+ * The fragments of {@link IncrementalParse.tree} that the next parse may reuse.
23
+ */
24
+ readonly fragments: readonly TreeFragment[];
25
+ /**
26
+ * The syntax tree of the whole document.
27
+ */
28
+ readonly tree: Tree;
29
+ }
30
+ /**
31
+ * Creates a state field that parses the document with the given parser when the state is created, and parses it again
32
+ * incrementally on every document change, reusing the fragments the change left intact.
33
+ *
34
+ * @param parser - The Lezer parser to parse the document with.
35
+ * @returns The state field. Add it to the editor's extensions and read it with `state.field(field).tree`.
36
+ */
37
+ export declare function createIncrementalParseStateField(parser: Parser): StateField<IncrementalParse>;
@@ -0,0 +1,74 @@
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 { StateField } from "@codemirror/state";
34
+ import { TreeFragment } from "@lezer/common";
35
+ function createIncrementalParseStateField(parser) {
36
+ return StateField.define({
37
+ create(state) {
38
+ const tree = parser.parse(createTextInput(state.doc));
39
+ return { fragments: TreeFragment.addTree(tree), tree };
40
+ },
41
+ update(value, transaction) {
42
+ if (!transaction.docChanged) {
43
+ return value;
44
+ }
45
+ const changedRanges = [];
46
+ transaction.changes.iterChangedRanges((fromA, toA, fromB, toB) => {
47
+ changedRanges.push({ fromA, fromB, toA, toB });
48
+ });
49
+ const reusableFragments = TreeFragment.applyChanges(value.fragments, changedRanges);
50
+ const tree = parser.parse(createTextInput(transaction.newDoc), reusableFragments);
51
+ return { fragments: TreeFragment.addTree(tree, reusableFragments), tree };
52
+ }
53
+ });
54
+ }
55
+ function createTextInput(text) {
56
+ return {
57
+ chunk(from) {
58
+ const line = text.lineAt(from);
59
+ if (from < line.to) {
60
+ return text.sliceString(from, line.to);
61
+ }
62
+ return line.number < text.lines ? "\n" : "";
63
+ },
64
+ length: text.length,
65
+ lineChunks: true,
66
+ read(from, to) {
67
+ return text.sliceString(from, to);
68
+ }
69
+ };
70
+ }
71
+ export {
72
+ createIncrementalParseStateField
73
+ };
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2RlbWlycm9yL2luY3JlbWVudGFsLXBhcnNlLXN0YXRlLWZpZWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIHtAbGluayBTdGF0ZUZpZWxkfSBob2xkaW5nIGEgTGV6ZXIgc3ludGF4IHRyZWUgb2YgdGhlIHdob2xlIGRvY3VtZW50LCBwYXJzZWQgYWdhaW4gaW5jcmVtZW50YWxseSBvbiBldmVyeSBjaGFuZ2UuXG4gKlxuICogRWFjaCBjaGFuZ2UgbWFwcyB0aGUgcHJldmlvdXMgcGFyc2UncyB7QGxpbmsgVHJlZUZyYWdtZW50fXMgdGhyb3VnaCB0aGUgY2hhbmdlZCByYW5nZXMgYW5kIGhhbmRzIHRoZW0gdG8gdGhlXG4gKiBwYXJzZXIsIHdoaWNoIHJldXNlcyBldmVyeSBmcmFnbWVudCB0aGUgY2hhbmdlIGRpZCBub3QgdG91Y2guIFRoZSBwYXJzZSBpcyBzeW5jaHJvbm91cyBhbmQgcnVucyB0byB0aGUgZW5kIG9mXG4gKiB0aGUgZG9jdW1lbnQsIHNvIGl0IHN1aXRzIGEgZ3JhbW1hciBhIHBsdWdpbiBvd25zIChhIG1hcmt1cCBleHRlbnNpb24sIGEgc21hbGwgRFNMKSByYXRoZXIgdGhhbiBhIGZ1bGwgbGFuZ3VhZ2VcbiAqIG9uIGEgbGFyZ2UgZG9jdW1lbnQsIHdoZXJlIGBAY29kZW1pcnJvci9sYW5ndWFnZWAncyB0aW1lLXNsaWNlZCBwYXJzZXIgaXMgdGhlIGJldHRlciB0b29sLlxuICpcbiAqIGBAbGV6ZXIvY29tbW9uYCBpcyBpbiB0aGUgbW9kdWxlIG1hcCBPYnNpZGlhbiBoYW5kcyB0byBwbHVnaW5zLCBzbyB0aGlzIGNvc3RzIGEgY29uc3VtaW5nIHBsdWdpbiBubyBidW5kbGUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBUZXh0IH0gZnJvbSAnQGNvZGVtaXJyb3Ivc3RhdGUnO1xuaW1wb3J0IHR5cGUge1xuICBDaGFuZ2VkUmFuZ2UsXG4gIElucHV0LFxuICBQYXJzZXIsXG4gIFRyZWVcbn0gZnJvbSAnQGxlemVyL2NvbW1vbic7XG5cbmltcG9ydCB7IFN0YXRlRmllbGQgfSBmcm9tICdAY29kZW1pcnJvci9zdGF0ZSc7XG5pbXBvcnQgeyBUcmVlRnJhZ21lbnQgfSBmcm9tICdAbGV6ZXIvY29tbW9uJztcblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYW4gaW5jcmVtZW50YWwgcGFyc2Ugc3RhdGUgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxQYXJzZSB7XG4gIC8qKlxuICAgKiBUaGUgZnJhZ21lbnRzIG9mIHtAbGluayBJbmNyZW1lbnRhbFBhcnNlLnRyZWV9IHRoYXQgdGhlIG5leHQgcGFyc2UgbWF5IHJldXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJhZ21lbnRzOiByZWFkb25seSBUcmVlRnJhZ21lbnRbXTtcblxuICAvKipcbiAgICogVGhlIHN5bnRheCB0cmVlIG9mIHRoZSB3aG9sZSBkb2N1bWVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRyZWU6IFRyZWU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YXRlIGZpZWxkIHRoYXQgcGFyc2VzIHRoZSBkb2N1bWVudCB3aXRoIHRoZSBnaXZlbiBwYXJzZXIgd2hlbiB0aGUgc3RhdGUgaXMgY3JlYXRlZCwgYW5kIHBhcnNlcyBpdCBhZ2FpblxuICogaW5jcmVtZW50YWxseSBvbiBldmVyeSBkb2N1bWVudCBjaGFuZ2UsIHJldXNpbmcgdGhlIGZyYWdtZW50cyB0aGUgY2hhbmdlIGxlZnQgaW50YWN0LlxuICpcbiAqIEBwYXJhbSBwYXJzZXIgLSBUaGUgTGV6ZXIgcGFyc2VyIHRvIHBhcnNlIHRoZSBkb2N1bWVudCB3aXRoLlxuICogQHJldHVybnMgVGhlIHN0YXRlIGZpZWxkLiBBZGQgaXQgdG8gdGhlIGVkaXRvcidzIGV4dGVuc2lvbnMgYW5kIHJlYWQgaXQgd2l0aCBgc3RhdGUuZmllbGQoZmllbGQpLnRyZWVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5jcmVtZW50YWxQYXJzZVN0YXRlRmllbGQocGFyc2VyOiBQYXJzZXIpOiBTdGF0ZUZpZWxkPEluY3JlbWVudGFsUGFyc2U+IHtcbiAgcmV0dXJuIFN0YXRlRmllbGQuZGVmaW5lPEluY3JlbWVudGFsUGFyc2U+KHtcbiAgICBjcmVhdGUoc3RhdGUpIHtcbiAgICAgIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2UoY3JlYXRlVGV4dElucHV0KHN0YXRlLmRvYykpO1xuICAgICAgcmV0dXJuIHsgZnJhZ21lbnRzOiBUcmVlRnJhZ21lbnQuYWRkVHJlZSh0cmVlKSwgdHJlZSB9O1xuICAgIH0sXG4gICAgdXBkYXRlKHZhbHVlLCB0cmFuc2FjdGlvbikge1xuICAgICAgaWYgKCF0cmFuc2FjdGlvbi5kb2NDaGFuZ2VkKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hhbmdlZFJhbmdlczogQ2hhbmdlZFJhbmdlW10gPSBbXTtcbiAgICAgIHRyYW5zYWN0aW9uLmNoYW5nZXMuaXRlckNoYW5nZWRSYW5nZXMoKGZyb21BLCB0b0EsIGZyb21CLCB0b0IpID0+IHtcbiAgICAgICAgY2hhbmdlZFJhbmdlcy5wdXNoKHsgZnJvbUEsIGZyb21CLCB0b0EsIHRvQiB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmV1c2FibGVGcmFnbWVudHMgPSBUcmVlRnJhZ21lbnQuYXBwbHlDaGFuZ2VzKHZhbHVlLmZyYWdtZW50cywgY2hhbmdlZFJhbmdlcyk7XG4gICAgICBjb25zdCB0cmVlID0gcGFyc2VyLnBhcnNlKGNyZWF0ZVRleHRJbnB1dCh0cmFuc2FjdGlvbi5uZXdEb2MpLCByZXVzYWJsZUZyYWdtZW50cyk7XG4gICAgICByZXR1cm4geyBmcmFnbWVudHM6IFRyZWVGcmFnbWVudC5hZGRUcmVlKHRyZWUsIHJldXNhYmxlRnJhZ21lbnRzKSwgdHJlZSB9O1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZHMgYSBDb2RlTWlycm9yIGRvY3VtZW50IGFzIGEgTGV6ZXIge0BsaW5rIElucHV0fSBvbmUgbGluZSBhdCBhIHRpbWUsIHNvIGEgcGFyc2UgbmV2ZXIgY29waWVzIHRoZSB3aG9sZSBkb2N1bWVudFxuICogaW50byBvbmUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIGRvY3VtZW50IHRvIHJlYWQuXG4gKiBAcmV0dXJucyBUaGUgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnB1dCh0ZXh0OiBUZXh0KTogSW5wdXQge1xuICByZXR1cm4ge1xuICAgIGNodW5rKGZyb206IG51bWJlcik6IHN0cmluZyB7XG4gICAgICBjb25zdCBsaW5lID0gdGV4dC5saW5lQXQoZnJvbSk7XG4gICAgICBpZiAoZnJvbSA8IGxpbmUudG8pIHtcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2VTdHJpbmcoZnJvbSwgbGluZS50byk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGluZS5udW1iZXIgPCB0ZXh0LmxpbmVzID8gJ1xcbicgOiAnJztcbiAgICB9LFxuICAgIGxlbmd0aDogdGV4dC5sZW5ndGgsXG4gICAgbGluZUNodW5rczogdHJ1ZSxcbiAgICByZWFkKGZyb206IG51bWJlciwgdG86IG51bWJlcik6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGV4dC5zbGljZVN0cmluZyhmcm9tLCB0byk7XG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQSxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLG9CQUFvQjtBQXdCdEIsU0FBUyxpQ0FBaUMsUUFBOEM7QUFDN0YsU0FBTyxXQUFXLE9BQXlCO0FBQUEsSUFDekMsT0FBTyxPQUFPO0FBQ1osWUFBTSxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsTUFBTSxHQUFHLENBQUM7QUFDcEQsYUFBTyxFQUFFLFdBQVcsYUFBYSxRQUFRLElBQUksR0FBRyxLQUFLO0FBQUEsSUFDdkQ7QUFBQSxJQUNBLE9BQU8sT0FBTyxhQUFhO0FBQ3pCLFVBQUksQ0FBQyxZQUFZLFlBQVk7QUFDM0IsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLGdCQUFnQyxDQUFDO0FBQ3ZDLGtCQUFZLFFBQVEsa0JBQWtCLENBQUMsT0FBTyxLQUFLLE9BQU8sUUFBUTtBQUNoRSxzQkFBYyxLQUFLLEVBQUUsT0FBTyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDL0MsQ0FBQztBQUNELFlBQU0sb0JBQW9CLGFBQWEsYUFBYSxNQUFNLFdBQVcsYUFBYTtBQUNsRixZQUFNLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixZQUFZLE1BQU0sR0FBRyxpQkFBaUI7QUFDaEYsYUFBTyxFQUFFLFdBQVcsYUFBYSxRQUFRLE1BQU0saUJBQWlCLEdBQUcsS0FBSztBQUFBLElBQzFFO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFTQSxTQUFTLGdCQUFnQixNQUFtQjtBQUMxQyxTQUFPO0FBQUEsSUFDTCxNQUFNLE1BQXNCO0FBQzFCLFlBQU0sT0FBTyxLQUFLLE9BQU8sSUFBSTtBQUM3QixVQUFJLE9BQU8sS0FBSyxJQUFJO0FBQ2xCLGVBQU8sS0FBSyxZQUFZLE1BQU0sS0FBSyxFQUFFO0FBQUEsTUFDdkM7QUFDQSxhQUFPLEtBQUssU0FBUyxLQUFLLFFBQVEsT0FBTztBQUFBLElBQzNDO0FBQUEsSUFDQSxRQUFRLEtBQUs7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLEtBQUssTUFBYyxJQUFvQjtBQUNyQyxhQUFPLEtBQUssWUFBWSxNQUFNLEVBQUU7QUFBQSxJQUNsQztBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6W119
@@ -1,2 +1,5 @@
1
1
  /// <reference path="../library-references.d.mts" />
2
+ export * as 'incremental-parse-state-field' from './incremental-parse-state-field.mjs';
3
+ export * as 'markdown-editor-views' from './markdown-editor-views.mjs';
4
+ export * as 'range-set' from './range-set.mjs';
2
5
  export * as 'state-field-spec' from './state-field-spec.mjs';
@@ -3,8 +3,14 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
+ import * as incremental_parse_state_field from "./incremental-parse-state-field.mjs";
7
+ import * as markdown_editor_views from "./markdown-editor-views.mjs";
8
+ import * as range_set from "./range-set.mjs";
6
9
  import * as state_field_spec from "./state-field-spec.mjs";
7
10
  export {
11
+ incremental_parse_state_field as "incremental-parse-state-field",
12
+ markdown_editor_views as "markdown-editor-views",
13
+ range_set as "range-set",
8
14
  state_field_spec as "state-field-spec"
9
15
  };
10
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvZGVtaXJyb3IvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnc3RhdGUtZmllbGQtc3BlYycgZnJvbSAnLi9zdGF0ZS1maWVsZC1zcGVjLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBRUEsWUFBWUEsc0JBQXdCOyIsCiAgIm5hbWVzIjogWyJzdGF0ZS1maWVsZC1zcGVjIl0KfQo=
16
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvZGVtaXJyb3IvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQnIGZyb20gJy4vaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duLWVkaXRvci12aWV3cycgZnJvbSAnLi9tYXJrZG93bi1lZGl0b3Itdmlld3MudHMnO1xuZXhwb3J0ICogYXMgJ3JhbmdlLXNldCcgZnJvbSAnLi9yYW5nZS1zZXQudHMnO1xuZXhwb3J0ICogYXMgJ3N0YXRlLWZpZWxkLXNwZWMnIGZyb20gJy4vc3RhdGUtZmllbGQtc3BlYy50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVlBLG1DQUFxQztBQUNqRCxZQUFZQywyQkFBNkI7QUFDekMsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsc0JBQXdCOyIsCiAgIm5hbWVzIjogWyJpbmNyZW1lbnRhbC1wYXJzZS1zdGF0ZS1maWVsZCIsICJtYXJrZG93bi1lZGl0b3Itdmlld3MiLCAicmFuZ2Utc2V0IiwgInN0YXRlLWZpZWxkLXNwZWMiXQp9Cg==
@@ -0,0 +1,34 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Reaches the CodeMirror {@link EditorView} of every open Markdown view, in every window.
6
+ *
7
+ * A Markdown view in Reading mode is included on purpose: it keeps its source editor alive while hidden, and a
8
+ * reconfigure or state change that skipped it would leave that editor stale when the user switches back.
9
+ *
10
+ * Only editors that live in a workspace leaf are reached. An editor Obsidian builds elsewhere (a canvas card, an
11
+ * editable embed, a hover popover) has no leaf, so it picks up registered extensions when it is created rather
12
+ * than through these helpers.
13
+ */
14
+ import type { TransactionSpec } from '@codemirror/state';
15
+ import type { EditorView } from '@codemirror/view';
16
+ import type { App } from 'obsidian';
17
+ /**
18
+ * Dispatches the given transaction specs to the editor of every open Markdown view, in every window.
19
+ *
20
+ * Each editor receives its own transaction built from the same specs, so a spec must not carry positions that
21
+ * only make sense in one document. Annotations and state effects (such as a compartment reconfigure) are the
22
+ * intended payload.
23
+ *
24
+ * @param app - The Obsidian app instance.
25
+ * @param specs - The transaction specs to dispatch to every editor.
26
+ */
27
+ export declare function dispatchToAllMarkdownEditorViews(app: App, ...specs: TransactionSpec[]): void;
28
+ /**
29
+ * Gets the editor of every open Markdown view, in every window, Reading mode included.
30
+ *
31
+ * @param app - The Obsidian app instance.
32
+ * @returns The CodeMirror editor views.
33
+ */
34
+ export declare function getAllMarkdownEditorViews(app: App): EditorView[];
@@ -0,0 +1,53 @@
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 { ViewType } from "@obsidian-typings/obsidian-public-latest/implementations";
34
+ import { MarkdownView } from "obsidian";
35
+ function dispatchToAllMarkdownEditorViews(app, ...specs) {
36
+ for (const editorView of getAllMarkdownEditorViews(app)) {
37
+ editorView.dispatch(...specs);
38
+ }
39
+ }
40
+ function getAllMarkdownEditorViews(app) {
41
+ const editorViews = [];
42
+ for (const leaf of app.workspace.getLeavesOfType(ViewType.Markdown)) {
43
+ if (leaf.view instanceof MarkdownView) {
44
+ editorViews.push(leaf.view.editor.cm);
45
+ }
46
+ }
47
+ return editorViews;
48
+ }
49
+ export {
50
+ dispatchToAllMarkdownEditorViews,
51
+ getAllMarkdownEditorViews
52
+ };
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2RlbWlycm9yL21hcmtkb3duLWVkaXRvci12aWV3cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVhY2hlcyB0aGUgQ29kZU1pcnJvciB7QGxpbmsgRWRpdG9yVmlld30gb2YgZXZlcnkgb3BlbiBNYXJrZG93biB2aWV3LCBpbiBldmVyeSB3aW5kb3cuXG4gKlxuICogQSBNYXJrZG93biB2aWV3IGluIFJlYWRpbmcgbW9kZSBpcyBpbmNsdWRlZCBvbiBwdXJwb3NlOiBpdCBrZWVwcyBpdHMgc291cmNlIGVkaXRvciBhbGl2ZSB3aGlsZSBoaWRkZW4sIGFuZCBhXG4gKiByZWNvbmZpZ3VyZSBvciBzdGF0ZSBjaGFuZ2UgdGhhdCBza2lwcGVkIGl0IHdvdWxkIGxlYXZlIHRoYXQgZWRpdG9yIHN0YWxlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMgYmFjay5cbiAqXG4gKiBPbmx5IGVkaXRvcnMgdGhhdCBsaXZlIGluIGEgd29ya3NwYWNlIGxlYWYgYXJlIHJlYWNoZWQuIEFuIGVkaXRvciBPYnNpZGlhbiBidWlsZHMgZWxzZXdoZXJlIChhIGNhbnZhcyBjYXJkLCBhblxuICogZWRpdGFibGUgZW1iZWQsIGEgaG92ZXIgcG9wb3ZlcikgaGFzIG5vIGxlYWYsIHNvIGl0IHBpY2tzIHVwIHJlZ2lzdGVyZWQgZXh0ZW5zaW9ucyB3aGVuIGl0IGlzIGNyZWF0ZWQgcmF0aGVyXG4gKiB0aGFuIHRocm91Z2ggdGhlc2UgaGVscGVycy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uU3BlYyB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB0eXBlIHsgRWRpdG9yVmlldyB9IGZyb20gJ0Bjb2RlbWlycm9yL3ZpZXcnO1xuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25WaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIERpc3BhdGNoZXMgdGhlIGdpdmVuIHRyYW5zYWN0aW9uIHNwZWNzIHRvIHRoZSBlZGl0b3Igb2YgZXZlcnkgb3BlbiBNYXJrZG93biB2aWV3LCBpbiBldmVyeSB3aW5kb3cuXG4gKlxuICogRWFjaCBlZGl0b3IgcmVjZWl2ZXMgaXRzIG93biB0cmFuc2FjdGlvbiBidWlsdCBmcm9tIHRoZSBzYW1lIHNwZWNzLCBzbyBhIHNwZWMgbXVzdCBub3QgY2FycnkgcG9zaXRpb25zIHRoYXRcbiAqIG9ubHkgbWFrZSBzZW5zZSBpbiBvbmUgZG9jdW1lbnQuIEFubm90YXRpb25zIGFuZCBzdGF0ZSBlZmZlY3RzIChzdWNoIGFzIGEgY29tcGFydG1lbnQgcmVjb25maWd1cmUpIGFyZSB0aGVcbiAqIGludGVuZGVkIHBheWxvYWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gc3BlY3MgLSBUaGUgdHJhbnNhY3Rpb24gc3BlY3MgdG8gZGlzcGF0Y2ggdG8gZXZlcnkgZWRpdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hUb0FsbE1hcmtkb3duRWRpdG9yVmlld3MoYXBwOiBBcHAsIC4uLnNwZWNzOiBUcmFuc2FjdGlvblNwZWNbXSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGVkaXRvclZpZXcgb2YgZ2V0QWxsTWFya2Rvd25FZGl0b3JWaWV3cyhhcHApKSB7XG4gICAgZWRpdG9yVmlldy5kaXNwYXRjaCguLi5zcGVjcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBlZGl0b3Igb2YgZXZlcnkgb3BlbiBNYXJrZG93biB2aWV3LCBpbiBldmVyeSB3aW5kb3csIFJlYWRpbmcgbW9kZSBpbmNsdWRlZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSBDb2RlTWlycm9yIGVkaXRvciB2aWV3cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbE1hcmtkb3duRWRpdG9yVmlld3MoYXBwOiBBcHApOiBFZGl0b3JWaWV3W10ge1xuICBjb25zdCBlZGl0b3JWaWV3czogRWRpdG9yVmlld1tdID0gW107XG4gIGZvciAoY29uc3QgbGVhZiBvZiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5NYXJrZG93bikpIHtcbiAgICBpZiAobGVhZi52aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3KSB7XG4gICAgICBlZGl0b3JWaWV3cy5wdXNoKGxlYWYudmlldy5lZGl0b3IuY20pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWRpdG9yVmlld3M7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsb0JBQW9CO0FBWXRCLFNBQVMsaUNBQWlDLFFBQWEsT0FBZ0M7QUFDNUYsYUFBVyxjQUFjLDBCQUEwQixHQUFHLEdBQUc7QUFDdkQsZUFBVyxTQUFTLEdBQUcsS0FBSztBQUFBLEVBQzlCO0FBQ0Y7QUFRTyxTQUFTLDBCQUEwQixLQUF3QjtBQUNoRSxRQUFNLGNBQTRCLENBQUM7QUFDbkMsYUFBVyxRQUFRLElBQUksVUFBVSxnQkFBZ0IsU0FBUyxRQUFRLEdBQUc7QUFDbkUsUUFBSSxLQUFLLGdCQUFnQixjQUFjO0FBQ3JDLGtCQUFZLEtBQUssS0FBSyxLQUFLLE9BQU8sRUFBRTtBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDsiLCJuYW1lcyI6W119
@@ -0,0 +1,35 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Helpers for CodeMirror {@link RangeSet}s.
6
+ */
7
+ import type { RangeSet, RangeValue } from '@codemirror/state';
8
+ /**
9
+ * One range of a {@link RangeSet}, as plain data.
10
+ *
11
+ * @typeParam Value - The type of the range value.
12
+ */
13
+ export interface RangeSetEntry<Value extends RangeValue> {
14
+ /**
15
+ * The start of the range.
16
+ */
17
+ readonly from: number;
18
+ /**
19
+ * The end of the range.
20
+ */
21
+ readonly to: number;
22
+ /**
23
+ * The value of the range.
24
+ */
25
+ readonly value: Value;
26
+ }
27
+ /**
28
+ * Lists the ranges of a {@link RangeSet} in document order, for assertions in tests and for debugging.
29
+ *
30
+ * @typeParam Value - The type of the range values.
31
+ * @param rangeSet - The range set to list, e.g. a `DecorationSet`.
32
+ * @param from - The position to start listing from. Ranges ending before it are skipped. Defaults to `0`.
33
+ * @returns The ranges as plain `{ from, to, value }` objects.
34
+ */
35
+ export declare function rangeSetToArray<Value extends RangeValue>(rangeSet: RangeSet<Value>, from?: number): RangeSetEntry<Value>[];
@@ -0,0 +1,18 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ function rangeSetToArray(rangeSet, from = 0) {
7
+ const entries = [];
8
+ const cursor = rangeSet.iter(from);
9
+ while (cursor.value !== null) {
10
+ entries.push({ from: cursor.from, to: cursor.to, value: cursor.value });
11
+ cursor.next();
12
+ }
13
+ return entries;
14
+ }
15
+ export {
16
+ rangeSetToArray
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvZGVtaXJyb3IvcmFuZ2Utc2V0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSGVscGVycyBmb3IgQ29kZU1pcnJvciB7QGxpbmsgUmFuZ2VTZXR9cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJhbmdlU2V0LFxuICBSYW5nZVZhbHVlXG59IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcblxuLyoqXG4gKiBPbmUgcmFuZ2Ugb2YgYSB7QGxpbmsgUmFuZ2VTZXR9LCBhcyBwbGFpbiBkYXRhLlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgcmFuZ2UgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VTZXRFbnRyeTxWYWx1ZSBleHRlbmRzIFJhbmdlVmFsdWU+IHtcbiAgLyoqXG4gICAqIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAqL1xuICByZWFkb25seSBmcm9tOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgdG86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSByYW5nZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBWYWx1ZTtcbn1cblxuLyoqXG4gKiBMaXN0cyB0aGUgcmFuZ2VzIG9mIGEge0BsaW5rIFJhbmdlU2V0fSBpbiBkb2N1bWVudCBvcmRlciwgZm9yIGFzc2VydGlvbnMgaW4gdGVzdHMgYW5kIGZvciBkZWJ1Z2dpbmcuXG4gKlxuICogQHR5cGVQYXJhbSBWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSByYW5nZSB2YWx1ZXMuXG4gKiBAcGFyYW0gcmFuZ2VTZXQgLSBUaGUgcmFuZ2Ugc2V0IHRvIGxpc3QsIGUuZy4gYSBgRGVjb3JhdGlvblNldGAuXG4gKiBAcGFyYW0gZnJvbSAtIFRoZSBwb3NpdGlvbiB0byBzdGFydCBsaXN0aW5nIGZyb20uIFJhbmdlcyBlbmRpbmcgYmVmb3JlIGl0IGFyZSBza2lwcGVkLiBEZWZhdWx0cyB0byBgMGAuXG4gKiBAcmV0dXJucyBUaGUgcmFuZ2VzIGFzIHBsYWluIGB7IGZyb20sIHRvLCB2YWx1ZSB9YCBvYmplY3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VTZXRUb0FycmF5PFZhbHVlIGV4dGVuZHMgUmFuZ2VWYWx1ZT4ocmFuZ2VTZXQ6IFJhbmdlU2V0PFZhbHVlPiwgZnJvbSA9IDApOiBSYW5nZVNldEVudHJ5PFZhbHVlPltdIHtcbiAgY29uc3QgZW50cmllczogUmFuZ2VTZXRFbnRyeTxWYWx1ZT5bXSA9IFtdO1xuICBjb25zdCBjdXJzb3IgPSByYW5nZVNldC5pdGVyKGZyb20pO1xuICB3aGlsZSAoY3Vyc29yLnZhbHVlICE9PSBudWxsKSB7XG4gICAgZW50cmllcy5wdXNoKHsgZnJvbTogY3Vyc29yLmZyb20sIHRvOiBjdXJzb3IudG8sIHZhbHVlOiBjdXJzb3IudmFsdWUgfSk7XG4gICAgY3Vyc29yLm5leHQoKTtcbiAgfVxuICByZXR1cm4gZW50cmllcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBeUNPLFNBQVMsZ0JBQTBDLFVBQTJCLE9BQU8sR0FBMkI7QUFDckgsUUFBTSxVQUFrQyxDQUFDO0FBQ3pDLFFBQU0sU0FBUyxTQUFTLEtBQUssSUFBSTtBQUNqQyxTQUFPLE9BQU8sVUFBVSxNQUFNO0FBQzVCLFlBQVEsS0FBSyxFQUFFLE1BQU0sT0FBTyxNQUFNLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxNQUFNLENBQUM7QUFDdEUsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUNBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -6,6 +6,7 @@ export * as 'editor-command-handler' from './editor-command-handler.mjs';
6
6
  export * as 'file-command-handler' from './file-command-handler.mjs';
7
7
  export * as 'folder-command-handler' from './folder-command-handler.mjs';
8
8
  export * as 'global-command-handler' from './global-command-handler.mjs';
9
+ export * as 'open-bug-report-command-handler' from './open-bug-report-command-handler.mjs';
9
10
  export * as 'open-demo-vault-command-handler' from './open-demo-vault-command-handler.mjs';
10
11
  export * as 'open-settings-command-handler' from './open-settings-command-handler.mjs';
11
12
  export * as 'undo-bulk-operation-command-handler' from './undo-bulk-operation-command-handler.mjs';