obsidian-dev-utils 17.10.0 → 17.10.2-beta.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 (152) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +4 -2
  3. package/dist/lib/Async.mjs +154 -0
  4. package/dist/lib/Blob.mjs +81 -0
  5. package/dist/lib/CssClass.mjs +32 -0
  6. package/dist/lib/Debug.mjs +137 -0
  7. package/dist/lib/DebugController.mjs +8 -0
  8. package/dist/lib/Enum.mjs +26 -0
  9. package/dist/lib/Error.mjs +82 -0
  10. package/dist/lib/Function.mjs +28 -0
  11. package/dist/lib/HTMLElement.mjs +65 -0
  12. package/dist/lib/Library.cjs +2 -2
  13. package/dist/lib/Library.mjs +16 -0
  14. package/dist/lib/Object.cjs +1 -1
  15. package/dist/lib/Object.d.ts +16 -0
  16. package/dist/lib/Object.mjs +273 -0
  17. package/dist/lib/Path.mjs +76 -0
  18. package/dist/lib/RegExp.mjs +23 -0
  19. package/dist/lib/String.mjs +119 -0
  20. package/dist/lib/Transformers/DateTransformer.cjs +71 -0
  21. package/dist/lib/Transformers/DateTransformer.d.ts +35 -0
  22. package/dist/lib/Transformers/DateTransformer.mjs +47 -0
  23. package/dist/lib/Transformers/GroupTransformer.cjs +118 -0
  24. package/dist/lib/Transformers/GroupTransformer.d.ts +65 -0
  25. package/dist/lib/Transformers/GroupTransformer.mjs +94 -0
  26. package/dist/lib/Transformers/SkipPrivatePropertyTransformer.cjs +69 -0
  27. package/dist/lib/Transformers/SkipPrivatePropertyTransformer.d.ts +32 -0
  28. package/dist/lib/Transformers/SkipPrivatePropertyTransformer.mjs +45 -0
  29. package/dist/lib/Transformers/Transformer.cjs +107 -0
  30. package/dist/lib/Transformers/Transformer.d.ts +67 -0
  31. package/dist/lib/Transformers/Transformer.mjs +83 -0
  32. package/dist/lib/Transformers/TypedTransformer.cjs +38 -0
  33. package/dist/lib/Transformers/TypedTransformer.d.ts +37 -0
  34. package/dist/lib/Transformers/TypedTransformer.mjs +14 -0
  35. package/dist/lib/Transformers/index.cjs +58 -0
  36. package/dist/lib/Transformers/index.d.ts +5 -0
  37. package/dist/lib/Transformers/index.mjs +20 -0
  38. package/dist/lib/ValueProvider.mjs +20 -0
  39. package/dist/lib/codemirror/StateFieldSpec.mjs +8 -0
  40. package/dist/lib/codemirror/index.mjs +12 -0
  41. package/dist/lib/index.cjs +4 -4
  42. package/dist/lib/index.d.ts +1 -1
  43. package/dist/lib/index.mjs +50 -0
  44. package/dist/lib/obsidian/App.mjs +33 -0
  45. package/dist/lib/obsidian/AttachmentPath.mjs +82 -0
  46. package/dist/lib/obsidian/Backlink.mjs +88 -0
  47. package/dist/lib/obsidian/Callout.mjs +71 -0
  48. package/dist/lib/obsidian/Components/DateComponent.mjs +43 -0
  49. package/dist/lib/obsidian/Components/DateTimeComponent.mjs +43 -0
  50. package/dist/lib/obsidian/Components/EmailComponent.mjs +32 -0
  51. package/dist/lib/obsidian/Components/FileComponent.mjs +48 -0
  52. package/dist/lib/obsidian/Components/MonthComponent.mjs +51 -0
  53. package/dist/lib/obsidian/Components/MultipleDropdownComponent.mjs +88 -0
  54. package/dist/lib/obsidian/Components/MultipleEmailComponent.mjs +42 -0
  55. package/dist/lib/obsidian/Components/MultipleFileComponent.mjs +49 -0
  56. package/dist/lib/obsidian/Components/NumberComponent.mjs +32 -0
  57. package/dist/lib/obsidian/Components/TimeComponent.mjs +53 -0
  58. package/dist/lib/obsidian/Components/TypedRangeTextComponent.mjs +44 -0
  59. package/dist/lib/obsidian/Components/TypedTextComponent.mjs +107 -0
  60. package/dist/lib/obsidian/Components/UrlComponent.mjs +32 -0
  61. package/dist/lib/obsidian/Components/ValidatorComponent.mjs +52 -0
  62. package/dist/lib/obsidian/Components/ValueComponentWithChangeTracking.mjs +9 -0
  63. package/dist/lib/obsidian/Components/WeekComponent.mjs +51 -0
  64. package/dist/lib/obsidian/Components/index.mjs +42 -0
  65. package/dist/lib/obsidian/Dataview.mjs +232 -0
  66. package/dist/lib/obsidian/DataviewLink.mjs +27 -0
  67. package/dist/lib/obsidian/FileChange.mjs +123 -0
  68. package/dist/lib/obsidian/FileManager.mjs +66 -0
  69. package/dist/lib/obsidian/FileSystem.mjs +197 -0
  70. package/dist/lib/obsidian/Frontmatter.mjs +32 -0
  71. package/dist/lib/obsidian/Link.mjs +415 -0
  72. package/dist/lib/obsidian/Logger.mjs +45 -0
  73. package/dist/lib/obsidian/Loop.mjs +39 -0
  74. package/dist/lib/obsidian/Markdown.mjs +40 -0
  75. package/dist/lib/obsidian/MarkdownCodeBlockProcessor.mjs +44 -0
  76. package/dist/lib/obsidian/MarkdownView.mjs +21 -0
  77. package/dist/lib/obsidian/MetadataCache.mjs +219 -0
  78. package/dist/lib/obsidian/Modals/Alert.mjs +52 -0
  79. package/dist/lib/obsidian/Modals/Confirm.mjs +65 -0
  80. package/dist/lib/obsidian/Modals/Prompt.mjs +98 -0
  81. package/dist/lib/obsidian/Modals/SelectItem.mjs +51 -0
  82. package/dist/lib/obsidian/Modals/index.mjs +18 -0
  83. package/dist/lib/obsidian/ObsidianSettings.mjs +18 -0
  84. package/dist/lib/obsidian/Pdf.mjs +42 -0
  85. package/dist/lib/obsidian/Plugin/EmptySettings.mjs +14 -0
  86. package/dist/lib/obsidian/Plugin/ObsidianPluginRepoPaths.mjs +35 -0
  87. package/dist/lib/obsidian/Plugin/Plugin.mjs +28 -0
  88. package/dist/lib/obsidian/Plugin/PluginBase.mjs +148 -0
  89. package/dist/lib/obsidian/Plugin/PluginContext.mjs +45 -0
  90. package/dist/lib/obsidian/Plugin/PluginId.mjs +23 -0
  91. package/dist/lib/obsidian/Plugin/PluginSettingsBase.cjs +13 -9
  92. package/dist/lib/obsidian/Plugin/PluginSettingsBase.mjs +63 -0
  93. package/dist/lib/obsidian/Plugin/PluginSettingsTabBase.cjs +1 -1
  94. package/dist/lib/obsidian/Plugin/PluginSettingsTabBase.d.ts +1 -1
  95. package/dist/lib/obsidian/Plugin/PluginSettingsTabBase.mjs +101 -0
  96. package/dist/lib/obsidian/Plugin/index.mjs +26 -0
  97. package/dist/lib/obsidian/Queue.mjs +50 -0
  98. package/dist/lib/obsidian/Reference.mjs +45 -0
  99. package/dist/lib/obsidian/RenameDeleteHandler.mjs +436 -0
  100. package/dist/lib/obsidian/ResourceUrl.mjs +19 -0
  101. package/dist/lib/obsidian/SettingEx.mjs +148 -0
  102. package/dist/lib/obsidian/Vault.mjs +248 -0
  103. package/dist/lib/obsidian/VaultEx.mjs +71 -0
  104. package/dist/lib/obsidian/index.mjs +68 -0
  105. package/dist/lib/scripts/CliUtils.mjs +135 -0
  106. package/dist/lib/scripts/CodeGenerator.mjs +19 -0
  107. package/dist/lib/scripts/ESLint/ESLint.cjs +2 -2
  108. package/dist/lib/scripts/ESLint/ESLint.mjs +68 -0
  109. package/dist/lib/scripts/ESLint/eslint.config.mjs +287 -0
  110. package/dist/lib/scripts/ESLint/index.mjs +14 -0
  111. package/dist/lib/scripts/Exec.mjs +98 -0
  112. package/dist/lib/scripts/Fs.mjs +64 -0
  113. package/dist/lib/scripts/JSON.mjs +60 -0
  114. package/dist/lib/scripts/NodeModules.mjs +62 -0
  115. package/dist/lib/scripts/Npm.mjs +106 -0
  116. package/dist/lib/scripts/NpmPublish.mjs +21 -0
  117. package/dist/lib/scripts/ObsidianDevUtilsRepoPaths.cjs +5 -1
  118. package/dist/lib/scripts/ObsidianDevUtilsRepoPaths.d.ts +8 -0
  119. package/dist/lib/scripts/ObsidianDevUtilsRepoPaths.mjs +44 -0
  120. package/dist/lib/scripts/Root.mjs +66 -0
  121. package/dist/lib/scripts/build.mjs +60 -0
  122. package/dist/lib/scripts/cli.cjs +2 -2
  123. package/dist/lib/scripts/cli.mjs +65 -0
  124. package/dist/lib/scripts/esbuild/Dependency.cjs +2 -2
  125. package/dist/lib/scripts/esbuild/Dependency.mjs +95 -0
  126. package/dist/lib/scripts/esbuild/ObsidianPluginBuilder.mjs +149 -0
  127. package/dist/lib/scripts/esbuild/changeExtensionPlugin.cjs +67 -0
  128. package/dist/lib/scripts/esbuild/changeExtensionPlugin.d.ts +12 -0
  129. package/dist/lib/scripts/esbuild/changeExtensionPlugin.mjs +43 -0
  130. package/dist/lib/scripts/esbuild/copyToObsidianPluginsFolderPlugin.mjs +50 -0
  131. package/dist/lib/scripts/esbuild/fixEsmPlugin.mjs +25 -0
  132. package/dist/lib/scripts/esbuild/fixSourceMapsPlugin.mjs +55 -0
  133. package/dist/lib/scripts/esbuild/index.cjs +4 -4
  134. package/dist/lib/scripts/esbuild/index.d.ts +1 -1
  135. package/dist/lib/scripts/esbuild/index.mjs +28 -0
  136. package/dist/lib/scripts/esbuild/preprocessPlugin.cjs +4 -4
  137. package/dist/lib/scripts/esbuild/preprocessPlugin.d.ts +2 -1
  138. package/dist/lib/scripts/esbuild/preprocessPlugin.mjs +112 -0
  139. package/dist/lib/scripts/esbuild/renameCssPlugin.mjs +31 -0
  140. package/dist/lib/scripts/esbuild/svelteWrapperPlugin.mjs +41 -0
  141. package/dist/lib/scripts/format.cjs +2 -2
  142. package/dist/lib/scripts/format.mjs +41 -0
  143. package/dist/lib/scripts/index.mjs +44 -0
  144. package/dist/lib/scripts/spellcheck.mjs +15 -0
  145. package/dist/lib/scripts/version.mjs +361 -0
  146. package/dist/lib/url.mjs +25 -0
  147. package/dist/styles.css +19 -56
  148. package/package.json +161 -173
  149. package/dist/lib/@types.cjs +0 -24
  150. package/dist/lib/@types.d.ts +0 -20
  151. package/dist/lib/scripts/esbuild/renameToCjsPlugin.cjs +0 -60
  152. package/dist/lib/scripts/esbuild/renameToCjsPlugin.d.ts +0 -14
@@ -0,0 +1,44 @@
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 init(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;if(!require.__isPatched){const originalRequire=require;require=Object.assign(id=>requirePatched(id,originalRequire),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>({browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"}),"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&module.default?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id,originalRequire){const module=originalRequire(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})()
7
+
8
+ import { parse } from "shell-quote";
9
+ import { throwExpression } from "../Error.mjs";
10
+ import { replaceAll } from "../String.mjs";
11
+ import { resolveValue } from "../ValueProvider.mjs";
12
+ import { process } from "./Vault.mjs";
13
+ function getCodeBlockArguments(ctx, el) {
14
+ const sectionInfo = ctx.getSectionInfo(el);
15
+ if (!sectionInfo) {
16
+ return [];
17
+ }
18
+ const lines = sectionInfo.text.split("\n");
19
+ const codeBlockHeader = lines[sectionInfo.lineStart] ?? throwExpression(new Error("Code block header not found"));
20
+ const match = /^`{3,}\S+\s+(?<Arguments>.*)$/.exec(codeBlockHeader);
21
+ if (!match) {
22
+ return [];
23
+ }
24
+ return parse(match.groups?.["Arguments"] ?? "").map(String);
25
+ }
26
+ async function replaceCodeBlock(app, ctx, el, codeBlockProvider) {
27
+ const sectionInfo = ctx.getSectionInfo(el);
28
+ if (!sectionInfo) {
29
+ return;
30
+ }
31
+ const lines = sectionInfo.text.split("\n");
32
+ const prefix = lines.slice(0, sectionInfo.lineStart).join("\n");
33
+ const oldCodeBlock = lines.slice(sectionInfo.lineStart, sectionInfo.lineEnd + 1).join("\n");
34
+ const suffix = lines.slice(sectionInfo.lineEnd + 1).join("\n");
35
+ const newCodeBlock = await resolveValue(codeBlockProvider, oldCodeBlock);
36
+ const newSectionText = `${prefix}
37
+ ${newCodeBlock}${newCodeBlock ? "\n" : ""}${suffix}`;
38
+ await process(app, ctx.sourcePath, (content) => replaceAll(content, sectionInfo.text, newSectionText));
39
+ }
40
+ export {
41
+ getCodeBlockArguments,
42
+ replaceCodeBlock
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvclxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHByb2Nlc3NpbmcgY29kZSBibG9ja3MgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5cbmltcG9ydCB7IHRocm93RXhwcmVzc2lvbiB9IGZyb20gJy4uL0Vycm9yLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhcmd1bWVudCBvZiBhIGNvZGUgYmxvY2sgZnJvbSB0aGUgZ2l2ZW4gTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCBhbmQgSFRNTEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0IG9iamVjdC5cbiAqIEBwYXJhbSBlbCAtIFRoZSBIVE1MRWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvZGUgYmxvY2suXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgb2YgdGhlIGNvZGUgYmxvY2sgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgbm8gYXJndW1lbnQgaXMgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2RlQmxvY2tBcmd1bWVudHMoY3R4OiBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LCBlbDogSFRNTEVsZW1lbnQpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNlY3Rpb25JbmZvID0gY3R4LmdldFNlY3Rpb25JbmZvKGVsKTtcbiAgaWYgKCFzZWN0aW9uSW5mbykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBsaW5lcyA9IHNlY3Rpb25JbmZvLnRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBjb2RlQmxvY2tIZWFkZXIgPSBsaW5lc1tzZWN0aW9uSW5mby5saW5lU3RhcnRdID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoJ0NvZGUgYmxvY2sgaGVhZGVyIG5vdCBmb3VuZCcpKTtcbiAgY29uc3QgbWF0Y2ggPSAvXmB7Myx9XFxTK1xccysoPzxBcmd1bWVudHM+LiopJC8uZXhlYyhjb2RlQmxvY2tIZWFkZXIpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBwYXJzZShtYXRjaC5ncm91cHM/LlsnQXJndW1lbnRzJ10gPz8gJycpLm1hcChTdHJpbmcpO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIG9iamVjdC5cbiAqIEBwYXJhbSBjdHggLSBUaGUgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCBvYmplY3QuXG4gKiBAcGFyYW0gZWwgLSBUaGUgSFRNTEVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb2RlIGJsb2NrLlxuICogQHBhcmFtIGNvZGVCbG9ja1Byb3ZpZGVyIC0gVGhlIFZhbHVlUHJvdmlkZXIgdGhhdCBwcm92aWRlcyB0aGUgbmV3IGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQ29kZUJsb2NrKFxuICBhcHA6IEFwcCxcbiAgY3R4OiBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICBlbDogSFRNTEVsZW1lbnQsXG4gIGNvZGVCbG9ja1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPHN0cmluZywgW3N0cmluZ10+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc2VjdGlvbkluZm8gPSBjdHguZ2V0U2VjdGlvbkluZm8oZWwpO1xuICBpZiAoIXNlY3Rpb25JbmZvKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGxpbmVzID0gc2VjdGlvbkluZm8udGV4dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHByZWZpeCA9IGxpbmVzLnNsaWNlKDAsIHNlY3Rpb25JbmZvLmxpbmVTdGFydCkuam9pbignXFxuJyk7XG4gIGNvbnN0IG9sZENvZGVCbG9jayA9IGxpbmVzLnNsaWNlKHNlY3Rpb25JbmZvLmxpbmVTdGFydCwgc2VjdGlvbkluZm8ubGluZUVuZCArIDEpLmpvaW4oJ1xcbicpO1xuICBjb25zdCBzdWZmaXggPSBsaW5lcy5zbGljZShzZWN0aW9uSW5mby5saW5lRW5kICsgMSkuam9pbignXFxuJyk7XG4gIGNvbnN0IG5ld0NvZGVCbG9jayA9IGF3YWl0IHJlc29sdmVWYWx1ZShjb2RlQmxvY2tQcm92aWRlciwgb2xkQ29kZUJsb2NrKTtcbiAgY29uc3QgbmV3U2VjdGlvblRleHQgPSBgJHtwcmVmaXh9XFxuJHtuZXdDb2RlQmxvY2t9JHtuZXdDb2RlQmxvY2sgPyAnXFxuJyA6ICcnfSR7c3VmZml4fWA7XG4gIGF3YWl0IHByb2Nlc3MoYXBwLCBjdHguc291cmNlUGF0aCwgKGNvbnRlbnQpID0+IHJlcGxhY2VBbGwoY29udGVudCwgc2VjdGlvbkluZm8udGV4dCwgbmV3U2VjdGlvblRleHQpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFVQSxTQUFTLGFBQWE7QUFJdEIsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxlQUFlO0FBU2pCLFNBQVMsc0JBQXNCLEtBQW1DLElBQTJCO0FBQ2xHLFFBQU0sY0FBYyxJQUFJLGVBQWUsRUFBRTtBQUN6QyxNQUFJLENBQUMsYUFBYTtBQUNoQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0EsUUFBTSxRQUFRLFlBQVksS0FBSyxNQUFNLElBQUk7QUFDekMsUUFBTSxrQkFBa0IsTUFBTSxZQUFZLFNBQVMsS0FBSyxnQkFBZ0IsSUFBSSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hILFFBQU0sUUFBUSxnQ0FBZ0MsS0FBSyxlQUFlO0FBQ2xFLE1BQUksQ0FBQyxPQUFPO0FBQ1YsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNBLFNBQU8sTUFBTSxNQUFNLFNBQVMsV0FBVyxLQUFLLEVBQUUsRUFBRSxJQUFJLE1BQU07QUFDNUQ7QUFVQSxlQUFzQixpQkFDcEIsS0FDQSxLQUNBLElBQ0EsbUJBQ2U7QUFDZixRQUFNLGNBQWMsSUFBSSxlQUFlLEVBQUU7QUFDekMsTUFBSSxDQUFDLGFBQWE7QUFDaEI7QUFBQSxFQUNGO0FBQ0EsUUFBTSxRQUFRLFlBQVksS0FBSyxNQUFNLElBQUk7QUFDekMsUUFBTSxTQUFTLE1BQU0sTUFBTSxHQUFHLFlBQVksU0FBUyxFQUFFLEtBQUssSUFBSTtBQUM5RCxRQUFNLGVBQWUsTUFBTSxNQUFNLFlBQVksV0FBVyxZQUFZLFVBQVUsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUMxRixRQUFNLFNBQVMsTUFBTSxNQUFNLFlBQVksVUFBVSxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQzdELFFBQU0sZUFBZSxNQUFNLGFBQWEsbUJBQW1CLFlBQVk7QUFDdkUsUUFBTSxpQkFBaUIsR0FBRyxNQUFNO0FBQUEsRUFBSyxZQUFZLEdBQUcsZUFBZSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQ3JGLFFBQU0sUUFBUSxLQUFLLElBQUksWUFBWSxDQUFDLFlBQVksV0FBVyxTQUFTLFlBQVksTUFBTSxjQUFjLENBQUM7QUFDdkc7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,21 @@
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 init(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;if(!require.__isPatched){const originalRequire=require;require=Object.assign(id=>requirePatched(id,originalRequire),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>({browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"}),"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&module.default?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id,originalRequire){const module=originalRequire(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})()
7
+
8
+ import { MarkdownView } from "obsidian";
9
+ function getFullContentHtml(view) {
10
+ const codeMirror = view.editor.cm;
11
+ codeMirror.viewState.printing = true;
12
+ codeMirror.measure();
13
+ const html = view.contentEl.innerHTML;
14
+ codeMirror.viewState.printing = false;
15
+ codeMirror.measure();
16
+ return html;
17
+ }
18
+ export {
19
+ getFullContentHtml
20
+ };
21
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duVmlldy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gTWFya2Rvd25WaWV3XG4gKiBVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBNYXJrZG93blZpZXdcbiAqL1xuXG5pbXBvcnQgeyBNYXJrZG93blZpZXcgfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogR2V0IHRoZSBmdWxsIEhUTUwgY29udGVudCBvZiB0aGUgY3VycmVudCBNYXJrZG93blZpZXdcbiAqXG4gKiBAcGFyYW0gdmlldyAtIFRoZSBNYXJrZG93blZpZXcgdG8gZ2V0IHRoZSBIVE1MIGZyb21cbiAqIEByZXR1cm5zIFRoZSBmdWxsIEhUTUwgb2YgdGhlIE1hcmtkb3duVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVsbENvbnRlbnRIdG1sKHZpZXc6IE1hcmtkb3duVmlldyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvZGVNaXJyb3IgPSB2aWV3LmVkaXRvci5jbTtcbiAgY29kZU1pcnJvci52aWV3U3RhdGUucHJpbnRpbmcgPSB0cnVlO1xuICBjb2RlTWlycm9yLm1lYXN1cmUoKTtcbiAgY29uc3QgaHRtbCA9IHZpZXcuY29udGVudEVsLmlubmVySFRNTDtcbiAgY29kZU1pcnJvci52aWV3U3RhdGUucHJpbnRpbmcgPSBmYWxzZTtcbiAgY29kZU1pcnJvci5tZWFzdXJlKCk7XG4gIHJldHVybiBodG1sO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQUtBLFNBQVMsb0JBQW9CO0FBUXRCLFNBQVMsbUJBQW1CLE1BQTRCO0FBQzdELFFBQU0sYUFBYSxLQUFLLE9BQU87QUFDL0IsYUFBVyxVQUFVLFdBQVc7QUFDaEMsYUFBVyxRQUFRO0FBQ25CLFFBQU0sT0FBTyxLQUFLLFVBQVU7QUFDNUIsYUFBVyxVQUFVLFdBQVc7QUFDaEMsYUFBVyxRQUFRO0FBQ25CLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,219 @@
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 init(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;if(!require.__isPatched){const originalRequire=require;require=Object.assign(id=>requirePatched(id,originalRequire),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>({browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"}),"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&module.default?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id,originalRequire){const module=originalRequire(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})()
7
+
8
+ import { MarkdownView } from "obsidian";
9
+ import {
10
+ isFrontmatterLinkCache,
11
+ isReferenceCache,
12
+ parentFolderPath
13
+ } from "obsidian-typings/implementations";
14
+ import { retryWithTimeout } from "../Async.mjs";
15
+ import { getLibDebugger } from "../Debug.mjs";
16
+ import { noop } from "../Function.mjs";
17
+ import { getNestedPropertyValue } from "../Object.mjs";
18
+ import {
19
+ getFile,
20
+ getFileOrNull,
21
+ getFolder,
22
+ getPath,
23
+ isFile,
24
+ isMarkdownFile
25
+ } from "./FileSystem.mjs";
26
+ import { parseFrontmatter } from "./Frontmatter.mjs";
27
+ import { sortReferences } from "./Reference.mjs";
28
+ import { readSafe } from "./Vault.mjs";
29
+ async function ensureMetadataCacheReady(app) {
30
+ for (const [path, cache] of Object.entries(app.metadataCache.fileCache)) {
31
+ if (!cache.hash) {
32
+ continue;
33
+ }
34
+ if (app.metadataCache.metadataCache[cache.hash]) {
35
+ continue;
36
+ }
37
+ await getCacheSafe(app, path);
38
+ }
39
+ }
40
+ function getAllLinks(cache) {
41
+ let links = [];
42
+ if (cache.links) {
43
+ links.push(...cache.links);
44
+ }
45
+ if (cache.embeds) {
46
+ links.push(...cache.embeds);
47
+ }
48
+ if (cache.frontmatterLinks) {
49
+ links.push(...cache.frontmatterLinks);
50
+ }
51
+ sortReferences(links);
52
+ links = links.filter((link, index) => {
53
+ if (index === 0) {
54
+ return true;
55
+ }
56
+ const previousLink = links[index - 1];
57
+ if (!previousLink) {
58
+ return true;
59
+ }
60
+ if (isReferenceCache(link) && isReferenceCache(previousLink)) {
61
+ return link.position.start.offset !== previousLink.position.start.offset;
62
+ }
63
+ if (isFrontmatterLinkCache(link) && isFrontmatterLinkCache(previousLink)) {
64
+ return link.key !== previousLink.key;
65
+ }
66
+ return true;
67
+ });
68
+ return links;
69
+ }
70
+ function getBacklinksForFileOrPath(app, pathOrFile) {
71
+ const file = getFile(app, pathOrFile, true);
72
+ return tempRegisterFileAndRun(app, file, () => app.metadataCache.getBacklinksForFile(file));
73
+ }
74
+ async function getBacklinksForFileSafe(app, pathOrFile, retryOptions = {}) {
75
+ const safeOverload = app.metadataCache.getBacklinksForFile.safe;
76
+ if (safeOverload) {
77
+ return safeOverload(pathOrFile);
78
+ }
79
+ let backlinks = null;
80
+ await retryWithTimeout(async () => {
81
+ const file = getFile(app, pathOrFile);
82
+ await ensureMetadataCacheReady(app);
83
+ backlinks = getBacklinksForFileOrPath(app, file);
84
+ for (const notePath of backlinks.keys()) {
85
+ const note = getFileOrNull(app, notePath);
86
+ if (!note) {
87
+ return false;
88
+ }
89
+ await saveNote(app, note);
90
+ const content = await readSafe(app, note);
91
+ if (!content) {
92
+ return false;
93
+ }
94
+ const frontmatter = parseFrontmatter(content);
95
+ const links = backlinks.get(notePath);
96
+ if (!links) {
97
+ return false;
98
+ }
99
+ for (const link of links) {
100
+ let actualLink;
101
+ if (isReferenceCache(link)) {
102
+ actualLink = content.slice(link.position.start.offset, link.position.end.offset);
103
+ } else if (isFrontmatterLinkCache(link)) {
104
+ const linkValue = getNestedPropertyValue(frontmatter, link.key);
105
+ if (typeof linkValue !== "string") {
106
+ return false;
107
+ }
108
+ actualLink = linkValue;
109
+ } else {
110
+ return true;
111
+ }
112
+ if (actualLink !== link.original) {
113
+ return false;
114
+ }
115
+ }
116
+ }
117
+ return true;
118
+ }, retryOptions);
119
+ return backlinks;
120
+ }
121
+ async function getCacheSafe(app, fileOrPath, retryOptions = {}) {
122
+ const _debugger = getLibDebugger("MetadataCache:getCacheSafe");
123
+ let cache = null;
124
+ await retryWithTimeout(async () => {
125
+ const file = getFileOrNull(app, fileOrPath);
126
+ if (!file || file.deleted) {
127
+ cache = null;
128
+ return true;
129
+ }
130
+ await saveNote(app, file);
131
+ const fileInfo = app.metadataCache.getFileInfo(file.path);
132
+ const stat = await app.vault.adapter.stat(file.path);
133
+ if (!fileInfo) {
134
+ _debugger(`File cache info for ${file.path} is missing`);
135
+ return false;
136
+ }
137
+ if (!stat) {
138
+ _debugger(`File stat for ${file.path} is missing`);
139
+ return false;
140
+ }
141
+ if (file.stat.mtime < stat.mtime) {
142
+ app.vault.onChange("modified", file.path, void 0, stat);
143
+ _debugger(
144
+ `Cached timestamp for ${file.path} is from ${new Date(file.stat.mtime).toString()} which is older than the file system modification timestamp ${new Date(stat.mtime).toString()}`
145
+ );
146
+ return false;
147
+ }
148
+ if (fileInfo.mtime < stat.mtime) {
149
+ _debugger(
150
+ `File cache info for ${file.path} is from ${new Date(fileInfo.mtime).toString()} which is older than the file modification timestamp ${new Date(stat.mtime).toString()}`
151
+ );
152
+ return false;
153
+ }
154
+ cache = app.metadataCache.getFileCache(file);
155
+ if (!cache) {
156
+ _debugger(`File cache for ${file.path} is missing`);
157
+ return false;
158
+ }
159
+ return true;
160
+ }, retryOptions);
161
+ return cache;
162
+ }
163
+ async function getFrontmatterSafe(app, pathOrFile) {
164
+ const cache = await getCacheSafe(app, pathOrFile);
165
+ return cache?.frontmatter ?? {};
166
+ }
167
+ function registerFile(app, file) {
168
+ if (!file.deleted) {
169
+ return noop;
170
+ }
171
+ const deletedPaths = [];
172
+ let deletedFile = file;
173
+ while (deletedFile.deleted) {
174
+ deletedPaths.push(deletedFile.path);
175
+ app.vault.fileMap[deletedFile.path] = deletedFile;
176
+ deletedFile = deletedFile.parent ?? getFolder(app, parentFolderPath(deletedFile.path), true);
177
+ }
178
+ if (isFile(file)) {
179
+ app.metadataCache.uniqueFileLookup.add(file.name.toLowerCase(), file);
180
+ }
181
+ return () => {
182
+ for (const path of deletedPaths) {
183
+ delete app.vault.fileMap[path];
184
+ }
185
+ if (isFile(file)) {
186
+ app.metadataCache.uniqueFileLookup.remove(file.name.toLowerCase(), file);
187
+ }
188
+ };
189
+ }
190
+ function tempRegisterFileAndRun(app, file, fn) {
191
+ const unregister = registerFile(app, file);
192
+ try {
193
+ return fn();
194
+ } finally {
195
+ unregister();
196
+ }
197
+ }
198
+ async function saveNote(app, pathOrFile) {
199
+ if (!isMarkdownFile(app, pathOrFile)) {
200
+ return;
201
+ }
202
+ const path = getPath(app, pathOrFile);
203
+ for (const leaf of app.workspace.getLeavesOfType("markdown")) {
204
+ if (leaf.view instanceof MarkdownView && leaf.view.file?.path === path) {
205
+ await leaf.view.save();
206
+ }
207
+ }
208
+ }
209
+ export {
210
+ ensureMetadataCacheReady,
211
+ getAllLinks,
212
+ getBacklinksForFileOrPath,
213
+ getBacklinksForFileSafe,
214
+ getCacheSafe,
215
+ getFrontmatterSafe,
216
+ registerFile,
217
+ tempRegisterFileAndRun
218
+ };
219
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL01ldGFkYXRhQ2FjaGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIE1ldGFkYXRhQ2FjaGVcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggdGhlIG1ldGFkYXRhIGNhY2hlIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQXJyYXlEaWN0IH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncyc7XG5cbmltcG9ydCB7IE1hcmtkb3duVmlldyB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7XG4gIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUsXG4gIGlzUmVmZXJlbmNlQ2FjaGUsXG4gIHBhcmVudEZvbGRlclBhdGhcbn0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7IFJldHJ5T3B0aW9ucyB9IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL0Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dCB9IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vRGVidWcudHMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL0Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGdldE5lc3RlZFByb3BlcnR5VmFsdWUgfSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRQYXRoLFxuICBpc0ZpbGUsXG4gIGlzTWFya2Rvd25GaWxlXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgeyBwYXJzZUZyb250bWF0dGVyIH0gZnJvbSAnLi9Gcm9udG1hdHRlci50cyc7XG5pbXBvcnQgeyBzb3J0UmVmZXJlbmNlcyB9IGZyb20gJy4vUmVmZXJlbmNlLnRzJztcbmltcG9ydCB7IHJlYWRTYWZlIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogV3JhcHBlciBmb3IgdGhlIGdldEJhY2tsaW5rc0ZvckZpbGUgbWV0aG9kIHRoYXQgcHJvdmlkZXMgYSBzYWZlIG92ZXJsb2FkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlV3JhcHBlciB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9iamVjdC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgZGljdGlvbmFyeSBvZiBiYWNrbGlua3MuXG4gICAqL1xuICBzYWZlKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+Pjtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgdGhlIG1ldGFkYXRhIGNhY2hlIGlzIHJlYWR5IGZvciBhbGwgZmlsZXMuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1ldGFkYXRhIGNhY2hlIGlzIHJlYWR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcDogQXBwKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAoY29uc3QgW3BhdGgsIGNhY2hlXSBvZiBPYmplY3QuZW50cmllcyhhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGUpKSB7XG4gICAgaWYgKCFjYWNoZS5oYXNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZVtjYWNoZS5oYXNoXSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgZ2V0Q2FjaGVTYWZlKGFwcCwgcGF0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIGxpbmtzIGZyb20gdGhlIHByb3ZpZGVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSBjYWNoZSAtIFRoZSBjYWNoZWQgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiByZWZlcmVuY2UgY2FjaGVzIHJlcHJlc2VudGluZyB0aGUgbGlua3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxMaW5rcyhjYWNoZTogQ2FjaGVkTWV0YWRhdGEpOiBSZWZlcmVuY2VbXSB7XG4gIGxldCBsaW5rczogUmVmZXJlbmNlW10gPSBbXTtcblxuICBpZiAoY2FjaGUubGlua3MpIHtcbiAgICBsaW5rcy5wdXNoKC4uLmNhY2hlLmxpbmtzKTtcbiAgfVxuXG4gIGlmIChjYWNoZS5lbWJlZHMpIHtcbiAgICBsaW5rcy5wdXNoKC4uLmNhY2hlLmVtYmVkcyk7XG4gIH1cblxuICBpZiAoY2FjaGUuZnJvbnRtYXR0ZXJMaW5rcykge1xuICAgIGxpbmtzLnB1c2goLi4uY2FjaGUuZnJvbnRtYXR0ZXJMaW5rcyk7XG4gIH1cblxuICBzb3J0UmVmZXJlbmNlcyhsaW5rcyk7XG5cbiAgLy8gQlVHOiBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYnVnLWR1cGxpY2F0ZWQtbGlua3MtaW4tbWV0YWRhdGFjYWNoZS1pbnNpZGUtZm9vdG5vdGVzLzg1NTUxXG4gIGxpbmtzID0gbGlua3MuZmlsdGVyKChsaW5rLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNMaW5rID0gbGlua3NbaW5kZXggLSAxXTtcbiAgICBpZiAoIXByZXZpb3VzTGluaykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykgJiYgaXNSZWZlcmVuY2VDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICByZXR1cm4gbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQgIT09IHByZXZpb3VzTGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUobGluaykgJiYgaXNGcm9udG1hdHRlckxpbmtDYWNoZShwcmV2aW91c0xpbmspKSB7XG4gICAgICByZXR1cm4gbGluay5rZXkgIT09IHByZXZpb3VzTGluay5rZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBsaW5rcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIG9yIHBhdGguXG4gKiBOT1RFOiBUaGUgZmlsZSBtYXkgYmUgbm9uLWV4aXN0ZW50LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIGJhY2tsaW5rcyBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZShhcHAsIHBhdGhPckZpbGUsIHRydWUpO1xuICByZXR1cm4gdGVtcFJlZ2lzdGVyRmlsZUFuZFJ1bihhcHAsIGZpbGUsICgpID0+IGFwcC5tZXRhZGF0YUNhY2hlLmdldEJhY2tsaW5rc0ZvckZpbGUoZmlsZSkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgc2FmZWx5LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHJldHJ5IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBkaWN0aW9uYXJ5IG9mIGJhY2tsaW5rcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCByZXRyeU9wdGlvbnM6IFJldHJ5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPj4ge1xuICBjb25zdCBzYWZlT3ZlcmxvYWQgPSAoYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZSBhcyBQYXJ0aWFsPEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlV3JhcHBlcj4pLnNhZmU7XG4gIGlmIChzYWZlT3ZlcmxvYWQpIHtcbiAgICByZXR1cm4gc2FmZU92ZXJsb2FkKHBhdGhPckZpbGUpO1xuICB9XG4gIGxldCBiYWNrbGlua3M6IEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+ID0gbnVsbCBhcyB1bmtub3duIGFzIEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+O1xuICBhd2FpdCByZXRyeVdpdGhUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0RmlsZShhcHAsIHBhdGhPckZpbGUpO1xuICAgIGF3YWl0IGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHApO1xuICAgIGJhY2tsaW5rcyA9IGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwLCBmaWxlKTtcbiAgICBmb3IgKGNvbnN0IG5vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICAgIGNvbnN0IG5vdGUgPSBnZXRGaWxlT3JOdWxsKGFwcCwgbm90ZVBhdGgpO1xuICAgICAgaWYgKCFub3RlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBub3RlKTtcblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRTYWZlKGFwcCwgbm90ZSk7XG4gICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuICAgICAgY29uc3QgbGlua3MgPSBiYWNrbGlua3MuZ2V0KG5vdGVQYXRoKTtcbiAgICAgIGlmICghbGlua3MpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgbGV0IGFjdHVhbExpbms6IHN0cmluZztcbiAgICAgICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykpIHtcbiAgICAgICAgICBhY3R1YWxMaW5rID0gY29udGVudC5zbGljZShsaW5rLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCwgbGluay5wb3NpdGlvbi5lbmQub2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyTGlua0NhY2hlKGxpbmspKSB7XG4gICAgICAgICAgY29uc3QgbGlua1ZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgbGluay5rZXkpO1xuICAgICAgICAgIGlmICh0eXBlb2YgbGlua1ZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3R1YWxMaW5rID0gbGlua1ZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3R1YWxMaW5rICE9PSBsaW5rLm9yaWdpbmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0sIHJldHJ5T3B0aW9ucyk7XG5cbiAgcmV0dXJuIGJhY2tsaW5rcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGNhY2hlZCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBmaWxlIG9yIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZU9yUGF0aCAtIFRoZSBmaWxlIG9yIHBhdGggdG8gcmV0cmlldmUgdGhlIG1ldGFkYXRhIGZvci5cbiAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLSBPcHRpb25hbCByZXRyeSBvcHRpb25zIGZvciB0aGUgcmV0cmlldmFsIHByb2Nlc3MuXG4gKiBAcmV0dXJucyBUaGUgY2FjaGVkIG1ldGFkYXRhIGZvciB0aGUgZmlsZSwgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2FjaGVTYWZlKGFwcDogQXBwLCBmaWxlT3JQYXRoOiBQYXRoT3JGaWxlLCByZXRyeU9wdGlvbnM6IFJldHJ5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxDYWNoZWRNZXRhZGF0YSB8IG51bGw+IHtcbiAgY29uc3QgX2RlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ01ldGFkYXRhQ2FjaGU6Z2V0Q2FjaGVTYWZlJyk7XG5cbiAgbGV0IGNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwgPSBudWxsO1xuXG4gIGF3YWl0IHJldHJ5V2l0aFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBnZXRGaWxlT3JOdWxsKGFwcCwgZmlsZU9yUGF0aCk7XG5cbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgICBjYWNoZSA9IG51bGw7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlTm90ZShhcHAsIGZpbGUpO1xuXG4gICAgY29uc3QgZmlsZUluZm8gPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlSW5mbyhmaWxlLnBhdGgpO1xuICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5zdGF0KGZpbGUucGF0aCk7XG5cbiAgICBpZiAoIWZpbGVJbmZvKSB7XG4gICAgICBfZGVidWdnZXIoYEZpbGUgY2FjaGUgaW5mbyBmb3IgJHtmaWxlLnBhdGh9IGlzIG1pc3NpbmdgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzdGF0KSB7XG4gICAgICBfZGVidWdnZXIoYEZpbGUgc3RhdCBmb3IgJHtmaWxlLnBhdGh9IGlzIG1pc3NpbmdgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGZpbGUuc3RhdC5tdGltZSA8IHN0YXQubXRpbWUpIHtcbiAgICAgIGFwcC52YXVsdC5vbkNoYW5nZSgnbW9kaWZpZWQnLCBmaWxlLnBhdGgsIHVuZGVmaW5lZCwgc3RhdCk7XG4gICAgICBfZGVidWdnZXIoXG4gICAgICAgIGBDYWNoZWQgdGltZXN0YW1wIGZvciAke2ZpbGUucGF0aH0gaXMgZnJvbSAke25ldyBEYXRlKGZpbGUuc3RhdC5tdGltZSkudG9TdHJpbmcoKX0gd2hpY2ggaXMgb2xkZXIgdGhhbiB0aGUgZmlsZSBzeXN0ZW0gbW9kaWZpY2F0aW9uIHRpbWVzdGFtcCAke1xuICAgICAgICAgIG5ldyBEYXRlKHN0YXQubXRpbWUpLnRvU3RyaW5nKClcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWxlSW5mby5tdGltZSA8IHN0YXQubXRpbWUpIHtcbiAgICAgIF9kZWJ1Z2dlcihcbiAgICAgICAgYEZpbGUgY2FjaGUgaW5mbyBmb3IgJHtmaWxlLnBhdGh9IGlzIGZyb20gJHtuZXcgRGF0ZShmaWxlSW5mby5tdGltZSkudG9TdHJpbmcoKX0gd2hpY2ggaXMgb2xkZXIgdGhhbiB0aGUgZmlsZSBtb2RpZmljYXRpb24gdGltZXN0YW1wICR7XG4gICAgICAgICAgbmV3IERhdGUoc3RhdC5tdGltZSkudG9TdHJpbmcoKVxuICAgICAgICB9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgX2RlYnVnZ2VyKGBGaWxlIGNhY2hlIGZvciAke2ZpbGUucGF0aH0gaXMgbWlzc2luZ2ApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSwgcmV0cnlPcHRpb25zKTtcblxuICByZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmcm9udCBtYXR0ZXIgZnJvbSB0aGUgbWV0YWRhdGEgY2FjaGUgc2FmZWx5LlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiBjdXN0b20gZnJvbnQgbWF0dGVyLlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmV0cmlldmUgdGhlIGZyb250IG1hdHRlciBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbWJpbmVkIGZyb250IG1hdHRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEZyb250bWF0dGVyU2FmZTxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTxDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPj4ge1xuICBjb25zdCBjYWNoZSA9IGF3YWl0IGdldENhY2hlU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICByZXR1cm4gKGNhY2hlPy5mcm9udG1hdHRlciA/PyB7fSkgYXMgQ29tYmluZWRGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj47XG59XG5cbi8qKipcbiAqIFJlZ2lzdGVycyBhIGZpbGUgaW4gdGhlIE9ic2lkaWFuIGFwcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgdW5yZWdpc3RlcnMgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZpbGUoYXBwOiBBcHAsIGZpbGU6IFRBYnN0cmFjdEZpbGUpOiAoKSA9PiB2b2lkIHtcbiAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICByZXR1cm4gbm9vcDtcbiAgfVxuXG4gIGNvbnN0IGRlbGV0ZWRQYXRoczogc3RyaW5nW10gPSBbXTtcblxuICBsZXQgZGVsZXRlZEZpbGU6IFRBYnN0cmFjdEZpbGUgPSBmaWxlO1xuXG4gIHdoaWxlIChkZWxldGVkRmlsZS5kZWxldGVkKSB7XG4gICAgZGVsZXRlZFBhdGhzLnB1c2goZGVsZXRlZEZpbGUucGF0aCk7XG4gICAgYXBwLnZhdWx0LmZpbGVNYXBbZGVsZXRlZEZpbGUucGF0aF0gPSBkZWxldGVkRmlsZTtcbiAgICBkZWxldGVkRmlsZSA9IGRlbGV0ZWRGaWxlLnBhcmVudCA/PyBnZXRGb2xkZXIoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKGRlbGV0ZWRGaWxlLnBhdGgpLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpc0ZpbGUoZmlsZSkpIHtcbiAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLmFkZChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiBkZWxldGVkUGF0aHMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSBhcHAudmF1bHQuZmlsZU1hcFtwYXRoXTtcbiAgICB9XG5cbiAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLnJlbW92ZShmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFRlbXBvcmFyaWx5IHJlZ2lzdGVycyBhIGZpbGUgYW5kIHJ1bnMgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gdGVtcG9yYXJpbHkgcmVnaXN0ZXIuXG4gKiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gcnVuLlxuICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wUmVnaXN0ZXJGaWxlQW5kUnVuPFQ+KGFwcDogQXBwLCBmaWxlOiBUQWJzdHJhY3RGaWxlLCBmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCB1bnJlZ2lzdGVyID0gcmVnaXN0ZXJGaWxlKGFwcCwgZmlsZSk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB1bnJlZ2lzdGVyKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTYXZlcyB0aGUgc3BlY2lmaWVkIG5vdGUgaW4gdGhlIE9ic2lkaWFuIGFwcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIG5vdGUgdG8gYmUgc2F2ZWQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBub3RlIGlzIHNhdmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBzYXZlTm90ZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWlzTWFya2Rvd25GaWxlKGFwcCwgcGF0aE9yRmlsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGZvciAoY29uc3QgbGVhZiBvZiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZSgnbWFya2Rvd24nKSkge1xuICAgIGlmIChsZWFmLnZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcgJiYgbGVhZi52aWV3LmZpbGU/LnBhdGggPT09IHBhdGgpIHtcbiAgICAgIGF3YWl0IGxlYWYudmlldy5zYXZlKCk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBYUEsU0FBUyxvQkFBb0I7QUFDN0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVAsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsOEJBQThCO0FBQ3ZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsd0JBQXdCO0FBQ2pDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsZ0JBQWdCO0FBb0J6QixlQUFzQix5QkFB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
@@ -0,0 +1,52 @@
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 init(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;if(!require.__isPatched){const originalRequire=require;require=Object.assign(id=>requirePatched(id,originalRequire),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>({browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"}),"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&module.default?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id,originalRequire){const module=originalRequire(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})()
7
+
8
+ import {
9
+ ButtonComponent,
10
+ Modal
11
+ } from "obsidian";
12
+ import { CssClass } from "../../CssClass.mjs";
13
+ import { getPluginId } from "../Plugin/PluginId.mjs";
14
+ class AlertModal extends Modal {
15
+ constructor(options, resolve) {
16
+ super(options.app);
17
+ this.resolve = resolve;
18
+ const DEFAULT_OPTIONS = {
19
+ app: options.app,
20
+ message: "",
21
+ okButtonStyles: {},
22
+ okButtonText: "OK",
23
+ title: ""
24
+ };
25
+ this.options = { ...DEFAULT_OPTIONS, ...options };
26
+ this.containerEl.addClass(CssClass.LibraryName, getPluginId(), CssClass.AlertModal);
27
+ }
28
+ options;
29
+ onClose() {
30
+ this.resolve();
31
+ }
32
+ onOpen() {
33
+ this.titleEl.setText(this.options.title);
34
+ const paragraph = this.contentEl.createEl("p");
35
+ paragraph.setText(this.options.message);
36
+ const okButton = new ButtonComponent(this.contentEl);
37
+ okButton.setButtonText(this.options.okButtonText);
38
+ okButton.setCta();
39
+ okButton.onClick(this.close.bind(this));
40
+ Object.assign(okButton.buttonEl.style, this.options.okButtonStyles);
41
+ }
42
+ }
43
+ async function alert(options) {
44
+ await new Promise((resolve) => {
45
+ const modal = new AlertModal(options, resolve);
46
+ modal.open();
47
+ });
48
+ }
49
+ export {
50
+ alert
51
+ };
52
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01vZGFscy9BbGVydC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gQWxlcnRcbiAqIFV0aWxpdHkgZm9yIGRpc3BsYXlpbmcgYWxlcnQgbW9kYWxzIGluIE9ic2lkaWFuLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBmdW5jdGlvbiB0byBkaXNwbGF5IGEgbW9kYWwgd2l0aCBhIG1lc3NhZ2UgaW4gT2JzaWRpYW4uIFRoZSBtb2RhbCBpbmNsdWRlcyBhbiBcIk9LXCIgYnV0dG9uIHRvIGNsb3NlIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIE1vZGFsXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi8uLi9Dc3NDbGFzcy50cyc7XG5pbXBvcnQgeyBnZXRQbHVnaW5JZCB9IGZyb20gJy4uL1BsdWdpbi9QbHVnaW5JZC50cyc7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHRoZSBhbGVydCBtb2RhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbGVydE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGluIHRoZSBtb2RhbC5cbiAgICovXG4gIG1lc3NhZ2U6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHlsZXMgdG8gYXBwbHkgdG8gdGhlIFwiT0tcIiBidXR0b24uXG4gICAqL1xuICBva0J1dHRvblN0eWxlcz86IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj47XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGZvciB0aGUgXCJPS1wiIGJ1dHRvbi5cbiAgICovXG4gIG9rQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBtb2RhbC5cbiAgICovXG4gIHRpdGxlPzogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbn1cblxuY2xhc3MgQWxlcnRNb2RhbCBleHRlbmRzIE1vZGFsIHtcbiAgcHJpdmF0ZSBvcHRpb25zOiBSZXF1aXJlZDxBbGVydE9wdGlvbnM+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBBbGVydE9wdGlvbnMsIHByaXZhdGUgcmVzb2x2ZTogKCkgPT4gdm9pZCkge1xuICAgIHN1cGVyKG9wdGlvbnMuYXBwKTtcbiAgICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlcXVpcmVkPEFsZXJ0T3B0aW9ucz4gPSB7XG4gICAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBva0J1dHRvblN0eWxlczoge30sXG4gICAgICBva0J1dHRvblRleHQ6ICdPSycsXG4gICAgICB0aXRsZTogJydcbiAgICB9O1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi5vcHRpb25zIH07XG4gICAgdGhpcy5jb250YWluZXJFbC5hZGRDbGFzcyhDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgZ2V0UGx1Z2luSWQoKSwgQ3NzQ2xhc3MuQWxlcnRNb2RhbCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy50aXRsZUVsLnNldFRleHQodGhpcy5vcHRpb25zLnRpdGxlKTtcbiAgICBjb25zdCBwYXJhZ3JhcGggPSB0aGlzLmNvbnRlbnRFbC5jcmVhdGVFbCgncCcpO1xuICAgIHBhcmFncmFwaC5zZXRUZXh0KHRoaXMub3B0aW9ucy5tZXNzYWdlKTtcbiAgICBjb25zdCBva0J1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIG9rQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5vcHRpb25zLm9rQnV0dG9uVGV4dCk7XG4gICAgb2tCdXR0b24uc2V0Q3RhKCk7XG4gICAgb2tCdXR0b24ub25DbGljayh0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICAgIE9iamVjdC5hc3NpZ24ob2tCdXR0b24uYnV0dG9uRWwuc3R5bGUsIHRoaXMub3B0aW9ucy5va0J1dHRvblN0eWxlcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhbiBhbGVydCBtb2RhbCBpbiBPYnNpZGlhbiB3aXRoIGEgc3BlY2lmaWVkIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFsZXJ0IG1vZGFsLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbW9kYWwgaXMgY2xvc2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWxlcnQob3B0aW9uczogQWxlcnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgbW9kYWwgPSBuZXcgQWxlcnRNb2RhbChvcHRpb25zLCByZXNvbHZlKTtcbiAgICBtb2RhbC5vcGVuKCk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQVNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxtQkFBbUI7QUFnQzVCLE1BQU0sbUJBQW1CLE1BQU07QUFBQSxFQUd0QixZQUFZLFNBQStCLFNBQXFCO0FBQ3JFLFVBQU0sUUFBUSxHQUFHO0FBRCtCO0FBRWhELFVBQU0sa0JBQTBDO0FBQUEsTUFDOUMsS0FBSyxRQUFRO0FBQUEsTUFDYixTQUFTO0FBQUEsTUFDVCxnQkFBZ0IsQ0FBQztBQUFBLE1BQ2pCLGNBQWM7QUFBQSxNQUNkLE9BQU87QUFBQSxJQUNUO0FBQ0EsU0FBSyxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxRQUFRO0FBQ2hELFNBQUssWUFBWSxTQUFTLFNBQVMsYUFBYSxZQUFZLEdBQUcsU0FBUyxVQUFVO0FBQUEsRUFDcEY7QUFBQSxFQWJRO0FBQUEsRUFlUSxVQUFnQjtBQUM5QixTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFZ0IsU0FBZTtBQUM3QixTQUFLLFFBQVEsUUFBUSxLQUFLLFFBQVEsS0FBSztBQUN2QyxVQUFNLFlBQVksS0FBSyxVQUFVLFNBQVMsR0FBRztBQUM3QyxjQUFVLFFBQVEsS0FBSyxRQUFRLE9BQU87QUFDdEMsVUFBTSxXQUFXLElBQUksZ0JBQWdCLEtBQUssU0FBUztBQUNuRCxhQUFTLGNBQWMsS0FBSyxRQUFRLFlBQVk7QUFDaEQsYUFBUyxPQUFPO0FBQ2hCLGFBQVMsUUFBUSxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDdEMsV0FBTyxPQUFPLFNBQVMsU0FBUyxPQUFPLEtBQUssUUFBUSxjQUFjO0FBQUEsRUFDcEU7QUFDRjtBQVFBLGVBQXNCLE1BQU0sU0FBc0M7QUFDaEUsUUFBTSxJQUFJLFFBQWMsQ0FBQyxZQUFZO0FBQ25DLFVBQU0sUUFBUSxJQUFJLFdBQVcsU0FBUyxPQUFPO0FBQzdDLFVBQU0sS0FBSztBQUFBLEVBQ2IsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,65 @@
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 init(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;if(!require.__isPatched){const originalRequire=require;require=Object.assign(id=>requirePatched(id,originalRequire),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>({browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"}),"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&module.default?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id,originalRequire){const module=originalRequire(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})()
7
+
8
+ import {
9
+ ButtonComponent,
10
+ Modal
11
+ } from "obsidian";
12
+ import { CssClass } from "../../CssClass.mjs";
13
+ import { getPluginId } from "../Plugin/PluginId.mjs";
14
+ class ConfirmModal extends Modal {
15
+ constructor(options, resolve) {
16
+ super(options.app);
17
+ this.resolve = resolve;
18
+ const DEFAULT_OPTIONS = {
19
+ app: options.app,
20
+ cancelButtonStyles: {},
21
+ cancelButtonText: "Cancel",
22
+ message: "",
23
+ okButtonStyles: {
24
+ marginRight: "10px",
25
+ marginTop: "20px"
26
+ },
27
+ okButtonText: "OK",
28
+ title: ""
29
+ };
30
+ this.options = { ...DEFAULT_OPTIONS, ...options };
31
+ this.containerEl.addClass(CssClass.LibraryName, getPluginId(), CssClass.ConfirmModal);
32
+ }
33
+ isConfirmed = false;
34
+ options;
35
+ onClose() {
36
+ this.resolve(this.isConfirmed);
37
+ }
38
+ onOpen() {
39
+ this.titleEl.setText(this.options.title);
40
+ const paragraph = this.contentEl.createEl("p");
41
+ paragraph.setText(this.options.message);
42
+ const okButton = new ButtonComponent(this.contentEl);
43
+ okButton.setButtonText(this.options.okButtonText);
44
+ okButton.setCta();
45
+ okButton.onClick(() => {
46
+ this.isConfirmed = true;
47
+ this.close();
48
+ });
49
+ Object.assign(okButton.buttonEl.style, this.options.okButtonStyles);
50
+ const cancelButton = new ButtonComponent(this.contentEl);
51
+ cancelButton.setButtonText(this.options.cancelButtonText);
52
+ cancelButton.onClick(this.close.bind(this));
53
+ Object.assign(okButton.buttonEl.style, this.options.okButtonStyles);
54
+ }
55
+ }
56
+ async function confirm(options) {
57
+ return await new Promise((resolve) => {
58
+ const modal = new ConfirmModal(options, resolve);
59
+ modal.open();
60
+ });
61
+ }
62
+ export {
63
+ confirm
64
+ };
65
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01vZGFscy9Db25maXJtLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBDb25maXJtXG4gKiBVdGlsaXR5IGZvciBkaXNwbGF5aW5nIGNvbmZpcm0gbW9kYWxzIGluIE9ic2lkaWFuLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBmdW5jdGlvbiB0byBkaXNwbGF5IGEgbW9kYWwgd2l0aCBhIG1lc3NhZ2UgaW4gT2JzaWRpYW4uIFRoZSBtb2RhbCBpbmNsdWRlcyBcIk9LXCIgYW5kIFwiQ2FuY2VsXCIgYnV0dG9ucyB0byBjb25maXJtIG9yIGNhbmNlbCB0aGUgYWN0aW9uLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIE1vZGFsXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi8uLi9Dc3NDbGFzcy50cyc7XG5pbXBvcnQgeyBnZXRQbHVnaW5JZCB9IGZyb20gJy4uL1BsdWdpbi9QbHVnaW5JZC50cyc7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtIG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpcm1PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHN0eWxlcyB0byBhcHBseSB0byB0aGUgXCJDYW5jZWxcIiBidXR0b24uXG4gICAqL1xuICBjYW5jZWxCdXR0b25TdHlsZXM/OiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBmb3IgdGhlIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgKi9cbiAgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBpbiB0aGUgbW9kYWwuXG4gICAqL1xuICBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzIHRvIGFwcGx5IHRvIHRoZSBcIk9LXCIgYnV0dG9uLlxuICAgKi9cbiAgb2tCdXR0b25TdHlsZXM/OiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBmb3IgdGhlIFwiT0tcIiBidXR0b24uXG4gICAqL1xuICBva0J1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgbW9kYWwuXG4gICAqL1xuICB0aXRsZT86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG59XG5cbmNsYXNzIENvbmZpcm1Nb2RhbCBleHRlbmRzIE1vZGFsIHtcbiAgcHJpdmF0ZSBpc0NvbmZpcm1lZCA9IGZhbHNlO1xuICBwcml2YXRlIG9wdGlvbnM6IFJlcXVpcmVkPENvbmZpcm1PcHRpb25zPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogQ29uZmlybU9wdGlvbnMsIHByaXZhdGUgcmVzb2x2ZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkKSB7XG4gICAgc3VwZXIob3B0aW9ucy5hcHApO1xuICAgIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUmVxdWlyZWQ8Q29uZmlybU9wdGlvbnM+ID0ge1xuICAgICAgYXBwOiBvcHRpb25zLmFwcCxcbiAgICAgIGNhbmNlbEJ1dHRvblN0eWxlczoge30sXG4gICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgb2tCdXR0b25TdHlsZXM6IHtcbiAgICAgICAgbWFyZ2luUmlnaHQ6ICcxMHB4JyxcbiAgICAgICAgbWFyZ2luVG9wOiAnMjBweCdcbiAgICAgIH0sXG4gICAgICBva0J1dHRvblRleHQ6ICdPSycsXG4gICAgICB0aXRsZTogJydcbiAgICB9O1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi5vcHRpb25zIH07XG4gICAgdGhpcy5jb250YWluZXJFbC5hZGRDbGFzcyhDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgZ2V0UGx1Z2luSWQoKSwgQ3NzQ2xhc3MuQ29uZmlybU1vZGFsKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMucmVzb2x2ZSh0aGlzLmlzQ29uZmlybWVkKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy50aXRsZUVsLnNldFRleHQodGhpcy5vcHRpb25zLnRpdGxlKTtcbiAgICBjb25zdCBwYXJhZ3JhcGggPSB0aGlzLmNvbnRlbnRFbC5jcmVhdGVFbCgncCcpO1xuICAgIHBhcmFncmFwaC5zZXRUZXh0KHRoaXMub3B0aW9ucy5tZXNzYWdlKTtcbiAgICBjb25zdCBva0J1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIG9rQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5vcHRpb25zLm9rQnV0dG9uVGV4dCk7XG4gICAgb2tCdXR0b24uc2V0Q3RhKCk7XG4gICAgb2tCdXR0b24ub25DbGljaygoKSA9PiB7XG4gICAgICB0aGlzLmlzQ29uZmlybWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKG9rQnV0dG9uLmJ1dHRvbkVsLnN0eWxlLCB0aGlzLm9wdGlvbnMub2tCdXR0b25TdHlsZXMpO1xuXG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5vcHRpb25zLmNhbmNlbEJ1dHRvblRleHQpO1xuICAgIGNhbmNlbEJ1dHRvbi5vbkNsaWNrKHRoaXMuY2xvc2UuYmluZCh0aGlzKSk7XG4gICAgT2JqZWN0LmFzc2lnbihva0J1dHRvbi5idXR0b25FbC5zdHlsZSwgdGhpcy5vcHRpb25zLm9rQnV0dG9uU3R5bGVzKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BsYXlzIGFuIGNvbmZpcm0gbW9kYWwgaW4gT2JzaWRpYW4gd2l0aCBhIHNwZWNpZmllZCBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtIG1vZGFsLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcIk9LXCIgYnV0dG9uIHdhcyBjbGlja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlybShvcHRpb25zOiBDb25maXJtT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwob3B0aW9ucywgcmVzb2x2ZSk7XG4gICAgbW9kYWwub3BlbigpO1xuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFTQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsbUJBQW1CO0FBMEM1QixNQUFNLHFCQUFxQixNQUFNO0FBQUEsRUFJeEIsWUFBWSxTQUFpQyxTQUFtQztBQUNyRixVQUFNLFFBQVEsR0FBRztBQURpQztBQUVsRCxVQUFNLGtCQUE0QztBQUFBLE1BQ2hELEtBQUssUUFBUTtBQUFBLE1BQ2Isb0JBQW9CLENBQUM7QUFBQSxNQUNyQixrQkFBa0I7QUFBQSxNQUNsQixTQUFTO0FBQUEsTUFDVCxnQkFBZ0I7QUFBQSxRQUNkLGFBQWE7QUFBQSxRQUNiLFdBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxjQUFjO0FBQUEsTUFDZCxPQUFPO0FBQUEsSUFDVDtBQUNBLFNBQUssVUFBVSxFQUFFLEdBQUcsaUJBQWlCLEdBQUcsUUFBUTtBQUNoRCxTQUFLLFlBQVksU0FBUyxTQUFTLGFBQWEsWUFBWSxHQUFHLFNBQVMsWUFBWTtBQUFBLEVBQ3RGO0FBQUEsRUFuQlEsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQW9CUSxVQUFnQjtBQUM5QixTQUFLLFFBQVEsS0FBSyxXQUFXO0FBQUEsRUFDL0I7QUFBQSxFQUVnQixTQUFlO0FBQzdCLFNBQUssUUFBUSxRQUFRLEtBQUssUUFBUSxLQUFLO0FBQ3ZDLFVBQU0sWUFBWSxLQUFLLFVBQVUsU0FBUyxHQUFHO0FBQzdDLGNBQVUsUUFBUSxLQUFLLFFBQVEsT0FBTztBQUN0QyxVQUFNLFdBQVcsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTO0FBQ25ELGFBQVMsY0FBYyxLQUFLLFFBQVEsWUFBWTtBQUNoRCxhQUFTLE9BQU87QUFDaEIsYUFBUyxRQUFRLE1BQU07QUFDckIsV0FBSyxjQUFjO0FBQ25CLFdBQUssTUFBTTtBQUFBLElBQ2IsQ0FBQztBQUNELFdBQU8sT0FBTyxTQUFTLFNBQVMsT0FBTyxLQUFLLFFBQVEsY0FBYztBQUVsRSxVQUFNLGVBQWUsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTO0FBQ3ZELGlCQUFhLGNBQWMsS0FBSyxRQUFRLGdCQUFnQjtBQUN4RCxpQkFBYSxRQUFRLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQztBQUMxQyxXQUFPLE9BQU8sU0FBUyxTQUFTLE9BQU8sS0FBSyxRQUFRLGNBQWM7QUFBQSxFQUNwRTtBQUNGO0FBUUEsZUFBc0IsUUFBUSxTQUEyQztBQUN2RSxTQUFPLE1BQU0sSUFBSSxRQUFpQixDQUFDLFlBQVk7QUFDN0MsVUFBTSxRQUFRLElBQUksYUFBYSxTQUFTLE9BQU87QUFDL0MsVUFBTSxLQUFLO0FBQUEsRUFDYixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,98 @@
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 init(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;if(!require.__isPatched){const originalRequire=require;require=Object.assign(id=>requirePatched(id,originalRequire),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>({browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"}),"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&module.default?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id,originalRequire){const module=originalRequire(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})()
7
+
8
+ import {
9
+ App,
10
+ ButtonComponent,
11
+ Modal,
12
+ TextComponent
13
+ } from "obsidian";
14
+ import { CssClass } from "../../CssClass.mjs";
15
+ import { getPluginId } from "../Plugin/PluginId.mjs";
16
+ class PromptModal extends Modal {
17
+ constructor(options, resolve) {
18
+ super(options.app);
19
+ this.resolve = resolve;
20
+ const DEFAULT_OPTIONS = {
21
+ app: options.app,
22
+ cancelButtonStyles: {},
23
+ cancelButtonText: "Cancel",
24
+ defaultValue: "",
25
+ okButtonStyles: {
26
+ marginRight: "10px",
27
+ marginTop: "20px"
28
+ },
29
+ okButtonText: "OK",
30
+ placeholder: "",
31
+ textBoxStyles: {
32
+ width: "100%"
33
+ },
34
+ title: "",
35
+ valueValidator: () => null
36
+ };
37
+ this.options = { ...DEFAULT_OPTIONS, ...options };
38
+ this.value = options.defaultValue ?? "";
39
+ this.containerEl.addClass(CssClass.LibraryName, getPluginId(), CssClass.PromptModal);
40
+ }
41
+ isOkClicked = false;
42
+ options;
43
+ value;
44
+ onClose() {
45
+ this.resolve(this.isOkClicked ? this.value : null);
46
+ }
47
+ onOpen() {
48
+ this.titleEl.setText(this.options.title);
49
+ const textComponent = new TextComponent(this.contentEl);
50
+ textComponent.setValue(this.value);
51
+ textComponent.setPlaceholder(this.options.placeholder);
52
+ Object.assign(textComponent.inputEl.style, this.options.textBoxStyles);
53
+ textComponent.onChange((newValue) => {
54
+ this.value = newValue;
55
+ });
56
+ textComponent.inputEl.addEventListener("keydown", (event) => {
57
+ if (event.key === "Enter") {
58
+ this.handleOk(event, textComponent);
59
+ } else if (event.key === "Escape") {
60
+ this.close();
61
+ }
62
+ });
63
+ textComponent.inputEl.addEventListener("input", () => {
64
+ const errorMessage = this.options.valueValidator(textComponent.inputEl.value);
65
+ textComponent.inputEl.setCustomValidity(errorMessage ?? "");
66
+ textComponent.inputEl.reportValidity();
67
+ });
68
+ const okButton = new ButtonComponent(this.contentEl);
69
+ okButton.setButtonText(this.options.okButtonText);
70
+ okButton.setCta();
71
+ okButton.onClick((event) => {
72
+ this.handleOk(event, textComponent);
73
+ });
74
+ Object.assign(okButton.buttonEl.style, this.options.okButtonStyles);
75
+ const cancelButton = new ButtonComponent(this.contentEl);
76
+ cancelButton.setButtonText(this.options.cancelButtonText);
77
+ cancelButton.onClick(this.close.bind(this));
78
+ Object.assign(cancelButton.buttonEl.style, this.options.cancelButtonStyles);
79
+ }
80
+ handleOk(event, textComponent) {
81
+ event.preventDefault();
82
+ if (!textComponent.inputEl.checkValidity()) {
83
+ return;
84
+ }
85
+ this.isOkClicked = true;
86
+ this.close();
87
+ }
88
+ }
89
+ async function prompt(options) {
90
+ return await new Promise((resolve) => {
91
+ const modal = new PromptModal(options, resolve);
92
+ modal.open();
93
+ });
94
+ }
95
+ export {
96
+ prompt
97
+ };
98
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01vZGFscy9Qcm9tcHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIFByb21wdFxuICogVXRpbGl0eSBmb3IgZGlzcGxheWluZyBhIHByb21wdCBtb2RhbCBpbiBPYnNpZGlhbi5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgZnVuY3Rpb24gdG8gZGlzcGxheSBhIG1vZGFsIHRoYXQgcHJvbXB0cyB0aGUgdXNlciBmb3IgaW5wdXQuIFRoZSBtb2RhbCBpbmNsdWRlcyBcIk9LXCIgYW5kIFwiQ2FuY2VsXCIgYnV0dG9ucy5cbiAqL1xuXG5pbXBvcnQge1xuICBBcHAsXG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgTW9kYWwsXG4gIFRleHRDb21wb25lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uLy4uL0Nzc0NsYXNzLnRzJztcbmltcG9ydCB7IGdldFBsdWdpbklkIH0gZnJvbSAnLi4vUGx1Z2luL1BsdWdpbklkLnRzJztcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3IgdGhlIHByb21wdCBtb2RhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9tcHRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHN0eWxlcyB0byBhcHBseSB0byB0aGUgXCJDYW5jZWxcIiBidXR0b24uXG4gICAqL1xuICBjYW5jZWxCdXR0b25TdHlsZXM/OiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBmb3IgdGhlIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgKi9cbiAgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgdG8gcHJlLWZpbGwgdGhlIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzIHRvIGFwcGx5IHRvIHRoZSBcIk9LXCIgYnV0dG9uLlxuICAgKi9cbiAgb2tCdXR0b25TdHlsZXM/OiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBmb3IgdGhlIFwiT0tcIiBidXR0b24uXG4gICAqL1xuICBva0J1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0eWxlcyB0byBhcHBseSB0byB0aGUgaW5wdXQgZmllbGQuXG4gICAqL1xuICB0ZXh0Qm94U3R5bGVzPzogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPjtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBtb2RhbC5cbiAgICovXG4gIHRpdGxlPzogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnB1dCB2YWx1ZSB0byB2YWxpZGF0ZS5cbiAgICogQHJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqL1xuICB2YWx1ZVZhbGlkYXRvcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBudWxsIHwgc3RyaW5nO1xufVxuXG5jbGFzcyBQcm9tcHRNb2RhbCBleHRlbmRzIE1vZGFsIHtcbiAgcHJpdmF0ZSBpc09rQ2xpY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIG9wdGlvbnM6IFJlcXVpcmVkPFByb21wdE9wdGlvbnM+O1xuICBwcml2YXRlIHZhbHVlOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFByb21wdE9wdGlvbnMsIHByaXZhdGUgcmVzb2x2ZTogKHZhbHVlOiBudWxsIHwgc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgc3VwZXIob3B0aW9ucy5hcHApO1xuICAgIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUmVxdWlyZWQ8UHJvbXB0T3B0aW9ucz4gPSB7XG4gICAgICBhcHA6IG9wdGlvbnMuYXBwLFxuICAgICAgY2FuY2VsQnV0dG9uU3R5bGVzOiB7fSxcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICdDYW5jZWwnLFxuICAgICAgZGVmYXVsdFZhbHVlOiAnJyxcbiAgICAgIG9rQnV0dG9uU3R5bGVzOiB7XG4gICAgICAgIG1hcmdpblJpZ2h0OiAnMTBweCcsXG4gICAgICAgIG1hcmdpblRvcDogJzIwcHgnXG4gICAgICB9LFxuICAgICAgb2tCdXR0b25UZXh0OiAnT0snLFxuICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgdGV4dEJveFN0eWxlczoge1xuICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICB9LFxuICAgICAgdGl0bGU6ICcnLFxuICAgICAgdmFsdWVWYWxpZGF0b3I6ICgpID0+IG51bGxcbiAgICB9O1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi5vcHRpb25zIH07XG4gICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMuZGVmYXVsdFZhbHVlID8/ICcnO1xuICAgIHRoaXMuY29udGFpbmVyRWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuTGlicmFyeU5hbWUsIGdldFBsdWdpbklkKCksIENzc0NsYXNzLlByb21wdE1vZGFsKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMucmVzb2x2ZSh0aGlzLmlzT2tDbGlja2VkID8gdGhpcy52YWx1ZSA6IG51bGwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlRWwuc2V0VGV4dCh0aGlzLm9wdGlvbnMudGl0bGUpO1xuICAgIGNvbnN0IHRleHRDb21wb25lbnQgPSBuZXcgVGV4dENvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgdGV4dENvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB0ZXh0Q29tcG9uZW50LnNldFBsYWNlaG9sZGVyKHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcik7XG4gICAgT2JqZWN0LmFzc2lnbih0ZXh0Q29tcG9uZW50LmlucHV0RWwuc3R5bGUsIHRoaXMub3B0aW9ucy50ZXh0Qm94U3R5bGVzKTtcbiAgICB0ZXh0Q29tcG9uZW50Lm9uQ2hhbmdlKChuZXdWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0pO1xuICAgIHRleHRDb21wb25lbnQuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlT2soZXZlbnQsIHRleHRDb21wb25lbnQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0ZXh0Q29tcG9uZW50LmlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMudmFsdWVWYWxpZGF0b3IodGV4dENvbXBvbmVudC5pbnB1dEVsLnZhbHVlKTtcbiAgICAgIHRleHRDb21wb25lbnQuaW5wdXRFbC5zZXRDdXN0b21WYWxpZGl0eShlcnJvck1lc3NhZ2UgPz8gJycpO1xuICAgICAgdGV4dENvbXBvbmVudC5pbnB1dEVsLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgfSk7XG4gICAgY29uc3Qgb2tCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRoaXMuY29udGVudEVsKTtcbiAgICBva0J1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMub3B0aW9ucy5va0J1dHRvblRleHQpO1xuICAgIG9rQnV0dG9uLnNldEN0YSgpO1xuICAgIG9rQnV0dG9uLm9uQ2xpY2soKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZU9rKGV2ZW50LCB0ZXh0Q29tcG9uZW50KTtcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKG9rQnV0dG9uLmJ1dHRvbkVsLnN0eWxlLCB0aGlzLm9wdGlvbnMub2tCdXR0b25TdHlsZXMpO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMub3B0aW9ucy5jYW5jZWxCdXR0b25UZXh0KTtcbiAgICBjYW5jZWxCdXR0b24ub25DbGljayh0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICAgIE9iamVjdC5hc3NpZ24oY2FuY2VsQnV0dG9uLmJ1dHRvbkVsLnN0eWxlLCB0aGlzLm9wdGlvbnMuY2FuY2VsQnV0dG9uU3R5bGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT2soZXZlbnQ6IEV2ZW50LCB0ZXh0Q29tcG9uZW50OiBUZXh0Q29tcG9uZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXRleHRDb21wb25lbnQuaW5wdXRFbC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzT2tDbGlja2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhIHByb21wdCBtb2RhbCBpbiBPYnNpZGlhbiB0byBnZXQgdXNlciBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgcHJvbXB0IG1vZGFsLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdXNlciBpbnB1dCBvciBudWxsIGlmIHRoZSBwcm9tcHQgd2FzIGNhbmNlbGxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb21wdChvcHRpb25zOiBQcm9tcHRPcHRpb25zKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxudWxsIHwgc3RyaW5nPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG1vZGFsID0gbmV3IFByb21wdE1vZGFsKG9wdGlvbnMsIHJlc29sdmUpO1xuICAgIG1vZGFsLm9wZW4oKTtcbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBT0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsbUJBQW1CO0FBMkQ1QixNQUFNLG9CQUFvQixNQUFNO0FBQUEsRUFLdkIsWUFBWSxTQUFnQyxTQUF5QztBQUMxRixVQUFNLFFBQVEsR0FBRztBQURnQztBQUVqRCxVQUFNLGtCQUEyQztBQUFBLE1BQy9DLEtBQUssUUFBUTtBQUFBLE1BQ2Isb0JBQW9CLENBQUM7QUFBQSxNQUNyQixrQkFBa0I7QUFBQSxNQUNsQixjQUFjO0FBQUEsTUFDZCxnQkFBZ0I7QUFBQSxRQUNkLGFBQWE7QUFBQSxRQUNiLFdBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxjQUFjO0FBQUEsTUFDZCxhQUFhO0FBQUEsTUFDYixlQUFlO0FBQUEsUUFDYixPQUFPO0FBQUEsTUFDVDtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsZ0JBQWdCLE1BQU07QUFBQSxJQUN4QjtBQUNBLFNBQUssVUFBVSxFQUFFLEdBQUcsaUJBQWlCLEdBQUcsUUFBUTtBQUNoRCxTQUFLLFFBQVEsUUFBUSxnQkFBZ0I7QUFDckMsU0FBSyxZQUFZLFNBQVMsU0FBUyxhQUFhLFlBQVksR0FBRyxTQUFTLFdBQVc7QUFBQSxFQUNyRjtBQUFBLEVBMUJRLGNBQWM7QUFBQSxFQUNkO0FBQUEsRUFDQTtBQUFBLEVBMEJRLFVBQWdCO0FBQzlCLFNBQUssUUFBUSxLQUFLLGNBQWMsS0FBSyxRQUFRLElBQUk7QUFBQSxFQUNuRDtBQUFBLEVBRWdCLFNBQWU7QUFDN0IsU0FBSyxRQUFRLFFBQVEsS0FBSyxRQUFRLEtBQUs7QUFDdkMsVUFBTSxnQkFBZ0IsSUFBSSxjQUFjLEtBQUssU0FBUztBQUN0RCxrQkFBYyxTQUFTLEtBQUssS0FBSztBQUNqQyxrQkFBYyxlQUFlLEtBQUssUUFBUSxXQUFXO0FBQ3JELFdBQU8sT0FBTyxjQUFjLFFBQVEsT0FBTyxLQUFLLFFBQVEsYUFBYTtBQUNyRSxrQkFBYyxTQUFTLENBQUMsYUFBYTtBQUNuQyxXQUFLLFFBQVE7QUFBQSxJQUNmLENBQUM7QUFDRCxrQkFBYyxRQUFRLGlCQUFpQixXQUFXLENBQUMsVUFBeUI7QUFDMUUsVUFBSSxNQUFNLFFBQVEsU0FBUztBQUN6QixhQUFLLFNBQVMsT0FBTyxhQUFhO0FBQUEsTUFDcEMsV0FBVyxNQUFNLFFBQVEsVUFBVTtBQUNqQyxhQUFLLE1BQU07QUFBQSxNQUNiO0FBQUEsSUFDRixDQUFDO0FBQ0Qsa0JBQWMsUUFBUSxpQkFBaUIsU0FBUyxNQUFNO0FBQ3BELFlBQU0sZUFBZSxLQUFLLFFBQVEsZUFBZSxjQUFjLFFBQVEsS0FBSztBQUM1RSxvQkFBYyxRQUFRLGtCQUFrQixnQkFBZ0IsRUFBRTtBQUMxRCxvQkFBYyxRQUFRLGVBQWU7QUFBQSxJQUN2QyxDQUFDO0FBQ0QsVUFBTSxXQUFXLElBQUksZ0JBQWdCLEtBQUssU0FBUztBQUNuRCxhQUFTLGNBQWMsS0FBSyxRQUFRLFlBQVk7QUFDaEQsYUFBUyxPQUFPO0FBQ2hCLGFBQVMsUUFBUSxDQUFDLFVBQVU7QUFDMUIsV0FBSyxTQUFTLE9BQU8sYUFBYTtBQUFBLElBQ3BDLENBQUM7QUFDRCxXQUFPLE9BQU8sU0FBUyxTQUFTLE9BQU8sS0FBSyxRQUFRLGNBQWM7QUFDbEUsVUFBTSxlQUFlLElBQUksZ0JBQWdCLEtBQUssU0FBUztBQUN2RCxpQkFBYSxjQUFjLEtBQUssUUFBUSxnQkFBZ0I7QUFDeEQsaUJBQWEsUUFBUSxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDMUMsV0FBTyxPQUFPLGFBQWEsU0FBUyxPQUFPLEtBQUssUUFBUSxrQkFBa0I7QUFBQSxFQUM1RTtBQUFBLEVBRVEsU0FBUyxPQUFjLGVBQW9DO0FBQ2pFLFVBQU0sZUFBZTtBQUNyQixRQUFJLENBQUMsY0FBYyxRQUFRLGNBQWMsR0FBRztBQUMxQztBQUFBLElBQ0Y7QUFFQSxTQUFLLGNBQWM7QUFDbkIsU0FBSyxNQUFNO0FBQUEsRUFDYjtBQUNGO0FBUUEsZUFBc0IsT0FBTyxTQUFnRDtBQUMzRSxTQUFPLE1BQU0sSUFBSSxRQUF1QixDQUFDLFlBQVk7QUFDbkQsVUFBTSxRQUFRLElBQUksWUFBWSxTQUFTLE9BQU87QUFDOUMsVUFBTSxLQUFLO0FBQUEsRUFDYixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==