@mnaoumov/obsidian-lib 10.10.0 → 10.12.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.
Files changed (133) hide show
  1. package/README.md +26 -0
  2. package/components/all-windows-status-bar-item-component/package.json +6 -0
  3. package/components/shared-component-pool-component/package.json +6 -0
  4. package/components/workspace-layout-state-component/package.json +6 -0
  5. package/dist/lib/cjs/__merged.cjs +90 -1
  6. package/dist/lib/cjs/__merged.d.cts +13 -4
  7. package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
  8. package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
  9. package/dist/lib/cjs/bug-report.cjs +36 -10
  10. package/dist/lib/cjs/bug-report.d.cts +65 -0
  11. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +93 -2
  12. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
  13. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
  14. package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
  15. package/dist/lib/cjs/components/embed-extensions-component.cjs +20 -3
  16. package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
  17. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +16 -2
  18. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
  19. package/dist/lib/cjs/components/index.cjs +12 -3
  20. package/dist/lib/cjs/components/index.d.cts +3 -0
  21. package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -9
  22. package/dist/lib/cjs/components/plugin-settings-component.cjs +7 -2
  23. package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
  24. package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
  25. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
  26. package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
  27. package/dist/lib/cjs/css-class.cjs +5 -1
  28. package/dist/lib/cjs/css-class.d.cts +16 -0
  29. package/dist/lib/cjs/data-handler.cjs +156 -5
  30. package/dist/lib/cjs/data-handler.d.cts +128 -2
  31. package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
  32. package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
  33. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  34. package/dist/lib/cjs/git-rename-history.cjs +1 -1
  35. package/dist/lib/cjs/git-rename-history.d.cts +2 -2
  36. package/dist/lib/cjs/i18n/locales/en.cjs +29 -1
  37. package/dist/lib/cjs/i18n/locales/en.d.cts +28 -0
  38. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +28 -0
  39. package/dist/lib/cjs/index.cjs +10 -1
  40. package/dist/lib/cjs/index.d.cts +3 -0
  41. package/dist/lib/cjs/link.cjs +40 -1
  42. package/dist/lib/cjs/link.d.cts +37 -1
  43. package/dist/lib/cjs/markdown-view.cjs +191 -3
  44. package/dist/lib/cjs/markdown-view.d.cts +48 -1
  45. package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
  46. package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
  47. package/dist/lib/cjs/modals/index.cjs +7 -1
  48. package/dist/lib/cjs/modals/index.d.cts +2 -0
  49. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
  50. package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
  51. package/dist/lib/cjs/plugin/index.cjs +4 -1
  52. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  53. package/dist/lib/cjs/plugin/plugin-api.cjs +13 -4
  54. package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
  55. package/dist/lib/cjs/plugin/plugin-install-state.cjs +46 -1
  56. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
  57. package/dist/lib/cjs/plugin/plugin-instance.cjs +448 -0
  58. package/dist/lib/cjs/plugin/plugin-instance.d.cts +251 -0
  59. package/dist/lib/cjs/plugin/plugin.cjs +16 -1
  60. package/dist/lib/cjs/plugin/plugin.d.cts +7 -0
  61. package/dist/lib/cjs/reference-definition.cjs +234 -0
  62. package/dist/lib/cjs/reference-definition.d.cts +47 -0
  63. package/dist/lib/cjs/release-asset.cjs +279 -0
  64. package/dist/lib/cjs/release-asset.d.cts +190 -0
  65. package/dist/lib/cjs/workspace.cjs +3 -2
  66. package/dist/lib/cjs/workspace.d.cts +6 -0
  67. package/dist/lib/esm/__merged.d.mts +13 -4
  68. package/dist/lib/esm/__merged.mjs +97 -3
  69. package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
  70. package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
  71. package/dist/lib/esm/bug-report.d.mts +65 -0
  72. package/dist/lib/esm/bug-report.mjs +33 -10
  73. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
  74. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
  75. package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
  76. package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
  77. package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
  78. package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
  79. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
  80. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
  81. package/dist/lib/esm/components/index.d.mts +3 -0
  82. package/dist/lib/esm/components/index.mjs +8 -2
  83. package/dist/lib/esm/components/plugin-gate-component.mjs +5 -13
  84. package/dist/lib/esm/components/plugin-settings-component.mjs +7 -2
  85. package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
  86. package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
  87. package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
  88. package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
  89. package/dist/lib/esm/css-class.d.mts +16 -0
  90. package/dist/lib/esm/css-class.mjs +5 -1
  91. package/dist/lib/esm/data-handler.d.mts +128 -2
  92. package/dist/lib/esm/data-handler.mjs +152 -4
  93. package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
  94. package/dist/lib/esm/desktop-git-runner.mjs +3 -3
  95. package/dist/lib/esm/generated-during-build.mjs +2 -2
  96. package/dist/lib/esm/git-rename-history.d.mts +2 -2
  97. package/dist/lib/esm/git-rename-history.mjs +1 -1
  98. package/dist/lib/esm/i18n/locales/en.d.mts +28 -0
  99. package/dist/lib/esm/i18n/locales/en.mjs +29 -1
  100. package/dist/lib/esm/i18n/locales/translations-map.d.mts +28 -0
  101. package/dist/lib/esm/index.d.mts +3 -0
  102. package/dist/lib/esm/index.mjs +7 -1
  103. package/dist/lib/esm/link.d.mts +37 -1
  104. package/dist/lib/esm/link.mjs +40 -1
  105. package/dist/lib/esm/markdown-view.d.mts +48 -1
  106. package/dist/lib/esm/markdown-view.mjs +192 -2
  107. package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
  108. package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
  109. package/dist/lib/esm/modals/index.d.mts +2 -0
  110. package/dist/lib/esm/modals/index.mjs +5 -1
  111. package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
  112. package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
  113. package/dist/lib/esm/plugin/index.d.mts +1 -0
  114. package/dist/lib/esm/plugin/index.mjs +3 -1
  115. package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
  116. package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
  117. package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
  118. package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
  119. package/dist/lib/esm/plugin/plugin-instance.d.mts +251 -0
  120. package/dist/lib/esm/plugin/plugin-instance.mjs +366 -0
  121. package/dist/lib/esm/plugin/plugin.d.mts +7 -0
  122. package/dist/lib/esm/plugin/plugin.mjs +16 -1
  123. package/dist/lib/esm/reference-definition.d.mts +47 -0
  124. package/dist/lib/esm/reference-definition.mjs +146 -0
  125. package/dist/lib/esm/release-asset.d.mts +190 -0
  126. package/dist/lib/esm/release-asset.mjs +187 -0
  127. package/dist/lib/esm/workspace.d.mts +6 -0
  128. package/dist/lib/esm/workspace.mjs +3 -2
  129. package/dist/styles.css +16 -1
  130. package/modals/copy-text-manually/package.json +6 -0
  131. package/modals/review-bug-report-diagnostics/package.json +6 -0
  132. package/package.json +2 -1
  133. package/plugin/plugin-instance/package.json +6 -0
@@ -9,7 +9,8 @@ export { getIndexedBacklinksForFile, iterateReferencesAffectedByRename } from '.
9
9
  export { renderBacklinksTable, renderDelayedBacklinks, renderDelayedBacklinksForFolder } from './backlink.cjs';
10
10
  export { PluginBasesViewRegistrar } from './bases-view-registrar.cjs';
11
11
  export { BrokenLinkCandidateFinder, BrokenLinkEvidenceKind, getParentPath, getPathMapping } from './broken-link-candidates.cjs';
12
- export { BUG_REPORT_ISSUE_FORM_TEMPLATE, BugReportIssueFormFieldId, formatBugReportEnvironment, getBugReportEnvironment, getBugReportIssueFormUrl, getGitHubIssueFormUrl } from './bug-report.cjs';
12
+ export { BugReportLogBuffer, createSettingsDiagnosticSection, DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES, DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH, formatBugReportDiagnostics, getMarkdownFence, REDACTED_VALUE, redactSettings } from './bug-report-diagnostics.cjs';
13
+ export { BUG_REPORT_ISSUE_FORM_TEMPLATE, BUG_REPORT_PASTE_INSTRUCTIONS, BugReportIssueFormFieldId, buildBugReportIssueFormLink, DEFAULT_BUG_REPORT_MAX_URL_LENGTH, formatBugReportEnvironment, getBugReportEnvironment, getBugReportIssueFormUrl, getGitHubIssueFormUrl } from './bug-report.cjs';
13
14
  export { BULK_OPERATION_HOLD_INTERVAL_IN_MILLISECONDS, holdBulkOperationWhile, registerBulkOperationProgressListener, reportBulkOperationProgress } from './bulk-operation-progress.cjs';
14
15
  export { buildBeforeOperationCommitSubject, buildOperationCommitMessage, BULK_OPERATION_LOCK_FILE_NAME, BULK_OPERATION_LOCK_STALE_AFTER_IN_MILLISECONDS, formatOperationId, getNextOperationId, isBulkOperationLock, isBulkOperationLockStale, OPERATION_TRAILER_KEY, parseBulkOperationCommit, parseOperationNumber, PLUGIN_TRAILER_KEY } from './bulk-operation.cjs';
15
16
  export { CalloutMode, renderCallout, wrapForCallout } from './callout.cjs';
@@ -42,6 +43,7 @@ export { PluginCommandRegistrar } from './command-registrar.cjs';
42
43
  export { configureCommunityPlugin, ConfigureCommunityPluginResult, disableCommunityPlugin, enableCommunityPlugin, getCommunityPluginRepo, getLatestReleaseVersion, installCommunityPlugin, installConfigureEnableCommunityPlugin, PluginEnableRefusedError, searchCommunityPlugins, toggleEnableCommunityPlugin, toggleInstallCommunityPlugin, uninstallCommunityPlugin, updateCommunityPlugin, UpdateCommunityPluginResult } from './community-plugins.cjs';
43
44
  export { AbortSignalComponent } from './components/abort-signal-component.cjs';
44
45
  export { AllWindowsEventComponent, forEachWindow, registerBodyClass } from './components/all-windows-event-component.cjs';
46
+ export { AllWindowsStatusBarItemComponent, getPluginStatusBarItemCssClass, registerAllWindowsStatusBarItem, WINDOW_STATUS_BAR_CSS_CLASS } from './components/all-windows-status-bar-item-component.cjs';
45
47
  export { AsyncErrorHandlerComponent } from './components/async-error-handler-component.cjs';
46
48
  export { registerAsyncEvent } from './components/async-events-component.cjs';
47
49
  export { BulkOperationCommitComponent } from './components/bulk-operation-commit-component.cjs';
@@ -73,12 +75,14 @@ export { EmptyFolderBehavior, RenameDeleteHandlerComponent } from './components/
73
75
  export { NOT_EMPTY_DIRECTORY_ERROR_CODE, RmdirGuardComponent } from './components/rmdir-guard-component.cjs';
74
76
  export { SettingsFacetComponent } from './components/settings-facet-component.cjs';
75
77
  export { SettingsMigrationComponent } from './components/settings-migration-component.cjs';
78
+ export { SharedComponentPoolComponent } from './components/shared-component-pool-component.cjs';
76
79
  export { registerStyle, StyleSheetComponent } from './components/style-sheet-component.cjs';
77
80
  export { SyntaxHighlightingComponent } from './components/syntax-highlighting-component.cjs';
78
81
  export { TemplatesLanguageComponent } from './components/templates-language-component.cjs';
82
+ export { parseWorkspaceLayoutStateRecord, serializeWorkspaceLayoutStateRecord, WORKSPACE_LAYOUT_STATE_LAYOUT_KEY, WorkspaceLayoutStateComponent } from './components/workspace-layout-state-component.cjs';
79
83
  export { getDomEventsHandlersConstructor } from './constructors/get-dom-events-handlers-constructor.cjs';
80
84
  export { CssClass } from './css-class.cjs';
81
- export { PluginDataHandler } from './data-handler.cjs';
85
+ export { DEFAULT_PLUGIN_DATA_MAX_SIZE_IN_BYTES, PluginDataHandler, PluginDataOperation, PluginDataSizeLimitExceededError } from './data-handler.cjs';
82
86
  export { DataStoreLocations } from './data-stores/data-store-locations.cjs';
83
87
  export { DataStoreReplica, isDataStoreJsonValue, isDataStoreOperation } from './data-stores/data-store-replica.cjs';
84
88
  export { DataStoreSeeds, validateDataStoreSeed } from './data-stores/data-store-seeds.cjs';
@@ -132,7 +136,7 @@ export { loop } from './loop.cjs';
132
136
  export { PluginMarkdownCodeBlockProcessorRegistrar } from './markdown-code-block-processor-registrar.cjs';
133
137
  export { getCodeBlockMarkdownInfo, insertAfterCodeBlock, insertBeforeCodeBlock, removeCodeBlock, replaceCodeBlock } from './markdown-code-block-processor.cjs';
134
138
  export { PluginMarkdownPostProcessorRegistrar } from './markdown-post-processor-registrar.cjs';
135
- export { getFullContentHtml } from './markdown-view.cjs';
139
+ export { getFullContentHtml, rerenderPreviews } from './markdown-view.cjs';
136
140
  export { fullRender, markdownToHtml, registerLinkHandlers, renderExternalLink, renderInternalLink } from './markdown.cjs';
137
141
  export { addSingleChoiceMenuItems } from './menu.cjs';
138
142
  export { ADVANCED_METADATA_CACHE_PLUGIN_ID, BACKLINK_CACHE_PLUGIN_ID, CachedMetadataExFeature, ensureMetadataCacheReady, getBacklinksForFileOrPath, getBacklinksForFileSafe, getCacheSafe, getFrontmatterSafe, getReferences, hasBacklinkCachePlugin, isCachedMetadataEx, parseMetadata, registerFileCacheForNonExistingFile, registerFiles, unregisterFileCacheForNonExistingFile, unregisterFiles } from './metadata-cache.cjs';
@@ -140,10 +144,12 @@ export { getMobileAppInfo } from './mobile-app-info.cjs';
140
144
  export { alert } from './modals/alert.cjs';
141
145
  export { formatCodeBlock, showCodeBlockBuilder } from './modals/code-block-builder.cjs';
142
146
  export { confirm } from './modals/confirm.cjs';
147
+ export { copyTextManually } from './modals/copy-text-manually.cjs';
143
148
  export { MinimizableModal } from './modals/minimizable-modal.cjs';
144
149
  export { ModalCommandBuilder, ModalCommandsRenderMode } from './modals/modal-command-builder.cjs';
145
150
  export { ModalBase, showModal } from './modals/modal.cjs';
146
151
  export { prompt } from './modals/prompt.cjs';
152
+ export { reviewBugReportDiagnostics } from './modals/review-bug-report-diagnostics.cjs';
147
153
  export { selectItem } from './modals/select-item.cjs';
148
154
  export { selectOption } from './modals/select-option.cjs';
149
155
  export { SuggestModalCommandBuilder } from './modals/suggest-modal-command-builder.cjs';
@@ -161,7 +167,8 @@ export { findPluginApi, getValidatePluginApiPayloadsDebugSwitch, PluginApiPayloa
161
167
  export { DEFAULT_PLUGIN_ASYNC_CLEANUP_TIMEOUT_IN_MILLISECONDS, didPluginAsyncCleanupsSettle, hasPendingPluginAsyncCleanups, PLUGIN_ASYNC_CLEANUPS_STATE_KEY, registerPluginAsyncCleanup, trackPluginAsyncCleanup } from './plugin/plugin-async-cleanup.cjs';
162
168
  export { addPluginCssClasses, initDebugController, initPluginContext } from './plugin/plugin-context.cjs';
163
169
  export { PluginEventSourceImpl } from './plugin/plugin-event-source.cjs';
164
- export { getInstalledPluginState, getInstalledPluginVersion, installAndEnablePlugin, InstalledPluginState, updatePlugin } from './plugin/plugin-install-state.cjs';
170
+ export { comparePluginVersionWithMinimum, getInstalledPluginState, getInstalledPluginVersion, installAndEnablePlugin, InstalledPluginState, PluginVersionComparison, updatePlugin } from './plugin/plugin-install-state.cjs';
171
+ export { getLoadedPlugin, getPluginAvailability, PluginAvailability, PluginInstanceUnavailableError, requirePlugin, waitForPlugin } from './plugin/plugin-instance.cjs';
165
172
  export { PLUGIN_LOADED_EVENT_NAME, PLUGIN_UNLOADED_EVENT_NAME, triggerPluginLifecycleEvent } from './plugin/plugin-lifecycle-events.cjs';
166
173
  export { PluginSettingsTabBase, SAVE_TO_FILE_CONTEXT } from './plugin/plugin-settings-tab.cjs';
167
174
  export { PluginBase, reloadPlugin, showErrorAndDisablePlugin } from './plugin/plugin.cjs';
@@ -173,7 +180,9 @@ export { isPositionInOffsetRange, isPositionInside, isPositionInsideSome } from
173
180
  export { checkPropertyEntryMatches, isPropertyEntry, PROPERTY_ENTRY_PREFIX } from './property-entry.cjs';
174
181
  export { addToQueue, addToQueueAndWait, flushQueue } from './queue.cjs';
175
182
  export { AppContext, useApp } from './react/app-context.cjs';
183
+ export { referenceDefinitionToFileChange } from './reference-definition.cjs';
176
184
  export { getReferenceLinkText, isCanvasFileNodeReference, isCanvasReference, isCanvasTextNodeReference, isReferenceInHeading, isReferenceInOffsetRange, referenceToFileChange, sortReferences } from './reference.cjs';
185
+ export { computeSha256, ensureReleaseAsset, formatByteSize, getGitHubReleaseAssetUrl, ReleaseAssetChecksumError } from './release-asset.cjs';
177
186
  export { isOwnedByRenderedMarkdown, registerFoldHandlers, registerFootnoteLinkHandler } from './rendered-markdown.cjs';
178
187
  export { createRequestUrlFetch, encodeRequestUrlRequest, RequestUrlError, requestUrlEx, requestUrlStream } from './request-url.cjs';
179
188
  export { isResourceLockedForPath, isResourceLockedForPathByAncestor, lockResourceForPath, requestResourceUnlockForPath, ResourceLockComponent, ResourceLockedError, unlockResourceForPath } from './resource-lock.cjs';
@@ -0,0 +1,222 @@
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 patchObsidianRequire() {
6
+ const originalRequire = require;
7
+ if (!originalRequire || originalRequire.__isPatched) {
8
+ return;
9
+ }
10
+ require = Object.assign(
11
+ (id) => requirePatched(id),
12
+ originalRequire,
13
+ {
14
+ __isPatched: true
15
+ }
16
+ );
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
+ }
20
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
+ "@codemirror/autocomplete",
22
+ "@codemirror/collab",
23
+ "@codemirror/commands",
24
+ "@codemirror/language",
25
+ "@codemirror/lint",
26
+ "@codemirror/search",
27
+ "@codemirror/state",
28
+ "@codemirror/text",
29
+ "@codemirror/view",
30
+ "@lezer/common",
31
+ "@lezer/highlight",
32
+ "@lezer/lr",
33
+ "obsidian"
34
+ ]);
35
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
36
+ "@codemirror/closebrackets",
37
+ "@codemirror/comment",
38
+ "@codemirror/fold",
39
+ "@codemirror/gutter",
40
+ "@codemirror/highlight",
41
+ "@codemirror/history",
42
+ "@codemirror/matchbrackets",
43
+ "@codemirror/panel",
44
+ "@codemirror/rangeset",
45
+ "@codemirror/rectangular-selection",
46
+ "@codemirror/stream-parser",
47
+ "@codemirror/tooltip"
48
+ ]);
49
+ function requirePatched(id) {
50
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
51
+ return originalRequire?.(id);
52
+ }
53
+ const app = globalThis.app;
54
+ if (app?.isMobile) {
55
+ if (id === "process" || id === "node:process") {
56
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
57
+ return process;
58
+ }
59
+ } else {
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
+ }
64
+ }
65
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
66
+ return {};
67
+ }
68
+ })();
69
+
70
+ "use strict";
71
+ var __defProp = Object.defineProperty;
72
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
73
+ var __getOwnPropNames = Object.getOwnPropertyNames;
74
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
75
+ var __export = (target, all) => {
76
+ for (var name in all)
77
+ __defProp(target, name, { get: all[name], enumerable: true });
78
+ };
79
+ var __copyProps = (to, from, except, desc) => {
80
+ if (from && typeof from === "object" || typeof from === "function") {
81
+ for (let key of __getOwnPropNames(from))
82
+ if (!__hasOwnProp.call(to, key) && key !== except)
83
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
84
+ }
85
+ return to;
86
+ };
87
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
88
+ var bug_report_diagnostics_exports = {};
89
+ __export(bug_report_diagnostics_exports, {
90
+ BugReportLogBuffer: () => BugReportLogBuffer,
91
+ DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES: () => DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES,
92
+ DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH: () => DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH,
93
+ REDACTED_VALUE: () => REDACTED_VALUE,
94
+ createSettingsDiagnosticSection: () => createSettingsDiagnosticSection,
95
+ formatBugReportDiagnostics: () => formatBugReportDiagnostics,
96
+ getMarkdownFence: () => getMarkdownFence,
97
+ redactSettings: () => redactSettings
98
+ });
99
+ module.exports = __toCommonJS(bug_report_diagnostics_exports);
100
+ const REDACTED_VALUE = "[redacted]";
101
+ const DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES = 200;
102
+ const DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH = 2e3;
103
+ const JSON_INDENT = 2;
104
+ const MIN_FENCE_LENGTH = 3;
105
+ const TRUNCATION_MARKER = " [truncated]";
106
+ class BugReportLogBuffer {
107
+ entries = [];
108
+ maxEntries;
109
+ maxEntryLength;
110
+ now;
111
+ /**
112
+ * Constructs a new instance.
113
+ *
114
+ * @param options - Constructor options.
115
+ */
116
+ constructor(options = {}) {
117
+ this.maxEntries = Math.max(1, Math.floor(options.maxEntries ?? DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES));
118
+ this.maxEntryLength = Math.max(1, Math.floor(options.maxEntryLength ?? DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH));
119
+ this.now = options.now ?? (() => /* @__PURE__ */ new Date());
120
+ }
121
+ /**
122
+ * Adds an entry, stamped with the current time.
123
+ *
124
+ * @param message - The entry's text.
125
+ */
126
+ add(message) {
127
+ const text = message.length > this.maxEntryLength ? message.slice(0, this.maxEntryLength) + TRUNCATION_MARKER : message;
128
+ this.entries.push(`${this.now().toISOString()} ${text}`);
129
+ if (this.entries.length > this.maxEntries) {
130
+ this.entries.splice(0, this.entries.length - this.maxEntries);
131
+ }
132
+ }
133
+ /**
134
+ * Removes every entry.
135
+ */
136
+ clear() {
137
+ this.entries.length = 0;
138
+ }
139
+ /**
140
+ * Gets the entries, oldest first.
141
+ *
142
+ * @returns The entries.
143
+ */
144
+ getEntries() {
145
+ return [...this.entries];
146
+ }
147
+ /**
148
+ * Builds a potentially private diagnostic section holding the entries.
149
+ *
150
+ * @param options - The options.
151
+ * @returns The section.
152
+ */
153
+ toSection(options = {}) {
154
+ return {
155
+ content: this.entries.length === 0 ? "(no log entries)" : this.entries.join("\n"),
156
+ id: options.id ?? "logs",
157
+ isPotentiallyPrivate: true,
158
+ title: options.title ?? "Logs"
159
+ };
160
+ }
161
+ }
162
+ function createSettingsDiagnosticSection(params) {
163
+ return {
164
+ content: JSON.stringify(redactSettings(params.settings, params.secretKeys ?? []), null, JSON_INDENT) ?? "undefined",
165
+ id: params.id ?? "settings",
166
+ isPotentiallyPrivate: true,
167
+ title: params.title ?? "Plugin settings"
168
+ };
169
+ }
170
+ function formatBugReportDiagnostics(sections) {
171
+ return sections.map((section) => {
172
+ const fence = getMarkdownFence(section.content);
173
+ return `### ${section.title}
174
+
175
+ ${fence}
176
+ ${section.content}
177
+ ${fence}`;
178
+ }).join("\n\n");
179
+ }
180
+ function getMarkdownFence(content) {
181
+ let longestRun = 0;
182
+ for (const match of content.matchAll(/`+/g)) {
183
+ longestRun = Math.max(longestRun, match[0].length);
184
+ }
185
+ return "`".repeat(Math.max(MIN_FENCE_LENGTH, longestRun + 1));
186
+ }
187
+ function redactSettings(settings, secretKeys) {
188
+ const lowerCaseSecretKeys = new Set(secretKeys.map((key) => key.toLowerCase()));
189
+ return redactValue(settings, lowerCaseSecretKeys, /* @__PURE__ */ new WeakSet());
190
+ }
191
+ function redactValue(value, lowerCaseSecretKeys, seen) {
192
+ if (typeof value !== "object" || value === null) {
193
+ return value;
194
+ }
195
+ if (seen.has(value)) {
196
+ return "[circular]";
197
+ }
198
+ seen.add(value);
199
+ if (Array.isArray(value)) {
200
+ const result2 = value.map((item) => redactValue(item, lowerCaseSecretKeys, seen));
201
+ seen.delete(value);
202
+ return result2;
203
+ }
204
+ const result = {};
205
+ for (const [key, child] of Object.entries(value)) {
206
+ result[key] = lowerCaseSecretKeys.has(key.toLowerCase()) ? REDACTED_VALUE : redactValue(child, lowerCaseSecretKeys, seen);
207
+ }
208
+ seen.delete(value);
209
+ return result;
210
+ }
211
+ // Annotate the CommonJS export names for ESM import in node:
212
+ 0 && (module.exports = {
213
+ BugReportLogBuffer,
214
+ DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES,
215
+ DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH,
216
+ REDACTED_VALUE,
217
+ createSettingsDiagnosticSection,
218
+ formatBugReportDiagnostics,
219
+ getMarkdownFence,
220
+ redactSettings
221
+ });
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LWRpYWdub3N0aWNzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPcHRpb25hbCBkaWFnbm9zdGljcyBhIHBsdWdpbiBjYW4gYXR0YWNoIHRvIGEgYnVnIHJlcG9ydDogc2VjdGlvbnMgb2YgdGV4dCB0aGUgdXNlciByZXZpZXdzIGJlZm9yZVxuICogYW55dGhpbmcgbGVhdmVzIE9ic2lkaWFuLCBhIGJvdW5kZWQgbG9nIGJ1ZmZlciwgYW5kIHJlZGFjdGlvbiBvZiBhIHBsdWdpbidzIG93biBzZXR0aW5ncy5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgcmVhZHMgbG9ncyBvciBzZXR0aW5ncyBieSBpdHNlbGYuIEEgbG9nIGJ1ZmZlciBob2xkcyBvbmx5IHdoYXQgdGhlIHBsdWdpbiB3cm90ZSB0byBpdCBzaW5jZVxuICogdGhlIGJ1ZmZlciB3YXMgY3JlYXRlZCwgbmV2ZXIgdGhlIGNvbnNvbGUncyBoaXN0b3J5LCBhbmQgYSBzZXR0aW5ncyBzZWN0aW9uIGhvbGRzIG9ubHkgdGhlIG9iamVjdCB0aGVcbiAqIHBsdWdpbiBoYW5kcyBvdmVyLiBSZWRhY3Rpb24gcmVwbGFjZXMgdGhlIHZhbHVlcyBvZiBjYWxsZXItZGVjbGFyZWQga2V5czsgaXQgaXMgbm90IGEgcHJvbWlzZSB0byBmaW5kXG4gKiBldmVyeSBzZWNyZXQsIHdoaWNoIGlzIHdoeSBldmVyeSBzZWN0aW9uIGlzIHNob3duIHRvIHRoZSB1c2VyLCBhbmQgYSBwb3RlbnRpYWxseSBwcml2YXRlIG9uZSBpcyBsZWZ0XG4gKiBvdXQgdW5sZXNzIHRoZSB1c2VyIGluY2x1ZGVzIGl0LlxuICovXG5cbi8qKlxuICogQSBzZWN0aW9uIG9mIGRpYWdub3N0aWNzIGZvciBhIGJ1ZyByZXBvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb24ge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0ZXh0LCBzaG93biB0byB0aGUgdXNlciBhbmQgc2VudCBhcyB3cml0dGVuLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0YWJsZSBpZCwgdW5pcXVlIGFtb25nIHRoZSBzZWN0aW9ucyBvZiBvbmUgcmVwb3J0LlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VjdGlvbiBjYW4gaG9sZCBwcml2YXRlIGRhdGEsIHN1Y2ggYXMgbG9ncyBvciBzZXR0aW5ncy4gQSBwb3RlbnRpYWxseSBwcml2YXRlIHNlY3Rpb24gaXNcbiAgICogbGVmdCBvdXQgb2YgdGhlIHJlcG9ydCB1bmxlc3MgdGhlIHVzZXIgaW5jbHVkZXMgaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUG90ZW50aWFsbHlQcml2YXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0TG9nQnVmZmVyQ29uc3RydWN0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBtb3N0IGVudHJpZXMga2VwdC4gT2xkZXIgZW50cmllcyBhcmUgZHJvcHBlZCBmaXJzdC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVN9XG4gICAqL1xuICByZWFkb25seSBtYXhFbnRyaWVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9zdCBjaGFyYWN0ZXJzIGtlcHQgb2Ygb25lIGVudHJ5LiBBIGxvbmdlciBlbnRyeSBpcyBjdXQsIGFuZCBzYXlzIHNvLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9CVUdfUkVQT1JUX0xPR19NQVhfRU5UUllfTEVOR1RIfVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4RW50cnlMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdGltZS4gRm9yIHRlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgKCkgPT4gbmV3IERhdGUoKWBcbiAgICovXG4gIHJlYWRvbmx5IG5vdz86ICgpID0+IERhdGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlci50b1NlY3Rpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydExvZ0J1ZmZlclRvU2VjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyBpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdsb2dzJ2BcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbidzIHRpdGxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ0xvZ3MnYFxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb25QYXJhbXMge1xuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyBpZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdzZXR0aW5ncydgXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtleXMgd2hvc2UgdmFsdWVzIGFyZSByZXBsYWNlZCB3aXRoIHtAbGluayBSRURBQ1RFRF9WQUxVRX0sIGF0IGFueSBkZXB0aCwgY29tcGFyZWQgd2l0aG91dCBjYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0S2V5cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIG93biBzZXR0aW5ncywgc3VjaCBhcyBpdHMgYGRhdGEuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5nczogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24ncyB0aXRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdQbHVnaW4gc2V0dGluZ3MnYFxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHZhbHVlIHRoYXQgcmVwbGFjZXMgYSByZWRhY3RlZCBzZXR0aW5nLlxuICovXG5leHBvcnQgY29uc3QgUkVEQUNURURfVkFMVUUgPSAnW3JlZGFjdGVkXSc7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMgYSB7QGxpbmsgQnVnUmVwb3J0TG9nQnVmZmVyfSBrZWVwcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVMgPSAyMDA7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYSB7QGxpbmsgQnVnUmVwb3J0TG9nQnVmZmVyfSBrZWVwcyBvZiBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JVR19SRVBPUlRfTE9HX01BWF9FTlRSWV9MRU5HVEggPSAyMDAwO1xuXG5jb25zdCBKU09OX0lOREVOVCA9IDI7XG5jb25zdCBNSU5fRkVOQ0VfTEVOR1RIID0gMztcbmNvbnN0IFRSVU5DQVRJT05fTUFSS0VSID0gJyBbdHJ1bmNhdGVkXSc7XG5cbi8qKlxuICogQSBib3VuZGVkIGJ1ZmZlciBvZiBsb2cgZW50cmllcyBhIHBsdWdpbiB3cml0ZXMgZm9yIGl0cyBidWcgcmVwb3J0cy4gSXQga2VlcHMgb25seSB3aGF0IHRoZSBwbHVnaW4gYWRkc1xuICogYWZ0ZXIgY3JlYXRpbmcgaXQsIGF0IG1vc3Qge0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlckNvbnN0cnVjdG9yT3B0aW9ucy5tYXhFbnRyaWVzfSBlbnRyaWVzLCBlYWNoIGN1dCB0b1xuICoge0BsaW5rIEJ1Z1JlcG9ydExvZ0J1ZmZlckNvbnN0cnVjdG9yT3B0aW9ucy5tYXhFbnRyeUxlbmd0aH0gY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Z1JlcG9ydExvZ0J1ZmZlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhFbnRyaWVzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4RW50cnlMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBub3c6ICgpID0+IERhdGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uc3RydWN0b3Igb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWdSZXBvcnRMb2dCdWZmZXJDb25zdHJ1Y3Rvck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubWF4RW50cmllcyA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3Iob3B0aW9ucy5tYXhFbnRyaWVzID8/IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJJRVMpKTtcbiAgICB0aGlzLm1heEVudHJ5TGVuZ3RoID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihvcHRpb25zLm1heEVudHJ5TGVuZ3RoID8/IERFRkFVTFRfQlVHX1JFUE9SVF9MT0dfTUFYX0VOVFJZX0xFTkdUSCkpO1xuICAgIHRoaXMubm93ID0gb3B0aW9ucy5ub3cgPz8gKCgpOiBEYXRlID0+IG5ldyBEYXRlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZW50cnksIHN0YW1wZWQgd2l0aCB0aGUgY3VycmVudCB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlbnRyeSdzIHRleHQuXG4gICAqL1xuICBwdWJsaWMgYWRkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRleHQgPSBtZXNzYWdlLmxlbmd0aCA+IHRoaXMubWF4RW50cnlMZW5ndGhcbiAgICAgID8gbWVzc2FnZS5zbGljZSgwLCB0aGlzLm1heEVudHJ5TGVuZ3RoKSArIFRSVU5DQVRJT05fTUFSS0VSXG4gICAgICA6IG1lc3NhZ2U7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goYCR7dGhpcy5ub3coKS50b0lTT1N0cmluZygpfSAke3RleHR9YCk7XG4gICAgaWYgKHRoaXMuZW50cmllcy5sZW5ndGggPiB0aGlzLm1heEVudHJpZXMpIHtcbiAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoMCwgdGhpcy5lbnRyaWVzLmxlbmd0aCAtIHRoaXMubWF4RW50cmllcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZXZlcnkgZW50cnkuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZW50cmllcywgb2xkZXN0IGZpcnN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZW50cmllcy5cbiAgICovXG4gIHB1YmxpYyBnZXRFbnRyaWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllc107XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcG90ZW50aWFsbHkgcHJpdmF0ZSBkaWFnbm9zdGljIHNlY3Rpb24gaG9sZGluZyB0aGUgZW50cmllcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgdG9TZWN0aW9uKG9wdGlvbnM6IEJ1Z1JlcG9ydExvZ0J1ZmZlclRvU2VjdGlvbk9wdGlvbnMgPSB7fSk6IEJ1Z1JlcG9ydERpYWdub3N0aWNTZWN0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogdGhpcy5lbnRyaWVzLmxlbmd0aCA9PT0gMCA/ICcobm8gbG9nIGVudHJpZXMpJyA6IHRoaXMuZW50cmllcy5qb2luKCdcXG4nKSxcbiAgICAgIGlkOiBvcHRpb25zLmlkID8/ICdsb2dzJyxcbiAgICAgIGlzUG90ZW50aWFsbHlQcml2YXRlOiB0cnVlLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUgPz8gJ0xvZ3MnXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHBvdGVudGlhbGx5IHByaXZhdGUgZGlhZ25vc3RpYyBzZWN0aW9uIGhvbGRpbmcgdGhlIHBsdWdpbidzIHNldHRpbmdzIGFzIEpTT04sIHdpdGggdGhlIHZhbHVlc1xuICogb2Yge0BsaW5rIENyZWF0ZVNldHRpbmdzRGlhZ25vc3RpY1NlY3Rpb25QYXJhbXMuc2VjcmV0S2V5c30gcmVkYWN0ZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHNlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXR0aW5nc0RpYWdub3N0aWNTZWN0aW9uKHBhcmFtczogQ3JlYXRlU2V0dGluZ3NEaWFnbm9zdGljU2VjdGlvblBhcmFtcyk6IEJ1Z1JlcG9ydERpYWdub3N0aWNTZWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBKU09OLnN0cmluZ2lmeShyZWRhY3RTZXR0aW5ncyhwYXJhbXMuc2V0dGluZ3MsIHBhcmFtcy5zZWNyZXRLZXlzID8/IFtdKSwgbnVsbCwgSlNPTl9JTkRFTlQpID8/ICd1bmRlZmluZWQnLFxuICAgIGlkOiBwYXJhbXMuaWQgPz8gJ3NldHRpbmdzJyxcbiAgICBpc1BvdGVudGlhbGx5UHJpdmF0ZTogdHJ1ZSxcbiAgICB0aXRsZTogcGFyYW1zLnRpdGxlID8/ICdQbHVnaW4gc2V0dGluZ3MnXG4gIH07XG59XG5cbi8qKlxuICogUmVuZGVycyBkaWFnbm9zdGljIHNlY3Rpb25zIGFzIE1hcmtkb3duOiBhIGxldmVsLTMgaGVhZGluZyBhbmQgYSBmZW5jZWQgY29kZSBibG9jayBwZXIgc2VjdGlvbi4gVGhlXG4gKiBmZW5jZSBpcyBsb25nZXIgdGhhbiBhbnkgcnVuIG9mIGJhY2t0aWNrcyBpbiB0aGUgY29udGVudCwgc28gbm8gY29udGVudCBjYW4gY2xvc2UgaXQuXG4gKlxuICogQHBhcmFtIHNlY3Rpb25zIC0gVGhlIHNlY3Rpb25zLlxuICogQHJldHVybnMgVGhlIE1hcmtkb3duLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGVyZSBhcmUgbm8gc2VjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCdWdSZXBvcnREaWFnbm9zdGljcyhzZWN0aW9uczogcmVhZG9ubHkgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb25bXSk6IHN0cmluZyB7XG4gIHJldHVybiBzZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICBjb25zdCBmZW5jZSA9IGdldE1hcmtkb3duRmVuY2Uoc2VjdGlvbi5jb250ZW50KTtcbiAgICByZXR1cm4gYCMjIyAke3NlY3Rpb24udGl0bGV9XFxuXFxuJHtmZW5jZX1cXG4ke3NlY3Rpb24uY29udGVudH1cXG4ke2ZlbmNlfWA7XG4gIH0pLmpvaW4oJ1xcblxcbicpO1xufVxuXG4vKipcbiAqIEdldHMgYSBNYXJrZG93biBjb2RlIGZlbmNlIHRoYXQgdGhlIGdpdmVuIGNvbnRlbnQgY2Fubm90IGNsb3NlLlxuICpcbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgdG8gZmVuY2UuXG4gKiBAcmV0dXJucyBBIHJ1biBvZiBiYWNrdGlja3MgbG9uZ2VyIHRoYW4gdGhlIGxvbmdlc3QgcnVuIGluIHRoZSBjb250ZW50LCBhbmQgYXQgbGVhc3QgdGhyZWUgbG9uZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmVuY2UoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGxvbmdlc3RSdW4gPSAwO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbnRlbnQubWF0Y2hBbGwoL2ArL2cpKSB7XG4gICAgbG9uZ2VzdFJ1biA9IE1hdGgubWF4KGxvbmdlc3RSdW4sIG1hdGNoWzBdLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuICdgJy5yZXBlYXQoTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbG9uZ2VzdFJ1biArIDEpKTtcbn1cblxuLyoqXG4gKiBDb3BpZXMgc2V0dGluZ3MsIHJlcGxhY2luZyB0aGUgdmFsdWUgb2YgZXZlcnkga2V5IGluIGBzZWNyZXRLZXlzYCwgYXQgYW55IGRlcHRoIGFuZCBjb21wYXJlZCB3aXRob3V0XG4gKiBjYXNlLCB3aXRoIHtAbGluayBSRURBQ1RFRF9WQUxVRX0uIFRoZSBvcmlnaW5hbCBpcyBub3QgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gc2V0dGluZ3MgLSBUaGUgc2V0dGluZ3MuXG4gKiBAcGFyYW0gc2VjcmV0S2V5cyAtIFRoZSBrZXlzIHRvIHJlZGFjdC5cbiAqIEByZXR1cm5zIFRoZSByZWRhY3RlZCBjb3B5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkYWN0U2V0dGluZ3Moc2V0dGluZ3M6IHVua25vd24sIHNlY3JldEtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGNvbnN0IGxvd2VyQ2FzZVNlY3JldEtleXMgPSBuZXcgU2V0KHNlY3JldEtleXMubWFwKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gIHJldHVybiByZWRhY3RWYWx1ZShzZXR0aW5ncywgbG93ZXJDYXNlU2VjcmV0S2V5cywgbmV3IFdlYWtTZXQoKSk7XG59XG5cbmZ1bmN0aW9uIHJlZGFjdFZhbHVlKHZhbHVlOiB1bmtub3duLCBsb3dlckNhc2VTZWNyZXRLZXlzOiBSZWFkb25seVNldDxzdHJpbmc+LCBzZWVuOiBXZWFrU2V0PG9iamVjdD4pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuICdbY2lyY3VsYXJdJztcbiAgfVxuICBzZWVuLmFkZCh2YWx1ZSk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsdWUubWFwKChpdGVtOiB1bmtub3duKSA9PiByZWRhY3RWYWx1ZShpdGVtLCBsb3dlckNhc2VTZWNyZXRLZXlzLCBzZWVuKSk7XG4gICAgc2Vlbi5kZWxldGUodmFsdWUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgIHJlc3VsdFtrZXldID0gbG93ZXJDYXNlU2VjcmV0S2V5cy5oYXMoa2V5LnRvTG93ZXJDYXNlKCkpID8gUkVEQUNURURfVkFMVUUgOiByZWRhY3RWYWx1ZShjaGlsZCwgbG93ZXJDYXNlU2VjcmV0S2V5cywgc2Vlbik7XG4gIH1cbiAgc2Vlbi5kZWxldGUodmFsdWUpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzSE8sTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSxxQ0FBcUM7QUFLM0MsTUFBTSwwQ0FBMEM7QUFFdkQsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sbUJBQW1CO0FB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
@@ -0,0 +1,186 @@
1
+ /// <reference path="./library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Optional diagnostics a plugin can attach to a bug report: sections of text the user reviews before
6
+ * anything leaves Obsidian, a bounded log buffer, and redaction of a plugin's own settings.
7
+ *
8
+ * Nothing here reads logs or settings by itself. A log buffer holds only what the plugin wrote to it since
9
+ * the buffer was created, never the console's history, and a settings section holds only the object the
10
+ * plugin hands over. Redaction replaces the values of caller-declared keys; it is not a promise to find
11
+ * every secret, which is why every section is shown to the user, and a potentially private one is left
12
+ * out unless the user includes it.
13
+ */
14
+ /**
15
+ * A section of diagnostics for a bug report.
16
+ */
17
+ export interface BugReportDiagnosticSection {
18
+ /**
19
+ * The section's text, shown to the user and sent as written.
20
+ */
21
+ readonly content: string;
22
+ /**
23
+ * A stable id, unique among the sections of one report.
24
+ */
25
+ readonly id: string;
26
+ /**
27
+ * Whether the section can hold private data, such as logs or settings. A potentially private section is
28
+ * left out of the report unless the user includes it.
29
+ *
30
+ * @default `false`
31
+ */
32
+ readonly isPotentiallyPrivate?: boolean;
33
+ /**
34
+ * The section's title.
35
+ */
36
+ readonly title: string;
37
+ }
38
+ /**
39
+ * Constructor parameters for {@link BugReportLogBuffer}.
40
+ */
41
+ export interface BugReportLogBufferConstructorOptions {
42
+ /**
43
+ * The most entries kept. Older entries are dropped first.
44
+ *
45
+ * @default {@link DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES}
46
+ */
47
+ readonly maxEntries?: number;
48
+ /**
49
+ * The most characters kept of one entry. A longer entry is cut, and says so.
50
+ *
51
+ * @default {@link DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH}
52
+ */
53
+ readonly maxEntryLength?: number;
54
+ /**
55
+ * Gets the current time. For tests.
56
+ *
57
+ * @default `() => new Date()`
58
+ */
59
+ readonly now?: () => Date;
60
+ }
61
+ /**
62
+ * Parameters for {@link BugReportLogBuffer.toSection}.
63
+ */
64
+ export interface BugReportLogBufferToSectionOptions {
65
+ /**
66
+ * The section's id.
67
+ *
68
+ * @default `'logs'`
69
+ */
70
+ readonly id?: string;
71
+ /**
72
+ * The section's title.
73
+ *
74
+ * @default `'Logs'`
75
+ */
76
+ readonly title?: string;
77
+ }
78
+ /**
79
+ * Parameters for {@link createSettingsDiagnosticSection}.
80
+ */
81
+ export interface CreateSettingsDiagnosticSectionParams {
82
+ /**
83
+ * The section's id.
84
+ *
85
+ * @default `'settings'`
86
+ */
87
+ readonly id?: string;
88
+ /**
89
+ * The keys whose values are replaced with {@link REDACTED_VALUE}, at any depth, compared without case.
90
+ */
91
+ readonly secretKeys?: readonly string[];
92
+ /**
93
+ * The reporting plugin's own settings, such as its `data.json`.
94
+ */
95
+ readonly settings: unknown;
96
+ /**
97
+ * The section's title.
98
+ *
99
+ * @default `'Plugin settings'`
100
+ */
101
+ readonly title?: string;
102
+ }
103
+ /**
104
+ * The value that replaces a redacted setting.
105
+ */
106
+ export declare const REDACTED_VALUE = "[redacted]";
107
+ /**
108
+ * The default number of entries a {@link BugReportLogBuffer} keeps.
109
+ */
110
+ export declare const DEFAULT_BUG_REPORT_LOG_MAX_ENTRIES = 200;
111
+ /**
112
+ * The default number of characters a {@link BugReportLogBuffer} keeps of one entry.
113
+ */
114
+ export declare const DEFAULT_BUG_REPORT_LOG_MAX_ENTRY_LENGTH = 2000;
115
+ /**
116
+ * A bounded buffer of log entries a plugin writes for its bug reports. It keeps only what the plugin adds
117
+ * after creating it, at most {@link BugReportLogBufferConstructorOptions.maxEntries} entries, each cut to
118
+ * {@link BugReportLogBufferConstructorOptions.maxEntryLength} characters.
119
+ */
120
+ export declare class BugReportLogBuffer {
121
+ private readonly entries;
122
+ private readonly maxEntries;
123
+ private readonly maxEntryLength;
124
+ private readonly now;
125
+ /**
126
+ * Constructs a new instance.
127
+ *
128
+ * @param options - Constructor options.
129
+ */
130
+ constructor(options?: BugReportLogBufferConstructorOptions);
131
+ /**
132
+ * Adds an entry, stamped with the current time.
133
+ *
134
+ * @param message - The entry's text.
135
+ */
136
+ add(message: string): void;
137
+ /**
138
+ * Removes every entry.
139
+ */
140
+ clear(): void;
141
+ /**
142
+ * Gets the entries, oldest first.
143
+ *
144
+ * @returns The entries.
145
+ */
146
+ getEntries(): readonly string[];
147
+ /**
148
+ * Builds a potentially private diagnostic section holding the entries.
149
+ *
150
+ * @param options - The options.
151
+ * @returns The section.
152
+ */
153
+ toSection(options?: BugReportLogBufferToSectionOptions): BugReportDiagnosticSection;
154
+ }
155
+ /**
156
+ * Builds a potentially private diagnostic section holding the plugin's settings as JSON, with the values
157
+ * of {@link CreateSettingsDiagnosticSectionParams.secretKeys} redacted.
158
+ *
159
+ * @param params - The parameters.
160
+ * @returns The section.
161
+ */
162
+ export declare function createSettingsDiagnosticSection(params: CreateSettingsDiagnosticSectionParams): BugReportDiagnosticSection;
163
+ /**
164
+ * Renders diagnostic sections as Markdown: a level-3 heading and a fenced code block per section. The
165
+ * fence is longer than any run of backticks in the content, so no content can close it.
166
+ *
167
+ * @param sections - The sections.
168
+ * @returns The Markdown, or an empty string when there are no sections.
169
+ */
170
+ export declare function formatBugReportDiagnostics(sections: readonly BugReportDiagnosticSection[]): string;
171
+ /**
172
+ * Gets a Markdown code fence that the given content cannot close.
173
+ *
174
+ * @param content - The content to fence.
175
+ * @returns A run of backticks longer than the longest run in the content, and at least three long.
176
+ */
177
+ export declare function getMarkdownFence(content: string): string;
178
+ /**
179
+ * Copies settings, replacing the value of every key in `secretKeys`, at any depth and compared without
180
+ * case, with {@link REDACTED_VALUE}. The original is not changed.
181
+ *
182
+ * @param settings - The settings.
183
+ * @param secretKeys - The keys to redact.
184
+ * @returns The redacted copy.
185
+ */
186
+ export declare function redactSettings(settings: unknown, secretKeys: readonly string[]): unknown;