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.
- package/CHANGELOG.md +16 -0
- package/dist/lib/cjs/Error.cjs +12 -11
- package/dist/lib/cjs/Error.d.cts +2 -1
- package/dist/lib/cjs/Library.cjs +1 -1
- package/dist/lib/cjs/ScriptUtils/ESLint/eslint.config.cjs +1 -1
- package/dist/lib/cjs/String.cjs +28 -3
- package/dist/lib/cjs/String.d.cts +25 -0
- package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.cjs +161 -28
- package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.d.cts +108 -12
- package/dist/lib/esm/Error.d.mts +2 -1
- package/dist/lib/esm/Error.mjs +12 -11
- package/dist/lib/esm/Library.mjs +1 -1
- package/dist/lib/esm/ScriptUtils/ESLint/eslint.config.mjs +1 -1
- package/dist/lib/esm/String.d.mts +25 -0
- package/dist/lib/esm/String.mjs +24 -2
- package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.d.mts +108 -12
- package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.mjs +163 -28
- package/package.json +9 -9
|
@@ -5,44 +5,179 @@ 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
|
-
import {
|
|
8
|
+
import { getFrontMatterInfo } from "obsidian";
|
|
9
9
|
import { abortSignalNever } from "../AbortController.mjs";
|
|
10
|
-
import {
|
|
11
|
-
|
|
10
|
+
import {
|
|
11
|
+
hasSingleOccurrence,
|
|
12
|
+
indent,
|
|
13
|
+
replaceAll,
|
|
14
|
+
unindent
|
|
15
|
+
} from "../String.mjs";
|
|
12
16
|
import { resolveValue } from "../ValueProvider.mjs";
|
|
13
17
|
import { process } from "./Vault.mjs";
|
|
14
|
-
function
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
async function getCodeBlockSectionInfo(options) {
|
|
19
|
+
const { app, ctx, el, source } = options;
|
|
20
|
+
const approximateSectionInfo = ctx.getSectionInfo(el) ?? await createApproximateSectionInfo(app, ctx);
|
|
21
|
+
const isInCallout = !!el.parentElement?.classList.contains("callout-content");
|
|
22
|
+
const language = getLanguageFromElement(el);
|
|
23
|
+
const sourceLines = source.split("\n");
|
|
24
|
+
const textLines = approximateSectionInfo.text.split("\n");
|
|
25
|
+
const potentialCodeBlockTextLines = textLines.map(
|
|
26
|
+
(line, index) => approximateSectionInfo.lineStart <= index && index <= approximateSectionInfo.lineEnd ? line : ""
|
|
27
|
+
);
|
|
28
|
+
const potentialCodeBlockText = potentialCodeBlockTextLines.join("\n");
|
|
29
|
+
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;
|
|
30
|
+
let sectionInfo = null;
|
|
31
|
+
for (const match of potentialCodeBlockText.matchAll(REG_EXP)) {
|
|
32
|
+
if (!isSuitableCodeBlock(match, language, source, isInCallout)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (sectionInfo) {
|
|
36
|
+
throw new Error("Multiple suitable code blocks found.");
|
|
37
|
+
}
|
|
38
|
+
sectionInfo = createSectionInfoFromMatch(potentialCodeBlockText, match, approximateSectionInfo, sourceLines);
|
|
18
39
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const match = /^(?:`{3,}|~{3,})\S+\s+(?<Arguments>.*)$/.exec(codeBlockHeader);
|
|
22
|
-
if (!match) {
|
|
23
|
-
return [];
|
|
40
|
+
if (!sectionInfo) {
|
|
41
|
+
throw new Error("No suitable code block found.");
|
|
24
42
|
}
|
|
25
|
-
return
|
|
43
|
+
return sectionInfo;
|
|
44
|
+
}
|
|
45
|
+
async function insertAfterCodeBlock(options) {
|
|
46
|
+
const { app, ctx, lineOffset = 0, text } = options;
|
|
47
|
+
const sectionInfo = await getCodeBlockSectionInfo(options);
|
|
48
|
+
await process(app, ctx.sourcePath, (_abortSignal, content) => {
|
|
49
|
+
if (!hasSingleOccurrence(content, sectionInfo.text)) {
|
|
50
|
+
throw new Error("Multiple suitable code blocks found.");
|
|
51
|
+
}
|
|
52
|
+
const index = content.indexOf(sectionInfo.text);
|
|
53
|
+
const textBeforeSection = content.slice(0, index);
|
|
54
|
+
const linesBeforeSection = textBeforeSection.split("\n");
|
|
55
|
+
const insertLineIndex = linesBeforeSection.length + sectionInfo.lineEnd + lineOffset;
|
|
56
|
+
return insertText(content, insertLineIndex, text, options.shouldPreserveLinePrefix);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async function insertBeforeCodeBlock(options) {
|
|
60
|
+
const { app, ctx, lineOffset = 0, text } = options;
|
|
61
|
+
const sectionInfo = await getCodeBlockSectionInfo(options);
|
|
62
|
+
await process(app, ctx.sourcePath, (_abortSignal, content) => {
|
|
63
|
+
if (!hasSingleOccurrence(content, sectionInfo.text)) {
|
|
64
|
+
throw new Error("Multiple suitable code blocks found.");
|
|
65
|
+
}
|
|
66
|
+
const index = content.indexOf(sectionInfo.text);
|
|
67
|
+
const textBeforeSection = content.slice(0, index);
|
|
68
|
+
const linesBeforeSection = textBeforeSection.split("\n");
|
|
69
|
+
const insertLineIndex = linesBeforeSection.length + sectionInfo.lineStart - lineOffset - 1;
|
|
70
|
+
return insertText(content, insertLineIndex, text, options.shouldPreserveLinePrefix);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async function removeCodeBlock(options) {
|
|
74
|
+
await replaceCodeBlock({
|
|
75
|
+
...options,
|
|
76
|
+
codeBlockProvider: ""
|
|
77
|
+
});
|
|
26
78
|
}
|
|
27
|
-
async function replaceCodeBlock(
|
|
28
|
-
|
|
79
|
+
async function replaceCodeBlock(options) {
|
|
80
|
+
const { app, codeBlockProvider, ctx } = options;
|
|
81
|
+
const abortSignal = options.abortSignal ?? abortSignalNever();
|
|
29
82
|
abortSignal.throwIfAborted();
|
|
30
|
-
const sectionInfo =
|
|
31
|
-
if (!sectionInfo) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
83
|
+
const sectionInfo = await getCodeBlockSectionInfo(options);
|
|
34
84
|
const lines = sectionInfo.text.split("\n");
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
85
|
+
const textBeforeCodeBlock = lines.slice(0, sectionInfo.lineStart).join("\n");
|
|
86
|
+
let oldCodeBlock = lines.slice(sectionInfo.lineStart, sectionInfo.lineEnd + 1).join("\n");
|
|
87
|
+
if (options.shouldPreserveLinePrefix) {
|
|
88
|
+
oldCodeBlock = unindent(oldCodeBlock, sectionInfo.prefix);
|
|
89
|
+
}
|
|
90
|
+
const textAfterCodeBlock = lines.slice(sectionInfo.lineEnd + 1).join("\n");
|
|
91
|
+
let newCodeBlock = await resolveValue(codeBlockProvider, abortSignal, oldCodeBlock);
|
|
39
92
|
abortSignal.throwIfAborted();
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
93
|
+
if (newCodeBlock && options.shouldPreserveLinePrefix) {
|
|
94
|
+
newCodeBlock = indent(newCodeBlock, sectionInfo.prefix);
|
|
95
|
+
}
|
|
96
|
+
const newSectionText = `${appendNewLine(textBeforeCodeBlock)}${appendNewLine(newCodeBlock)}${textAfterCodeBlock}`;
|
|
97
|
+
await process(app, ctx.sourcePath, (_abortSignal, content) => {
|
|
98
|
+
if (!hasSingleOccurrence(content, sectionInfo.text)) {
|
|
99
|
+
throw new Error("Multiple suitable code blocks found.");
|
|
100
|
+
}
|
|
101
|
+
return replaceAll(content, sectionInfo.text, newSectionText);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function appendNewLine(text) {
|
|
105
|
+
return text === "" ? "" : `${text}
|
|
106
|
+
`;
|
|
107
|
+
}
|
|
108
|
+
async function createApproximateSectionInfo(app, ctx) {
|
|
109
|
+
const sourceFile = app.vault.getFileByPath(ctx.sourcePath);
|
|
110
|
+
if (!sourceFile) {
|
|
111
|
+
throw new Error(`Source file ${ctx.sourcePath} not found.`);
|
|
112
|
+
}
|
|
113
|
+
const cache = app.metadataCache.getFileCache(sourceFile);
|
|
114
|
+
const frontmatterEndOffset = cache?.frontmatterPosition?.end.offset;
|
|
115
|
+
const content = await app.vault.cachedRead(sourceFile);
|
|
116
|
+
const contentStartOffset = frontmatterEndOffset === void 0 ? getFrontMatterInfo(content).contentStart : frontmatterEndOffset + 1;
|
|
117
|
+
const text = content.slice(contentStartOffset);
|
|
118
|
+
return {
|
|
119
|
+
lineEnd: text.split("\n").length - 1,
|
|
120
|
+
lineStart: 0,
|
|
121
|
+
text
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function createSectionInfoFromMatch(potentialCodeBlockText, match, approximateSectionInfo, sourceLines) {
|
|
125
|
+
const linePrefix = match.groups?.["LinePrefix"] ?? "";
|
|
126
|
+
const codeBlockStartDelimiter = match.groups?.["CodeBlockStartDelimiter"] ?? "";
|
|
127
|
+
const codeBlockEndDelimiter = match.groups?.["CodeBlockEndDelimiter"] ?? "";
|
|
128
|
+
const codeBlockArgs = match.groups?.["CodeBlockArgs"] ?? "";
|
|
129
|
+
const language = match.groups?.["CodeBlockLanguage"] ?? "";
|
|
130
|
+
const previousText = potentialCodeBlockText.slice(0, match.index);
|
|
131
|
+
const previousTextLines = previousText.split("\n");
|
|
132
|
+
return {
|
|
133
|
+
args: codeBlockArgs,
|
|
134
|
+
endDelimiter: codeBlockEndDelimiter,
|
|
135
|
+
language,
|
|
136
|
+
lineEnd: previousTextLines.length + sourceLines.length,
|
|
137
|
+
lineStart: previousTextLines.length - 1,
|
|
138
|
+
prefix: linePrefix,
|
|
139
|
+
startDelimiter: codeBlockStartDelimiter,
|
|
140
|
+
text: approximateSectionInfo.text
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function getLanguageFromElement(el) {
|
|
144
|
+
const BLOCK_LANGUAGE_PREFIX = "block-language-";
|
|
145
|
+
return Array.from(el.classList).find((cls) => cls.startsWith(BLOCK_LANGUAGE_PREFIX))?.slice(BLOCK_LANGUAGE_PREFIX.length) ?? "";
|
|
146
|
+
}
|
|
147
|
+
function insertText(content, insertLineIndex, text, shouldPreserveLinePrefix) {
|
|
148
|
+
const lines = content.split("\n");
|
|
149
|
+
const newLines = lines.slice();
|
|
150
|
+
const textLines = text.split("\n");
|
|
151
|
+
if (insertLineIndex < 0) {
|
|
152
|
+
insertLineIndex = 0;
|
|
153
|
+
}
|
|
154
|
+
if (insertLineIndex > lines.length) {
|
|
155
|
+
insertLineIndex = lines.length;
|
|
156
|
+
}
|
|
157
|
+
const PREFIX_LINE_REG_EXP = /^ {0,3}(?:> {1,3})*/g;
|
|
158
|
+
const match = (lines[insertLineIndex] ?? "").match(PREFIX_LINE_REG_EXP);
|
|
159
|
+
const linePrefix = match?.[0] ?? "";
|
|
160
|
+
newLines.splice(insertLineIndex, 0, ...shouldPreserveLinePrefix ? textLines.map((line) => indent(line, linePrefix)) : textLines);
|
|
161
|
+
return newLines.join("\n");
|
|
162
|
+
}
|
|
163
|
+
function isSuitableCodeBlock(match, language, source, isInCallout) {
|
|
164
|
+
const codeBlockLanguage = match.groups?.["CodeBlockLanguage"] ?? "";
|
|
165
|
+
if (codeBlockLanguage !== language) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
const linePrefix = match.groups?.["LinePrefix"] ?? "";
|
|
169
|
+
if (isInCallout && !linePrefix.includes("> ")) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
const codeBlockContent = match.groups?.["CodeBlockContent"] ?? "";
|
|
173
|
+
const cleanCodeBlockContent = codeBlockContent.split("\n").map((line) => line.slice(linePrefix.length)).join("\n");
|
|
174
|
+
return cleanCodeBlockContent === source;
|
|
43
175
|
}
|
|
44
176
|
export {
|
|
45
|
-
|
|
177
|
+
getCodeBlockSectionInfo,
|
|
178
|
+
insertAfterCodeBlock,
|
|
179
|
+
insertBeforeCodeBlock,
|
|
180
|
+
removeCodeBlock,
|
|
46
181
|
replaceCodeBlock
|
|
47
182
|
};
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIGNvZGUgYmxvY2tzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICdzaGVsbC1xdW90ZSc7XG5cbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL1ZhbHVlUHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi4vQWJvcnRDb250cm9sbGVyLnRzJztcbmltcG9ydCB7IHRocm93RXhwcmVzc2lvbiB9IGZyb20gJy4uL0Vycm9yLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhcmd1bWVudCBvZiBhIGNvZGUgYmxvY2sgZnJvbSB0aGUgZ2l2ZW4gTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCBhbmQgSFRNTEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0IG9iamVjdC5cbiAqIEBwYXJhbSBlbCAtIFRoZSBIVE1MRWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvZGUgYmxvY2suXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQgb2YgdGhlIGNvZGUgYmxvY2sgYXMgYSBzdHJpbmcsIG9yIG51bGwgaWYgbm8gYXJndW1lbnQgaXMgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2RlQmxvY2tBcmd1bWVudHMoY3R4OiBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LCBlbDogSFRNTEVsZW1lbnQpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNlY3Rpb25JbmZvID0gY3R4LmdldFNlY3Rpb25JbmZvKGVsKTtcbiAgaWYgKCFzZWN0aW9uSW5mbykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBsaW5lcyA9IHNlY3Rpb25JbmZvLnRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBjb2RlQmxvY2tIZWFkZXIgPSBsaW5lc1tzZWN0aW9uSW5mby5saW5lU3RhcnRdID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoJ0NvZGUgYmxvY2sgaGVhZGVyIG5vdCBmb3VuZCcpKTtcbiAgY29uc3QgbWF0Y2ggPSAvXig/OmB7Myx9fH57Myx9KVxcUytcXHMrKD88QXJndW1lbnRzPi4qKSQvLmV4ZWMoY29kZUJsb2NrSGVhZGVyKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gcGFyc2UobWF0Y2guZ3JvdXBzPy5bJ0FyZ3VtZW50cyddID8/ICcnKS5tYXAoU3RyaW5nKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIEFwcCBvYmplY3QuXG4gKiBAcGFyYW0gY3R4IC0gVGhlIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQgb2JqZWN0LlxuICogQHBhcmFtIGVsIC0gVGhlIEhUTUxFbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29kZSBibG9jay5cbiAqIEBwYXJhbSBjb2RlQmxvY2tQcm92aWRlciAtIFRoZSBWYWx1ZVByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgdGhlIG5ldyBjb2RlIGJsb2NrLlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNvZGVCbG9jayhcbiAgYXBwOiBBcHAsXG4gIGN0eDogTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCxcbiAgZWw6IEhUTUxFbGVtZW50LFxuICBjb2RlQmxvY2tQcm92aWRlcjogVmFsdWVQcm92aWRlcjxzdHJpbmcsIFtzdHJpbmddPixcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGFib3J0U2lnbmFsID8/PSBhYm9ydFNpZ25hbE5ldmVyKCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3Qgc2VjdGlvbkluZm8gPSBjdHguZ2V0U2VjdGlvbkluZm8oZWwpO1xuICBpZiAoIXNlY3Rpb25JbmZvKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGxpbmVzID0gc2VjdGlvbkluZm8udGV4dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHByZWZpeCA9IGxpbmVzLnNsaWNlKDAsIHNlY3Rpb25JbmZvLmxpbmVTdGFydCkuam9pbignXFxuJyk7XG4gIGNvbnN0IG9sZENvZGVCbG9jayA9IGxpbmVzLnNsaWNlKHNlY3Rpb25JbmZvLmxpbmVTdGFydCwgc2VjdGlvbkluZm8ubGluZUVuZCArIDEpLmpvaW4oJ1xcbicpO1xuICBjb25zdCBzdWZmaXggPSBsaW5lcy5zbGljZShzZWN0aW9uSW5mby5saW5lRW5kICsgMSkuam9pbignXFxuJyk7XG4gIGNvbnN0IG5ld0NvZGVCbG9jayA9IGF3YWl0IHJlc29sdmVWYWx1ZShjb2RlQmxvY2tQcm92aWRlciwgYWJvcnRTaWduYWwsIG9sZENvZGVCbG9jayk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGNvbnN0IG5ld1NlY3Rpb25UZXh0ID0gYCR7cHJlZml4fVxcbiR7bmV3Q29kZUJsb2NrfSR7bmV3Q29kZUJsb2NrID8gJ1xcbicgOiAnJ30ke3N1ZmZpeH1gO1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgY3R4LnNvdXJjZVBhdGgsIChfYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHJlcGxhY2VBbGwoY29udGVudCwgc2VjdGlvbkluZm8udGV4dCwgbmV3U2VjdGlvblRleHQpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFXQSxTQUFTLGFBQWE7QUFJdEIsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxlQUFlO0FBU2pCLFNBQVMsc0JBQXNCLEtBQW1DLElBQTJCO0FBQ2xHLFFBQU0sY0FBYyxJQUFJLGVBQWUsRUFBRTtBQUN6QyxNQUFJLENBQUMsYUFBYTtBQUNoQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0EsUUFBTSxRQUFRLFlBQVksS0FBSyxNQUFNLElBQUk7QUFDekMsUUFBTSxrQkFBa0IsTUFBTSxZQUFZLFNBQVMsS0FBSyxnQkFBZ0IsSUFBSSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hILFFBQU0sUUFBUSwwQ0FBMEMsS0FBSyxlQUFlO0FBQzVFLE1BQUksQ0FBQyxPQUFPO0FBQ1YsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNBLFNBQU8sTUFBTSxNQUFNLFNBQVMsV0FBVyxLQUFLLEVBQUUsRUFBRSxJQUFJLE1BQU07QUFDNUQ7QUFXQSxlQUFzQixpQkFDcEIsS0FDQSxLQUNBLElBQ0EsbUJBQ0EsYUFDZTtBQUNmLGtCQUFnQixpQkFBaUI7QUFDakMsY0FBWSxlQUFlO0FBRTNCLFFBQU0sY0FBYyxJQUFJLGVBQWUsRUFBRTtBQUN6QyxNQUFJLENBQUMsYUFBYTtBQUNoQjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLFFBQVEsWUFBWSxLQUFLLE1BQU0sSUFBSTtBQUN6QyxRQUFNLFNBQVMsTUFBTSxNQUFNLEdBQUcsWUFBWSxTQUFTLEVBQUUsS0FBSyxJQUFJO0FBQzlELFFBQU0sZUFBZSxNQUFNLE1BQU0sWUFBWSxXQUFXLFlBQVksVUFBVSxDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQzFGLFFBQU0sU0FBUyxNQUFNLE1BQU0sWUFBWSxVQUFVLENBQUMsRUFBRSxLQUFLLElBQUk7QUFDN0QsUUFBTSxlQUFlLE1BQU0sYUFBYSxtQkFBbUIsYUFBYSxZQUFZO0FBQ3BGLGNBQVksZUFBZTtBQUMzQixRQUFNLGlCQUFpQixHQUFHLE1BQU07QUFBQSxFQUFLLFlBQVksR0FBRyxlQUFlLE9BQU8sRUFBRSxHQUFHLE1BQU07QUFDckYsUUFBTSxRQUFRLEtBQUssSUFBSSxZQUFZLENBQUMsY0FBYyxZQUFZLFdBQVcsU0FBUyxZQUFZLE1BQU0sY0FBYyxDQUFDO0FBQ3JIOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
183
|
+
//# 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+ICcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29kZUJsb2NrQ29udGVudCA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tDb250ZW50J10gPz8gJyc7XG4gIGNvbnN0IGNsZWFuQ29kZUJsb2NrQ29udGVudCA9IGNvZGVCbG9ja0NvbnRlbnQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS5zbGljZShsaW5lUHJlZml4Lmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiBjbGVhbkNvZGVCbG9ja0NvbnRlbnQgPT09IHNvdXJjZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFZQSxTQUFTLDBCQUEwQjtBQUluQyxTQUFTLHdCQUF3QjtBQUNqQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxlQUFlO0FBMEd4QixlQUFzQix3QkFBd0IsU0FBdUY7QUFDbkksUUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJLE9BQU8sSUFBSTtBQUVqQyxRQUFNLHlCQUF5QixJQUFJLGVBQWUsRUFBRSxLQUFLLE1BQU0sNkJBQTZCLEtBQUssR0FBRztBQUNwRyxRQUFNLGNBQWMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxVQUFVLFNBQVMsaUJBQWlCO0FBRTVFLFFBQU0sV0FBVyx1QkFBdUIsRUFBRTtBQUMxQyxRQUFNLGNBQWMsT0FBTyxNQUFNLElBQUk7QUFFckMsUUFBTSxZQUFZLHVCQUF1QixLQUFLLE1BQU0sSUFBSTtBQUN4RCxRQUFNLDhCQUE4QixVQUFVO0FBQUEsSUFBSSxDQUFDLE1BQU0sVUFDdkQsdUJBQXVCLGFBQWEsU0FBUyxTQUFTLHVCQUF1QixVQUFVLE9BQU87QUFBQSxFQUNoRztBQUNBLFFBQU0seUJBQXlCLDRCQUE0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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-dev-utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "34.0.0",
|
|
4
4
|
"description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian"
|
|
@@ -452,15 +452,15 @@
|
|
|
452
452
|
"@types/doctrine": "^0.0.9",
|
|
453
453
|
"@types/eslint": "^9.6.1",
|
|
454
454
|
"@types/luxon": "^3.7.1",
|
|
455
|
-
"@types/node": "^24.
|
|
455
|
+
"@types/node": "^24.3.0",
|
|
456
456
|
"@types/parsimmon": "^1.10.9",
|
|
457
457
|
"@types/path-browserify": "^1.0.3",
|
|
458
458
|
"@types/picomatch": "^4.0.2",
|
|
459
459
|
"@types/pug": "^2.0.10",
|
|
460
460
|
"@types/react": "^19.1.10",
|
|
461
461
|
"@types/shell-quote": "^1.7.5",
|
|
462
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
463
|
-
"@typescript-eslint/parser": "^8.
|
|
462
|
+
"@typescript-eslint/eslint-plugin": "^8.40.0",
|
|
463
|
+
"@typescript-eslint/parser": "^8.40.0",
|
|
464
464
|
"better-typescript-lib": "^2.11.0",
|
|
465
465
|
"commander": "^14.0.0",
|
|
466
466
|
"compare-versions": "^6.1.1",
|
|
@@ -475,7 +475,7 @@
|
|
|
475
475
|
"eslint": "^9.33.0",
|
|
476
476
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
477
477
|
"eslint-plugin-import-x": "^4.16.1",
|
|
478
|
-
"eslint-plugin-jsdoc": "^54.
|
|
478
|
+
"eslint-plugin-jsdoc": "^54.1.0",
|
|
479
479
|
"eslint-plugin-modules-newlines": "^0.0.7",
|
|
480
480
|
"eslint-plugin-perfectionist": "^4.15.0",
|
|
481
481
|
"eslint-plugin-tsdoc": "^0.4.0",
|
|
@@ -486,12 +486,12 @@
|
|
|
486
486
|
"moment": "^2.30.1",
|
|
487
487
|
"monkey-around": "^3.0.0",
|
|
488
488
|
"npm-run-all": "^4.1.5",
|
|
489
|
-
"obsidian": "
|
|
490
|
-
"obsidian-typings": "
|
|
489
|
+
"obsidian": "latest",
|
|
490
|
+
"obsidian-typings": "obsidian-public-latest",
|
|
491
491
|
"path-browserify": "^1.0.1",
|
|
492
492
|
"postcss": "^8.5.6",
|
|
493
493
|
"postcss-modules": "^6.0.1",
|
|
494
|
-
"preact": "^10.27.
|
|
494
|
+
"preact": "^10.27.1",
|
|
495
495
|
"react": "^19.1.1",
|
|
496
496
|
"remark": "^15.0.1",
|
|
497
497
|
"remark-parse": "^11.0.0",
|
|
@@ -503,7 +503,7 @@
|
|
|
503
503
|
"tsx": "^4.20.4",
|
|
504
504
|
"type-fest": "^4.41.0",
|
|
505
505
|
"typescript": "^5.9.2",
|
|
506
|
-
"typescript-eslint": "^8.
|
|
506
|
+
"typescript-eslint": "^8.40.0",
|
|
507
507
|
"unist-util-visit": "^5.0.0"
|
|
508
508
|
},
|
|
509
509
|
"overrides": {
|