obsidian-dev-utils 33.1.0 → 34.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -25,49 +25,182 @@ var __copyProps = (to, from, except, desc) => {
25
25
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
26
  var MarkdownCodeBlockProcessor_exports = {};
27
27
  __export(MarkdownCodeBlockProcessor_exports, {
28
- getCodeBlockArguments: () => getCodeBlockArguments,
28
+ getCodeBlockSectionInfo: () => getCodeBlockSectionInfo,
29
+ insertAfterCodeBlock: () => insertAfterCodeBlock,
30
+ insertBeforeCodeBlock: () => insertBeforeCodeBlock,
31
+ removeCodeBlock: () => removeCodeBlock,
29
32
  replaceCodeBlock: () => replaceCodeBlock
30
33
  });
31
34
  module.exports = __toCommonJS(MarkdownCodeBlockProcessor_exports);
32
- var import_shell_quote = require('shell-quote');
35
+ var import_obsidian = require('obsidian');
33
36
  var import_AbortController = require('../AbortController.cjs');
34
- var import_Error = require('../Error.cjs');
35
37
  var import_String = require('../String.cjs');
36
38
  var import_ValueProvider = require('../ValueProvider.cjs');
37
39
  var import_Vault = require('./Vault.cjs');
38
- function getCodeBlockArguments(ctx, el) {
39
- const sectionInfo = ctx.getSectionInfo(el);
40
- if (!sectionInfo) {
41
- return [];
40
+ async function getCodeBlockSectionInfo(options) {
41
+ const { app, ctx, el, source } = options;
42
+ const approximateSectionInfo = ctx.getSectionInfo(el) ?? await createApproximateSectionInfo(app, ctx);
43
+ const isInCallout = !!el.parentElement?.classList.contains("callout-content");
44
+ const language = getLanguageFromElement(el);
45
+ const sourceLines = source.split("\n");
46
+ const textLines = approximateSectionInfo.text.split("\n");
47
+ const potentialCodeBlockTextLines = textLines.map(
48
+ (line, index) => approximateSectionInfo.lineStart <= index && index <= approximateSectionInfo.lineEnd ? line : ""
49
+ );
50
+ const potentialCodeBlockText = potentialCodeBlockTextLines.join("\n");
51
+ const REG_EXP = /(?<=^|\n)(?<LinePrefix> {0,3}(?:> {1,3})*)(?<CodeBlockStartDelimiter>(?<CodeBlockStartDelimiterChar>[`~])(?:\k<CodeBlockStartDelimiterChar>{2,}))(?<CodeBlockLanguage>\S*)(?:[ \t]+(?<CodeBlockArgs>.*?)[ \t]+)?(?:\n(?<CodeBlockContent>(?:\n?\k<LinePrefix>.*)+?))?\n\k<LinePrefix>(?<CodeBlockEndDelimiter>\k<CodeBlockStartDelimiter>\k<CodeBlockStartDelimiterChar>*)[ \t]*(?:\n|$)/g;
52
+ let sectionInfo = null;
53
+ for (const match of potentialCodeBlockText.matchAll(REG_EXP)) {
54
+ if (!isSuitableCodeBlock(match, language, source, isInCallout)) {
55
+ continue;
56
+ }
57
+ if (sectionInfo) {
58
+ throw new Error("Multiple suitable code blocks found.");
59
+ }
60
+ sectionInfo = createSectionInfoFromMatch(potentialCodeBlockText, match, approximateSectionInfo, sourceLines);
42
61
  }
43
- const lines = sectionInfo.text.split("\n");
44
- const codeBlockHeader = lines[sectionInfo.lineStart] ?? (0, import_Error.throwExpression)(new Error("Code block header not found"));
45
- const match = /^(?:`{3,}|~{3,})\S+\s+(?<Arguments>.*)$/.exec(codeBlockHeader);
46
- if (!match) {
47
- return [];
62
+ if (!sectionInfo) {
63
+ throw new Error("No suitable code block found.");
48
64
  }
49
- return (0, import_shell_quote.parse)(match.groups?.["Arguments"] ?? "").map(String);
65
+ return sectionInfo;
66
+ }
67
+ async function insertAfterCodeBlock(options) {
68
+ const { app, ctx, lineOffset = 0, text } = options;
69
+ const sectionInfo = await getCodeBlockSectionInfo(options);
70
+ await (0, import_Vault.process)(app, ctx.sourcePath, (_abortSignal, content) => {
71
+ if (!(0, import_String.hasSingleOccurrence)(content, sectionInfo.text)) {
72
+ throw new Error("Multiple suitable code blocks found.");
73
+ }
74
+ const index = content.indexOf(sectionInfo.text);
75
+ const textBeforeSection = content.slice(0, index);
76
+ const linesBeforeSection = textBeforeSection.split("\n");
77
+ const insertLineIndex = linesBeforeSection.length + sectionInfo.lineEnd + lineOffset;
78
+ return insertText(content, insertLineIndex, text, options.shouldPreserveLinePrefix);
79
+ });
80
+ }
81
+ async function insertBeforeCodeBlock(options) {
82
+ const { app, ctx, lineOffset = 0, text } = options;
83
+ const sectionInfo = await getCodeBlockSectionInfo(options);
84
+ await (0, import_Vault.process)(app, ctx.sourcePath, (_abortSignal, content) => {
85
+ if (!(0, import_String.hasSingleOccurrence)(content, sectionInfo.text)) {
86
+ throw new Error("Multiple suitable code blocks found.");
87
+ }
88
+ const index = content.indexOf(sectionInfo.text);
89
+ const textBeforeSection = content.slice(0, index);
90
+ const linesBeforeSection = textBeforeSection.split("\n");
91
+ const insertLineIndex = linesBeforeSection.length + sectionInfo.lineStart - lineOffset - 1;
92
+ return insertText(content, insertLineIndex, text, options.shouldPreserveLinePrefix);
93
+ });
94
+ }
95
+ async function removeCodeBlock(options) {
96
+ await replaceCodeBlock({
97
+ ...options,
98
+ codeBlockProvider: ""
99
+ });
50
100
  }
51
- async function replaceCodeBlock(app, ctx, el, codeBlockProvider, abortSignal) {
52
- abortSignal ??= (0, import_AbortController.abortSignalNever)();
101
+ async function replaceCodeBlock(options) {
102
+ const { app, codeBlockProvider, ctx } = options;
103
+ const abortSignal = options.abortSignal ?? (0, import_AbortController.abortSignalNever)();
53
104
  abortSignal.throwIfAborted();
54
- const sectionInfo = ctx.getSectionInfo(el);
55
- if (!sectionInfo) {
56
- return;
57
- }
105
+ const sectionInfo = await getCodeBlockSectionInfo(options);
58
106
  const lines = sectionInfo.text.split("\n");
59
- const prefix = lines.slice(0, sectionInfo.lineStart).join("\n");
60
- const oldCodeBlock = lines.slice(sectionInfo.lineStart, sectionInfo.lineEnd + 1).join("\n");
61
- const suffix = lines.slice(sectionInfo.lineEnd + 1).join("\n");
62
- const newCodeBlock = await (0, import_ValueProvider.resolveValue)(codeBlockProvider, abortSignal, oldCodeBlock);
107
+ const textBeforeCodeBlock = lines.slice(0, sectionInfo.lineStart).join("\n");
108
+ let oldCodeBlock = lines.slice(sectionInfo.lineStart, sectionInfo.lineEnd + 1).join("\n");
109
+ if (options.shouldPreserveLinePrefix) {
110
+ oldCodeBlock = (0, import_String.unindent)(oldCodeBlock, sectionInfo.prefix);
111
+ }
112
+ const textAfterCodeBlock = lines.slice(sectionInfo.lineEnd + 1).join("\n");
113
+ let newCodeBlock = await (0, import_ValueProvider.resolveValue)(codeBlockProvider, abortSignal, oldCodeBlock);
63
114
  abortSignal.throwIfAborted();
64
- const newSectionText = `${prefix}
65
- ${newCodeBlock}${newCodeBlock ? "\n" : ""}${suffix}`;
66
- await (0, import_Vault.process)(app, ctx.sourcePath, (_abortSignal, content) => (0, import_String.replaceAll)(content, sectionInfo.text, newSectionText));
115
+ if (newCodeBlock && options.shouldPreserveLinePrefix) {
116
+ newCodeBlock = (0, import_String.indent)(newCodeBlock, sectionInfo.prefix);
117
+ }
118
+ const newSectionText = `${appendNewLine(textBeforeCodeBlock)}${appendNewLine(newCodeBlock)}${textAfterCodeBlock}`;
119
+ await (0, import_Vault.process)(app, ctx.sourcePath, (_abortSignal, content) => {
120
+ if (!(0, import_String.hasSingleOccurrence)(content, sectionInfo.text)) {
121
+ throw new Error("Multiple suitable code blocks found.");
122
+ }
123
+ return (0, import_String.replaceAll)(content, sectionInfo.text, newSectionText);
124
+ });
125
+ }
126
+ function appendNewLine(text) {
127
+ return text === "" ? "" : `${text}
128
+ `;
129
+ }
130
+ async function createApproximateSectionInfo(app, ctx) {
131
+ const sourceFile = app.vault.getFileByPath(ctx.sourcePath);
132
+ if (!sourceFile) {
133
+ throw new Error(`Source file ${ctx.sourcePath} not found.`);
134
+ }
135
+ const cache = app.metadataCache.getFileCache(sourceFile);
136
+ const frontmatterEndOffset = cache?.frontmatterPosition?.end.offset;
137
+ const content = await app.vault.cachedRead(sourceFile);
138
+ const contentStartOffset = frontmatterEndOffset === void 0 ? (0, import_obsidian.getFrontMatterInfo)(content).contentStart : frontmatterEndOffset + 1;
139
+ const text = content.slice(contentStartOffset);
140
+ return {
141
+ lineEnd: text.split("\n").length - 1,
142
+ lineStart: 0,
143
+ text
144
+ };
145
+ }
146
+ function createSectionInfoFromMatch(potentialCodeBlockText, match, approximateSectionInfo, sourceLines) {
147
+ const linePrefix = match.groups?.["LinePrefix"] ?? "";
148
+ const codeBlockStartDelimiter = match.groups?.["CodeBlockStartDelimiter"] ?? "";
149
+ const codeBlockEndDelimiter = match.groups?.["CodeBlockEndDelimiter"] ?? "";
150
+ const codeBlockArgs = match.groups?.["CodeBlockArgs"] ?? "";
151
+ const language = match.groups?.["CodeBlockLanguage"] ?? "";
152
+ const previousText = potentialCodeBlockText.slice(0, match.index);
153
+ const previousTextLines = previousText.split("\n");
154
+ return {
155
+ args: codeBlockArgs,
156
+ endDelimiter: codeBlockEndDelimiter,
157
+ language,
158
+ lineEnd: previousTextLines.length + sourceLines.length,
159
+ lineStart: previousTextLines.length - 1,
160
+ prefix: linePrefix,
161
+ startDelimiter: codeBlockStartDelimiter,
162
+ text: approximateSectionInfo.text
163
+ };
164
+ }
165
+ function getLanguageFromElement(el) {
166
+ const BLOCK_LANGUAGE_PREFIX = "block-language-";
167
+ return Array.from(el.classList).find((cls) => cls.startsWith(BLOCK_LANGUAGE_PREFIX))?.slice(BLOCK_LANGUAGE_PREFIX.length) ?? "";
168
+ }
169
+ function insertText(content, insertLineIndex, text, shouldPreserveLinePrefix) {
170
+ const lines = content.split("\n");
171
+ const newLines = lines.slice();
172
+ const textLines = text.split("\n");
173
+ if (insertLineIndex < 0) {
174
+ insertLineIndex = 0;
175
+ }
176
+ if (insertLineIndex > lines.length) {
177
+ insertLineIndex = lines.length;
178
+ }
179
+ const PREFIX_LINE_REG_EXP = /^ {0,3}(?:> {1,3})*/g;
180
+ const match = (lines[insertLineIndex] ?? "").match(PREFIX_LINE_REG_EXP);
181
+ const linePrefix = match?.[0] ?? "";
182
+ newLines.splice(insertLineIndex, 0, ...shouldPreserveLinePrefix ? textLines.map((line) => (0, import_String.indent)(line, linePrefix)) : textLines);
183
+ return newLines.join("\n");
184
+ }
185
+ function isSuitableCodeBlock(match, language, source, isInCallout) {
186
+ const codeBlockLanguage = match.groups?.["CodeBlockLanguage"] ?? "";
187
+ if (codeBlockLanguage !== language) {
188
+ return false;
189
+ }
190
+ const linePrefix = match.groups?.["LinePrefix"] ?? "";
191
+ if (isInCallout && !linePrefix.includes("> ")) {
192
+ return false;
193
+ }
194
+ const codeBlockContent = match.groups?.["CodeBlockContent"] ?? "";
195
+ const cleanCodeBlockContent = codeBlockContent.split("\n").map((line) => line.slice(linePrefix.length)).join("\n");
196
+ return cleanCodeBlockContent === source;
67
197
  }
68
198
  // Annotate the CommonJS export names for ESM import in node:
69
199
  0 && (module.exports = {
70
- getCodeBlockArguments,
200
+ getCodeBlockSectionInfo,
201
+ insertAfterCodeBlock,
202
+ insertBeforeCodeBlock,
203
+ removeCodeBlock,
71
204
  replaceCodeBlock
72
205
  });
73
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIGNvZGUgYmxvY2tzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICdzaGVsbC1xdW90ZSc7XG5cbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL1ZhbHVlUHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi4vQWJvcnRDb250cm9sbGVyLnRzJztcbmltcG9ydCB7IHRocm93RXhwcmVzc2lvbiB9IGZyb20gJy4uL0Vycm9yLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhcmd1bWVudCBvZiBhIGNvZGUgYmxvY2sgZnJvbSB0aGUgZ2l2ZW4gTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCBhbmQgSFRNTEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0IG9iamVjdC5cbiAqIEBwYXJhbSBlbCAtIFRoZSBIVE1MRWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvZGUgYmxvY2suXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgb2YgdGhlIGNvZGUgYmxvY2sgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgbm8gYXJndW1lbnQgaXMgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2RlQmxvY2tBcmd1bWVudHMoY3R4OiBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LCBlbDogSFRNTEVsZW1lbnQpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNlY3Rpb25JbmZvID0gY3R4LmdldFNlY3Rpb25JbmZvKGVsKTtcbiAgaWYgKCFzZWN0aW9uSW5mbykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBsaW5lcyA9IHNlY3Rpb25JbmZvLnRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBjb2RlQmxvY2tIZWFkZXIgPSBsaW5lc1tzZWN0aW9uSW5mby5saW5lU3RhcnRdID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoJ0NvZGUgYmxvY2sgaGVhZGVyIG5vdCBmb3VuZCcpKTtcbiAgY29uc3QgbWF0Y2ggPSAvXig/OmB7Myx9fH57Myx9KVxcUytcXHMrKD88QXJndW1lbnRzPi4qKSQvLmV4ZWMoY29kZUJsb2NrSGVhZGVyKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gcGFyc2UobWF0Y2guZ3JvdXBzPy5bJ0FyZ3VtZW50cyddID8/ICcnKS5tYXAoU3RyaW5nKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIEFwcCBvYmplY3QuXG4gKiBAcGFyYW0gY3R4IC0gVGhlIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQgb2JqZWN0LlxuICogQHBhcmFtIGVsIC0gVGhlIEhUTUxFbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29kZSBibG9jay5cbiAqIEBwYXJhbSBjb2RlQmxvY2tQcm92aWRlciAtIFRoZSBWYWx1ZVByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgdGhlIG5ldyBjb2RlIGJsb2NrLlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNvZGVCbG9jayhcbiAgYXBwOiBBcHAsXG4gIGN0eDogTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCxcbiAgZWw6IEhUTUxFbGVtZW50LFxuICBjb2RlQmxvY2tQcm92aWRlcjogVmFsdWVQcm92aWRlcjxzdHJpbmcsIFtzdHJpbmddPixcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGFib3J0U2lnbmFsID8/PSBhYm9ydFNpZ25hbE5ldmVyKCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3Qgc2VjdGlvbkluZm8gPSBjdHguZ2V0U2VjdGlvbkluZm8oZWwpO1xuICBpZiAoIXNlY3Rpb25JbmZvKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGxpbmVzID0gc2VjdGlvbkluZm8udGV4dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHByZWZpeCA9IGxpbmVzLnNsaWNlKDAsIHNlY3Rpb25JbmZvLmxpbmVTdGFydCkuam9pbignXFxuJyk7XG4gIGNvbnN0IG9sZENvZGVCbG9jayA9IGxpbmVzLnNsaWNlKHNlY3Rpb25JbmZvLmxpbmVTdGFydCwgc2VjdGlvbkluZm8ubGluZUVuZCArIDEpLmpvaW4oJ1xcbicpO1xuICBjb25zdCBzdWZmaXggPSBsaW5lcy5zbGljZShzZWN0aW9uSW5mby5saW5lRW5kICsgMSkuam9pbignXFxuJyk7XG4gIGNvbnN0IG5ld0NvZGVCbG9jayA9IGF3YWl0IHJlc29sdmVWYWx1ZShjb2RlQmxvY2tQcm92aWRlciwgYWJvcnRTaWduYWwsIG9sZENvZGVCbG9jayk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGNvbnN0IG5ld1NlY3Rpb25UZXh0ID0gYCR7cHJlZml4fVxcbiR7bmV3Q29kZUJsb2NrfSR7bmV3Q29kZUJsb2NrID8gJ1xcbicgOiAnJ30ke3N1ZmZpeH1gO1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgY3R4LnNvdXJjZVBhdGgsIChfYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHJlcGxhY2VBbGwoY29udGVudCwgc2VjdGlvbkluZm8udGV4dCwgbmV3U2VjdGlvblRleHQpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSx5QkFBc0I7QUFJdEIsNkJBQWlDO0FBQ2pDLG1CQUFnQztBQUNoQyxvQkFBMkI7QUFDM0IsMkJBQTZCO0FBQzdCLG1CQUF3QjtBQVNqQixTQUFTLHNCQUFzQixLQUFtQyxJQUEyQjtBQUNsRyxRQUFNLGNBQWMsSUFBSSxlQUFlLEVBQUU7QUFDekMsTUFBSSxDQUFDLGFBQWE7QUFDaEIsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNBLFFBQU0sUUFBUSxZQUFZLEtBQUssTUFBTSxJQUFJO0FBQ3pDLFFBQU0sa0JBQWtCLE1BQU0sWUFBWSxTQUFTLFNBQUssOEJBQWdCLElBQUksTUFBTSw2QkFBNkIsQ0FBQztBQUNoSCxRQUFNLFFBQVEsMENBQTBDLEtBQUssZUFBZTtBQUM1RSxNQUFJLENBQUMsT0FBTztBQUNWLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFDQSxhQUFPLDBCQUFNLE1BQU0sU0FBUyxXQUFXLEtBQUssRUFBRSxFQUFFLElBQUksTUFBTTtBQUM1RDtBQVdBLGVBQXNCLGlCQUNwQixLQUNBLEtBQ0EsSUFDQSxtQkFDQSxhQUNlO0FBQ2Ysc0JBQWdCLHlDQUFpQjtBQUNqQyxjQUFZLGVBQWU7QUFFM0IsUUFBTSxjQUFjLElBQUksZUFBZSxFQUFFO0FBQ3pDLE1BQUksQ0FBQyxhQUFhO0FBQ2hCO0FBQUEsRUFDRjtBQUNBLFFBQU0sUUFBUSxZQUFZLEtBQUssTUFBTSxJQUFJO0FBQ3pDLFFBQU0sU0FBUyxNQUFNLE1BQU0sR0FBRyxZQUFZLFNBQVMsRUFBRSxLQUFLLElBQUk7QUFDOUQsUUFBTSxlQUFlLE1BQU0sTUFBTSxZQUFZLFdBQVcsWUFBWSxVQUFVLENBQUMsRUFBRSxLQUFLLElBQUk7QUFDMUYsUUFBTSxTQUFTLE1BQU0sTUFBTSxZQUFZLFVBQVUsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUM3RCxRQUFNLGVBQWUsVUFBTSxtQ0FBYSxtQkFBbUIsYUFBYSxZQUFZO0FBQ3BGLGNBQVksZUFBZTtBQUMzQixRQUFNLGlCQUFpQixHQUFHLE1BQU07QUFBQSxFQUFLLFlBQVksR0FBRyxlQUFlLE9BQU8sRUFBRSxHQUFHLE1BQU07QUFDckYsWUFBTSxzQkFBUSxLQUFLLElBQUksWUFBWSxDQUFDLGNBQWMsZ0JBQVksMEJBQVcsU0FBUyxZQUFZLE1BQU0sY0FBYyxDQUFDO0FBQ3JIOyIsCiAgIm5hbWVzIjogW10KfQo=
206
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIGNvZGUgYmxvY2tzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldEZyb250TWF0dGVySW5mbyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsTmV2ZXIgfSBmcm9tICcuLi9BYm9ydENvbnRyb2xsZXIudHMnO1xuaW1wb3J0IHtcbiAgaGFzU2luZ2xlT2NjdXJyZW5jZSxcbiAgaW5kZW50LFxuICByZXBsYWNlQWxsLFxuICB1bmluZGVudFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2RlIGJsb2NrIGluIGEgTWFya2Rvd24gc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiBleHRlbmRzIE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudHMgb2YgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICBhcmdzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmQgZGVsaW1pdGVyIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgZW5kRGVsaW1pdGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggb2YgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXJ0IGRlbGltaXRlciBvZiB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHN0YXJ0RGVsaW1pdGVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9ucyBmb3IgZ2V0dGluZyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2RlIGJsb2NrIGluIGEgTWFya2Rvd24gc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBvYmplY3QuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQgb2JqZWN0LlxuICAgKi9cbiAgY3R4OiBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRNTEVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9ucyBmb3IgaW5zZXJ0aW5nIHRleHQgYWZ0ZXIgYSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydENvZGVCbG9ja09wdGlvbnMgZXh0ZW5kcyBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBsaW5lcyB0byBvZmZzZXQgdGhlIGluc2VydGlvbiBieS4gRGVmYXVsdCBpcyBgMGAuXG4gICAqL1xuICBsaW5lT2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZXNlcnZlIHRoZSBsaW5lIHByZWZpeCBvZiB0aGUgY29kZSBibG9jay4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gaW5zZXJ0IGFmdGVyIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIG9wdGlvbnMgZm9yIHJlcGxhY2luZyBhIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZUNvZGVCbG9ja09wdGlvbnMgZXh0ZW5kcyBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIHByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgdGhlIG5ldyBjb2RlIGJsb2NrLlxuICAgKi9cbiAgY29kZUJsb2NrUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8c3RyaW5nLCBbc3RyaW5nXT47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGxpbmUgcHJlZml4IG9mIHRoZSBjb2RlIGJsb2NrLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBzaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgY29kZSBibG9jayBpbiBhIE1hcmtkb3duIHNlY3Rpb24uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlIGJsb2NrIGluIHRoZSBNYXJrZG93biBzZWN0aW9uLlxuICpcbiAqIEB0aHJvd3MgSWYgbm8gc3VpdGFibGUgY29kZSBibG9jayBpcyBmb3VuZC5cbiAqIEB0aHJvd3MgSWYgbXVsdGlwbGUgc3VpdGFibGUgY29kZSBibG9ja3MgYXJlIGZvdW5kLiBIYXBwZW5zIHdoZW4gdGhlIGNvZGUgYmxvY2sgaXMgaW4gYSBjYWxsb3V0LiBDYXVzZWQgYnkgdGhlIGJ1ZyBpbiBPYnNpZGlhbjoge0BsaW5rIGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZ2V0c2VjdGlvbmluZm8taXMtaW5hY2N1cmF0ZS1pbnNpZGUtY2FsbG91dHMvMTA0Mjg5fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29kZUJsb2NrU2VjdGlvbkluZm8ob3B0aW9uczogR2V0Q29kZUJsb2NrU2VjdGlvbkluZm9PcHRpb25zKTogUHJvbWlzZTxDb2RlQmxvY2tNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbj4ge1xuICBjb25zdCB7IGFwcCwgY3R4LCBlbCwgc291cmNlIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGFwcHJveGltYXRlU2VjdGlvbkluZm8gPSBjdHguZ2V0U2VjdGlvbkluZm8oZWwpID8/IGF3YWl0IGNyZWF0ZUFwcHJveGltYXRlU2VjdGlvbkluZm8oYXBwLCBjdHgpO1xuICBjb25zdCBpc0luQ2FsbG91dCA9ICEhZWwucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjYWxsb3V0LWNvbnRlbnQnKTtcblxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlRnJvbUVsZW1lbnQoZWwpO1xuICBjb25zdCBzb3VyY2VMaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgY29uc3QgdGV4dExpbmVzID0gYXBwcm94aW1hdGVTZWN0aW9uSW5mby50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgcG90ZW50aWFsQ29kZUJsb2NrVGV4dExpbmVzID0gdGV4dExpbmVzLm1hcCgobGluZSwgaW5kZXgpID0+XG4gICAgYXBwcm94aW1hdGVTZWN0aW9uSW5mby5saW5lU3RhcnQgPD0gaW5kZXggJiYgaW5kZXggPD0gYXBwcm94aW1hdGVTZWN0aW9uSW5mby5saW5lRW5kID8gbGluZSA6ICcnXG4gICk7XG4gIGNvbnN0IHBvdGVudGlhbENvZGVCbG9ja1RleHQgPSBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0TGluZXMuam9pbignXFxuJyk7XG5cbiAgY29uc3QgUkVHX0VYUCA9XG4gICAgLyg/PD1efFxcbikoPzxMaW5lUHJlZml4PiB7MCwzfSg/Oj4gezEsM30pKikoPzxDb2RlQmxvY2tTdGFydERlbGltaXRlcj4oPzxDb2RlQmxvY2tTdGFydERlbGltaXRlckNoYXI+W2B+XSkoPzpcXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXJDaGFyPnsyLH0pKSg/PENvZGVCbG9ja0xhbmd1YWdlPlxcUyopKD86WyBcXHRdKyg/PENvZGVCbG9ja0FyZ3M+Lio/KVsgXFx0XSspPyg/Olxcbig/PENvZGVCbG9ja0NvbnRlbnQ+KD86XFxuP1xcazxMaW5lUHJlZml4Pi4qKSs/KSk/XFxuXFxrPExpbmVQcmVmaXg+KD88Q29kZUJsb2NrRW5kRGVsaW1pdGVyPlxcazxDb2RlQmxvY2tTdGFydERlbGltaXRlcj5cXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXJDaGFyPiopWyBcXHRdKig/OlxcbnwkKS9nO1xuXG4gIGxldCBzZWN0aW9uSW5mbzogQ29kZUJsb2NrTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24gfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIHBvdGVudGlhbENvZGVCbG9ja1RleHQubWF0Y2hBbGwoUkVHX0VYUCkpIHtcbiAgICBpZiAoIWlzU3VpdGFibGVDb2RlQmxvY2sobWF0Y2gsIGxhbmd1YWdlLCBzb3VyY2UsIGlzSW5DYWxsb3V0KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHNlY3Rpb25JbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHN1aXRhYmxlIGNvZGUgYmxvY2tzIGZvdW5kLicpO1xuICAgIH1cblxuICAgIHNlY3Rpb25JbmZvID0gY3JlYXRlU2VjdGlvbkluZm9Gcm9tTWF0Y2gocG90ZW50aWFsQ29kZUJsb2NrVGV4dCwgbWF0Y2gsIGFwcHJveGltYXRlU2VjdGlvbkluZm8sIHNvdXJjZUxpbmVzKTtcbiAgfVxuXG4gIGlmICghc2VjdGlvbkluZm8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHN1aXRhYmxlIGNvZGUgYmxvY2sgZm91bmQuJyk7XG4gIH1cblxuICByZXR1cm4gc2VjdGlvbkluZm87XG59XG5cbi8qKlxuICogSW5zZXJ0cyB0ZXh0IGFmdGVyIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc2VydEFmdGVyQ29kZUJsb2NrKG9wdGlvbnM6IEluc2VydENvZGVCbG9ja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIGN0eCwgbGluZU9mZnNldCA9IDAsIHRleHQgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc2VjdGlvbkluZm8gPSBhd2FpdCBnZXRDb2RlQmxvY2tTZWN0aW9uSW5mbyhvcHRpb25zKTtcbiAgYXdhaXQgcHJvY2VzcyhhcHAsIGN0eC5zb3VyY2VQYXRoLCAoX2Fib3J0U2lnbmFsLCBjb250ZW50KSA9PiB7XG4gICAgaWYgKCFoYXNTaW5nbGVPY2N1cnJlbmNlKGNvbnRlbnQsIHNlY3Rpb25JbmZvLnRleHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHN1aXRhYmxlIGNvZGUgYmxvY2tzIGZvdW5kLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gY29udGVudC5pbmRleE9mKHNlY3Rpb25JbmZvLnRleHQpO1xuICAgIGNvbnN0IHRleHRCZWZvcmVTZWN0aW9uID0gY29udGVudC5zbGljZSgwLCBpbmRleCk7XG4gICAgY29uc3QgbGluZXNCZWZvcmVTZWN0aW9uID0gdGV4dEJlZm9yZVNlY3Rpb24uc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IGluc2VydExpbmVJbmRleCA9IGxpbmVzQmVmb3JlU2VjdGlvbi5sZW5ndGggKyBzZWN0aW9uSW5mby5saW5lRW5kICsgbGluZU9mZnNldDtcbiAgICByZXR1cm4gaW5zZXJ0VGV4dChjb250ZW50LCBpbnNlcnRMaW5lSW5kZXgsIHRleHQsIG9wdGlvbnMuc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4KTtcbiAgfSk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyB0ZXh0IGJlZm9yZSB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnNlcnRCZWZvcmVDb2RlQmxvY2sob3B0aW9uczogSW5zZXJ0Q29kZUJsb2NrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCwgY3R4LCBsaW5lT2Zmc2V0ID0gMCwgdGV4dCB9ID0gb3B0aW9ucztcblxuICBjb25zdCBzZWN0aW9uSW5mbyA9IGF3YWl0IGdldENvZGVCbG9ja1NlY3Rpb25JbmZvKG9wdGlvbnMpO1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgY3R4LnNvdXJjZVBhdGgsIChfYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHtcbiAgICBpZiAoIWhhc1NpbmdsZU9jY3VycmVuY2UoY29udGVudCwgc2VjdGlvbkluZm8udGV4dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc3VpdGFibGUgY29kZSBibG9ja3MgZm91bmQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSBjb250ZW50LmluZGV4T2Yoc2VjdGlvbkluZm8udGV4dCk7XG4gICAgY29uc3QgdGV4dEJlZm9yZVNlY3Rpb24gPSBjb250ZW50LnNsaWNlKDAsIGluZGV4KTtcbiAgICBjb25zdCBsaW5lc0JlZm9yZVNlY3Rpb24gPSB0ZXh0QmVmb3JlU2VjdGlvbi5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgaW5zZXJ0TGluZUluZGV4ID0gbGluZXNCZWZvcmVTZWN0aW9uLmxlbmd0aCArIHNlY3Rpb25JbmZvLmxpbmVTdGFydCAtIGxpbmVPZmZzZXQgLSAxO1xuICAgIHJldHVybiBpbnNlcnRUZXh0KGNvbnRlbnQsIGluc2VydExpbmVJbmRleCwgdGV4dCwgb3B0aW9ucy5zaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUNvZGVCbG9jayhvcHRpb25zOiBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcmVwbGFjZUNvZGVCbG9jayh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb2RlQmxvY2tQcm92aWRlcjogJydcbiAgfSk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgdGhlIGNvZGUgYmxvY2suXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNvZGVCbG9jayhvcHRpb25zOiBSZXBsYWNlQ29kZUJsb2NrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCwgY29kZUJsb2NrUHJvdmlkZXIsIGN0eCB9ID0gb3B0aW9ucztcblxuICBjb25zdCBhYm9ydFNpZ25hbCA9IG9wdGlvbnMuYWJvcnRTaWduYWwgPz8gYWJvcnRTaWduYWxOZXZlcigpO1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gIGNvbnN0IHNlY3Rpb25JbmZvID0gYXdhaXQgZ2V0Q29kZUJsb2NrU2VjdGlvbkluZm8ob3B0aW9ucyk7XG5cbiAgY29uc3QgbGluZXMgPSBzZWN0aW9uSW5mby50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgdGV4dEJlZm9yZUNvZGVCbG9jayA9IGxpbmVzLnNsaWNlKDAsIHNlY3Rpb25JbmZvLmxpbmVTdGFydCkuam9pbignXFxuJyk7XG4gIGxldCBvbGRDb2RlQmxvY2sgPSBsaW5lcy5zbGljZShzZWN0aW9uSW5mby5saW5lU3RhcnQsIHNlY3Rpb25JbmZvLmxpbmVFbmQgKyAxKS5qb2luKCdcXG4nKTtcbiAgaWYgKG9wdGlvbnMuc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4KSB7XG4gICAgb2xkQ29kZUJsb2NrID0gdW5pbmRlbnQob2xkQ29kZUJsb2NrLCBzZWN0aW9uSW5mby5wcmVmaXgpO1xuICB9XG4gIGNvbnN0IHRleHRBZnRlckNvZGVCbG9jayA9IGxpbmVzLnNsaWNlKHNlY3Rpb25JbmZvLmxpbmVFbmQgKyAxKS5qb2luKCdcXG4nKTtcbiAgbGV0IG5ld0NvZGVCbG9jayA9IGF3YWl0IHJlc29sdmVWYWx1ZShjb2RlQmxvY2tQcm92aWRlciwgYWJvcnRTaWduYWwsIG9sZENvZGVCbG9jayk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgaWYgKG5ld0NvZGVCbG9jayAmJiBvcHRpb25zLnNob3VsZFByZXNlcnZlTGluZVByZWZpeCkge1xuICAgIG5ld0NvZGVCbG9jayA9IGluZGVudChuZXdDb2RlQmxvY2ssIHNlY3Rpb25JbmZvLnByZWZpeCk7XG4gIH1cblxuICBjb25zdCBuZXdTZWN0aW9uVGV4dCA9IGAke2FwcGVuZE5ld0xpbmUodGV4dEJlZm9yZUNvZGVCbG9jayl9JHthcHBlbmROZXdMaW5lKG5ld0NvZGVCbG9jayl9JHt0ZXh0QWZ0ZXJDb2RlQmxvY2t9YDtcbiAgYXdhaXQgcHJvY2VzcyhhcHAsIGN0eC5zb3VyY2VQYXRoLCAoX2Fib3J0U2lnbmFsLCBjb250ZW50KSA9PiB7XG4gICAgaWYgKCFoYXNTaW5nbGVPY2N1cnJlbmNlKGNvbnRlbnQsIHNlY3Rpb25JbmZvLnRleHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHN1aXRhYmxlIGNvZGUgYmxvY2tzIGZvdW5kLicpO1xuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZUFsbChjb250ZW50LCBzZWN0aW9uSW5mby50ZXh0LCBuZXdTZWN0aW9uVGV4dCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhcHBlbmROZXdMaW5lKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0ID09PSAnJyA/ICcnIDogYCR7dGV4dH1cXG5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBcHByb3hpbWF0ZVNlY3Rpb25JbmZvKGFwcDogQXBwLCBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQpOiBQcm9taXNlPE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uPiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChjdHguc291cmNlUGF0aCk7XG4gIGlmICghc291cmNlRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGZpbGUgJHtjdHguc291cmNlUGF0aH0gbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IGNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKHNvdXJjZUZpbGUpO1xuICBjb25zdCBmcm9udG1hdHRlckVuZE9mZnNldCA9IGNhY2hlPy5mcm9udG1hdHRlclBvc2l0aW9uPy5lbmQub2Zmc2V0O1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LmNhY2hlZFJlYWQoc291cmNlRmlsZSk7XG4gIGNvbnN0IGNvbnRlbnRTdGFydE9mZnNldCA9IGZyb250bWF0dGVyRW5kT2Zmc2V0ID09PSB1bmRlZmluZWQgPyBnZXRGcm9udE1hdHRlckluZm8oY29udGVudCkuY29udGVudFN0YXJ0IDogZnJvbnRtYXR0ZXJFbmRPZmZzZXQgKyAxO1xuICBjb25zdCB0ZXh0ID0gY29udGVudC5zbGljZShjb250ZW50U3RhcnRPZmZzZXQpO1xuICByZXR1cm4ge1xuICAgIGxpbmVFbmQ6IHRleHQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDEsXG4gICAgbGluZVN0YXJ0OiAwLFxuICAgIHRleHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VjdGlvbkluZm9Gcm9tTWF0Y2goXG4gIHBvdGVudGlhbENvZGVCbG9ja1RleHQ6IHN0cmluZyxcbiAgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXksXG4gIGFwcHJveGltYXRlU2VjdGlvbkluZm86IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uLFxuICBzb3VyY2VMaW5lczogc3RyaW5nW11cbik6IENvZGVCbG9ja01hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uIHtcbiAgY29uc3QgbGluZVByZWZpeCA9IG1hdGNoLmdyb3Vwcz8uWydMaW5lUHJlZml4J10gPz8gJyc7XG4gIGNvbnN0IGNvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyJ10gPz8gJyc7XG4gIGNvbnN0IGNvZGVCbG9ja0VuZERlbGltaXRlciA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tFbmREZWxpbWl0ZXInXSA/PyAnJztcbiAgY29uc3QgY29kZUJsb2NrQXJncyA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tBcmdzJ10gPz8gJyc7XG4gIGNvbnN0IGxhbmd1YWdlID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja0xhbmd1YWdlJ10gPz8gJyc7XG5cbiAgY29uc3QgcHJldmlvdXNUZXh0ID0gcG90ZW50aWFsQ29kZUJsb2NrVGV4dC5zbGljZSgwLCBtYXRjaC5pbmRleCk7XG4gIGNvbnN0IHByZXZpb3VzVGV4dExpbmVzID0gcHJldmlvdXNUZXh0LnNwbGl0KCdcXG4nKTtcblxuICByZXR1cm4ge1xuICAgIGFyZ3M6IGNvZGVCbG9ja0FyZ3MsXG4gICAgZW5kRGVsaW1pdGVyOiBjb2RlQmxvY2tFbmREZWxpbWl0ZXIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbGluZUVuZDogcHJldmlvdXNUZXh0TGluZXMubGVuZ3RoICsgc291cmNlTGluZXMubGVuZ3RoLFxuICAgIGxpbmVTdGFydDogcHJldmlvdXNUZXh0TGluZXMubGVuZ3RoIC0gMSxcbiAgICBwcmVmaXg6IGxpbmVQcmVmaXgsXG4gICAgc3RhcnREZWxpbWl0ZXI6IGNvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyLFxuICAgIHRleHQ6IGFwcHJveGltYXRlU2VjdGlvbkluZm8udGV4dFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRMYW5ndWFnZUZyb21FbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IEJMT0NLX0xBTkdVQUdFX1BSRUZJWCA9ICdibG9jay1sYW5ndWFnZS0nO1xuICByZXR1cm4gQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QpLmZpbmQoKGNscykgPT4gY2xzLnN0YXJ0c1dpdGgoQkxPQ0tfTEFOR1VBR0VfUFJFRklYKSk/LnNsaWNlKEJMT0NLX0xBTkdVQUdFX1BSRUZJWC5sZW5ndGgpID8/ICcnO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRUZXh0KGNvbnRlbnQ6IHN0cmluZywgaW5zZXJ0TGluZUluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZywgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IG5ld0xpbmVzID0gbGluZXMuc2xpY2UoKTtcbiAgY29uc3QgdGV4dExpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG5cbiAgaWYgKGluc2VydExpbmVJbmRleCA8IDApIHtcbiAgICBpbnNlcnRMaW5lSW5kZXggPSAwO1xuICB9XG4gIGlmIChpbnNlcnRMaW5lSW5kZXggPiBsaW5lcy5sZW5ndGgpIHtcbiAgICBpbnNlcnRMaW5lSW5kZXggPSBsaW5lcy5sZW5ndGg7XG4gIH1cblxuICBjb25zdCBQUkVGSVhfTElORV9SRUdfRVhQID0gL14gezAsM30oPzo+IHsxLDN9KSovZztcbiAgY29uc3QgbWF0Y2ggPSAobGluZXNbaW5zZXJ0TGluZUluZGV4XSA/PyAnJykubWF0Y2goUFJFRklYX0xJTkVfUkVHX0VYUCk7XG4gIGNvbnN0IGxpbmVQcmVmaXggPSBtYXRjaD8uWzBdID8/ICcnO1xuICBuZXdMaW5lcy5zcGxpY2UoaW5zZXJ0TGluZUluZGV4LCAwLCAuLi4oc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4ID8gdGV4dExpbmVzLm1hcCgobGluZSkgPT4gaW5kZW50KGxpbmUsIGxpbmVQcmVmaXgpKSA6IHRleHRMaW5lcykpO1xuICByZXR1cm4gbmV3TGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzU3VpdGFibGVDb2RlQmxvY2soXG4gIG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5LFxuICBsYW5ndWFnZTogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgaXNJbkNhbGxvdXQ6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuICBjb25zdCBjb2RlQmxvY2tMYW5ndWFnZSA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tMYW5ndWFnZSddID8/ICcnO1xuICBpZiAoY29kZUJsb2NrTGFuZ3VhZ2UgIT09IGxhbmd1YWdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbGluZVByZWZpeCA9IG1hdGNoLmdyb3Vwcz8uWydMaW5lUHJlZml4J10gPz8gJyc7XG5cbiAgaWYgKGlzSW5DYWxsb3V0ICYmICFsaW5lUHJlZml4LmluY2x1ZGVzKCc+ICcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29kZUJsb2NrQ29udGVudCA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tDb250ZW50J10gPz8gJyc7XG4gIGNvbnN0IGNsZWFuQ29kZUJsb2NrQ29udGVudCA9IGNvZGVCbG9ja0NvbnRlbnQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS5zbGljZShsaW5lUHJlZml4Lmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiBjbGVhbkNvZGVCbG9ja0NvbnRlbnQgPT09IHNvdXJjZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSxzQkFBbUM7QUFJbkMsNkJBQWlDO0FBQ2pDLG9CQUtPO0FBQ1AsMkJBQTZCO0FBQzdCLG1CQUF3QjtBQTBHeEIsZUFBc0Isd0JBQXdCLFNBQXVGO0FBQ25JLFFBQU0sRUFBRSxLQUFLLEtBQUssSUFBSSxPQUFPLElBQUk7QUFFakMsUUFBTSx5QkFBeUIsSUFBSSxlQUFlLEVBQUUsS0FBSyxNQUFNLDZCQUE2QixLQUFLLEdBQUc7QUFDcEcsUUFBTSxjQUFjLENBQUMsQ0FBQyxHQUFHLGVBQWUsVUFBVSxTQUFTLGlCQUFpQjtBQUU1RSxRQUFNLFdBQVcsdUJBQXVCLEVBQUU7QUFDMUMsUUFBTSxjQUFjLE9BQU8sTUFBTSxJQUFJO0FBRXJDLFFBQU0sWUFBWSx1QkFBdUIsS0FBSyxNQUFNLElBQUk7QUFDeEQsUUFBTSw4QkFBOEIsVUFBVTtBQUFBLElBQUksQ0FBQyxNQUFNLFVBQ3ZELHVCQUF1QixhQUFhLFNBQVMsU0FBUyx1QkFBdUIsVUFBVSxPQUFPO0FBQUEsRUFDaEc7QUFDQSxRQUFNLHlCQUF5Qiw0QkFB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
@@ -3,23 +3,119 @@
3
3
  *
4
4
  * This module provides utility functions for processing code blocks in Obsidian.
5
5
  */
6
- import type { App, MarkdownPostProcessorContext } from 'obsidian';
6
+ import type { App, MarkdownPostProcessorContext, MarkdownSectionInformation } from 'obsidian';
7
7
  import type { ValueProvider } from '../ValueProvider.cjs';
8
8
  /**
9
- * Retrieves the argument of a code block from the given MarkdownPostProcessorContext and HTMLElement.
9
+ * Represents the information about a code block in a Markdown section.
10
+ */
11
+ export interface CodeBlockMarkdownSectionInformation extends MarkdownSectionInformation {
12
+ /**
13
+ * The arguments of the code block.
14
+ */
15
+ args: string;
16
+ /**
17
+ * The end delimiter of the code block.
18
+ */
19
+ endDelimiter: string;
20
+ /**
21
+ * The language of the code block.
22
+ */
23
+ language: string;
24
+ /**
25
+ * The prefix of the code block.
26
+ */
27
+ prefix: string;
28
+ /**
29
+ * The start delimiter of the code block.
30
+ */
31
+ startDelimiter: string;
32
+ }
33
+ /**
34
+ * Represents the options for getting the information about a code block in a Markdown section.
35
+ */
36
+ export interface GetCodeBlockSectionInfoOptions {
37
+ /**
38
+ * The Obsidian App object.
39
+ */
40
+ app: App;
41
+ /**
42
+ * The MarkdownPostProcessorContext object.
43
+ */
44
+ ctx: MarkdownPostProcessorContext;
45
+ /**
46
+ * The HTMLElement representing the code block.
47
+ */
48
+ el: HTMLElement;
49
+ /**
50
+ * The source of the code block.
51
+ */
52
+ source: string;
53
+ }
54
+ /**
55
+ * Represents the options for inserting text after a code block.
56
+ */
57
+ export interface InsertCodeBlockOptions extends GetCodeBlockSectionInfoOptions {
58
+ /**
59
+ * The number of lines to offset the insertion by. Default is `0`.
60
+ */
61
+ lineOffset?: number;
62
+ /**
63
+ * Whether to preserve the line prefix of the code block. Default is `false`.
64
+ */
65
+ shouldPreserveLinePrefix?: boolean;
66
+ /**
67
+ * The text to insert after the code block.
68
+ */
69
+ text: string;
70
+ }
71
+ /**
72
+ * Represents the options for replacing a code block.
73
+ */
74
+ export interface ReplaceCodeBlockOptions extends GetCodeBlockSectionInfoOptions {
75
+ /**
76
+ * The abort signal to control the execution of the function.
77
+ */
78
+ abortSignal?: AbortSignal;
79
+ /**
80
+ * The provider that provides the new code block.
81
+ */
82
+ codeBlockProvider: ValueProvider<string, [string]>;
83
+ /**
84
+ * Whether to preserve the line prefix of the code block. Default is `false`.
85
+ */
86
+ shouldPreserveLinePrefix?: boolean;
87
+ }
88
+ /**
89
+ * Gets the information about a code block in a Markdown section.
90
+ *
91
+ * @param options - The options for the function.
92
+ * @returns The information about the code block in the Markdown section.
93
+ *
94
+ * @throws If no suitable code block is found.
95
+ * @throws If multiple suitable code blocks are found. Happens when the code block is in a callout. Caused by the bug in Obsidian: {@link https://forum.obsidian.md/t/bug-getsectioninfo-is-inaccurate-inside-callouts/104289}
96
+ */
97
+ export declare function getCodeBlockSectionInfo(options: GetCodeBlockSectionInfoOptions): Promise<CodeBlockMarkdownSectionInformation>;
98
+ /**
99
+ * Inserts text after the code block.
100
+ *
101
+ * @param options - The options for the function.
102
+ */
103
+ export declare function insertAfterCodeBlock(options: InsertCodeBlockOptions): Promise<void>;
104
+ /**
105
+ * Inserts text before the code block.
106
+ *
107
+ * @param options - The options for the function.
108
+ */
109
+ export declare function insertBeforeCodeBlock(options: InsertCodeBlockOptions): Promise<void>;
110
+ /**
111
+ * Removes the code block.
10
112
  *
11
- * @param ctx - The MarkdownPostProcessorContext object.
12
- * @param el - The HTMLElement representing the code block.
13
- * @returns The argument of the code block as a string, or null if no argument is found.
113
+ * @param options - The options for the function.
14
114
  */
15
- export declare function getCodeBlockArguments(ctx: MarkdownPostProcessorContext, el: HTMLElement): string[];
115
+ export declare function removeCodeBlock(options: GetCodeBlockSectionInfoOptions): Promise<void>;
16
116
  /**
17
117
  * Replaces the code block.
18
118
  *
19
- * @param app - The Obsidian App object.
20
- * @param ctx - The MarkdownPostProcessorContext object.
21
- * @param el - The HTMLElement representing the code block.
22
- * @param codeBlockProvider - The ValueProvider that provides the new code block.
23
- * @param abortSignal - The abort signal to control the execution of the function.
119
+ * @param options - The options for the function.
24
120
  */
25
- export declare function replaceCodeBlock(app: App, ctx: MarkdownPostProcessorContext, el: HTMLElement, codeBlockProvider: ValueProvider<string, [string]>, abortSignal?: AbortSignal): Promise<void>;
121
+ export declare function replaceCodeBlock(options: ReplaceCodeBlockOptions): Promise<void>;
@@ -30,9 +30,10 @@ export declare function emitAsyncErrorEvent(asyncError: unknown): void;
30
30
  * Converts an error to a string representation, including nested causes with indentation.
31
31
  *
32
32
  * @param error - The error to convert to a string.
33
+ * @param shouldEnsureAnsiSequencesCleared - Whether to ensure ANSI sequences in the error message are cleared.
33
34
  * @returns The string representation of the error.
34
35
  */
35
- export declare function errorToString(error: unknown): string;
36
+ export declare function errorToString(error: unknown, shouldEnsureAnsiSequencesCleared?: boolean): string;
36
37
  /**
37
38
  * Gets the current stack trace as a string, excluding the current function call.
38
39
  *
@@ -45,8 +45,16 @@ class CustomStackTraceError extends Error {
45
45
  function emitAsyncErrorEvent(asyncError) {
46
46
  asyncErrorEventEmitter.trigger(ASYNC_ERROR_EVENT, asyncError);
47
47
  }
48
- function errorToString(error) {
49
- return parseErrorEntries(error).map((entry) => " ".repeat(entry.level) + (entry.message.startsWith(ERROR_STACK_PREFIX) ? entry.message.slice(ERROR_STACK_PREFIX.length) : entry.message)).join("\n");
48
+ function errorToString(error, shouldEnsureAnsiSequencesCleared = false) {
49
+ const ANSI_CLEAR_SEQUENCE = "\x1B[0m";
50
+ return parseErrorEntries(error).map((entry) => {
51
+ const prefix = " ".repeat(entry.level);
52
+ let message = entry.message.startsWith(ERROR_STACK_PREFIX) ? entry.message.slice(ERROR_STACK_PREFIX.length) : entry.message;
53
+ if (entry.shouldClearAnsiSequence && shouldEnsureAnsiSequencesCleared) {
54
+ message = `${ANSI_CLEAR_SEQUENCE}${message}${ANSI_CLEAR_SEQUENCE}`;
55
+ }
56
+ return prefix + message;
57
+ }).join("\n");
50
58
  }
51
59
  function getStackTrace(framesToSkip = 0) {
52
60
  const ADDITIONAL_FRAMES_TO_SKIP = 2;
@@ -56,14 +64,7 @@ function getStackTrace(framesToSkip = 0) {
56
64
  }
57
65
  function printError(error, console) {
58
66
  console ??= globalThis.console;
59
- const entries = parseErrorEntries(error);
60
- for (const entry of entries) {
61
- if (entry.shouldClearAnsiSequence) {
62
- console.error(`\x1B[0m${entry.message}\x1B[0m`);
63
- } else {
64
- console.error(entry.message);
65
- }
66
- }
67
+ console.error(errorToString(error, true));
67
68
  }
68
69
  function registerAsyncErrorEventHandler(handler) {
69
70
  const eventRef = asyncErrorEventEmitter.on(ASYNC_ERROR_EVENT, handler);
@@ -115,4 +116,4 @@ export {
115
116
  registerAsyncErrorEventHandler,
116
117
  throwExpression
117
118
  };
118
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlcnJvciBoYW5kbGluZy5cbiAqL1xuXG5pbXBvcnQgeyBBc3luY0V2ZW50cyB9IGZyb20gJy4vQXN5bmNFdmVudHMudHMnO1xuXG5jb25zdCBBU1lOQ19FUlJPUl9FVkVOVCA9ICdhc3luY0Vycm9yJztcblxuY29uc3QgRVJST1JfU1RBQ0tfUFJFRklYID0gJ0Vycm9yIHN0YWNrOlxcbic7XG5cbmNvbnN0IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIgPSBuZXcgQXN5bmNFdmVudHMoKTtcbmFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgRXJyb3JFbnRyeSB7XG4gIGxldmVsOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2hvdWxkQ2xlYXJBbnNpU2VxdWVuY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBtZXNzYWdlIG9mIHRoZSBBc3luY1dyYXBwZXJFcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSA9ICdBbiB1bmhhbmRsZWQgZXJyb3Igb2NjdXJyZWQgZXhlY3V0aW5nIGFzeW5jIG9wZXJhdGlvbic7XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhbiBlcnJvciB3aXRoIGEgY3VzdG9tIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tU3RhY2tUcmFjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSBjYXVzZSAtIFRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGFja1RyYWNlOiBzdHJpbmcsIGNhdXNlOiB1bmtub3duKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnQ3VzdG9tU3RhY2tUcmFjZUVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDdXN0b21TdGFja1RyYWNlRXJyb3IpO1xuXG4gICAgbGV0IHJvb3RDYXVzZSA9IGNhdXNlO1xuICAgIGNvbnN0IHBhcmVudENhdXNlcyA9IG5ldyBTZXQ8Q3VzdG9tU3RhY2tUcmFjZUVycm9yPigpO1xuICAgIHdoaWxlIChyb290Q2F1c2UgaW5zdGFuY2VvZiBDdXN0b21TdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgIGlmIChwYXJlbnRDYXVzZXMuaGFzKHJvb3RDYXVzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciBjYXVzZSBkZXRlY3RlZCcpO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2F1c2VzLmFkZChyb290Q2F1c2UpO1xuICAgICAgcm9vdENhdXNlID0gcm9vdENhdXNlLmNhdXNlO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsU3RhY2tMaW5lcyA9ICh0aGlzLnN0YWNrID8/ICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG4gICAgaWYgKEVSUk9SX0hFQURFUl9SRUdfRVhQLnRlc3Qoc3RhY2tMaW5lc1swXSA/PyAnJykpIHtcbiAgICAgIHN0YWNrTGluZXMuc3BsaWNlKDAsIDEpO1xuICAgIH1cbiAgICBvcmlnaW5hbFN0YWNrTGluZXMuc3BsaWNlKDEsIG9yaWdpbmFsU3RhY2tMaW5lcy5sZW5ndGggLSAxLCAuLi5zdGFja0xpbmVzKTtcbiAgICB0aGlzLnN0YWNrID0gb3JpZ2luYWxTdGFja0xpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogRW1pdHMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGVycm9yIHRvIGVtaXQgYXMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEFzeW5jRXJyb3JFdmVudChhc3luY0Vycm9yOiB1bmtub3duKTogdm9pZCB7XG4gIGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIudHJpZ2dlcihBU1lOQ19FUlJPUl9FVkVOVCwgYXN5bmNFcnJvcik7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXJyb3IgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIHdpdGggaW5kZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yVG9TdHJpbmcoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyc2VFcnJvckVudHJpZXMoZXJyb3IpXG4gICAgLm1hcCgoZW50cnkpID0+ICcgICcucmVwZWF0KGVudHJ5LmxldmVsKSArIChlbnRyeS5tZXNzYWdlLnN0YXJ0c1dpdGgoRVJST1JfU1RBQ0tfUFJFRklYKSA/IGVudHJ5Lm1lc3NhZ2Uuc2xpY2UoRVJST1JfU1RBQ0tfUFJFRklYLmxlbmd0aCkgOiBlbnRyeS5tZXNzYWdlKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBhcyBhIHN0cmluZywgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKlxuICogQHBhcmFtIGZyYW1lc1RvU2tpcCAtIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UsIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhY2tUcmFjZShmcmFtZXNUb1NraXAgPSAwKTogc3RyaW5nIHtcbiAgLy8gU2tpcHBpbmcgRXJyb3IgcHJlZml4IGFuZCBgZ2V0U3RhY2tUcmFjZWAgZnVuY3Rpb24gY2FsbFxuICBjb25zdCBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQID0gMjtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjayA/PyAnJztcbiAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBsaW5lcy5zbGljZShmcmFtZXNUb1NraXAgKyBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQcmludHMgYW4gZXJyb3IgdG8gdGhlIGNvbnNvbGUsIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIGFuZCBvcHRpb25hbCBBTlNJIHNlcXVlbmNlIGNsZWFyaW5nLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBwcmludC5cbiAqIEBwYXJhbSBjb25zb2xlIC0gVGhlIGNvbnNvbGUgdG8gcHJpbnQgdG8gKGRlZmF1bHQ6IGBnbG9iYWxUaGlzLmNvbnNvbGVgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50RXJyb3IoZXJyb3I6IHVua25vd24sIGNvbnNvbGU/OiBDb25zb2xlKTogdm9pZCB7XG4gIGNvbnNvbGUgPz89IGdsb2JhbFRoaXMuY29uc29sZTtcbiAgY29uc3QgZW50cmllcyA9IHBhcnNlRXJyb3JFbnRyaWVzKGVycm9yKTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoZW50cnkuc2hvdWxkQ2xlYXJBbnNpU2VxdWVuY2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxceDFiWzBtJHtlbnRyeS5tZXNzYWdlfVxceDFiWzBtYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZW50cnkubWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGhhbmRsZXIgZm9yIGFzeW5jaHJvbm91cyBlcnJvcnMuXG4gKlxuICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQgb2NjdXJzLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyIHRoZSBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBc3luY0Vycm9yRXZlbnRIYW5kbGVyKGhhbmRsZXI6IChhc3luY0Vycm9yOiB1bmtub3duKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGV2ZW50UmVmID0gYXN5bmNFcnJvckV2ZW50RW1pdHRlci5vbihBU1lOQ19FUlJPUl9FVkVOVCwgaGFuZGxlcik7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgYXN5bmNFcnJvckV2ZW50RW1pdHRlci5vZmZyZWYoZXZlbnRSZWYpO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm93cyBhbiBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gdGhyb3cuXG4gKiBAdGhyb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0V4cHJlc3Npb24oZXJyb3I6IHVua25vd24pOiBuZXZlciB7XG4gIHRocm93IGVycm9yO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYXN5bmNocm9ub3VzIGVycm9ycyBieSBwcmludGluZyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGFzeW5jaHJvbm91cyBlcnJvciB0byBoYW5kbGUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUFzeW5jRXJyb3IoYXN5bmNFcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBwcmludEVycm9yKGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhbiBlcnJvciBpbnRvIGFuIGFycmF5IG9mIEVycm9yRW50cnkgb2JqZWN0cywgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHBhcnNlLlxuICogQHBhcmFtIGxldmVsIC0gVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgZm9yIG5lc3RlZCBjYXVzZXMuXG4gKiBAcGFyYW0gZW50cmllcyAtIFRoZSBhcnJheSBvZiBFcnJvckVudHJ5IG9iamVjdHMgdG8gcG9wdWxhdGUuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBFcnJvckVudHJ5IG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBlcnJvciBhbmQgaXRzIGNhdXNlcy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VFcnJvckVudHJpZXMoZXJyb3I6IHVua25vd24sIGxldmVsID0gMCwgZW50cmllczogRXJyb3JFbnRyeVtdID0gW10pOiBFcnJvckVudHJ5W10ge1xuICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICBsZXQgc3RyOiBzdHJpbmc7XG5cbiAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgIHN0ciA9ICcobnVsbCknO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgc3RyID0gZXJyb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGVycm9yKSA/PyAndW5kZWZpbmVkJztcbiAgICB9XG5cbiAgICBlbnRyaWVzLnB1c2goeyBsZXZlbCwgbWVzc2FnZTogc3RyIH0pO1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgY29uc3QgdGl0bGUgPSBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gIGVudHJpZXMucHVzaCh7IGxldmVsLCBtZXNzYWdlOiB0aXRsZSwgc2hvdWxkQ2xlYXJBbnNpU2VxdWVuY2U6IHRydWUgfSk7XG5cbiAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgY29uc3QgcmVzdFN0YWNrID0gZXJyb3Iuc3RhY2suc3RhcnRzV2l0aCh0aXRsZSkgPyBlcnJvci5zdGFjay5zbGljZSh0aXRsZS5sZW5ndGggKyAxKSA6IGVycm9yLnN0YWNrO1xuICAgIGVudHJpZXMucHVzaCh7IGxldmVsLCBtZXNzYWdlOiBgJHtFUlJPUl9TVEFDS19QUkVGSVh9JHtyZXN0U3RhY2t9YCB9KTtcbiAgfVxuXG4gIGlmIChlcnJvci5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW50cmllcy5wdXNoKHsgbGV2ZWwsIG1lc3NhZ2U6ICdDYXVzZWQgYnk6JyB9KTtcbiAgICBwYXJzZUVycm9yRW50cmllcyhlcnJvci5jYXVzZSwgbGV2ZWwgKyAxLCBlbnRyaWVzKTtcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQU1BLFNBQVMsbUJBQW1CO0FBRTVCLE1BQU0sb0JBQW9CO0FBRTFCLE1BQU0scUJBQXFCO0FBRTNCLE1BQU0seUJBQXlCLElBQUksWUFBWTtBQUMvQyx1QkFBdUIsR0FBRyxtQkFBbUIsZ0JBQWdCO0FBV3RELE1BQU0sOEJBQThCO0FBS3BDLE1BQU0sOEJB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
119
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlcnJvciBoYW5kbGluZy5cbiAqL1xuXG5pbXBvcnQgeyBBc3luY0V2ZW50cyB9IGZyb20gJy4vQXN5bmNFdmVudHMudHMnO1xuXG5jb25zdCBBU1lOQ19FUlJPUl9FVkVOVCA9ICdhc3luY0Vycm9yJztcblxuY29uc3QgRVJST1JfU1RBQ0tfUFJFRklYID0gJ0Vycm9yIHN0YWNrOlxcbic7XG5cbmNvbnN0IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIgPSBuZXcgQXN5bmNFdmVudHMoKTtcbmFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgRXJyb3JFbnRyeSB7XG4gIGxldmVsOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2hvdWxkQ2xlYXJBbnNpU2VxdWVuY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBtZXNzYWdlIG9mIHRoZSBBc3luY1dyYXBwZXJFcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSA9ICdBbiB1bmhhbmRsZWQgZXJyb3Igb2NjdXJyZWQgZXhlY3V0aW5nIGFzeW5jIG9wZXJhdGlvbic7XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhbiBlcnJvciB3aXRoIGEgY3VzdG9tIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tU3RhY2tUcmFjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSBjYXVzZSAtIFRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGFja1RyYWNlOiBzdHJpbmcsIGNhdXNlOiB1bmtub3duKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnQ3VzdG9tU3RhY2tUcmFjZUVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDdXN0b21TdGFja1RyYWNlRXJyb3IpO1xuXG4gICAgbGV0IHJvb3RDYXVzZSA9IGNhdXNlO1xuICAgIGNvbnN0IHBhcmVudENhdXNlcyA9IG5ldyBTZXQ8Q3VzdG9tU3RhY2tUcmFjZUVycm9yPigpO1xuICAgIHdoaWxlIChyb290Q2F1c2UgaW5zdGFuY2VvZiBDdXN0b21TdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgIGlmIChwYXJlbnRDYXVzZXMuaGFzKHJvb3RDYXVzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciBjYXVzZSBkZXRlY3RlZCcpO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2F1c2VzLmFkZChyb290Q2F1c2UpO1xuICAgICAgcm9vdENhdXNlID0gcm9vdENhdXNlLmNhdXNlO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsU3RhY2tMaW5lcyA9ICh0aGlzLnN0YWNrID8/ICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG4gICAgaWYgKEVSUk9SX0hFQURFUl9SRUdfRVhQLnRlc3Qoc3RhY2tMaW5lc1swXSA/PyAnJykpIHtcbiAgICAgIHN0YWNrTGluZXMuc3BsaWNlKDAsIDEpO1xuICAgIH1cbiAgICBvcmlnaW5hbFN0YWNrTGluZXMuc3BsaWNlKDEsIG9yaWdpbmFsU3RhY2tMaW5lcy5sZW5ndGggLSAxLCAuLi5zdGFja0xpbmVzKTtcbiAgICB0aGlzLnN0YWNrID0gb3JpZ2luYWxTdGFja0xpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogRW1pdHMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGVycm9yIHRvIGVtaXQgYXMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEFzeW5jRXJyb3JFdmVudChhc3luY0Vycm9yOiB1bmtub3duKTogdm9pZCB7XG4gIGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIudHJpZ2dlcihBU1lOQ19FUlJPUl9FVkVOVCwgYXN5bmNFcnJvcik7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXJyb3IgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIHdpdGggaW5kZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gc2hvdWxkRW5zdXJlQW5zaVNlcXVlbmNlc0NsZWFyZWQgLSBXaGV0aGVyIHRvIGVuc3VyZSBBTlNJIHNlcXVlbmNlcyBpbiB0aGUgZXJyb3IgbWVzc2FnZSBhcmUgY2xlYXJlZC5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93biwgc2hvdWxkRW5zdXJlQW5zaVNlcXVlbmNlc0NsZWFyZWQgPSBmYWxzZSk6IHN0cmluZyB7XG4gIGNvbnN0IEFOU0lfQ0xFQVJfU0VRVUVOQ0UgPSAnXFx4MWJbMG0nO1xuICByZXR1cm4gcGFyc2VFcnJvckVudHJpZXMoZXJyb3IpXG4gICAgLm1hcCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICcgICcucmVwZWF0KGVudHJ5LmxldmVsKTtcbiAgICAgIC8vIE5PVEU6IENhbm5vdCB1c2UgYFN0cmluZy50cmltU3RhcnQoKWAgZnVuY3Rpb24gaGVyZSBiZWNhdXNlIG9mIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICAgICAgbGV0IG1lc3NhZ2UgPSBlbnRyeS5tZXNzYWdlLnN0YXJ0c1dpdGgoRVJST1JfU1RBQ0tfUFJFRklYKSA/IGVudHJ5Lm1lc3NhZ2Uuc2xpY2UoRVJST1JfU1RBQ0tfUFJFRklYLmxlbmd0aCkgOiBlbnRyeS5tZXNzYWdlO1xuICAgICAgaWYgKGVudHJ5LnNob3VsZENsZWFyQW5zaVNlcXVlbmNlICYmIHNob3VsZEVuc3VyZUFuc2lTZXF1ZW5jZXNDbGVhcmVkKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBgJHtBTlNJX0NMRUFSX1NFUVVFTkNFfSR7bWVzc2FnZX0ke0FOU0lfQ0xFQVJfU0VRVUVOQ0V9YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmVmaXggKyBtZXNzYWdlO1xuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgYXMgYSBzdHJpbmcsIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsLlxuICpcbiAqIEBwYXJhbSBmcmFtZXNUb1NraXAgLSBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YWNrVHJhY2UoZnJhbWVzVG9Ta2lwID0gMCk6IHN0cmluZyB7XG4gIC8vIFNraXBwaW5nIEVycm9yIHByZWZpeCBhbmQgYGdldFN0YWNrVHJhY2VgIGZ1bmN0aW9uIGNhbGxcbiAgY29uc3QgQURESVRJT05BTF9GUkFNRVNfVE9fU0tJUCA9IDI7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2sgPz8gJyc7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoZnJhbWVzVG9Ta2lwICsgQURESVRJT05BTF9GUkFNRVNfVE9fU0tJUCkuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogUHJpbnRzIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgb3B0aW9uYWwgQU5TSSBzZXF1ZW5jZSBjbGVhcmluZy5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gcHJpbnQuXG4gKiBAcGFyYW0gY29uc29sZSAtIFRoZSBjb25zb2xlIHRvIHByaW50IHRvIChkZWZhdWx0OiBgZ2xvYmFsVGhpcy5jb25zb2xlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiB1bmtub3duLCBjb25zb2xlPzogQ29uc29sZSk6IHZvaWQge1xuICBjb25zb2xlID8/PSBnbG9iYWxUaGlzLmNvbnNvbGU7XG4gIGNvbnNvbGUuZXJyb3IoZXJyb3JUb1N0cmluZyhlcnJvciwgdHJ1ZSkpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIGZvciBhc3luY2hyb25vdXMgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50IG9jY3Vycy5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gdW5yZWdpc3RlciB0aGUgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcihoYW5kbGVyOiAoYXN5bmNFcnJvcjogdW5rbm93bikgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBldmVudFJlZiA9IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZXIpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub2ZmcmVmKGV2ZW50UmVmKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHRocm93LlxuICogQHRocm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFeHByZXNzaW9uKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICB0aHJvdyBlcnJvcjtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGFzeW5jaHJvbm91cyBlcnJvcnMgYnkgcHJpbnRpbmcgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBhc3luY2hyb25vdXMgZXJyb3IgdG8gaGFuZGxlLlxuICovXG5mdW5jdGlvbiBoYW5kbGVBc3luY0Vycm9yKGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgcHJpbnRFcnJvcihhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXJyb3IgaW50byBhbiBhcnJheSBvZiBFcnJvckVudHJ5IG9iamVjdHMsIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBwYXJzZS5cbiAqIEBwYXJhbSBsZXZlbCAtIFRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsIGZvciBuZXN0ZWQgY2F1c2VzLlxuICogQHBhcmFtIGVudHJpZXMgLSBUaGUgYXJyYXkgb2YgRXJyb3JFbnRyeSBvYmplY3RzIHRvIHBvcHVsYXRlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgRXJyb3JFbnRyeSBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgZXJyb3IgYW5kIGl0cyBjYXVzZXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRXJyb3JFbnRyaWVzKGVycm9yOiB1bmtub3duLCBsZXZlbCA9IDAsIGVudHJpZXM6IEVycm9yRW50cnlbXSA9IFtdKTogRXJyb3JFbnRyeVtdIHtcbiAgaWYgKGVycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgbGV0IHN0cjogc3RyaW5nO1xuXG4gICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICBzdHIgPSAnKG51bGwpJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN0ciA9IGVycm9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShlcnJvcikgPz8gJ3VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgZW50cmllcy5wdXNoKHsgbGV2ZWwsIG1lc3NhZ2U6IHN0ciB9KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIGNvbnN0IHRpdGxlID0gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gO1xuICBlbnRyaWVzLnB1c2goeyBsZXZlbCwgbWVzc2FnZTogdGl0bGUsIHNob3VsZENsZWFyQW5zaVNlcXVlbmNlOiB0cnVlIH0pO1xuXG4gIGlmIChlcnJvci5zdGFjaykge1xuICAgIGNvbnN0IHJlc3RTdGFjayA9IGVycm9yLnN0YWNrLnN0YXJ0c1dpdGgodGl0bGUpID8gZXJyb3Iuc3RhY2suc2xpY2UodGl0bGUubGVuZ3RoICsgMSkgOiBlcnJvci5zdGFjaztcbiAgICBlbnRyaWVzLnB1c2goeyBsZXZlbCwgbWVzc2FnZTogYCR7RVJST1JfU1RBQ0tfUFJFRklYfSR7cmVzdFN0YWNrfWAgfSk7XG4gIH1cblxuICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGVudHJpZXMucHVzaCh7IGxldmVsLCBtZXNzYWdlOiAnQ2F1c2VkIGJ5OicgfSk7XG4gICAgcGFyc2VFcnJvckVudHJpZXMoZXJyb3IuY2F1c2UsIGxldmVsICsgMSwgZW50cmllcyk7XG4gIH1cblxuICByZXR1cm4gZW50cmllcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFNQSxTQUFTLG1CQUFtQjtBQUU1QixNQUFNLG9CQUFvQjtBQUUxQixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLHlCQUF5QixJQUFJLFlBQVk7QUFDL0MsdUJBQXVCLEdBQUcsbUJBQW1CLGdCQUFnQjtBQVd0RCxNQUFNLDhCQUE4QjtBQUtwQyxNQUFNLDhCQUE4QixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVF4QyxZQUFZLFNBQWlCLFlBQW9CLE9BQWdCO0FBQ3RFLFVBQU0sU0FBUyxFQUFFLE1BQU0sQ0FBQztBQUN4QixTQUFLLE9BQU87QUFDWixVQUFNLGtCQUFrQixNQUFNLHFCQUFxQjtBQUVuRCxRQUFJLFlBQVk7QUFDaEIsVUFBTSxlQUFlLG9CQUFJLElBQTJCO0FBQ3BELFdBQU8scUJBQXFCLHVCQUF1QjtBQUNqRCxVQUFJLGFBQWEsSUFBSSxTQUFTLEdBQUc7QUFDL0IsY0FBTSxJQUFJLE1BQU0seUJBQXlCO0FBQUEsTUFDM0M7QUFDQSxtQkFBYSxJQUFJLFNBQVM7QUFDMUIsa0JBQVksVUFBVTtBQUFBLElBQ3hCO0FBRUEsVUFBTSxzQkFBc0IsS0FBSyxTQUFTLElBQUksTUFBTSxJQUFJO0FBQ3hELFVBQU0sYUFBYSxXQUFXLE1BQU0sSUFBSTtBQUN4QyxVQUFNLHVCQUF1QjtBQUM3QixRQUFJLHFCQUFxQixLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRztBQUNsRCxpQkFBVyxPQUFPLEdBQUcsQ0FBQztBQUFBLElBQ3hCO0FBQ0EsdUJBQW1CLE9BQU8sR0FBRyxtQkFBbUIsU0FBUyxH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
@@ -5,7 +5,7 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function initEsm(){if(globalThis.process){return}const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};globalThis.process=browserProcess})();
7
7
 
8
- const LIBRARY_VERSION = "33.1.0";
8
+ const LIBRARY_VERSION = "34.0.0";
9
9
  const LIBRARY_NAME = "obsidian-dev-utils";
10
10
  const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACzCJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;AChDF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
11
11
  export {