obsidian-dev-utils 19.7.0 → 19.7.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 19.7.1-beta.1
4
+
5
+ - Handle canvas text changes
6
+ - Update libs
7
+
3
8
  ## 19.7.0
4
9
 
5
10
  - fixFrontmatterMarkdownLinks
@@ -30,7 +30,7 @@ __export(Library_exports, {
30
30
  LIBRARY_VERSION: () => LIBRARY_VERSION
31
31
  });
32
32
  module.exports = __toCommonJS(Library_exports);
33
- const LIBRARY_VERSION = "19.7.0";
33
+ const LIBRARY_VERSION = "19.7.1-beta.1";
34
34
  const LIBRARY_NAME = "obsidian-dev-utils";
35
35
  const LIBRARY_STYLES = ".obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\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}\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.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/main.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AACE;EACE;;AAIA;EACE;EACA;;AAKF;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;EACE;EACA;;AAMJ;EACE%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%20%20%7D%5Cn%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%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%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%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%5D%7D */\n";
36
36
  // Annotate the CommonJS export names for ESM import in node:
@@ -34,101 +34,231 @@ var import_Object = require('../Object.cjs');
34
34
  var import_ValueProvider = require('../ValueProvider.cjs');
35
35
  var import_FileSystem = require('./FileSystem.cjs');
36
36
  var import_Frontmatter = require('./Frontmatter.cjs');
37
+ var import_MetadataCache = require('./MetadataCache.cjs');
38
+ var import_Reference = require('./Reference.cjs');
37
39
  var import_Vault = require('./Vault.cjs');
38
40
  async function applyFileChanges(app, pathOrFile, changesProvider, processOptions = {}) {
39
41
  await (0, import_Vault.process)(app, pathOrFile, async (content) => {
40
- let changes = await (0, import_ValueProvider.resolveValue)(changesProvider);
41
- const frontmatter = (0, import_FileSystem.isCanvasFile)(app, pathOrFile) ? parseJsonSafe(content) : (0, import_Frontmatter.parseFrontmatter)(content);
42
- for (const change of changes) {
43
- if (isContentChange(change)) {
44
- const actualContent = content.slice(change.startIndex, change.endIndex);
45
- if (actualContent !== change.oldContent) {
42
+ if ((0, import_FileSystem.isCanvasFile)(app, pathOrFile)) {
43
+ return applyCanvasChanges(app, content, (0, import_FileSystem.getPath)(app, pathOrFile), changesProvider);
44
+ }
45
+ return await applyContentChanges(content, (0, import_FileSystem.getPath)(app, pathOrFile), changesProvider);
46
+ }, processOptions);
47
+ }
48
+ function isContentChange(fileChange) {
49
+ return fileChange.startIndex !== void 0;
50
+ }
51
+ function isFrontmatterChange(fileChange) {
52
+ return fileChange.frontmatterKey !== void 0;
53
+ }
54
+ async function applyCanvasChanges(app, content, path, changesProvider) {
55
+ const changes = await (0, import_ValueProvider.resolveValue)(changesProvider);
56
+ const canvasData = parseJsonSafe(content);
57
+ const canvasTextChanges = /* @__PURE__ */ new Map();
58
+ for (const change of changes) {
59
+ if (!isFrontmatterChange(change)) {
60
+ console.warn("Only frontmatter changes are supported for canvas files", {
61
+ change,
62
+ path
63
+ });
64
+ return null;
65
+ }
66
+ const keyParts = change.frontmatterKey.split(".");
67
+ const NODES_PART_INDEX = 0;
68
+ const NODE_INDEX_PART_INDEX = 1;
69
+ const NODE_TYPE_PART_INDEX = 2;
70
+ const LINK_INDEX_PART_INDEX = 3;
71
+ if (keyParts[NODES_PART_INDEX] !== "nodes") {
72
+ console.warn("Only nodes changes are supported for canvas files", {
73
+ frontmatterKey: change.frontmatterKey,
74
+ path
75
+ });
76
+ return null;
77
+ }
78
+ const nodeIndex = parseInt(keyParts[NODE_INDEX_PART_INDEX] ?? "", 10);
79
+ if (isNaN(nodeIndex)) {
80
+ console.warn("Invalid node index", {
81
+ frontmatterKey: change.frontmatterKey,
82
+ path
83
+ });
84
+ return null;
85
+ }
86
+ const node = canvasData.nodes[nodeIndex];
87
+ if (!node) {
88
+ console.warn("Node not found", {
89
+ frontmatterKey: change.frontmatterKey,
90
+ path
91
+ });
92
+ return null;
93
+ }
94
+ switch (keyParts[NODE_TYPE_PART_INDEX]) {
95
+ case "file":
96
+ if (node.file !== change.oldContent) {
46
97
  console.warn("Content mismatch", {
47
- actualContent,
48
- endIndex: change.endIndex,
98
+ actualContent: node.file,
49
99
  expectedContent: change.oldContent,
50
- path: (0, import_FileSystem.getPath)(app, pathOrFile),
51
- startIndex: change.startIndex
100
+ frontmatterKey: change.frontmatterKey,
101
+ path
52
102
  });
53
103
  return null;
54
104
  }
55
- } else if (isFrontmatterChange(change)) {
56
- const actualContent = (0, import_Object.getNestedPropertyValue)(frontmatter, change.frontmatterKey);
57
- if (actualContent !== change.oldContent) {
58
- console.warn("Content mismatch", {
59
- actualContent,
60
- expectedContent: change.oldContent,
105
+ node.file = change.newContent;
106
+ break;
107
+ case "text": {
108
+ if (node.text === void 0) {
109
+ console.warn("Missing text node", {
110
+ frontmatterKey: change.frontmatterKey,
111
+ path
112
+ });
113
+ return null;
114
+ }
115
+ const linkIndex = parseInt(keyParts[LINK_INDEX_PART_INDEX] ?? "", 10);
116
+ if (isNaN(linkIndex)) {
117
+ console.warn("Invalid link index", {
61
118
  frontmatterKey: change.frontmatterKey,
62
- path: (0, import_FileSystem.getPath)(app, pathOrFile)
119
+ path
63
120
  });
64
121
  return null;
65
122
  }
123
+ let canvasTextChangesForNode = canvasTextChanges.get(linkIndex);
124
+ if (!canvasTextChangesForNode) {
125
+ canvasTextChangesForNode = /* @__PURE__ */ new Map();
126
+ canvasTextChanges.set(linkIndex, canvasTextChangesForNode);
127
+ }
128
+ canvasTextChangesForNode.set(linkIndex, change);
129
+ break;
66
130
  }
131
+ default:
132
+ console.warn("Unsupported node type", {
133
+ frontmatterKey: change.frontmatterKey,
134
+ path
135
+ });
136
+ break;
67
137
  }
68
- changes.sort((a, b) => {
69
- if (isContentChange(a) && isContentChange(b)) {
70
- return a.startIndex - b.startIndex;
71
- }
72
- if (isFrontmatterChange(a) && isFrontmatterChange(b)) {
73
- return a.frontmatterKey.localeCompare(b.frontmatterKey);
74
- }
75
- return isContentChange(a) ? -1 : 1;
76
- });
77
- changes = changes.filter((change, index) => {
78
- if (change.oldContent === change.newContent) {
79
- return false;
80
- }
81
- if (index === 0) {
82
- return true;
138
+ }
139
+ for (const [nodeIndex, canvasTextChangesForNode] of canvasTextChanges.entries()) {
140
+ const node = canvasData.nodes[nodeIndex];
141
+ if (!node) {
142
+ console.warn("Node not found", {
143
+ nodeIndex,
144
+ path
145
+ });
146
+ return null;
147
+ }
148
+ if (typeof node.text !== "string") {
149
+ console.warn("Node text is not a string", {
150
+ nodeIndex,
151
+ path
152
+ });
153
+ return null;
154
+ }
155
+ const cache = await (0, import_MetadataCache.parseMetadata)(app, node.text);
156
+ const links = (0, import_MetadataCache.getAllLinks)(cache);
157
+ const contentChanges = [];
158
+ for (let linkIndex = 0; linkIndex < links.length; linkIndex++) {
159
+ const link = links[linkIndex];
160
+ if (!link) {
161
+ console.warn("Missing link", {
162
+ linkIndex,
163
+ nodeIndex,
164
+ nodeText: node.text,
165
+ path
166
+ });
167
+ return null;
83
168
  }
84
- return !(0, import_Object.deepEqual)(change, changes[index - 1]);
85
- });
86
- for (let i = 1; i < changes.length; i++) {
87
- const change = changes[i];
88
- if (!change) {
89
- continue;
169
+ const canvasTextChange = canvasTextChangesForNode.get(linkIndex);
170
+ if (canvasTextChange) {
171
+ const contentChange = (0, import_Reference.referenceToFileChange)(link, canvasTextChange.newContent);
172
+ contentChange.oldContent = canvasTextChange.oldContent;
173
+ contentChanges.push(contentChange);
90
174
  }
91
- const previousChange = changes[i - 1];
92
- if (!previousChange) {
93
- continue;
175
+ }
176
+ node.text = await applyContentChanges(node.text, `${path}.FAKE_TEXT.node${nodeIndex.toString()}.md`, contentChanges);
177
+ }
178
+ return JSON.stringify(canvasData, null, " ");
179
+ }
180
+ async function applyContentChanges(content, path, changesProvider) {
181
+ let changes = await (0, import_ValueProvider.resolveValue)(changesProvider);
182
+ const frontmatter = (0, import_Frontmatter.parseFrontmatter)(content);
183
+ for (const change of changes) {
184
+ if (isContentChange(change)) {
185
+ const actualContent = content.slice(change.startIndex, change.endIndex);
186
+ if (actualContent !== change.oldContent) {
187
+ console.warn("Content mismatch", {
188
+ actualContent,
189
+ endIndex: change.endIndex,
190
+ expectedContent: change.oldContent,
191
+ path,
192
+ startIndex: change.startIndex
193
+ });
194
+ return null;
94
195
  }
95
- if (isContentChange(previousChange) && isContentChange(change) && previousChange.endIndex && change.startIndex && previousChange.endIndex > change.startIndex) {
96
- console.warn("Overlapping changes", {
97
- change,
98
- previousChange
196
+ } else if (isFrontmatterChange(change)) {
197
+ const actualContent = (0, import_Object.getNestedPropertyValue)(frontmatter, change.frontmatterKey);
198
+ if (actualContent !== change.oldContent) {
199
+ console.warn("Content mismatch", {
200
+ actualContent,
201
+ expectedContent: change.oldContent,
202
+ frontmatterKey: change.frontmatterKey,
203
+ path
99
204
  });
100
205
  return null;
101
206
  }
102
207
  }
103
- let newContent = "";
104
- let lastIndex = 0;
105
- let frontmatterChanged = false;
106
- for (const change of changes) {
107
- if (isContentChange(change)) {
108
- newContent += content.slice(lastIndex, change.startIndex);
109
- newContent += change.newContent;
110
- lastIndex = change.endIndex;
111
- } else if (isFrontmatterChange(change)) {
112
- (0, import_Object.setNestedPropertyValue)(frontmatter, change.frontmatterKey, change.newContent);
113
- frontmatterChanged = true;
114
- }
208
+ }
209
+ changes.sort((a, b) => {
210
+ if (isContentChange(a) && isContentChange(b)) {
211
+ return a.startIndex - b.startIndex;
115
212
  }
116
- if ((0, import_FileSystem.isCanvasFile)(app, pathOrFile)) {
117
- newContent = JSON.stringify(frontmatter, null, " ");
118
- } else {
119
- newContent += content.slice(lastIndex);
120
- if (frontmatterChanged) {
121
- newContent = (0, import_Frontmatter.setFrontmatter)(newContent, frontmatter);
122
- }
213
+ if (isFrontmatterChange(a) && isFrontmatterChange(b)) {
214
+ return a.frontmatterKey.localeCompare(b.frontmatterKey);
123
215
  }
124
- return newContent;
125
- }, processOptions);
126
- }
127
- function isContentChange(fileChange) {
128
- return fileChange.startIndex !== void 0;
129
- }
130
- function isFrontmatterChange(fileChange) {
131
- return fileChange.frontmatterKey !== void 0;
216
+ return isContentChange(a) ? -1 : 1;
217
+ });
218
+ changes = changes.filter((change, index) => {
219
+ if (change.oldContent === change.newContent) {
220
+ return false;
221
+ }
222
+ if (index === 0) {
223
+ return true;
224
+ }
225
+ return !(0, import_Object.deepEqual)(change, changes[index - 1]);
226
+ });
227
+ for (let i = 1; i < changes.length; i++) {
228
+ const change = changes[i];
229
+ if (!change) {
230
+ continue;
231
+ }
232
+ const previousChange = changes[i - 1];
233
+ if (!previousChange) {
234
+ continue;
235
+ }
236
+ if (isContentChange(previousChange) && isContentChange(change) && previousChange.endIndex && change.startIndex && previousChange.endIndex > change.startIndex) {
237
+ console.warn("Overlapping changes", {
238
+ change,
239
+ previousChange
240
+ });
241
+ return null;
242
+ }
243
+ }
244
+ let newContent = "";
245
+ let lastIndex = 0;
246
+ let frontmatterChanged = false;
247
+ for (const change of changes) {
248
+ if (isContentChange(change)) {
249
+ newContent += content.slice(lastIndex, change.startIndex);
250
+ newContent += change.newContent;
251
+ lastIndex = change.endIndex;
252
+ } else if (isFrontmatterChange(change)) {
253
+ (0, import_Object.setNestedPropertyValue)(frontmatter, change.frontmatterKey, change.newContent);
254
+ frontmatterChanged = true;
255
+ }
256
+ }
257
+ newContent += content.slice(lastIndex);
258
+ if (frontmatterChanged) {
259
+ newContent = (0, import_Frontmatter.setFrontmatter)(newContent, frontmatter);
260
+ }
261
+ return newContent;
132
262
  }
133
263
  function parseJsonSafe(content) {
134
264
  let parsed;
@@ -148,4 +278,4 @@ function parseJsonSafe(content) {
148
278
  isContentChange,
149
279
  isFrontmatterChange
150
280
  });
151
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEZpbGVDaGFuZ2VcbiAqIENvbnRhaW5zIHV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZmlsZSBjaGFuZ2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGVcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vRnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vVmF1bHQudHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb250ZW50IGJvZHkgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZW50Q2hhbmdlIGV4dGVuZHMgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgZW5kIGluZGV4IG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIGVuZEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydCBpbmRleCBvZiB0aGUgY2hhbmdlIGluIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBzdGFydEluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZpbGUgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBuZXcgY29udGVudCB0byByZXBsYWNlIHRoZSBvbGQgY29udGVudC5cbiAgICovXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBjb250ZW50IHRoYXQgd2lsbCBiZSByZXBsYWNlZC5cbiAgICovXG4gIG9sZENvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9udG1hdHRlckNoYW5nZSBleHRlbmRzIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGtleSBpbiB0aGUgZnJvbnRtYXR0ZXIgdG8gdXNlIGZvciB0aGUgbGluay5cbiAgICovXG4gIGZyb250bWF0dGVyS2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIHNlcmllcyBvZiBmaWxlIGNoYW5nZXMgdG8gdGhlIHNwZWNpZmllZCBmaWxlIG9yIHBhdGggd2l0aGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdoZXJlIHRoZSBmaWxlIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIGNoYW5nZXNQcm92aWRlciAtIEEgcHJvdmlkZXIgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIGZpbGUgY2hhbmdlcyB0byBhcHBseS5cbiAqIEBwYXJhbSBwcm9jZXNzT3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgZm9yIHByb2Nlc3NpbmcvcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlGaWxlQ2hhbmdlcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10+LFxuICBwcm9jZXNzT3B0aW9uczogUHJvY2Vzc09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHByb2Nlc3MoYXBwLCBwYXRoT3JGaWxlLCBhc3luYyAoY29udGVudCkgPT4ge1xuICAgIGxldCBjaGFuZ2VzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNoYW5nZXNQcm92aWRlcik7XG4gICAgY29uc3QgZnJvbnRtYXR0ZXIgPSBpc0NhbnZhc0ZpbGUoYXBwLCBwYXRoT3JGaWxlKSA/IHBhcnNlSnNvblNhZmUoY29udGVudCkgOiBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuXG4gICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBjb250ZW50LnNsaWNlKGNoYW5nZS5zdGFydEluZGV4LCBjaGFuZ2UuZW5kSW5kZXgpO1xuICAgICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGNoYW5nZS5lbmRJbmRleCxcbiAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgICBwYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksXG4gICAgICAgICAgICBzdGFydEluZGV4OiBjaGFuZ2Uuc3RhcnRJbmRleFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXkpO1xuICAgICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgICBwYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSlcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGEpICYmIGlzQ29udGVudENoYW5nZShiKSkge1xuICAgICAgICByZXR1cm4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlKGIpKSB7XG4gICAgICAgIHJldHVybiBhLmZyb250bWF0dGVyS2V5LmxvY2FsZUNvbXBhcmUoYi5mcm9udG1hdHRlcktleSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpc0NvbnRlbnRDaGFuZ2UoYSkgPyAtMSA6IDE7XG4gICAgfSk7XG5cbiAgICAvLyBCVUc6IGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZHVwbGljYXRlZC1saW5rcy1pbi1tZXRhZGF0YWNhY2hlLWluc2lkZS1mb290bm90ZXMvODU1NTFcbiAgICBjaGFuZ2VzID0gY2hhbmdlcy5maWx0ZXIoKGNoYW5nZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChjaGFuZ2Uub2xkQ29udGVudCA9PT0gY2hhbmdlLm5ld0NvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFkZWVwRXF1YWwoY2hhbmdlLCBjaGFuZ2VzW2luZGV4IC0gMV0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2aW91c0NoYW5nZSA9IGNoYW5nZXNbaSAtIDFdO1xuICAgICAgaWYgKCFwcmV2aW91c0NoYW5nZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc0NvbnRlbnRDaGFuZ2UocHJldmlvdXNDaGFuZ2UpICYmIGlzQ29udGVudENoYW5nZShjaGFuZ2UpICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ICYmIGNoYW5nZS5zdGFydEluZGV4XG4gICAgICAgICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ID4gY2hhbmdlLnN0YXJ0SW5kZXhcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ092ZXJsYXBwaW5nIGNoYW5nZXMnLCB7XG4gICAgICAgICAgY2hhbmdlLFxuICAgICAgICAgIHByZXZpb3VzQ2hhbmdlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3Q29udGVudCA9ICcnO1xuICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgIGxldCBmcm9udG1hdHRlckNoYW5nZWQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICAgIG5ld0NvbnRlbnQgKz0gY2hhbmdlLm5ld0NvbnRlbnQ7XG4gICAgICAgIGxhc3RJbmRleCA9IGNoYW5nZS5lbmRJbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIHNldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGNoYW5nZS5mcm9udG1hdHRlcktleSwgY2hhbmdlLm5ld0NvbnRlbnQpO1xuICAgICAgICBmcm9udG1hdHRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBwYXRoT3JGaWxlKSkge1xuICAgICAgbmV3Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KGZyb250bWF0dGVyLCBudWxsLCAnXFx0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICAgICAgaWYgKGZyb250bWF0dGVyQ2hhbmdlZCkge1xuICAgICAgICBuZXdDb250ZW50ID0gc2V0RnJvbnRtYXR0ZXIobmV3Q29udGVudCwgZnJvbnRtYXR0ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgfSwgcHJvY2Vzc09wdGlvbnMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIENvbnRlbnRDaGFuZ2Uge1xuICByZXR1cm4gKGZpbGVDaGFuZ2UgYXMgUGFydGlhbDxDb250ZW50Q2hhbmdlPikuc3RhcnRJbmRleCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyQ2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlIHtcbiAgcmV0dXJuIChmaWxlQ2hhbmdlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJDaGFuZ2U+KS5mcm9udG1hdHRlcktleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpzb25TYWZlKGNvbnRlbnQ6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLG9CQUlPO0FBQ1AsMkJBQTZCO0FBQzdCLHdCQUdPO0FBQ1AseUJBR087QUFDUCxtQkFBd0I7QUFvRHhCLGVBQXNCLGlCQUNwQixLQUNBLFlBQ0EsaUJBQ0EsaUJBQWlDLENBQUMsR0FDbkI7QUFDZixZQUFNLHNCQUFRLEtBQUssWUFBWSxPQUFPLFlBQVk7QUFDaEQsUUFBSSxVQUFVLFVBQU0sbUNBQWEsZUFBZTtBQUNoRCxVQUFNLGtCQUFjLGdDQUFhLEtBQUssVUFBVSxJQUFJLGNBQWMsT0FBTyxRQUFJLHFDQUFpQixPQUFPO0FBRXJHLGVBQVcsVUFBVSxTQUFTO0FBQzVCLFVBQUksZ0JBQWdCLE1BQU0sR0FBRztBQUMzQixjQUFNLGdCQUFnQixRQUFRLE1BQU0sT0FBTyxZQUFZLE9BQU8sUUFBUTtBQUN0RSxZQUFJLGtCQUFrQixPQUFPLFlBQVk7QUFDdkMsa0JBQVEsS0FBSyxvQkFBb0I7QUFBQSxZQUMvQjtBQUFBLFlBQ0EsVUFBVSxPQUFPO0FBQUEsWUFDakIsaUJBQWlCLE9BQU87QUFBQSxZQUN4QixVQUFNLDJCQUFRLEtBQUssVUFB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
281
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEZpbGVDaGFuZ2VcbiAqIENvbnRhaW5zIHV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZmlsZSBjaGFuZ2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vQ2FudmFzLmQudHMnO1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGVcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vRnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIHBhcnNlTWV0YWRhdGFcbn0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7IHJlZmVyZW5jZVRvRmlsZUNoYW5nZSB9IGZyb20gJy4vUmVmZXJlbmNlLnRzJztcbmltcG9ydCB7IHByb2Nlc3MgfSBmcm9tICcuL1ZhdWx0LnRzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29udGVudCBib2R5IGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudENoYW5nZSBleHRlbmRzIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGVuZCBpbmRleCBvZiB0aGUgY2hhbmdlIGluIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBlbmRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIGNoYW5nZSBpbiB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgc3RhcnRJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgbmV3IGNvbnRlbnQgdG8gcmVwbGFjZSB0aGUgb2xkIGNvbnRlbnQuXG4gICAqL1xuICBuZXdDb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgY29udGVudCB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXG4gICAqL1xuICBvbGRDb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZyb250bWF0dGVyIGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRtYXR0ZXJDaGFuZ2UgZXh0ZW5kcyBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgaW4gdGhlIGZyb250bWF0dGVyIHRvIHVzZSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBmcm9udG1hdHRlcktleTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgZmlsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBwYXRoIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aGVyZSB0aGUgZmlsZSBjaGFuZ2VzIHdpbGwgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBjaGFuZ2VzUHJvdmlkZXIgLSBBIHByb3ZpZGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBmaWxlIGNoYW5nZXMgdG8gYXBwbHkuXG4gKiBAcGFyYW0gcHJvY2Vzc09wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciBwcm9jZXNzaW5nL3JldHJ5aW5nIHRoZSBvcGVyYXRpb24uXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5RmlsZUNoYW5nZXMoXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgcGF0aE9yRmlsZSwgYXN5bmMgKGNvbnRlbnQpID0+IHtcbiAgICBpZiAoaXNDYW52YXNGaWxlKGFwcCwgcGF0aE9yRmlsZSkpIHtcbiAgICAgIHJldHVybiBhcHBseUNhbnZhc0NoYW5nZXMoYXBwLCBjb250ZW50LCBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksIGNoYW5nZXNQcm92aWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoY29udGVudCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBjaGFuZ2VzUHJvdmlkZXIpO1xuICB9LCBwcm9jZXNzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjb250ZW50IGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRlbnRDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgQ29udGVudENoYW5nZSB7XG4gIHJldHVybiAoZmlsZUNoYW5nZSBhcyBQYXJ0aWFsPENvbnRlbnRDaGFuZ2U+KS5zdGFydEluZGV4ICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgRnJvbnRtYXR0ZXJDaGFuZ2Uge1xuICByZXR1cm4gKGZpbGVDaGFuZ2UgYXMgUGFydGlhbDxGcm9udG1hdHRlckNoYW5nZT4pLmZyb250bWF0dGVyS2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5Q2FudmFzQ2hhbmdlcyhhcHA6IEFwcCwgY29udGVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10+KTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyKTtcbiAgY29uc3QgY2FudmFzRGF0YSA9IHBhcnNlSnNvblNhZmUoY29udGVudCkgYXMgQ2FudmFzRGF0YTtcblxuICBjb25zdCBjYW52YXNUZXh0Q2hhbmdlcyA9IG5ldyBNYXA8bnVtYmVyLCBNYXA8bnVtYmVyLCBGcm9udG1hdHRlckNoYW5nZT4+KCk7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmICghaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ09ubHkgZnJvbnRtYXR0ZXIgY2hhbmdlcyBhcmUgc3VwcG9ydGVkIGZvciBjYW52YXMgZmlsZXMnLCB7XG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlQYXJ0cyA9IGNoYW5nZS5mcm9udG1hdHRlcktleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IE5PREVTX1BBUlRfSU5ERVggPSAwO1xuICAgIGNvbnN0IE5PREVfSU5ERVhfUEFSVF9JTkRFWCA9IDE7XG4gICAgY29uc3QgTk9ERV9UWVBFX1BBUlRfSU5ERVggPSAyO1xuICAgIGNvbnN0IExJTktfSU5ERVhfUEFSVF9JTkRFWCA9IDM7XG5cbiAgICBpZiAoa2V5UGFydHNbTk9ERVNfUEFSVF9JTkRFWF0gIT09ICdub2RlcycpIHtcbiAgICAgIGNvbnNvbGUud2FybignT25seSBub2RlcyBjaGFuZ2VzIGFyZSBzdXBwb3J0ZWQgZm9yIGNhbnZhcyBmaWxlcycsIHtcbiAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlSW5kZXggPSBwYXJzZUludChrZXlQYXJ0c1tOT0RFX0lOREVYX1BBUlRfSU5ERVhdID8/ICcnLCAxMCk7XG4gICAgaWYgKGlzTmFOKG5vZGVJbmRleCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBub2RlIGluZGV4Jywge1xuICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vZGUgbm90IGZvdW5kJywge1xuICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoa2V5UGFydHNbTk9ERV9UWVBFX1BBUlRfSU5ERVhdKSB7XG4gICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgaWYgKG5vZGUuZmlsZSAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50OiBub2RlLmZpbGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmZpbGUgPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICBpZiAobm9kZS50ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ01pc3NpbmcgdGV4dCBub2RlJywge1xuICAgICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlua0luZGV4ID0gcGFyc2VJbnQoa2V5UGFydHNbTElOS19JTkRFWF9QQVJUX0lOREVYXSA/PyAnJywgMTApO1xuICAgICAgICBpZiAoaXNOYU4obGlua0luZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBsaW5rIGluZGV4Jywge1xuICAgICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IGNhbnZhc1RleHRDaGFuZ2VzLmdldChsaW5rSW5kZXgpO1xuICAgICAgICBpZiAoIWNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSkge1xuICAgICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IG5ldyBNYXA8bnVtYmVyLCBGcm9udG1hdHRlckNoYW5nZT4oKTtcbiAgICAgICAgICBjYW52YXNUZXh0Q2hhbmdlcy5zZXQobGlua0luZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlLnNldChsaW5rSW5kZXgsIGNoYW5nZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCBub2RlIHR5cGUnLCB7XG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtub2RlSW5kZXgsIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZV0gb2YgY2FudmFzVGV4dENoYW5nZXMuZW50cmllcygpKSB7XG4gICAgY29uc3Qgbm9kZSA9IGNhbnZhc0RhdGEubm9kZXNbbm9kZUluZGV4XTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm9kZSBub3QgZm91bmQnLCB7XG4gICAgICAgIG5vZGVJbmRleCxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygbm9kZS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRleHQgaXMgbm90IGEgc3RyaW5nJywge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBub2RlLnRleHQpO1xuICAgIGNvbnN0IGxpbmtzID0gZ2V0QWxsTGlua3MoY2FjaGUpO1xuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VzOiBGaWxlQ2hhbmdlW10gPSBbXTtcblxuICAgIGZvciAobGV0IGxpbmtJbmRleCA9IDA7IGxpbmtJbmRleCA8IGxpbmtzLmxlbmd0aDsgbGlua0luZGV4KyspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBsaW5rc1tsaW5rSW5kZXhdO1xuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTWlzc2luZyBsaW5rJywge1xuICAgICAgICAgIGxpbmtJbmRleCxcbiAgICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgICAgbm9kZVRleHQ6IG5vZGUudGV4dCxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYW52YXNUZXh0Q2hhbmdlID0gY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlLmdldChsaW5rSW5kZXgpO1xuICAgICAgaWYgKGNhbnZhc1RleHRDaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgY29udGVudENoYW5nZSA9IHJlZmVyZW5jZVRvRmlsZUNoYW5nZShsaW5rLCBjYW52YXNUZXh0Q2hhbmdlLm5ld0NvbnRlbnQpO1xuICAgICAgICBjb250ZW50Q2hhbmdlLm9sZENvbnRlbnQgPSBjYW52YXNUZXh0Q2hhbmdlLm9sZENvbnRlbnQ7XG4gICAgICAgIGNvbnRlbnRDaGFuZ2VzLnB1c2goY29udGVudENoYW5nZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS50ZXh0ID0gYXdhaXQgYXBwbHlDb250ZW50Q2hhbmdlcyhub2RlLnRleHQsIGAke3BhdGh9LkZBS0VfVEVYVC5ub2RlJHtub2RlSW5kZXgudG9TdHJpbmcoKX0ubWRgLCBjb250ZW50Q2hhbmdlcyk7XG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2FudmFzRGF0YSwgbnVsbCwgJ1xcdCcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNvbnRlbnRDaGFuZ2VzKGNvbnRlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPik6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBsZXQgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIpO1xuICBjb25zdCBmcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXIoY29udGVudCk7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoY2hhbmdlLnN0YXJ0SW5kZXgsIGNoYW5nZS5lbmRJbmRleCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZW5kSW5kZXg6IGNoYW5nZS5lbmRJbmRleCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3RhcnRJbmRleDogY2hhbmdlLnN0YXJ0SW5kZXhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXkpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoYSkgJiYgaXNDb250ZW50Q2hhbmdlKGIpKSB7XG4gICAgICByZXR1cm4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4O1xuICAgIH1cblxuICAgIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGEpICYmIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoYikpIHtcbiAgICAgIHJldHVybiBhLmZyb250bWF0dGVyS2V5LmxvY2FsZUNvbXBhcmUoYi5mcm9udG1hdHRlcktleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ29udGVudENoYW5nZShhKSA/IC0xIDogMTtcbiAgfSk7XG5cbiAgLy8gQlVHOiBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYnVnLWR1cGxpY2F0ZWQtbGlua3MtaW4tbWV0YWRhdGFjYWNoZS1pbnNpZGUtZm9vdG5vdGVzLzg1NTUxXG4gIGNoYW5nZXMgPSBjaGFuZ2VzLmZpbHRlcigoY2hhbmdlLCBpbmRleCkgPT4ge1xuICAgIGlmIChjaGFuZ2Uub2xkQ29udGVudCA9PT0gY2hhbmdlLm5ld0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICFkZWVwRXF1YWwoY2hhbmdlLCBjaGFuZ2VzW2luZGV4IC0gMV0pO1xuICB9KTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgIGlmICghY2hhbmdlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNDaGFuZ2UgPSBjaGFuZ2VzW2kgLSAxXTtcbiAgICBpZiAoIXByZXZpb3VzQ2hhbmdlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc0NvbnRlbnRDaGFuZ2UocHJldmlvdXNDaGFuZ2UpICYmIGlzQ29udGVudENoYW5nZShjaGFuZ2UpICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ICYmIGNoYW5nZS5zdGFydEluZGV4XG4gICAgICAmJiBwcmV2aW91c0NoYW5nZS5lbmRJbmRleCA+IGNoYW5nZS5zdGFydEluZGV4XG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ092ZXJsYXBwaW5nIGNoYW5nZXMnLCB7XG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcHJldmlvdXNDaGFuZ2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5ld0NvbnRlbnQgPSAnJztcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG4gIGxldCBmcm9udG1hdHRlckNoYW5nZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICBuZXdDb250ZW50ICs9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgbGFzdEluZGV4ID0gY2hhbmdlLmVuZEluZGV4O1xuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksIGNoYW5nZS5uZXdDb250ZW50KTtcbiAgICAgIGZyb250bWF0dGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCk7XG4gIGlmIChmcm9udG1hdHRlckNoYW5nZWQpIHtcbiAgICBuZXdDb250ZW50ID0gc2V0RnJvbnRtYXR0ZXIobmV3Q29udGVudCwgZnJvbnRtYXR0ZXIpO1xuICB9XG5cbiAgcmV0dXJuIG5ld0NvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSnNvblNhZmUoY29udGVudDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gIH0gY2F0Y2gge1xuICAgIHBhcnNlZCA9IG51bGw7XG4gIH1cblxuICBpZiAocGFyc2VkID09PSBudWxsIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSB7XG4gICAgcGFyc2VkID0ge307XG4gIH1cblxuICByZXR1cm4gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsb0JBSU87QUFDUCwyQkFBNkI7QUFDN0Isd0JBR087QUFDUCx5QkFHTztBQUNQLDJCQUdPO0FBQ1AsdUJBQXNDO0FBQ3RDLG1CQUF3QjtBQW9EeEIsZUFBc0IsaUJBQ3BCLEtBQ0EsWUFDQSxpQkFDQSxpQkFBaUMsQ0FBQyxHQUNuQjtBQUNmLFlBQU0sc0JBQVEsS0FBSyxZQUFZLE9BQU8sWUFBWTtBQUNoRCxZQUFJLGdDQUFhLEtBQUssVUFBVSxHQUFHO0FBQ2pDLGFBQU8sbUJBQW1CLEtBQUssYUFBUywyQkFBUSxLQUFLLFVBQVUsR0FBRyxlQUFlO0FBQUEsSUFDbkY7QUFFQSxXQUFPLE1BQU0sb0JBQW9CLGFBQVMsMkJBQVEsS0FBSyxVQUFVLEdBQUcsZUFBZTtBQUFBLEVBQ3JGLEdBQUcsY0FBYztBQUNuQjtBQVFPLFNBQVMsZ0JBQWdCLFlBQXFEO0FBQ25GLFNBQVEsV0FBc0MsZUFBZTtBQUMvRDtBQVFPLFNBQVMsb0JBQW9CLFlBQXlEO0FBQzNGLFNBQVEsV0FBMEMsbUJBQW1CO0FBQ3ZFO0FBRUEsZUFBZSxt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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 = "19.7.0";
8
+ const LIBRARY_VERSION = "19.7.1-beta.1";
9
9
  const LIBRARY_NAME = "obsidian-dev-utils";
10
10
  const LIBRARY_STYLES = ".obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\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}\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.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/main.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AACE;EACE;;AAIA;EACE;EACA;;AAKF;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;EACE;EACA;;AAMJ;EACE%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%20%20%7D%5Cn%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%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%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%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%5D%7D */\n";
11
11
  export {
@@ -19,101 +19,234 @@ import {
19
19
  parseFrontmatter,
20
20
  setFrontmatter
21
21
  } from "./Frontmatter.mjs";
22
+ import {
23
+ getAllLinks,
24
+ parseMetadata
25
+ } from "./MetadataCache.mjs";
26
+ import { referenceToFileChange } from "./Reference.mjs";
22
27
  import { process } from "./Vault.mjs";
23
28
  async function applyFileChanges(app, pathOrFile, changesProvider, processOptions = {}) {
24
29
  await process(app, pathOrFile, async (content) => {
25
- let changes = await resolveValue(changesProvider);
26
- const frontmatter = isCanvasFile(app, pathOrFile) ? parseJsonSafe(content) : parseFrontmatter(content);
27
- for (const change of changes) {
28
- if (isContentChange(change)) {
29
- const actualContent = content.slice(change.startIndex, change.endIndex);
30
- if (actualContent !== change.oldContent) {
30
+ if (isCanvasFile(app, pathOrFile)) {
31
+ return applyCanvasChanges(app, content, getPath(app, pathOrFile), changesProvider);
32
+ }
33
+ return await applyContentChanges(content, getPath(app, pathOrFile), changesProvider);
34
+ }, processOptions);
35
+ }
36
+ function isContentChange(fileChange) {
37
+ return fileChange.startIndex !== void 0;
38
+ }
39
+ function isFrontmatterChange(fileChange) {
40
+ return fileChange.frontmatterKey !== void 0;
41
+ }
42
+ async function applyCanvasChanges(app, content, path, changesProvider) {
43
+ const changes = await resolveValue(changesProvider);
44
+ const canvasData = parseJsonSafe(content);
45
+ const canvasTextChanges = /* @__PURE__ */ new Map();
46
+ for (const change of changes) {
47
+ if (!isFrontmatterChange(change)) {
48
+ console.warn("Only frontmatter changes are supported for canvas files", {
49
+ change,
50
+ path
51
+ });
52
+ return null;
53
+ }
54
+ const keyParts = change.frontmatterKey.split(".");
55
+ const NODES_PART_INDEX = 0;
56
+ const NODE_INDEX_PART_INDEX = 1;
57
+ const NODE_TYPE_PART_INDEX = 2;
58
+ const LINK_INDEX_PART_INDEX = 3;
59
+ if (keyParts[NODES_PART_INDEX] !== "nodes") {
60
+ console.warn("Only nodes changes are supported for canvas files", {
61
+ frontmatterKey: change.frontmatterKey,
62
+ path
63
+ });
64
+ return null;
65
+ }
66
+ const nodeIndex = parseInt(keyParts[NODE_INDEX_PART_INDEX] ?? "", 10);
67
+ if (isNaN(nodeIndex)) {
68
+ console.warn("Invalid node index", {
69
+ frontmatterKey: change.frontmatterKey,
70
+ path
71
+ });
72
+ return null;
73
+ }
74
+ const node = canvasData.nodes[nodeIndex];
75
+ if (!node) {
76
+ console.warn("Node not found", {
77
+ frontmatterKey: change.frontmatterKey,
78
+ path
79
+ });
80
+ return null;
81
+ }
82
+ switch (keyParts[NODE_TYPE_PART_INDEX]) {
83
+ case "file":
84
+ if (node.file !== change.oldContent) {
31
85
  console.warn("Content mismatch", {
32
- actualContent,
33
- endIndex: change.endIndex,
86
+ actualContent: node.file,
34
87
  expectedContent: change.oldContent,
35
- path: getPath(app, pathOrFile),
36
- startIndex: change.startIndex
88
+ frontmatterKey: change.frontmatterKey,
89
+ path
37
90
  });
38
91
  return null;
39
92
  }
40
- } else if (isFrontmatterChange(change)) {
41
- const actualContent = getNestedPropertyValue(frontmatter, change.frontmatterKey);
42
- if (actualContent !== change.oldContent) {
43
- console.warn("Content mismatch", {
44
- actualContent,
45
- expectedContent: change.oldContent,
93
+ node.file = change.newContent;
94
+ break;
95
+ case "text": {
96
+ if (node.text === void 0) {
97
+ console.warn("Missing text node", {
98
+ frontmatterKey: change.frontmatterKey,
99
+ path
100
+ });
101
+ return null;
102
+ }
103
+ const linkIndex = parseInt(keyParts[LINK_INDEX_PART_INDEX] ?? "", 10);
104
+ if (isNaN(linkIndex)) {
105
+ console.warn("Invalid link index", {
46
106
  frontmatterKey: change.frontmatterKey,
47
- path: getPath(app, pathOrFile)
107
+ path
48
108
  });
49
109
  return null;
50
110
  }
111
+ let canvasTextChangesForNode = canvasTextChanges.get(linkIndex);
112
+ if (!canvasTextChangesForNode) {
113
+ canvasTextChangesForNode = /* @__PURE__ */ new Map();
114
+ canvasTextChanges.set(linkIndex, canvasTextChangesForNode);
115
+ }
116
+ canvasTextChangesForNode.set(linkIndex, change);
117
+ break;
51
118
  }
119
+ default:
120
+ console.warn("Unsupported node type", {
121
+ frontmatterKey: change.frontmatterKey,
122
+ path
123
+ });
124
+ break;
52
125
  }
53
- changes.sort((a, b) => {
54
- if (isContentChange(a) && isContentChange(b)) {
55
- return a.startIndex - b.startIndex;
56
- }
57
- if (isFrontmatterChange(a) && isFrontmatterChange(b)) {
58
- return a.frontmatterKey.localeCompare(b.frontmatterKey);
59
- }
60
- return isContentChange(a) ? -1 : 1;
61
- });
62
- changes = changes.filter((change, index) => {
63
- if (change.oldContent === change.newContent) {
64
- return false;
65
- }
66
- if (index === 0) {
67
- return true;
126
+ }
127
+ for (const [nodeIndex, canvasTextChangesForNode] of canvasTextChanges.entries()) {
128
+ const node = canvasData.nodes[nodeIndex];
129
+ if (!node) {
130
+ console.warn("Node not found", {
131
+ nodeIndex,
132
+ path
133
+ });
134
+ return null;
135
+ }
136
+ if (typeof node.text !== "string") {
137
+ console.warn("Node text is not a string", {
138
+ nodeIndex,
139
+ path
140
+ });
141
+ return null;
142
+ }
143
+ const cache = await parseMetadata(app, node.text);
144
+ const links = getAllLinks(cache);
145
+ const contentChanges = [];
146
+ for (let linkIndex = 0; linkIndex < links.length; linkIndex++) {
147
+ const link = links[linkIndex];
148
+ if (!link) {
149
+ console.warn("Missing link", {
150
+ linkIndex,
151
+ nodeIndex,
152
+ nodeText: node.text,
153
+ path
154
+ });
155
+ return null;
68
156
  }
69
- return !deepEqual(change, changes[index - 1]);
70
- });
71
- for (let i = 1; i < changes.length; i++) {
72
- const change = changes[i];
73
- if (!change) {
74
- continue;
157
+ const canvasTextChange = canvasTextChangesForNode.get(linkIndex);
158
+ if (canvasTextChange) {
159
+ const contentChange = referenceToFileChange(link, canvasTextChange.newContent);
160
+ contentChange.oldContent = canvasTextChange.oldContent;
161
+ contentChanges.push(contentChange);
75
162
  }
76
- const previousChange = changes[i - 1];
77
- if (!previousChange) {
78
- continue;
163
+ }
164
+ node.text = await applyContentChanges(node.text, `${path}.FAKE_TEXT.node${nodeIndex.toString()}.md`, contentChanges);
165
+ }
166
+ return JSON.stringify(canvasData, null, " ");
167
+ }
168
+ async function applyContentChanges(content, path, changesProvider) {
169
+ let changes = await resolveValue(changesProvider);
170
+ const frontmatter = parseFrontmatter(content);
171
+ for (const change of changes) {
172
+ if (isContentChange(change)) {
173
+ const actualContent = content.slice(change.startIndex, change.endIndex);
174
+ if (actualContent !== change.oldContent) {
175
+ console.warn("Content mismatch", {
176
+ actualContent,
177
+ endIndex: change.endIndex,
178
+ expectedContent: change.oldContent,
179
+ path,
180
+ startIndex: change.startIndex
181
+ });
182
+ return null;
79
183
  }
80
- if (isContentChange(previousChange) && isContentChange(change) && previousChange.endIndex && change.startIndex && previousChange.endIndex > change.startIndex) {
81
- console.warn("Overlapping changes", {
82
- change,
83
- previousChange
184
+ } else if (isFrontmatterChange(change)) {
185
+ const actualContent = getNestedPropertyValue(frontmatter, change.frontmatterKey);
186
+ if (actualContent !== change.oldContent) {
187
+ console.warn("Content mismatch", {
188
+ actualContent,
189
+ expectedContent: change.oldContent,
190
+ frontmatterKey: change.frontmatterKey,
191
+ path
84
192
  });
85
193
  return null;
86
194
  }
87
195
  }
88
- let newContent = "";
89
- let lastIndex = 0;
90
- let frontmatterChanged = false;
91
- for (const change of changes) {
92
- if (isContentChange(change)) {
93
- newContent += content.slice(lastIndex, change.startIndex);
94
- newContent += change.newContent;
95
- lastIndex = change.endIndex;
96
- } else if (isFrontmatterChange(change)) {
97
- setNestedPropertyValue(frontmatter, change.frontmatterKey, change.newContent);
98
- frontmatterChanged = true;
99
- }
196
+ }
197
+ changes.sort((a, b) => {
198
+ if (isContentChange(a) && isContentChange(b)) {
199
+ return a.startIndex - b.startIndex;
100
200
  }
101
- if (isCanvasFile(app, pathOrFile)) {
102
- newContent = JSON.stringify(frontmatter, null, " ");
103
- } else {
104
- newContent += content.slice(lastIndex);
105
- if (frontmatterChanged) {
106
- newContent = setFrontmatter(newContent, frontmatter);
107
- }
201
+ if (isFrontmatterChange(a) && isFrontmatterChange(b)) {
202
+ return a.frontmatterKey.localeCompare(b.frontmatterKey);
108
203
  }
109
- return newContent;
110
- }, processOptions);
111
- }
112
- function isContentChange(fileChange) {
113
- return fileChange.startIndex !== void 0;
114
- }
115
- function isFrontmatterChange(fileChange) {
116
- return fileChange.frontmatterKey !== void 0;
204
+ return isContentChange(a) ? -1 : 1;
205
+ });
206
+ changes = changes.filter((change, index) => {
207
+ if (change.oldContent === change.newContent) {
208
+ return false;
209
+ }
210
+ if (index === 0) {
211
+ return true;
212
+ }
213
+ return !deepEqual(change, changes[index - 1]);
214
+ });
215
+ for (let i = 1; i < changes.length; i++) {
216
+ const change = changes[i];
217
+ if (!change) {
218
+ continue;
219
+ }
220
+ const previousChange = changes[i - 1];
221
+ if (!previousChange) {
222
+ continue;
223
+ }
224
+ if (isContentChange(previousChange) && isContentChange(change) && previousChange.endIndex && change.startIndex && previousChange.endIndex > change.startIndex) {
225
+ console.warn("Overlapping changes", {
226
+ change,
227
+ previousChange
228
+ });
229
+ return null;
230
+ }
231
+ }
232
+ let newContent = "";
233
+ let lastIndex = 0;
234
+ let frontmatterChanged = false;
235
+ for (const change of changes) {
236
+ if (isContentChange(change)) {
237
+ newContent += content.slice(lastIndex, change.startIndex);
238
+ newContent += change.newContent;
239
+ lastIndex = change.endIndex;
240
+ } else if (isFrontmatterChange(change)) {
241
+ setNestedPropertyValue(frontmatter, change.frontmatterKey, change.newContent);
242
+ frontmatterChanged = true;
243
+ }
244
+ }
245
+ newContent += content.slice(lastIndex);
246
+ if (frontmatterChanged) {
247
+ newContent = setFrontmatter(newContent, frontmatter);
248
+ }
249
+ return newContent;
117
250
  }
118
251
  function parseJsonSafe(content) {
119
252
  let parsed;
@@ -132,4 +265,4 @@ export {
132
265
  isContentChange,
133
266
  isFrontmatterChange
134
267
  };
135
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEZpbGVDaGFuZ2VcbiAqIENvbnRhaW5zIHV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZmlsZSBjaGFuZ2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGVcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vRnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vVmF1bHQudHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb250ZW50IGJvZHkgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZW50Q2hhbmdlIGV4dGVuZHMgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgZW5kIGluZGV4IG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIGVuZEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydCBpbmRleCBvZiB0aGUgY2hhbmdlIGluIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBzdGFydEluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZpbGUgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBuZXcgY29udGVudCB0byByZXBsYWNlIHRoZSBvbGQgY29udGVudC5cbiAgICovXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBjb250ZW50IHRoYXQgd2lsbCBiZSByZXBsYWNlZC5cbiAgICovXG4gIG9sZENvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9udG1hdHRlckNoYW5nZSBleHRlbmRzIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGtleSBpbiB0aGUgZnJvbnRtYXR0ZXIgdG8gdXNlIGZvciB0aGUgbGluay5cbiAgICovXG4gIGZyb250bWF0dGVyS2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIHNlcmllcyBvZiBmaWxlIGNoYW5nZXMgdG8gdGhlIHNwZWNpZmllZCBmaWxlIG9yIHBhdGggd2l0aGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdoZXJlIHRoZSBmaWxlIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIGNoYW5nZXNQcm92aWRlciAtIEEgcHJvdmlkZXIgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIGZpbGUgY2hhbmdlcyB0byBhcHBseS5cbiAqIEBwYXJhbSBwcm9jZXNzT3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgZm9yIHByb2Nlc3NpbmcvcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlGaWxlQ2hhbmdlcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10+LFxuICBwcm9jZXNzT3B0aW9uczogUHJvY2Vzc09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHByb2Nlc3MoYXBwLCBwYXRoT3JGaWxlLCBhc3luYyAoY29udGVudCkgPT4ge1xuICAgIGxldCBjaGFuZ2VzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNoYW5nZXNQcm92aWRlcik7XG4gICAgY29uc3QgZnJvbnRtYXR0ZXIgPSBpc0NhbnZhc0ZpbGUoYXBwLCBwYXRoT3JGaWxlKSA/IHBhcnNlSnNvblNhZmUoY29udGVudCkgOiBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuXG4gICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBjb250ZW50LnNsaWNlKGNoYW5nZS5zdGFydEluZGV4LCBjaGFuZ2UuZW5kSW5kZXgpO1xuICAgICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGNoYW5nZS5lbmRJbmRleCxcbiAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgICBwYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksXG4gICAgICAgICAgICBzdGFydEluZGV4OiBjaGFuZ2Uuc3RhcnRJbmRleFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXkpO1xuICAgICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgICBwYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSlcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGEpICYmIGlzQ29udGVudENoYW5nZShiKSkge1xuICAgICAgICByZXR1cm4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlKGIpKSB7XG4gICAgICAgIHJldHVybiBhLmZyb250bWF0dGVyS2V5LmxvY2FsZUNvbXBhcmUoYi5mcm9udG1hdHRlcktleSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpc0NvbnRlbnRDaGFuZ2UoYSkgPyAtMSA6IDE7XG4gICAgfSk7XG5cbiAgICAvLyBCVUc6IGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZHVwbGljYXRlZC1saW5rcy1pbi1tZXRhZGF0YWNhY2hlLWluc2lkZS1mb290bm90ZXMvODU1NTFcbiAgICBjaGFuZ2VzID0gY2hhbmdlcy5maWx0ZXIoKGNoYW5nZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChjaGFuZ2Uub2xkQ29udGVudCA9PT0gY2hhbmdlLm5ld0NvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFkZWVwRXF1YWwoY2hhbmdlLCBjaGFuZ2VzW2luZGV4IC0gMV0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2aW91c0NoYW5nZSA9IGNoYW5nZXNbaSAtIDFdO1xuICAgICAgaWYgKCFwcmV2aW91c0NoYW5nZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc0NvbnRlbnRDaGFuZ2UocHJldmlvdXNDaGFuZ2UpICYmIGlzQ29udGVudENoYW5nZShjaGFuZ2UpICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ICYmIGNoYW5nZS5zdGFydEluZGV4XG4gICAgICAgICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ID4gY2hhbmdlLnN0YXJ0SW5kZXhcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ092ZXJsYXBwaW5nIGNoYW5nZXMnLCB7XG4gICAgICAgICAgY2hhbmdlLFxuICAgICAgICAgIHByZXZpb3VzQ2hhbmdlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3Q29udGVudCA9ICcnO1xuICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgIGxldCBmcm9udG1hdHRlckNoYW5nZWQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICAgIG5ld0NvbnRlbnQgKz0gY2hhbmdlLm5ld0NvbnRlbnQ7XG4gICAgICAgIGxhc3RJbmRleCA9IGNoYW5nZS5lbmRJbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIHNldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGNoYW5nZS5mcm9udG1hdHRlcktleSwgY2hhbmdlLm5ld0NvbnRlbnQpO1xuICAgICAgICBmcm9udG1hdHRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBwYXRoT3JGaWxlKSkge1xuICAgICAgbmV3Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KGZyb250bWF0dGVyLCBudWxsLCAnXFx0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICAgICAgaWYgKGZyb250bWF0dGVyQ2hhbmdlZCkge1xuICAgICAgICBuZXdDb250ZW50ID0gc2V0RnJvbnRtYXR0ZXIobmV3Q29udGVudCwgZnJvbnRtYXR0ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgfSwgcHJvY2Vzc09wdGlvbnMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIENvbnRlbnRDaGFuZ2Uge1xuICByZXR1cm4gKGZpbGVDaGFuZ2UgYXMgUGFydGlhbDxDb250ZW50Q2hhbmdlPikuc3RhcnRJbmRleCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyQ2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlIHtcbiAgcmV0dXJuIChmaWxlQ2hhbmdlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJDaGFuZ2U+KS5mcm9udG1hdHRlcktleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpzb25TYWZlKGNvbnRlbnQ6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFXQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9CQUFvQjtBQUM3QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxlQUFlO0FBb0R4QixlQUFzQixpQkFDcEIsS0FDQSxZQUNBLGlCQUNBLGlCQUFpQyxDQUFDLEdBQ25CO0FBQ2YsUUFBTSxRQUFRLEtBQUssWUFBWSxPQUFPLFlBQVk7QUFDaEQsUUFBSSxVQUFVLE1BQU0sYUFBYSxlQUFlO0FBQ2hELFVBQU0sY0FBYyxhQUFhLEtBQUssVUFBVSxJQUFJLGNBQWMsT0FBTyxJQUFJLGlCQUFpQixPQUFPO0FBRXJHLGVBQVcsVUFBVSxTQUFTO0FBQzVCLFVBQUksZ0JBQWdCLE1BQU0sR0FBRztBQUMzQixjQUFNLGdCQUFnQixRQUFRLE1BQU0sT0FBTyxZQUFZLE9BQU8sUUFBUTtBQUN0RSxZQUFJLGtCQUFrQixPQUFPLFlBQVk7QUFDdkMsa0JBQVEsS0FBSyxvQkFBb0I7QUFBQSxZQUMvQjtBQUFBLFlBQ0EsVUFBVSxPQUFPO0FBQUEsWUFDakIsaUJBQWlCLE9B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
268
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEZpbGVDaGFuZ2VcbiAqIENvbnRhaW5zIHV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZmlsZSBjaGFuZ2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vQ2FudmFzLmQudHMnO1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGVcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vRnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIHBhcnNlTWV0YWRhdGFcbn0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7IHJlZmVyZW5jZVRvRmlsZUNoYW5nZSB9IGZyb20gJy4vUmVmZXJlbmNlLnRzJztcbmltcG9ydCB7IHByb2Nlc3MgfSBmcm9tICcuL1ZhdWx0LnRzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29udGVudCBib2R5IGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudENoYW5nZSBleHRlbmRzIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGVuZCBpbmRleCBvZiB0aGUgY2hhbmdlIGluIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBlbmRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIGNoYW5nZSBpbiB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgc3RhcnRJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgbmV3IGNvbnRlbnQgdG8gcmVwbGFjZSB0aGUgb2xkIGNvbnRlbnQuXG4gICAqL1xuICBuZXdDb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgY29udGVudCB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXG4gICAqL1xuICBvbGRDb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZyb250bWF0dGVyIGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRtYXR0ZXJDaGFuZ2UgZXh0ZW5kcyBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgaW4gdGhlIGZyb250bWF0dGVyIHRvIHVzZSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBmcm9udG1hdHRlcktleTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgZmlsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBwYXRoIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aGVyZSB0aGUgZmlsZSBjaGFuZ2VzIHdpbGwgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBjaGFuZ2VzUHJvdmlkZXIgLSBBIHByb3ZpZGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBmaWxlIGNoYW5nZXMgdG8gYXBwbHkuXG4gKiBAcGFyYW0gcHJvY2Vzc09wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciBwcm9jZXNzaW5nL3JldHJ5aW5nIHRoZSBvcGVyYXRpb24uXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5RmlsZUNoYW5nZXMoXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgcGF0aE9yRmlsZSwgYXN5bmMgKGNvbnRlbnQpID0+IHtcbiAgICBpZiAoaXNDYW52YXNGaWxlKGFwcCwgcGF0aE9yRmlsZSkpIHtcbiAgICAgIHJldHVybiBhcHBseUNhbnZhc0NoYW5nZXMoYXBwLCBjb250ZW50LCBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksIGNoYW5nZXNQcm92aWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoY29udGVudCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBjaGFuZ2VzUHJvdmlkZXIpO1xuICB9LCBwcm9jZXNzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjb250ZW50IGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRlbnRDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgQ29udGVudENoYW5nZSB7XG4gIHJldHVybiAoZmlsZUNoYW5nZSBhcyBQYXJ0aWFsPENvbnRlbnRDaGFuZ2U+KS5zdGFydEluZGV4ICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgRnJvbnRtYXR0ZXJDaGFuZ2Uge1xuICByZXR1cm4gKGZpbGVDaGFuZ2UgYXMgUGFydGlhbDxGcm9udG1hdHRlckNoYW5nZT4pLmZyb250bWF0dGVyS2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5Q2FudmFzQ2hhbmdlcyhhcHA6IEFwcCwgY29udGVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10+KTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyKTtcbiAgY29uc3QgY2FudmFzRGF0YSA9IHBhcnNlSnNvblNhZmUoY29udGVudCkgYXMgQ2FudmFzRGF0YTtcblxuICBjb25zdCBjYW52YXNUZXh0Q2hhbmdlcyA9IG5ldyBNYXA8bnVtYmVyLCBNYXA8bnVtYmVyLCBGcm9udG1hdHRlckNoYW5nZT4+KCk7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmICghaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ09ubHkgZnJvbnRtYXR0ZXIgY2hhbmdlcyBhcmUgc3VwcG9ydGVkIGZvciBjYW52YXMgZmlsZXMnLCB7XG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlQYXJ0cyA9IGNoYW5nZS5mcm9udG1hdHRlcktleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IE5PREVTX1BBUlRfSU5ERVggPSAwO1xuICAgIGNvbnN0IE5PREVfSU5ERVhfUEFSVF9JTkRFWCA9IDE7XG4gICAgY29uc3QgTk9ERV9UWVBFX1BBUlRfSU5ERVggPSAyO1xuICAgIGNvbnN0IExJTktfSU5ERVhfUEFSVF9JTkRFWCA9IDM7XG5cbiAgICBpZiAoa2V5UGFydHNbTk9ERVNfUEFSVF9JTkRFWF0gIT09ICdub2RlcycpIHtcbiAgICAgIGNvbnNvbGUud2FybignT25seSBub2RlcyBjaGFuZ2VzIGFyZSBzdXBwb3J0ZWQgZm9yIGNhbnZhcyBmaWxlcycsIHtcbiAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlSW5kZXggPSBwYXJzZUludChrZXlQYXJ0c1tOT0RFX0lOREVYX1BBUlRfSU5ERVhdID8/ICcnLCAxMCk7XG4gICAgaWYgKGlzTmFOKG5vZGVJbmRleCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBub2RlIGluZGV4Jywge1xuICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vZGUgbm90IGZvdW5kJywge1xuICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoa2V5UGFydHNbTk9ERV9UWVBFX1BBUlRfSU5ERVhdKSB7XG4gICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgaWYgKG5vZGUuZmlsZSAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50OiBub2RlLmZpbGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmZpbGUgPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICBpZiAobm9kZS50ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ01pc3NpbmcgdGV4dCBub2RlJywge1xuICAgICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlua0luZGV4ID0gcGFyc2VJbnQoa2V5UGFydHNbTElOS19JTkRFWF9QQVJUX0lOREVYXSA/PyAnJywgMTApO1xuICAgICAgICBpZiAoaXNOYU4obGlua0luZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBsaW5rIGluZGV4Jywge1xuICAgICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IGNhbnZhc1RleHRDaGFuZ2VzLmdldChsaW5rSW5kZXgpO1xuICAgICAgICBpZiAoIWNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSkge1xuICAgICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IG5ldyBNYXA8bnVtYmVyLCBGcm9udG1hdHRlckNoYW5nZT4oKTtcbiAgICAgICAgICBjYW52YXNUZXh0Q2hhbmdlcy5zZXQobGlua0luZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlLnNldChsaW5rSW5kZXgsIGNoYW5nZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCBub2RlIHR5cGUnLCB7XG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtub2RlSW5kZXgsIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZV0gb2YgY2FudmFzVGV4dENoYW5nZXMuZW50cmllcygpKSB7XG4gICAgY29uc3Qgbm9kZSA9IGNhbnZhc0RhdGEubm9kZXNbbm9kZUluZGV4XTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm9kZSBub3QgZm91bmQnLCB7XG4gICAgICAgIG5vZGVJbmRleCxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygbm9kZS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRleHQgaXMgbm90IGEgc3RyaW5nJywge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBub2RlLnRleHQpO1xuICAgIGNvbnN0IGxpbmtzID0gZ2V0QWxsTGlua3MoY2FjaGUpO1xuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VzOiBGaWxlQ2hhbmdlW10gPSBbXTtcblxuICAgIGZvciAobGV0IGxpbmtJbmRleCA9IDA7IGxpbmtJbmRleCA8IGxpbmtzLmxlbmd0aDsgbGlua0luZGV4KyspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBsaW5rc1tsaW5rSW5kZXhdO1xuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTWlzc2luZyBsaW5rJywge1xuICAgICAgICAgIGxpbmtJbmRleCxcbiAgICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgICAgbm9kZVRleHQ6IG5vZGUudGV4dCxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYW52YXNUZXh0Q2hhbmdlID0gY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlLmdldChsaW5rSW5kZXgpO1xuICAgICAgaWYgKGNhbnZhc1RleHRDaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgY29udGVudENoYW5nZSA9IHJlZmVyZW5jZVRvRmlsZUNoYW5nZShsaW5rLCBjYW52YXNUZXh0Q2hhbmdlLm5ld0NvbnRlbnQpO1xuICAgICAgICBjb250ZW50Q2hhbmdlLm9sZENvbnRlbnQgPSBjYW52YXNUZXh0Q2hhbmdlLm9sZENvbnRlbnQ7XG4gICAgICAgIGNvbnRlbnRDaGFuZ2VzLnB1c2goY29udGVudENoYW5nZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS50ZXh0ID0gYXdhaXQgYXBwbHlDb250ZW50Q2hhbmdlcyhub2RlLnRleHQsIGAke3BhdGh9LkZBS0VfVEVYVC5ub2RlJHtub2RlSW5kZXgudG9TdHJpbmcoKX0ubWRgLCBjb250ZW50Q2hhbmdlcyk7XG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2FudmFzRGF0YSwgbnVsbCwgJ1xcdCcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNvbnRlbnRDaGFuZ2VzKGNvbnRlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPik6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBsZXQgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIpO1xuICBjb25zdCBmcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXIoY29udGVudCk7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoY2hhbmdlLnN0YXJ0SW5kZXgsIGNoYW5nZS5lbmRJbmRleCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZW5kSW5kZXg6IGNoYW5nZS5lbmRJbmRleCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3RhcnRJbmRleDogY2hhbmdlLnN0YXJ0SW5kZXhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXkpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoYSkgJiYgaXNDb250ZW50Q2hhbmdlKGIpKSB7XG4gICAgICByZXR1cm4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4O1xuICAgIH1cblxuICAgIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGEpICYmIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoYikpIHtcbiAgICAgIHJldHVybiBhLmZyb250bWF0dGVyS2V5LmxvY2FsZUNvbXBhcmUoYi5mcm9udG1hdHRlcktleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ29udGVudENoYW5nZShhKSA/IC0xIDogMTtcbiAgfSk7XG5cbiAgLy8gQlVHOiBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYnVnLWR1cGxpY2F0ZWQtbGlua3MtaW4tbWV0YWRhdGFjYWNoZS1pbnNpZGUtZm9vdG5vdGVzLzg1NTUxXG4gIGNoYW5nZXMgPSBjaGFuZ2VzLmZpbHRlcigoY2hhbmdlLCBpbmRleCkgPT4ge1xuICAgIGlmIChjaGFuZ2Uub2xkQ29udGVudCA9PT0gY2hhbmdlLm5ld0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICFkZWVwRXF1YWwoY2hhbmdlLCBjaGFuZ2VzW2luZGV4IC0gMV0pO1xuICB9KTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgIGlmICghY2hhbmdlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNDaGFuZ2UgPSBjaGFuZ2VzW2kgLSAxXTtcbiAgICBpZiAoIXByZXZpb3VzQ2hhbmdlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc0NvbnRlbnRDaGFuZ2UocHJldmlvdXNDaGFuZ2UpICYmIGlzQ29udGVudENoYW5nZShjaGFuZ2UpICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ICYmIGNoYW5nZS5zdGFydEluZGV4XG4gICAgICAmJiBwcmV2aW91c0NoYW5nZS5lbmRJbmRleCA+IGNoYW5nZS5zdGFydEluZGV4XG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ092ZXJsYXBwaW5nIGNoYW5nZXMnLCB7XG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcHJldmlvdXNDaGFuZ2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5ld0NvbnRlbnQgPSAnJztcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG4gIGxldCBmcm9udG1hdHRlckNoYW5nZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICBuZXdDb250ZW50ICs9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgbGFzdEluZGV4ID0gY2hhbmdlLmVuZEluZGV4O1xuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksIGNoYW5nZS5uZXdDb250ZW50KTtcbiAgICAgIGZyb250bWF0dGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCk7XG4gIGlmIChmcm9udG1hdHRlckNoYW5nZWQpIHtcbiAgICBuZXdDb250ZW50ID0gc2V0RnJvbnRtYXR0ZXIobmV3Q29udGVudCwgZnJvbnRtYXR0ZXIpO1xuICB9XG5cbiAgcmV0dXJuIG5ld0NvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSnNvblNhZmUoY29udGVudDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gIH0gY2F0Y2gge1xuICAgIHBhcnNlZCA9IG51bGw7XG4gIH1cblxuICBpZiAocGFyc2VkID09PSBudWxsIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSB7XG4gICAgcGFyc2VkID0ge307XG4gIH1cblxuICByZXR1cm4gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQVlBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsb0JBQW9CO0FBQzdCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsZUFBZTtBQW9EeEIsZUFBc0IsaUJBQ3BCLEtBQ0EsWUFDQSxpQkFDQSxpQkFBaUMsQ0FBQyxHQUNuQjtBQUNmLFFBQU0sUUFBUSxLQUFLLFlBQVksT0FBTyxZQUFZO0FBQ2hELFFBQUksYUFBYSxLQUFLLFVBQVUsR0FBRztBQUNqQyxhQUFPLG1CQUFtQixLQUFLLFNBQVMsUUFBUSxLQUFLLFVBQVUsR0FBRyxlQUFlO0FBQUEsSUFDbkY7QUFFQSxXQUFPLE1BQU0sb0JBQW9CLFNBQVMsUUFBUSxLQUFLLFVBQVUsR0FBRyxlQUFlO0FBQUEsRUFDckYsR0FBRyxjQUFjO0FBQ25CO0FBUU8sU0FBUyxnQkFBZ0IsWUFBcUQ7QUFDbkYsU0FBUSxXQUFzQyxlQUFlO0FBQy9EO0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "19.7.0",
3
+ "version": "19.7.1-beta.1",
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"
@@ -406,20 +406,20 @@
406
406
  "@eslint/js": "^9.21.0",
407
407
  "@guardian/eslint-plugin-tsdoc-required": "^0.1.3",
408
408
  "@lezer/common": "^1.2.3",
409
- "@stylistic/eslint-plugin": "^4.0.1",
409
+ "@stylistic/eslint-plugin": "^4.1.0",
410
410
  "@total-typescript/ts-reset": "^0.6.1",
411
411
  "@tsconfig/strictest": "^2.0.5",
412
412
  "@types/babel__core": "^7.20.5",
413
413
  "@types/doctrine": "^0.0.9",
414
414
  "@types/eslint": "^9.6.1",
415
415
  "@types/luxon": "^3.4.2",
416
- "@types/node": "^22.13.5",
416
+ "@types/node": "^22.13.8",
417
417
  "@types/parsimmon": "^1.10.9",
418
418
  "@types/path-browserify": "^1.0.3",
419
419
  "@types/pug": "^2.0.10",
420
420
  "@types/shell-quote": "^1.7.5",
421
- "@typescript-eslint/eslint-plugin": "^8.24.1",
422
- "@typescript-eslint/parser": "^8.24.1",
421
+ "@typescript-eslint/eslint-plugin": "^8.25.0",
422
+ "@typescript-eslint/parser": "^8.25.0",
423
423
  "better-typescript-lib": "^2.10.1",
424
424
  "commander": "^13.1.0",
425
425
  "compare-versions": "^6.1.1",
@@ -446,22 +446,22 @@
446
446
  "monkey-around": "^3.0.0",
447
447
  "npm-run-all": "^4.1.5",
448
448
  "obsidian": "^1.8.7",
449
- "obsidian-typings": "^2.27.0",
449
+ "obsidian-typings": "^2.35.0",
450
450
  "path-browserify": "^1.0.1",
451
451
  "postcss": "^8.5.3",
452
452
  "postcss-modules": "^6.0.1",
453
- "preact": "^10.26.2",
453
+ "preact": "^10.26.4",
454
454
  "remark": "^15.0.1",
455
455
  "remark-parse": "^11.0.0",
456
456
  "remark-wiki-link": "^2.0.1",
457
- "sass": "^1.85.0",
457
+ "sass": "^1.85.1",
458
458
  "shell-quote": "^1.8.2",
459
459
  "svelte-check": "^4.1.4",
460
460
  "svelte-preprocess": "^6.0.3",
461
461
  "tsx": "^4.19.3",
462
- "type-fest": "^4.35.0",
462
+ "type-fest": "^4.36.0",
463
463
  "typescript": "^5.7.3",
464
- "typescript-eslint": "^8.24.1"
464
+ "typescript-eslint": "^8.25.0"
465
465
  },
466
466
  "overrides": {
467
467
  "esbuild": "$esbuild"