@mnaoumov/obsidian-lib 8.0.0 → 9.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.
Files changed (39) hide show
  1. package/dist/lib/cjs/__merged.cjs +22 -13
  2. package/dist/lib/cjs/__merged.d.cts +4 -3
  3. package/dist/lib/cjs/canvas.cjs +2 -2
  4. package/dist/lib/cjs/components/incremental-file-index-component.cjs +69 -5
  5. package/dist/lib/cjs/components/incremental-file-index-component.d.cts +16 -1
  6. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +14 -14
  7. package/dist/lib/cjs/data-stores/local-data-store.cjs +16 -13
  8. package/dist/lib/cjs/data-stores/local-data-store.d.cts +9 -1
  9. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  10. package/dist/lib/cjs/index.cjs +4 -1
  11. package/dist/lib/cjs/index.d.cts +1 -0
  12. package/dist/lib/cjs/link.cjs +99 -75
  13. package/dist/lib/cjs/link.d.cts +112 -65
  14. package/dist/lib/cjs/metadata-cache.cjs +7 -7
  15. package/dist/lib/cjs/metadata-cache.d.cts +14 -13
  16. package/dist/lib/cjs/position.cjs +113 -0
  17. package/dist/lib/cjs/position.d.cts +55 -0
  18. package/dist/lib/cjs/reference.cjs +14 -2
  19. package/dist/lib/cjs/reference.d.cts +21 -1
  20. package/dist/lib/esm/__merged.d.mts +4 -3
  21. package/dist/lib/esm/__merged.mjs +23 -13
  22. package/dist/lib/esm/canvas.mjs +3 -3
  23. package/dist/lib/esm/components/incremental-file-index-component.d.mts +16 -1
  24. package/dist/lib/esm/components/incremental-file-index-component.mjs +69 -5
  25. package/dist/lib/esm/components/rename-delete-handler-component.mjs +17 -17
  26. package/dist/lib/esm/data-stores/local-data-store.d.mts +9 -1
  27. package/dist/lib/esm/data-stores/local-data-store.mjs +16 -13
  28. package/dist/lib/esm/generated-during-build.mjs +1 -1
  29. package/dist/lib/esm/index.d.mts +1 -0
  30. package/dist/lib/esm/index.mjs +3 -1
  31. package/dist/lib/esm/link.d.mts +112 -65
  32. package/dist/lib/esm/link.mjs +96 -71
  33. package/dist/lib/esm/metadata-cache.d.mts +14 -13
  34. package/dist/lib/esm/metadata-cache.mjs +6 -6
  35. package/dist/lib/esm/position.d.mts +55 -0
  36. package/dist/lib/esm/position.mjs +23 -0
  37. package/dist/lib/esm/reference.d.mts +21 -1
  38. package/dist/lib/esm/reference.mjs +16 -2
  39. package/package.json +2 -2
@@ -150,7 +150,17 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
150
150
  */
151
151
  constructor(params) {
152
152
  super();
153
- this.options = { accepts: params.accepts, app: params.app, indexFile: params.indexFile, load: params.load, onRemove: params.onRemove, onSet: params.onSet, save: params.save };
153
+ this.options = {
154
+ accepts: params.accepts,
155
+ app: params.app,
156
+ indexFile: params.indexFile,
157
+ load: params.load,
158
+ onRemove: params.onRemove,
159
+ onSet: params.onSet,
160
+ save: params.save,
161
+ shouldAwaitMetadataChange: params.shouldAwaitMetadataChange ?? (() => false),
162
+ shouldMoveRecordsOnRename: params.shouldMoveRecordsOnRename ?? false
163
+ };
154
164
  this.requestSave = (0, import_obsidian.debounce)(
155
165
  () => {
156
166
  (0, import_async.invokeAsyncSafely)(() => this.flush());
@@ -192,8 +202,8 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
192
202
  this.registerEvent(app.metadataCache.on("changed", (file, content) => {
193
203
  this.setText(file, content);
194
204
  }));
195
- this.registerEvent(app.vault.on("create", this.queueScan.bind(this)));
196
- this.registerEvent(app.vault.on("modify", this.queueScan.bind(this)));
205
+ this.registerEvent(app.vault.on("create", this.handleContentEvent.bind(this)));
206
+ this.registerEvent(app.vault.on("modify", this.handleContentEvent.bind(this)));
197
207
  this.registerEvent(app.vault.on("delete", (file) => {
198
208
  if (file instanceof import_obsidian.TFile) {
199
209
  this.removeRecord(file.path);
@@ -254,12 +264,39 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
254
264
  await this.scanFile(file);
255
265
  }
256
266
  }
267
+ handleContentEvent(file) {
268
+ if (!(file instanceof import_obsidian.TFile)) {
269
+ return;
270
+ }
271
+ if (!this.options.shouldAwaitMetadataChange(file)) {
272
+ this.queueScan(file);
273
+ return;
274
+ }
275
+ if (!this.options.accepts(file)) {
276
+ return;
277
+ }
278
+ this.removeRecord(file.path);
279
+ this.revisions.set(file, {});
280
+ }
257
281
  markDirty() {
258
282
  this.revision++;
259
283
  if (this.isBuiltValue && !this.isUnloaded()) {
260
284
  this.requestSave();
261
285
  }
262
286
  }
287
+ moveRecord(file, oldPath) {
288
+ const entry = this.records.get(oldPath);
289
+ if (entry) {
290
+ this.removeRecord(oldPath);
291
+ if (this.options.accepts(file)) {
292
+ this.setRecord(file.path, entry);
293
+ }
294
+ return;
295
+ }
296
+ if (!this.records.has(file.path)) {
297
+ this.queueScan(file);
298
+ }
299
+ }
263
300
  queueScan(file) {
264
301
  if (file instanceof import_obsidian.TFile) {
265
302
  (0, import_async.invokeAsyncSafely)(() => this.scanFile(file));
@@ -281,6 +318,10 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
281
318
  }
282
319
  }
283
320
  rename(file, oldPath) {
321
+ if (this.options.shouldMoveRecordsOnRename) {
322
+ this.renameMovingRecords(file, oldPath);
323
+ return;
324
+ }
284
325
  if (file instanceof import_obsidian.TFile) {
285
326
  this.removeRecord(oldPath);
286
327
  } else {
@@ -291,6 +332,21 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
291
332
  import_obsidian.Vault.recurseChildren(file, this.queueScan.bind(this));
292
333
  }
293
334
  }
335
+ renameMovingRecords(file, oldPath) {
336
+ if (file instanceof import_obsidian.TFile) {
337
+ this.moveRecord(file, oldPath);
338
+ return;
339
+ }
340
+ if (!(file instanceof import_obsidian.TFolder)) {
341
+ return;
342
+ }
343
+ import_obsidian.Vault.recurseChildren(file, (child) => {
344
+ if (child instanceof import_obsidian.TFile) {
345
+ this.moveRecord(child, `${oldPath}${child.path.slice(file.path.length)}`);
346
+ }
347
+ });
348
+ this.removeTree(oldPath);
349
+ }
294
350
  async saveChanges() {
295
351
  while (this.isBuiltValue && this.savedRevision !== this.revision) {
296
352
  const revision = this.revision;
@@ -312,7 +368,15 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
312
368
  if (!isCurrent()) {
313
369
  return;
314
370
  }
315
- const content = await this.options.app.vault.cachedRead(file);
371
+ let content;
372
+ try {
373
+ content = await this.options.app.vault.cachedRead(file);
374
+ } catch (error) {
375
+ if (isCurrent()) {
376
+ throw error;
377
+ }
378
+ return;
379
+ }
316
380
  if (!isCurrent()) {
317
381
  return;
318
382
  }
@@ -337,4 +401,4 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
337
401
  0 && (module.exports = {
338
402
  IncrementalFileIndexComponent
339
403
  });
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbmNyZW1lbnRhbCBwZXItZmlsZSBwcm9qZWN0aW9ucyB3aXRoIHN0YXQtYmFzZWQgcmVzdG9yYXRpb24gYW5kIGluamVjdGVkIHBlcnNpc3RlbmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBEZWJvdW5jZXIsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgU0FWRV9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKipcbiAqIERlcGVuZGVuY2llcyBvZiBhbiBpbmNyZW1lbnRhbCBpbmRleC4gUGVyc2lzdGVuY2UgbXVzdCB2YWxpZGF0ZSBpdHMgb3duIHNjaGVtYS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgaW1tdXRhYmxlIHBlci1maWxlIHByb2plY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhY2NlcHRlZCBieSB0aGlzIGluZGV4LCBmb3IgZXhhbXBsZSBNYXJrZG93biBmaWxlcyBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0czogKGZpbGU6IFRGaWxlKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG93bmluZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBpbW11dGFibGUgcmVjb3JkIHN5bmNocm9ub3VzbHk7IHRleHQgaXMgbmV2ZXIgcmV0YWluZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBpbmRleEZpbGU6IChwYXJhbXM6IEluZGV4RmlsZVBhcmFtcykgPT4gVDtcbiAgLyoqXG4gICAqIFJlYWRzIHZhbGlkYXRlZCByZWNvcmRzLCBvciBhbiBlbXB0eSBtYXAgZm9yIGEgbWlzc2luZy9pbmNvbXBhdGlibGUgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBsb2FkOiAoKSA9PiBQcm9taXNlPFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+PjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZWNvcmQgZnJvbSBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LiBDYWxsZWQgZm9yIGtub3duIHJlY29yZHMgb25seS5cbiAgICovXG4gIHJlYWRvbmx5IG9uUmVtb3ZlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LCBpbmNsdWRpbmcgcmVzdG9yZWQgcmVjb3Jkcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2V0OiAocGF0aDogc3RyaW5nLCByZWNvcmQ6IFQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIHNuYXBzaG90OyB3cml0ZXMgYXJlIHNlcmlhbGl6ZWQgYW5kIHJldHJpZWQgYnkgdGhlIG5leHQgZmx1c2ggYWZ0ZXIgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhdmU6IChyZWNvcmRzOiBSZWFkb25seU1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PikgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIHByb2plY3Rpb24gYW5kIHRoZSBmaWxlIHN0YXRzIG9ic2VydmVkIGJlZm9yZSByZWFkaW5nIGl0cyB0ZXh0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBpbW11dGFibGUgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleGVkRmlsZVJlY29yZDxUPiB7XG4gIC8qKlxuICAgKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBtdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGNvbnN1bWVyJ3MgaW1tdXRhYmxlIHByb2plY3Rpb24uXG4gICAqL1xuICByZWFkb25seSByZWNvcmQ6IFQ7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgaW4gYnl0ZXMuXG4gICAqL1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogSW5wdXRzIHRvIGEgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleEZpbGVQYXJhbXMge1xuICAvKipcbiAgICogVGV4dCByZWFkIGZyb20gdGhlIHZhdWx0LCBvciBzdXBwbGllZCBieSBhIG1ldGFkYXRhLWNhY2hlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZpbGUgYmVpbmcgaW5kZXhlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGU6IFRGaWxlO1xufVxuXG4vKipcbiAqIEtlZXBzIHBlci1maWxlIHByb2plY3Rpb25zIGN1cnJlbnQgd2hpbGUgbG9hZGVkLiBDYWxsIGxvYWRXaXRoUHJvbWlzZXMgYWZ0ZXIgbWV0YWRhdGEgcmVhZGluZXNzIGlmIHRoZVxuICogcHJvamVjdGlvbiBuZWVkcyBjYWNoZWQgbWV0YWRhdGEuIExpc3RlbmVycyBhcmUgaW5zdGFsbGVkIGJlZm9yZSByZXN0b3JhdGlvbiwgYW5kIGV2ZW50cyB3aW4gb3ZlciBvbGRlciByZWFkcy5cbiAqIFJlYWRzIGFyZSBzZXF1ZW50aWFsLCBib3VuZGluZyBtZW1vcnkgYW5kIEkvTzsgY29uc3VtZXJzIG93biBzY2hlbWEsIHN0b3JhZ2UgbG9jYXRpb24gYW5kIHNlY29uZGFyeSBpbmRleGVzLlxuICogVW5jaGFuZ2VkIHJlY29yZHMgYXJlIHJldXNlZCBieSBtdGltZSBhbmQgc2l6ZSwgd2hpY2ggY2Fubm90IGRldGVjdCBhIHNhbWUtc3RhdCBleHRlcm5hbCByZXdyaXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBpbW11dGFibGUgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEluY3JlbWVudGFsRmlsZUluZGV4Q29tcG9uZW50PFQ+IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogV2hldGhlciBzdGFydHVwIHJlY29uY2lsaWF0aW9uIGhhcyBjb21wbGV0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGluZGV4IGNvbXBsZXRlZCBpdHMgZmlyc3QgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQnVpbHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCdWlsdFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2plY3Rpb24sIG5vdGlmaWNhdGlvbnMgYW5kIHBlcnNpc3RlbmNlIHN1cHBsaWVkIGJ5IHRoZSBjb25zdW1lci5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+O1xuXG4gIHByaXZhdGUgaXNCdWlsdFZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZFRhaWw6IFByb21pc2U8dm9pZD4gPSBub29wQXN5bmMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWNvcmRzID0gbmV3IE1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RTYXZlOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuICBwcml2YXRlIHJldmlzaW9uID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXZpc2lvbnMgPSBuZXcgV2Vha01hcDxURmlsZSwgb2JqZWN0PigpO1xuICBwcml2YXRlIHNhdmVkUmV2aXNpb24gPSAwO1xuICBwcml2YXRlIHNhdmVQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCBjb25zdW1lci1vd25lZCBwcm9qZWN0aW9uIGFuZCBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbmRleCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7IGFjY2VwdHM6IHBhcmFtcy5hY2NlcHRzLCBhcHA6IHBhcmFtcy5hcHAsIGluZGV4RmlsZTogcGFyYW1zLmluZGV4RmlsZSwgbG9hZDogcGFyYW1zLmxvYWQsIG9uUmVtb3ZlOiBwYXJhbXMub25SZW1vdmUsIG9uU2V0OiBwYXJhbXMub25TZXQsIHNhdmU6IHBhcmFtcy5zYXZlIH07XG4gICAgdGhpcy5yZXF1ZXN0U2F2ZSA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgICAgfSxcbiAgICAgIFNBVkVfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgc25hcHNob3QgYWZ0ZXIgcHJldmlvdXMgd3JpdGVzIGZpbmlzaCwgaW5jbHVkaW5nIGNoYW5nZXMgYXJyaXZpbmcgZHVyaW5nIGEgd3JpdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIENvbXBsZXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgd3JpdGVzOyByZWplY3RzIG9uIHBlcnNpc3RlbmNlIGZhaWx1cmUgd2l0aG91dCBtYXJraW5nIGl0IHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnNhdmVQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNhdmVQcm9taXNlID0gdGhpcy5zYXZlQ2hhbmdlcygpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNoYWxsb3cgc25hcHNob3Q7IGNvbnN1bWVycyBtdXN0IHRyZWF0IHJlY29yZHMgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50IHJlY29yZHMgYnkgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBnZXRSZWNvcmRzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLnJlY29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjaGFuZ2VzIGJlZm9yZSBzdGFydHVwIHJlc3RvcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAubWV0YWRhdGFDYWNoZS5vbignY2hhbmdlZCcsIChmaWxlLCBjb250ZW50KSA9PiB7XG4gICAgICB0aGlzLnNldFRleHQoZmlsZSwgY29udGVudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KGFwcC52YXVsdC5vbignY3JlYXRlJywgdGhpcy5xdWV1ZVNjYW4uYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ21vZGlmeScsIHRoaXMucXVldWVTY2FuLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoYXBwLnZhdWx0Lm9uKCdkZWxldGUnLCAoZmlsZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUcmVlKGZpbGUucGF0aCk7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ3JlbmFtZScsIChmaWxlLCBvbGRQYXRoKSA9PiB7XG4gICAgICB0aGlzLnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2VzIHVuY2hhbmdlZCBzYXZlZCByZWNvcmRzIGFuZCByZWFkcyBvdGhlciBmaWxlcyBvbmUgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLm9wdGlvbnMubG9hZCgpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVzKCkpIHtcbiAgICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpIHx8IHRoaXMucmV2aXNpb25zLmhhcyhmaWxlKSB8fCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgoZmlsZS5wYXRoKSAhPT0gZmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5ID0gc2F2ZWQuZ2V0KGZpbGUucGF0aCk7XG4gICAgICBpZiAoZW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWUgJiYgZW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCBlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNjYW5GaWxlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlYWRUYWlsO1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNCdWlsdFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGRlYm91bmNlIGFuZCBmbHVzaGVzIGNvbXBsZXRlZCBpbmRleGVzIGJlZm9yZSBkaXNwb3NpbmcgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdFNhdmUuY2FuY2VsKCk7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgIH1cbiAgICBzdXBlci5vbnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGRzIHByb2plY3Rpb25zIGZvciBldmVyeSBhY2NlcHRlZCBmaWxlLCBmb3IgZXhhbXBsZSBhZnRlciBhIGNvbnN1bWVyIGxlYXJucyBuZXcgbmFtZXMgdG8gZmluZCBpbiB0ZXh0LlxuICAgKiBFdmVudHMgYXJyaXZpbmcgZHVyaW5nIHRoZSBzY2FuIHN1cGVyc2VkZSBpdHMgb2xkZXIgcmVhZHMuIENvbnN1bWVycyBjb29yZGluYXRlIGFueSBkb21haW4gc2NhbiBtYXJrZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHRoZSBib3VuZGVkIGZ1bGwgc2Nhbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNjYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMub3B0aW9ucy5hcHAudmF1bHQuZ2V0RmlsZXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zY2FuRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcmtEaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnJldmlzaW9uKys7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlICYmICF0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0U2F2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcXVldWVTY2FuKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLnNjYW5GaWxlKGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVjb3Jkcy5kZWxldGUocGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMub25SZW1vdmUocGF0aCk7XG4gICAgdGhpcy5tYXJrRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVHJlZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLnJlY29yZHMua2V5cygpKSB7XG4gICAgICBpZiAoIShrZXkgPT09IHBhdGggfHwga2V5LnN0YXJ0c1dpdGgoYCR7cGF0aH0vYCkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlUmVjb3JkKG9sZFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZVRyZWUob2xkUGF0aCk7XG4gICAgfVxuICAgIHRoaXMucXVldWVTY2FuKGZpbGUpO1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKGZpbGUsIHRoaXMucXVldWVTY2FuLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZUNoYW5nZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRoaXMuaXNCdWlsdFZhbHVlICYmIHRoaXMuc2F2ZWRSZXZpc2lvbiAhPT0gdGhpcy5yZXZpc2lvbikge1xuICAgICAgY29uc3QgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLnNhdmUobmV3IE1hcCh0aGlzLnJlY29yZHMpKTtcbiAgICAgIHRoaXMuc2F2ZWRSZXZpc2lvbiA9IHJldmlzaW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2NhbkZpbGUoZmlsZTogVEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkgfHwgIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlUmVjb3JkKGZpbGUucGF0aCk7XG4gICAgY29uc3QgdG9rZW4gPSB7fTtcbiAgICB0aGlzLnJldmlzaW9ucy5zZXQoZmlsZSwgdG9rZW4pO1xuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcbiAgICBjb25zdCB7IG10aW1lLCBzaXplIH0gPSBmaWxlLnN0YXQ7XG4gICAgY29uc3QgaXNDdXJyZW50ID0gKCk6IGJvb2xlYW4gPT5cbiAgICAgICF0aGlzLmlzVW5sb2FkZWQoKSAmJiB0aGlzLnJldmlzaW9ucy5nZXQoZmlsZSkgPT09IHRva2VuICYmIGZpbGUucGF0aCA9PT0gcGF0aFxuICAgICAgJiYgZmlsZS5zdGF0Lm10aW1lID09PSBtdGltZSAmJiBmaWxlLnN0YXQuc2l6ZSA9PT0gc2l6ZSAmJiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCkgPT09IGZpbGU7XG4gICAgY29uc3QgcmVhZCA9IHRoaXMucmVhZFRhaWwudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWlzQ3VycmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XG4gICAgICBpZiAoIWlzQ3VycmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VGV4dChmaWxlLCBjb250ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlYWRUYWlsID0gcmVhZC5jYXRjaChub29wKTtcbiAgICBhd2FpdCByZWFkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZWNvcmQocGF0aDogc3RyaW5nLCBlbnRyeTogSW5kZXhlZEZpbGVSZWNvcmQ8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZHMuc2V0KHBhdGgsIGVudHJ5KTtcbiAgICB0aGlzLm9wdGlvbnMub25TZXQocGF0aCwgZW50cnkucmVjb3JkKTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUZXh0KGZpbGU6IFRGaWxlLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJldmlzaW9ucy5zZXQoZmlsZSwge30pO1xuICAgIGlmICghdGhpcy5pc1VubG9hZGVkKCkgJiYgdGhpcy5vcHRpb25zLmFjY2VwdHMoZmlsZSkpIHtcbiAgICAgIHRoaXMuc2V0UmVjb3JkKGZpbGUucGF0aCwgeyBtdGltZTogZmlsZS5zdGF0Lm10aW1lLCByZWNvcmQ6IHRoaXMub3B0aW9ucy5pbmRleEZpbGUoeyBjb250ZW50LCBmaWxlIH0pLCBzaXplOiBmaWxlLnN0YXQuc2l6ZSB9KTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLG1CQUFrQztBQUNsQyxzQkFHTztBQUNQLHNCQUtPO0FBRVAsMEJBQTRCO0FBRTVCLE1BQU0sZ0NBQWdDO0FBZ0YvQixNQUFNLHNDQUF5QyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1oRSxJQUFXLFVBQW1CO0FBQzVCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUttQjtBQUFBLEVBRVgsZUFBZTtBQUFBLEVBQ2YsZUFBMEIsMkJBQVU7QUFBQSxFQUMzQixVQUFVLG9CQUFJLElBQWtDO0FBQUEsRUFDaEQ7QUFBQSxFQUNULFdBQVc7QUFBQSxFQUNGLFlBQVksb0JBQUksUUFBdUI7QUFBQSxFQUNoRCxnQkFBZ0I7QUFBQSxFQUNoQixjQUFvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbmNyZW1lbnRhbCBwZXItZmlsZSBwcm9qZWN0aW9ucyB3aXRoIHN0YXQtYmFzZWQgcmVzdG9yYXRpb24gYW5kIGluamVjdGVkIHBlcnNpc3RlbmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBEZWJvdW5jZXIsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgU0FWRV9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKipcbiAqIERlcGVuZGVuY2llcyBvZiBhbiBpbmNyZW1lbnRhbCBpbmRleC4gUGVyc2lzdGVuY2UgbXVzdCB2YWxpZGF0ZSBpdHMgb3duIHNjaGVtYS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgaW1tdXRhYmxlIHBlci1maWxlIHByb2plY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhY2NlcHRlZCBieSB0aGlzIGluZGV4LCBmb3IgZXhhbXBsZSBNYXJrZG93biBmaWxlcyBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0czogKGZpbGU6IFRGaWxlKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG93bmluZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBpbW11dGFibGUgcmVjb3JkIHN5bmNocm9ub3VzbHk7IHRleHQgaXMgbmV2ZXIgcmV0YWluZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBpbmRleEZpbGU6IChwYXJhbXM6IEluZGV4RmlsZVBhcmFtcykgPT4gVDtcbiAgLyoqXG4gICAqIFJlYWRzIHZhbGlkYXRlZCByZWNvcmRzLCBvciBhbiBlbXB0eSBtYXAgZm9yIGEgbWlzc2luZy9pbmNvbXBhdGlibGUgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBsb2FkOiAoKSA9PiBQcm9taXNlPFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+PjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZWNvcmQgZnJvbSBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LiBDYWxsZWQgZm9yIGtub3duIHJlY29yZHMgb25seS5cbiAgICovXG4gIHJlYWRvbmx5IG9uUmVtb3ZlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LCBpbmNsdWRpbmcgcmVzdG9yZWQgcmVjb3Jkcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2V0OiAocGF0aDogc3RyaW5nLCByZWNvcmQ6IFQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIHNuYXBzaG90OyB3cml0ZXMgYXJlIHNlcmlhbGl6ZWQgYW5kIHJldHJpZWQgYnkgdGhlIG5leHQgZmx1c2ggYWZ0ZXIgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhdmU6IChyZWNvcmRzOiBSZWFkb25seU1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjcmVhdGUgb3IgbW9kaWZ5IG9mIHRoZSBmaWxlIGlzIGZvbGxvd2VkIGJ5IGEgbWV0YWRhdGEtY2FjaGUgYGNoYW5nZWRgIGV2ZW50IGNhcnJ5aW5nIGl0cyB0ZXh0LCBhcyBmb3JcbiAgICogTWFya2Rvd24gbm90ZXMuIFN1Y2ggYSBmaWxlIGRyb3BzIGl0cyBzdGFsZSBwcm9qZWN0aW9uIGFuZCBpcyBub3QgcmVhZDsgaXRzIHJlY29yZCByZXR1cm5zIHdpdGggdGhhdCBldmVudCwgb3JcbiAgICogd2l0aCB0aGUgbmV4dCBzdGFydHVwIG9yIHtAbGluayBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudC5yZXNjYW59IHdoZW4gT2JzaWRpYW4gcmFpc2VzIG5vbmUgKGEgbW9kaWZ5IHRoYXQgbGVmdFxuICAgKiB0aGUgY29udGVudCB1bmNoYW5nZWQpLiBDb25zdW1lcnMgbXVzdCB0cmVhdCBhIGZpbGUgd2l0aG91dCBhIHJlY29yZCBhcyB1bmtub3duLiBEZWZhdWx0cyB0byBuZXZlci5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEF3YWl0TWV0YWRhdGFDaGFuZ2U/OiAoZmlsZTogVEZpbGUpID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgcHJvamVjdGlvbiBkZXBlbmRzIG9uIHRleHQgYWxvbmUsIHNvIGEgcmVuYW1lIG1vdmVzIGl0IHdpdGggaXRzIHN0YXRzIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgZmlsZSBhZ2Fpbi5cbiAgICogQSBmaWxlIHJlbmFtZWQgdG8gYSBwYXRoIHtAbGluayBhY2NlcHRzfSByZWplY3RzIGxvc2VzIGl0cyByZWNvcmQgZWl0aGVyIHdheS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZE1vdmVSZWNvcmRzT25SZW5hbWU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgcHJvamVjdGlvbiBhbmQgdGhlIGZpbGUgc3RhdHMgb2JzZXJ2ZWQgYmVmb3JlIHJlYWRpbmcgaXRzIHRleHQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIGltbXV0YWJsZSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4ZWRGaWxlUmVjb3JkPFQ+IHtcbiAgLyoqXG4gICAqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IG10aW1lOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY29uc3VtZXIncyBpbW11dGFibGUgcHJvamVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZDogVDtcbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbnB1dHMgdG8gYSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4RmlsZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUZXh0IHJlYWQgZnJvbSB0aGUgdmF1bHQsIG9yIHN1cHBsaWVkIGJ5IGEgbWV0YWRhdGEtY2FjaGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBiZWluZyBpbmRleGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogVEZpbGU7XG59XG5cbi8qKlxuICogS2VlcHMgcGVyLWZpbGUgcHJvamVjdGlvbnMgY3VycmVudCB3aGlsZSBsb2FkZWQuIENhbGwgbG9hZFdpdGhQcm9taXNlcyBhZnRlciBtZXRhZGF0YSByZWFkaW5lc3MgaWYgdGhlXG4gKiBwcm9qZWN0aW9uIG5lZWRzIGNhY2hlZCBtZXRhZGF0YS4gTGlzdGVuZXJzIGFyZSBpbnN0YWxsZWQgYmVmb3JlIHJlc3RvcmF0aW9uLCBhbmQgZXZlbnRzIHdpbiBvdmVyIG9sZGVyIHJlYWRzLlxuICogUmVhZHMgYXJlIHNlcXVlbnRpYWwsIGJvdW5kaW5nIG1lbW9yeSBhbmQgSS9POyBjb25zdW1lcnMgb3duIHNjaGVtYSwgc3RvcmFnZSBsb2NhdGlvbiBhbmQgc2Vjb25kYXJ5IGluZGV4ZXMuXG4gKiBVbmNoYW5nZWQgcmVjb3JkcyBhcmUgcmV1c2VkIGJ5IG10aW1lIGFuZCBzaXplLCB3aGljaCBjYW5ub3QgZGV0ZWN0IGEgc2FtZS1zdGF0IGV4dGVybmFsIHJld3JpdGUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIGltbXV0YWJsZSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnQ8VD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24gaGFzIGNvbXBsZXRlZC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgaW5kZXggY29tcGxldGVkIGl0cyBmaXJzdCByZWNvbmNpbGlhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNCdWlsdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0J1aWx0VmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvamVjdGlvbiwgbm90aWZpY2F0aW9ucyBhbmQgcGVyc2lzdGVuY2Ugc3VwcGxpZWQgYnkgdGhlIGNvbnN1bWVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPEluY3JlbWVudGFsRmlsZUluZGV4Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXM8VD4+O1xuXG4gIHByaXZhdGUgaXNCdWlsdFZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZFRhaWw6IFByb21pc2U8dm9pZD4gPSBub29wQXN5bmMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWNvcmRzID0gbmV3IE1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RTYXZlOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuICBwcml2YXRlIHJldmlzaW9uID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXZpc2lvbnMgPSBuZXcgV2Vha01hcDxURmlsZSwgb2JqZWN0PigpO1xuICBwcml2YXRlIHNhdmVkUmV2aXNpb24gPSAwO1xuICBwcml2YXRlIHNhdmVQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCBjb25zdW1lci1vd25lZCBwcm9qZWN0aW9uIGFuZCBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbmRleCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBhY2NlcHRzOiBwYXJhbXMuYWNjZXB0cyxcbiAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgIGluZGV4RmlsZTogcGFyYW1zLmluZGV4RmlsZSxcbiAgICAgIGxvYWQ6IHBhcmFtcy5sb2FkLFxuICAgICAgb25SZW1vdmU6IHBhcmFtcy5vblJlbW92ZSxcbiAgICAgIG9uU2V0OiBwYXJhbXMub25TZXQsXG4gICAgICBzYXZlOiBwYXJhbXMuc2F2ZSxcbiAgICAgIHNob3VsZEF3YWl0TWV0YWRhdGFDaGFuZ2U6IHBhcmFtcy5zaG91bGRBd2FpdE1ldGFkYXRhQ2hhbmdlID8/ICgoKTogYm9vbGVhbiA9PiBmYWxzZSksXG4gICAgICBzaG91bGRNb3ZlUmVjb3Jkc09uUmVuYW1lOiBwYXJhbXMuc2hvdWxkTW92ZVJlY29yZHNPblJlbmFtZSA/PyBmYWxzZVxuICAgIH07XG4gICAgdGhpcy5yZXF1ZXN0U2F2ZSA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgICAgfSxcbiAgICAgIFNBVkVfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgc25hcHNob3QgYWZ0ZXIgcHJldmlvdXMgd3JpdGVzIGZpbmlzaCwgaW5jbHVkaW5nIGNoYW5nZXMgYXJyaXZpbmcgZHVyaW5nIGEgd3JpdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIENvbXBsZXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgd3JpdGVzOyByZWplY3RzIG9uIHBlcnNpc3RlbmNlIGZhaWx1cmUgd2l0aG91dCBtYXJraW5nIGl0IHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnNhdmVQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNhdmVQcm9taXNlID0gdGhpcy5zYXZlQ2hhbmdlcygpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNoYWxsb3cgc25hcHNob3Q7IGNvbnN1bWVycyBtdXN0IHRyZWF0IHJlY29yZHMgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50IHJlY29yZHMgYnkgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBnZXRSZWNvcmRzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLnJlY29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjaGFuZ2VzIGJlZm9yZSBzdGFydHVwIHJlc3RvcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAubWV0YWRhdGFDYWNoZS5vbignY2hhbmdlZCcsIChmaWxlLCBjb250ZW50KSA9PiB7XG4gICAgICB0aGlzLnNldFRleHQoZmlsZSwgY29udGVudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KGFwcC52YXVsdC5vbignY3JlYXRlJywgdGhpcy5oYW5kbGVDb250ZW50RXZlbnQuYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ21vZGlmeScsIHRoaXMuaGFuZGxlQ29udGVudEV2ZW50LmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoYXBwLnZhdWx0Lm9uKCdkZWxldGUnLCAoZmlsZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUcmVlKGZpbGUucGF0aCk7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ3JlbmFtZScsIChmaWxlLCBvbGRQYXRoKSA9PiB7XG4gICAgICB0aGlzLnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2VzIHVuY2hhbmdlZCBzYXZlZCByZWNvcmRzIGFuZCByZWFkcyBvdGhlciBmaWxlcyBvbmUgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLm9wdGlvbnMubG9hZCgpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVzKCkpIHtcbiAgICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpIHx8IHRoaXMucmV2aXNpb25zLmhhcyhmaWxlKSB8fCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgoZmlsZS5wYXRoKSAhPT0gZmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5ID0gc2F2ZWQuZ2V0KGZpbGUucGF0aCk7XG4gICAgICBpZiAoZW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWUgJiYgZW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCBlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNjYW5GaWxlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlYWRUYWlsO1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNCdWlsdFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGRlYm91bmNlIGFuZCBmbHVzaGVzIGNvbXBsZXRlZCBpbmRleGVzIGJlZm9yZSBkaXNwb3NpbmcgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdFNhdmUuY2FuY2VsKCk7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgIH1cbiAgICBzdXBlci5vbnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGRzIHByb2plY3Rpb25zIGZvciBldmVyeSBhY2NlcHRlZCBmaWxlLCBmb3IgZXhhbXBsZSBhZnRlciBhIGNvbnN1bWVyIGxlYXJucyBuZXcgbmFtZXMgdG8gZmluZCBpbiB0ZXh0LlxuICAgKiBFdmVudHMgYXJyaXZpbmcgZHVyaW5nIHRoZSBzY2FuIHN1cGVyc2VkZSBpdHMgb2xkZXIgcmVhZHMuIENvbnN1bWVycyBjb29yZGluYXRlIGFueSBkb21haW4gc2NhbiBtYXJrZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHRoZSBib3VuZGVkIGZ1bGwgc2Nhbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNjYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMub3B0aW9ucy5hcHAudmF1bHQuZ2V0RmlsZXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zY2FuRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbnRlbnRFdmVudChmaWxlOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zaG91bGRBd2FpdE1ldGFkYXRhQ2hhbmdlKGZpbGUpKSB7XG4gICAgICB0aGlzLnF1ZXVlU2NhbihmaWxlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgIC8vIEEgZnJlc2ggdG9rZW4gc3VwZXJzZWRlcyBxdWV1ZWQgcmVhZHMsIGFuZCBzdGFydHVwIGxlYXZlcyB0aGUgc2F2ZWQgZW50cnkgdG8gdGhlIGNvbWluZyBgY2hhbmdlZGAgZXZlbnQuXG4gICAgdGhpcy5yZXZpc2lvbnMuc2V0KGZpbGUsIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0RpcnR5KCk6IHZvaWQge1xuICAgIHRoaXMucmV2aXNpb24rKztcbiAgICBpZiAodGhpcy5pc0J1aWx0VmFsdWUgJiYgIXRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICB0aGlzLnJlcXVlc3RTYXZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlUmVjb3JkKGZpbGU6IFRGaWxlLCBvbGRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMucmVjb3Jkcy5nZXQob2xkUGF0aCk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChvbGRQYXRoKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgICB0aGlzLnNldFJlY29yZChmaWxlLnBhdGgsIGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQSByZWNvcmQgYWxyZWFkeSBhdCB0aGUgbmV3IHBhdGggbWVhbnMgYW5vdGhlciBldmVudCBmb3IgdGhpcyByZW5hbWUgbW92ZWQgaXQgZmlyc3QuXG4gICAgaWYgKCF0aGlzLnJlY29yZHMuaGFzKGZpbGUucGF0aCkpIHtcbiAgICAgIHRoaXMucXVldWVTY2FuKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcXVldWVTY2FuKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLnNjYW5GaWxlKGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVjb3Jkcy5kZWxldGUocGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMub25SZW1vdmUocGF0aCk7XG4gICAgdGhpcy5tYXJrRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVHJlZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLnJlY29yZHMua2V5cygpKSB7XG4gICAgICBpZiAoIShrZXkgPT09IHBhdGggfHwga2V5LnN0YXJ0c1dpdGgoYCR7cGF0aH0vYCkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvdWxkTW92ZVJlY29yZHNPblJlbmFtZSkge1xuICAgICAgdGhpcy5yZW5hbWVNb3ZpbmdSZWNvcmRzKGZpbGUsIG9sZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChvbGRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVUcmVlKG9sZFBhdGgpO1xuICAgIH1cbiAgICB0aGlzLnF1ZXVlU2NhbihmaWxlKTtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHtcbiAgICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihmaWxlLCB0aGlzLnF1ZXVlU2Nhbi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmFtZU1vdmluZ1JlY29yZHMoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgdGhpcy5tb3ZlUmVjb3JkKGZpbGUsIG9sZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT2JzaWRpYW4gbWF5IGFsc28gcmFpc2UgYSByZW5hbWUgcGVyIGRlc2NlbmRhbnQsIGluIGVpdGhlciBvcmRlcjsgbW92aW5nIGlzIGlkZW1wb3RlbnQgYWNyb3NzIGJvdGguXG4gICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKGZpbGUsIChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgdGhpcy5tb3ZlUmVjb3JkKGNoaWxkLCBgJHtvbGRQYXRofSR7Y2hpbGQucGF0aC5zbGljZShmaWxlLnBhdGgubGVuZ3RoKX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlbW92ZVRyZWUob2xkUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVDaGFuZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0aGlzLmlzQnVpbHRWYWx1ZSAmJiB0aGlzLnNhdmVkUmV2aXNpb24gIT09IHRoaXMucmV2aXNpb24pIHtcbiAgICAgIGNvbnN0IHJldmlzaW9uID0gdGhpcy5yZXZpc2lvbjtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5zYXZlKG5ldyBNYXAodGhpcy5yZWNvcmRzKSk7XG4gICAgICB0aGlzLnNhdmVkUmV2aXNpb24gPSByZXZpc2lvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNjYW5GaWxlKGZpbGU6IFRGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpIHx8ICF0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgIGNvbnN0IHRva2VuID0ge307XG4gICAgdGhpcy5yZXZpc2lvbnMuc2V0KGZpbGUsIHRva2VuKTtcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XG4gICAgY29uc3QgeyBtdGltZSwgc2l6ZSB9ID0gZmlsZS5zdGF0O1xuICAgIGNvbnN0IGlzQ3VycmVudCA9ICgpOiBib29sZWFuID0+XG4gICAgICAhdGhpcy5pc1VubG9hZGVkKCkgJiYgdGhpcy5yZXZpc2lvbnMuZ2V0KGZpbGUpID09PSB0b2tlbiAmJiBmaWxlLnBhdGggPT09IHBhdGhcbiAgICAgICYmIGZpbGUuc3RhdC5tdGltZSA9PT0gbXRpbWUgJiYgZmlsZS5zdGF0LnNpemUgPT09IHNpemUgJiYgdGhpcy5vcHRpb25zLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpID09PSBmaWxlO1xuICAgIGNvbnN0IHJlYWQgPSB0aGlzLnJlYWRUYWlsLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFpc0N1cnJlbnQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgY29udGVudDogc3RyaW5nO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29udGVudCA9IGF3YWl0IHRoaXMub3B0aW9ucy5hcHAudmF1bHQuY2FjaGVkUmVhZChmaWxlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgZmlsZSBkZWxldGVkIG9yIHJlbmFtZWQgZHVyaW5nIGl0cyByZWFkIGlzIHRoZSBldmVudCBoYW5kbGVycycgdG8gYWNjb3VudCBmb3IuXG4gICAgICAgIGlmIChpc0N1cnJlbnQoKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaXNDdXJyZW50KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRUZXh0KGZpbGUsIGNvbnRlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMucmVhZFRhaWwgPSByZWFkLmNhdGNoKG5vb3ApO1xuICAgIGF3YWl0IHJlYWQ7XG4gIH1cblxuICBwcml2YXRlIHNldFJlY29yZChwYXRoOiBzdHJpbmcsIGVudHJ5OiBJbmRleGVkRmlsZVJlY29yZDxUPik6IHZvaWQge1xuICAgIHRoaXMucmVjb3Jkcy5zZXQocGF0aCwgZW50cnkpO1xuICAgIHRoaXMub3B0aW9ucy5vblNldChwYXRoLCBlbnRyeS5yZWNvcmQpO1xuICAgIHRoaXMubWFya0RpcnR5KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRleHQoZmlsZTogVEZpbGUsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmV2aXNpb25zLnNldChmaWxlLCB7fSk7XG4gICAgaWYgKCF0aGlzLmlzVW5sb2FkZWQoKSAmJiB0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCB7IG10aW1lOiBmaWxlLnN0YXQubXRpbWUsIHJlY29yZDogdGhpcy5vcHRpb25zLmluZGV4RmlsZSh7IGNvbnRlbnQsIGZpbGUgfSksIHNpemU6IGZpbGUuc3RhdC5zaXplIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsbUJBQWtDO0FBQ2xDLHNCQUdPO0FBQ1Asc0JBS087QUFFUCwwQkFBNEI7QUFFNUIsTUFBTSxnQ0FBZ0M7QUE0Ri9CLE1BQU0sc0NBQXlDLGdDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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
@@ -41,6 +41,18 @@ export interface IncrementalFileIndexComponentConstructorParams<T> {
41
41
  * Persists a snapshot; writes are serialized and retried by the next flush after failure.
42
42
  */
43
43
  readonly save: (records: ReadonlyMap<string, IndexedFileRecord<T>>) => Promise<void>;
44
+ /**
45
+ * Whether a create or modify of the file is followed by a metadata-cache `changed` event carrying its text, as for
46
+ * Markdown notes. Such a file drops its stale projection and is not read; its record returns with that event, or
47
+ * with the next startup or {@link IncrementalFileIndexComponent.rescan} when Obsidian raises none (a modify that left
48
+ * the content unchanged). Consumers must treat a file without a record as unknown. Defaults to never.
49
+ */
50
+ readonly shouldAwaitMetadataChange?: (file: TFile) => boolean;
51
+ /**
52
+ * Whether a projection depends on text alone, so a rename moves it with its stats instead of reading the file again.
53
+ * A file renamed to a path {@link accepts} rejects loses its record either way. Defaults to `false`.
54
+ */
55
+ readonly shouldMoveRecordsOnRename?: boolean;
44
56
  }
45
57
  /**
46
58
  * A projection and the file stats observed before reading its text.
@@ -92,7 +104,7 @@ export declare class IncrementalFileIndexComponent<T> extends ComponentEx {
92
104
  /**
93
105
  * Projection, notifications and persistence supplied by the consumer.
94
106
  */
95
- protected readonly options: IncrementalFileIndexComponentConstructorParams<T>;
107
+ protected readonly options: Required<IncrementalFileIndexComponentConstructorParams<T>>;
96
108
  private isBuiltValue;
97
109
  private readTail;
98
110
  private readonly records;
@@ -140,11 +152,14 @@ export declare class IncrementalFileIndexComponent<T> extends ComponentEx {
140
152
  * @returns Completion of the bounded full scan.
141
153
  */
142
154
  rescan(): Promise<void>;
155
+ private handleContentEvent;
143
156
  private markDirty;
157
+ private moveRecord;
144
158
  private queueScan;
145
159
  private removeRecord;
146
160
  private removeTree;
147
161
  private rename;
162
+ private renameMovingRecords;
148
163
  private saveChanges;
149
164
  private scanFile;
150
165
  private setRecord;