obsidian-dev-utils 22.1.1-beta.26 → 22.1.1-beta.28

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 (41) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/lib/cjs/Async.cjs +6 -1
  3. package/dist/lib/cjs/Async.d.cts +7 -0
  4. package/dist/lib/cjs/Library.cjs +1 -1
  5. package/dist/lib/cjs/ScriptUtils/ObsidianDevUtilsRepoPaths.cjs +1 -1
  6. package/dist/lib/cjs/ScriptUtils/ObsidianDevUtilsRepoPaths.d.cts +3 -0
  7. package/dist/lib/cjs/obsidian/Modals/Alert.cjs +3 -1
  8. package/dist/lib/cjs/obsidian/Modals/Confirm.cjs +3 -1
  9. package/dist/lib/cjs/obsidian/Modals/Prompt.cjs +3 -1
  10. package/dist/lib/cjs/obsidian/Modals/SelectItem.cjs +2 -1
  11. package/dist/lib/cjs/obsidian/Plugin/PluginBase.cjs +50 -29
  12. package/dist/lib/cjs/obsidian/Plugin/PluginBase.d.cts +17 -18
  13. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsManagerBase.cjs +1 -1
  14. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsManagerBase.d.cts +9 -9
  15. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsTabBase.cjs +4 -2
  16. package/dist/lib/cjs/obsidian/Plugin/PluginSettingsTabBase.d.cts +7 -8
  17. package/dist/lib/cjs/obsidian/Plugin/PluginTypesBase.cjs +24 -0
  18. package/dist/lib/cjs/obsidian/Plugin/PluginTypesBase.d.cts +55 -0
  19. package/dist/lib/cjs/obsidian/Plugin/index.cjs +6 -3
  20. package/dist/lib/cjs/obsidian/Plugin/index.d.cts +1 -0
  21. package/dist/lib/esm/Async.d.mts +7 -0
  22. package/dist/lib/esm/Async.mjs +5 -1
  23. package/dist/lib/esm/Library.mjs +1 -1
  24. package/dist/lib/esm/ScriptUtils/ObsidianDevUtilsRepoPaths.d.mts +3 -0
  25. package/dist/lib/esm/ScriptUtils/ObsidianDevUtilsRepoPaths.mjs +1 -1
  26. package/dist/lib/esm/obsidian/Modals/Alert.mjs +3 -1
  27. package/dist/lib/esm/obsidian/Modals/Confirm.mjs +3 -1
  28. package/dist/lib/esm/obsidian/Modals/Prompt.mjs +3 -1
  29. package/dist/lib/esm/obsidian/Modals/SelectItem.mjs +2 -1
  30. package/dist/lib/esm/obsidian/Plugin/PluginBase.d.mts +17 -18
  31. package/dist/lib/esm/obsidian/Plugin/PluginBase.mjs +54 -32
  32. package/dist/lib/esm/obsidian/Plugin/PluginSettingsManagerBase.d.mts +9 -9
  33. package/dist/lib/esm/obsidian/Plugin/PluginSettingsManagerBase.mjs +1 -1
  34. package/dist/lib/esm/obsidian/Plugin/PluginSettingsTabBase.d.mts +7 -8
  35. package/dist/lib/esm/obsidian/Plugin/PluginSettingsTabBase.mjs +4 -2
  36. package/dist/lib/esm/obsidian/Plugin/PluginTypesBase.d.mts +55 -0
  37. package/dist/lib/esm/obsidian/Plugin/PluginTypesBase.mjs +8 -0
  38. package/dist/lib/esm/obsidian/Plugin/index.d.mts +1 -0
  39. package/dist/lib/esm/obsidian/Plugin/index.mjs +4 -2
  40. package/obsidian/Plugin/PluginTypesBase/package.json +6 -0
  41. package/package.json +1 -1
@@ -7,23 +7,18 @@
7
7
  * Subclasses should implement methods to create default settings and settings tabs, and complete plugin-specific
8
8
  * loading tasks.
9
9
  */
10
- import type { PluginSettingTab } from 'obsidian';
11
10
  import type { Promisable, ReadonlyDeep } from 'type-fest';
12
- import { Plugin } from 'obsidian';
11
+ import { Plugin as ObsidianPlugin } from 'obsidian';
13
12
  import type { AsyncEventRef } from '../../AsyncEvents.cjs';
13
+ import type { ExtractPluginSettings, ExtractPluginSettingsManager, ExtractPluginSettingsTab, PluginTypesBase } from './PluginTypesBase.cjs';
14
14
  import { AsyncEvents } from '../../AsyncEvents.cjs';
15
- import { PluginSettingsManagerBase } from './PluginSettingsManagerBase.cjs';
16
- type LifecycleEventName = 'layoutReady' | 'loadComplete' | 'unload';
15
+ type LifecycleEventName = 'layoutReady' | 'load' | 'unload';
17
16
  /**
18
17
  * Base class for creating Obsidian plugins with built-in support for settings management, error handling, and notifications.
19
18
  *
20
19
  * @typeParam PluginSettings - The type representing the plugin settings object.
21
20
  */
22
- export declare abstract class PluginBase<PluginSettings extends object = object> extends Plugin {
23
- /**
24
- * @deprecated Used only for type inference. Don't use it directly.
25
- */
26
- __pluginSettingsType: PluginSettings;
21
+ export declare abstract class PluginBase<PluginTypes extends PluginTypesBase> extends ObsidianPlugin {
27
22
  readonly events: AsyncEvents;
28
23
  /**
29
24
  * Gets the AbortSignal used for aborting long-running operations.
@@ -36,10 +31,12 @@ export declare abstract class PluginBase<PluginSettings extends object = object>
36
31
  *
37
32
  * @returns The readonly plugin settings.
38
33
  */
39
- get settings(): ReadonlyDeep<PluginSettings>;
40
- get settingsManager(): PluginSettingsManagerBase<PluginSettings>;
34
+ get settings(): ReadonlyDeep<ExtractPluginSettings<PluginTypes>>;
35
+ get settingsManager(): ExtractPluginSettingsManager<PluginTypes>;
36
+ get settingsTab(): ExtractPluginSettingsTab<PluginTypes>;
41
37
  private _abortSignal;
42
38
  private _settingsManager;
39
+ private _settingsTab;
43
40
  private lifecycleEventNames;
44
41
  private notice?;
45
42
  /**
@@ -68,14 +65,14 @@ export declare abstract class PluginBase<PluginSettings extends object = object>
68
65
  *
69
66
  * @param _settings - The settings.
70
67
  */
71
- onLoadSettings(_settings: PluginSettings): Promisable<void>;
68
+ onLoadSettings(_settings: ExtractPluginSettings<PluginTypes>): Promisable<void>;
72
69
  /**
73
70
  * Called when the plugin settings are saved.
74
71
  *
75
72
  * @param _newSettings - The new settings.
76
73
  * @param _oldSettings - The old settings.
77
74
  */
78
- onSaveSettings(_newSettings: PluginSettings, _oldSettings: PluginSettings): Promisable<void>;
75
+ onSaveSettings(_newSettings: ExtractPluginSettings<PluginTypes>, _oldSettings: ExtractPluginSettings<PluginTypes>): Promisable<void>;
79
76
  onunload(): void;
80
77
  /**
81
78
  * Registers an async event.
@@ -100,29 +97,31 @@ export declare abstract class PluginBase<PluginSettings extends object = object>
100
97
  *
101
98
  * @returns The settings tab or null if not applicable.
102
99
  */
103
- protected createPluginSettingsTab(): null | PluginSettingTab;
100
+ protected createPluginSettingsTab(): ExtractPluginSettingsTab<PluginTypes> | null;
104
101
  /**
105
102
  * Creates the plugin settings manager. This method must be implemented by subclasses.
106
103
  *
107
104
  * @returns The plugin settings manager.
108
105
  */
109
- protected createSettingsManager(): null | PluginSettingsManagerBase<PluginSettings>;
106
+ protected createSettingsManager(): ExtractPluginSettingsManager<PluginTypes> | null;
110
107
  /**
111
108
  * Called when the layout is ready. This method can be overridden by subclasses to perform actions once
112
109
  * the layout is ready.
113
110
  */
114
111
  protected onLayoutReady(): Promisable<void>;
112
+ protected onloadImpl(): Promise<void>;
115
113
  /**
116
- * Called when the plugin loading is complete. This method must be implemented by subclasses to perform
117
- * any additional setup required after loading is complete.
114
+ * Called when the plugin is unloaded.
118
115
  */
119
- protected onloadComplete(): Promisable<void>;
116
+ protected onunloadImpl(): Promisable<void>;
120
117
  /**
121
118
  * Displays a notice message to the user.
122
119
  *
123
120
  * @param message - The message to display.
124
121
  */
125
122
  protected showNotice(message: string): void;
123
+ private afterLoad;
124
+ private onLayoutReadyBase;
126
125
  private triggerLifecycleEvent;
127
126
  }
128
127
  export {};
@@ -304,4 +304,4 @@ class PluginSettingsProperty {
304
304
  PluginSettingsManagerBase,
305
305
  PluginSettingsProperty
306
306
  });
307
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5TZXR0aW5nc01hbmFnZXJCYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFBsdWdpbiBzZXR0aW5ncyBtYW5hZ2VyIGJhc2UgY2xhc3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vVHJhbnNmb3JtZXJzL1RyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgTWF5YmVSZXR1cm4sXG4gIFN0cmluZ0tleXNcbn0gZnJvbSAnLi4vLi4vVHlwZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkJhc2UgfSBmcm9tICcuL1BsdWdpbkJhc2UudHMnO1xuXG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0QWxsS2V5cyB9IGZyb20gJy4uLy4uL09iamVjdC50cyc7XG5pbXBvcnQgeyBEYXRlVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi9UcmFuc2Zvcm1lcnMvRGF0ZVRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IER1cmF0aW9uVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi9UcmFuc2Zvcm1lcnMvRHVyYXRpb25UcmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBHcm91cFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vVHJhbnNmb3JtZXJzL0dyb3VwVHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgU2tpcFByaXZhdGVQcm9wZXJ0eVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vVHJhbnNmb3JtZXJzL1NraXBQcml2YXRlUHJvcGVydHlUcmFuc2Zvcm1lci50cyc7XG5cbmNvbnN0IGRlZmF1bHRUcmFuc2Zvcm1lciA9IG5ldyBHcm91cFRyYW5zZm9ybWVyKFtcbiAgbmV3IFNraXBQcml2YXRlUHJvcGVydHlUcmFuc2Zvcm1lcigpLFxuICBuZXcgRGF0ZVRyYW5zZm9ybWVyKCksXG4gIG5ldyBEdXJhdGlvblRyYW5zZm9ybWVyKClcbl0pO1xuXG50eXBlIFZhbGlkYXRvcjxUPiA9ICh2YWx1ZTogVCkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PjtcblxuYWJzdHJhY3QgY2xhc3MgUHJveHlIYW5kbGVyQmFzZTxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gaW1wbGVtZW50cyBQcm94eUhhbmRsZXI8UGx1Z2luU2V0dGluZ3M+IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzTWFwPFBsdWdpblNldHRpbmdzPikge31cblxuICBwdWJsaWMgZ2V0KHRhcmdldDogUGx1Z2luU2V0dGluZ3MsIHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IHVua25vd24ge1xuICAgIGNvbnN0IHJlY29yZCA9IHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVjb3JkW3Byb3BdO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzLmdldChwcm9wKTtcbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gcmVjb3JkW3Byb3BdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFByb3BlcnR5VmFsdWUocHJvcGVydHk6IFBsdWdpblNldHRpbmdzUHJvcGVydHk8dW5rbm93bj4pOiB1bmtub3duO1xufVxuXG5jbGFzcyBFZGl0YWJsZVNldHRpbmdzUHJveHlIYW5kbGVyPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIFByb3h5SGFuZGxlckJhc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICBwdWJsaWMgc2V0KHRhcmdldDogUGx1Z2luU2V0dGluZ3MsIHByb3A6IHN0cmluZyB8IHN5bWJvbCwgdmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBjb25zdCByZWNvcmQgPSB0YXJnZXQgYXMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj47XG5cbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZWNvcmRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzLmdldChwcm9wKTtcbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICByZWNvcmRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByb3BlcnR5LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnZhbGlkYXRpb25Qcm9taXNlID0gdGhpcy52YWxpZGF0aW9uUHJvbWlzZS50aGVuKCgpID0+IHByb3BlcnR5LnNldFZhbHVlQW5kVmFsaWRhdGUodmFsdWUpKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldFByb3BlcnR5VmFsdWUocHJvcGVydHk6IFBsdWdpblNldHRpbmdzUHJvcGVydHk8dW5rbm93bj4pOiB1bmtub3duIHtcbiAgICByZXR1cm4gcHJvcGVydHkuY3VycmVudFZhbHVlO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jbGFzcyBQcm9wZXJ0aWVzTWFwPFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIE1hcDxzdHJpbmcsIFBsdWdpblNldHRpbmdzUHJvcGVydHk8YW55Pj4ge1xuICBwdWJsaWMgZ2V0VHlwZWQ8UHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+KHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lKTogUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBzdXBlci5nZXQocHJvcGVydHlOYW1lKTtcbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICR7U3RyaW5nKHByb3BlcnR5TmFtZSl9IG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eSBhcyBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0+O1xuICB9XG5cbiAgcHVibGljIHNldFR5cGVkPFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+PihcbiAgICBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZSxcbiAgICB2YWx1ZTogUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPlxuICApOiB0aGlzIHtcbiAgICByZXR1cm4gc3VwZXIuc2V0KHByb3BlcnR5TmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIFNhZmVTZXR0aW5nc1Byb3h5SGFuZGxlcjxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBQcm94eUhhbmRsZXJCYXNlPFBsdWdpblNldHRpbmdzPiB7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5OiBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PHVua25vd24+KTogdW5rbm93biB7XG4gICAgcmV0dXJuIHByb3BlcnR5LnNhZmVWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIG1hbmFnaW5nIHBsdWdpbiBzZXR0aW5ncy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBwbHVnaW4gc2V0dGluZ3Mgb2JqZWN0LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luU2V0dGluZ3NNYW5hZ2VyQmFzZTxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHB1YmxpYyByZWFkb25seSBzYWZlU2V0dGluZ3M6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG5cbiAgcHJpdmF0ZSBkZWZhdWx0U2V0dGluZ3M6IFBsdWdpblNldHRpbmdzO1xuICBwcml2YXRlIHByb3BlcnRpZXM6IFByb3BlcnRpZXNNYXA8UGx1Z2luU2V0dGluZ3M+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHZhbGlkYXRvcnM6IE1hcDxzdHJpbmcsIFZhbGlkYXRvcjxhbnk+PiA9IG5ldyBNYXA8c3RyaW5nLCBWYWxpZGF0b3I8YW55Pj4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luQmFzZTxQbHVnaW5TZXR0aW5ncz4pIHtcbiAgICB0aGlzLmFwcCA9IHBsdWdpbi5hcHA7XG4gICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpO1xuXG4gICAgdGhpcy5hZGRWYWxpZGF0b3JzKCk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllc01hcDxQbHVnaW5TZXR0aW5ncz4oKTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIGdldEFsbEtleXModGhpcy5kZWZhdWx0U2V0dGluZ3MpKSB7XG4gICAgICB0aGlzLnByb3BlcnRpZXMuc2V0KFxuICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgIG5ldyBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5KHByb3BlcnR5TmFtZSwgdGhpcy5kZWZhdWx0U2V0dGluZ3NbcHJvcGVydHlOYW1lXSwgdGhpcy52YWxpZGF0b3JzLmdldChwcm9wZXJ0eU5hbWUpID8/IG5vb3ApXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdG9ycy5jbGVhcigpO1xuXG4gICAgdGhpcy5zYWZlU2V0dGluZ3MgPSBuZXcgUHJveHkodGhpcy5kZWZhdWx0U2V0dGluZ3MsIG5ldyBTYWZlU2V0dGluZ3NQcm94eUhhbmRsZXI8UGx1Z2luU2V0dGluZ3M+KHRoaXMucHJvcGVydGllcykpIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZWRpdEFuZFNhdmUoZWRpdG9yOiAoc2V0dGluZ3M6IFBsdWdpblNldHRpbmdzKSA9PiBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZWRpdGFibGVTZXR0aW5ncyA9IG5ldyBQcm94eSh0aGlzLmRlZmF1bHRTZXR0aW5ncywgbmV3IEVkaXRhYmxlU2V0dGluZ3NQcm94eUhhbmRsZXI8UGx1Z2luU2V0dGluZ3M+KHRoaXMucHJvcGVydGllcykpIGFzIHtcbiAgICAgIHZhbGlkYXRpb25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJiBQbHVnaW5TZXR0aW5ncztcbiAgICBhd2FpdCBlZGl0b3IoZWRpdGFibGVTZXR0aW5ncyk7XG4gICAgYXdhaXQgZWRpdGFibGVTZXR0aW5ncy52YWxpZGF0aW9uUHJvbWlzZTtcbiAgICBhd2FpdCB0aGlzLnNhdmVUb0ZpbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9wZXJ0eTxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPj4ocHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUpOiBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmdldFR5cGVkKHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEZyb21GaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgdGhpcy5wcm9wZXJ0aWVzLnZhbHVlcygpKSB7XG4gICAgICBwcm9wZXJ0eS5yZXNldCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnBsdWdpbi5sb2FkRGF0YSgpIGFzIHVua25vd247XG5cbiAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gJ0FycmF5JyA6IHR5cGVvZiBkYXRhO1xuICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBkYXRhIHR5cGUuIEV4cGVjdGVkIE9iamVjdCwgZ290OiAke3R5cGV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgb3JpZ2luYWxKc29uID0gSlNPTi5zdHJpbmdpZnkocmVjb3JkKTtcbiAgICByZWNvcmQgPSB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkocmVjb3JkKTtcbiAgICBhd2FpdCB0aGlzLm9uTG9hZFJlY29yZChyZWNvcmQpO1xuXG4gICAgY29uc3QgcHJvcGVydGllc1RvU2F2ZTogUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTx1bmtub3duPltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllcy5nZXQocHJvcGVydHlOYW1lKTtcbiAgICAgIGlmICghcHJvcGVydHkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIHByb3BlcnR5OiAke3Byb3BlcnR5TmFtZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVvZiBwcm9wZXJ0eS5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHZhbHVlIHR5cGUnLCB7XG4gICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgIHByb3BlcnR5VHlwZTogdHlwZW9mIHByb3BlcnR5LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnR5LnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIHByb3BlcnRpZXNUb1NhdmUucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzVG9TYXZlKSB7XG4gICAgICBhd2FpdCBwcm9wZXJ0eS5zZXRWYWx1ZUFuZFZhbGlkYXRlKHByb3BlcnR5LmN1cnJlbnRWYWx1ZSk7XG4gICAgICBwcm9wZXJ0eS5zYXZlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3SnNvbiA9IEpTT04uc3RyaW5naWZ5KGF3YWl0IHRoaXMucHJlcGFyZVJlY29yZFRvU2F2ZSgpKTtcblxuICAgIGlmIChuZXdKc29uICE9PSBvcmlnaW5hbEpzb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZVRvRmlsZUltcGwoKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnBsdWdpbi5vbkxvYWRTZXR0aW5ncyh0aGlzLmdldFNhdmVkU2V0dGluZ3MoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIG5ldyBwbHVnaW4gc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNhdmVUb0ZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb2xkU2V0dGluZ3MgPSB0aGlzLmdldFNhdmVkU2V0dGluZ3MoKTtcblxuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHRoaXMucHJvcGVydGllcy52YWx1ZXMoKSkge1xuICAgICAgaGFzQ2hhbmdlcyB8fD0gcHJvcGVydHkuc2F2ZSgpO1xuICAgIH1cblxuICAgIGlmICghaGFzQ2hhbmdlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2F2ZVRvRmlsZUltcGwoKTtcbiAgICBhd2FpdCB0aGlzLnBsdWdpbi5vblNhdmVTZXR0aW5ncyh0aGlzLmdldFNhdmVkU2V0dGluZ3MoKSwgb2xkU2V0dGluZ3MpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZFZhbGlkYXRvcjxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgdmFsaWRhdG9yOiBWYWxpZGF0b3I8UGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXT5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0b3JzLnNldChwcm9wZXJ0eU5hbWUsIHZhbGlkYXRvcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlRGVmYXVsdFNldHRpbmdzKCk6IFBsdWdpblNldHRpbmdzO1xuXG4gIHByb3RlY3RlZCBnZXRUcmFuc2Zvcm1lcigpOiBUcmFuc2Zvcm1lciB7XG4gICAgcmV0dXJuIGRlZmF1bHRUcmFuc2Zvcm1lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBsb2FkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBfcmVjb3JkIC0gVGhlIHJlY29yZC5cbiAgICovXG4gIHByb3RlY3RlZCBvbkxvYWRSZWNvcmQoX3JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBub29wKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBzZXR0aW5ncyBhcmUgc2F2aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gX3JlY29yZCAtIFRoZSByZWNvcmQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25TYXZpbmdSZWNvcmQoX3JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBub29wKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNhdmVkU2V0dGluZ3MoKTogUGx1Z2luU2V0dGluZ3Mge1xuICAgIGNvbnN0IHNhdmVkU2V0dGluZ3M6IFBhcnRpYWw8UGx1Z2luU2V0dGluZ3M+ID0ge307XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCBwcm9wZXJ0eV0gb2YgdGhpcy5wcm9wZXJ0aWVzLmVudHJpZXMoKSkge1xuICAgICAgc2F2ZWRTZXR0aW5nc1twcm9wZXJ0eU5hbWUgYXMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5dID0gcHJvcGVydHkubGFzdFNhdmVkVmFsdWUgYXMgUGx1Z2luU2V0dGluZ3NbU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5dIHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLmRlZmF1bHRTZXR0aW5ncykgYXMgb2JqZWN0O1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihzYXZlZFNldHRpbmdzLCBwcm90byk7XG4gICAgcmV0dXJuIHNhdmVkU2V0dGluZ3MgYXMgUGx1Z2luU2V0dGluZ3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWNvcmRUb1NhdmUoKTogUHJvbWlzZTxSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHVua25vd24+PiB7XG4gICAgY29uc3Qgc2V0dGluZ3M6IFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgdW5rbm93bj4gPSB7fSBhcyBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHVua25vd24+O1xuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgcHJvcGVydHldIG9mIHRoaXMucHJvcGVydGllcy5lbnRyaWVzKCkpIHtcbiAgICAgIHNldHRpbmdzW3Byb3BlcnR5TmFtZSBhcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPl0gPSBwcm9wZXJ0eS5jdXJyZW50VmFsdWUgYXMgdW5rbm93bjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9uU2F2aW5nUmVjb3JkKHNldHRpbmdzKTtcblxuICAgIHJldHVybiB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkoc2V0dGluZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlVG9GaWxlSW1wbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YShhd2FpdCB0aGlzLnByZXBhcmVSZWNvcmRUb1NhdmUoKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHByb3BlcnR5IG9mIGEgcGx1Z2luIHNldHRpbmdzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpblNldHRpbmdzUHJvcGVydHk8VD4ge1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0U2F2ZWRWYWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdFNhdmVkVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNhZmVWYWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbk1lc3NhZ2UgPyB0aGlzLmRlZmF1bHRWYWx1ZSA6IHRoaXMuX2N1cnJlbnRWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsaWRhdGlvbk1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbk1lc3NhZ2U7XG4gIH1cblxuICBwcml2YXRlIF9jdXJyZW50VmFsdWU6IFQ7XG5cbiAgcHJpdmF0ZSBfbGFzdFNhdmVkVmFsdWU6IFQ7XG5cbiAgcHJpdmF0ZSBfdmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogVCwgcHJpdmF0ZSByZWFkb25seSB2YWxpZGF0b3I6IFZhbGlkYXRvcjxUPikge1xuICAgIHRoaXMuX2xhc3RTYXZlZFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLl92YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICB9XG5cbiAgcHVibGljIHNhdmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2xhc3RTYXZlZFZhbHVlID09PSB0aGlzLl9jdXJyZW50VmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0U2F2ZWRWYWx1ZSA9IHRoaXMuX2N1cnJlbnRWYWx1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYWxpZGF0aW9uTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsaWRhdGlvbk1lc3NhZ2UgPSB2YWxpZGF0aW9uTWVzc2FnZTtcbiAgICB0aGlzLnNob3dXYXJuaW5nKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0VmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRWYWx1ZUFuZFZhbGlkYXRlKHZhbHVlOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb25NZXNzYWdlID0gKGF3YWl0IHRoaXMudmFsaWRhdG9yKHRoaXMuX2N1cnJlbnRWYWx1ZSkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyAnJztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignVmFsaWRhdGlvbiBmYWlsZWQnLCB7XG4gICAgICAgIHByb3BlcnR5TmFtZTogdGhpcy5wcm9wZXJ0eU5hbWUsXG4gICAgICAgIHZhbHVlXG4gICAgICB9LCBlcnJvcik7XG4gICAgICB0aGlzLl92YWxpZGF0aW9uTWVzc2FnZSA9ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgfVxuICAgIHRoaXMuc2hvd1dhcm5pbmcodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93V2FybmluZyh2YWx1ZT86IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3ZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBDb3VsZCBub3Qgc2V0IHBsdWdpbiBzZXR0aW5nOiAke3RoaXMucHJvcGVydHlOYW1lfS4gVXNpbmcgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLmAsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5kZWZhdWx0VmFsdWUsXG4gICAgICBwcm9wZXJ0eU5hbWU6IHRoaXMucHJvcGVydHlOYW1lLFxuICAgICAgdmFsaWRhdGlvbk1lc3NhZ2U6IHRoaXMuX3ZhbGlkYXRpb25NZXNzYWdlLFxuICAgICAgdmFsdWVcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxzQkFBcUI7QUFDckIsb0JBQTJCO0FBQzNCLDZCQUFnQztBQUNoQyxpQ0FBb0M7QUFDcEMsOEJBQWlDO0FBQ2pDLDRDQUErQztBQUUvQyxNQUFNLHFCQUFxQixJQUFJLHlDQUFpQjtBQUFBLEVBQzlDLElBQUkscUVBQStCO0FBQUEsRUFDbkMsSUFBSSx1Q0FBZ0I7QUFBQSxFQUNwQixJQUFJLCtDQUFvQjtBQUMxQixDQUFDO0FBSUQsTUFBZSxpQkFBd0Y7QUFBQSxFQUM5RixZQUErQixZQUEyQztBQUEzQztBQUFBLEVBQTRDO0FBQUEsRUFFM0UsSUFBSSxRQUF3QixNQUFnQztBQUNqRSxVQUFNLFNBQVM7QUFDZixRQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGFBQU8sT0FBTyxJQUFJO0FBQUEsSUFDcEI7QUFFQSxVQUFNLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSTtBQUN6QyxRQUFJLENBQUMsVUFBVTtBQUNiLGFBQU8sT0FBTyxJQUFJO0FBQUEsSUFDcEI7QUFFQSxXQUFPLEtBQUssaUJBQWlCLFFBQVE7QUFBQSxFQUN2QztBQUdGO0FBRUEsTUFBTSxxQ0FBb0UsaUJBQWlDO0FBQUEs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U0FBSyxnQkFBZ0I7QUFBQSxFQUN2QjtBQUFBLEVBekJBLElBQVcsZUFBa0I7QUFDM0IsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRUEsSUFBVyxpQkFBb0I7QUFDN0IsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRUEsSUFBVyxZQUFlO0FBQ3hCLFdBQU8sS0FBSyxxQkFBcUIsS0FBSyxlQUFlLEtBQUs7QUFBQSxFQUM1RDtBQUFBLEVBRUEsSUFBVyxvQkFBNEI7QUFDckMsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRVE7QUFBQSxFQUVBO0FBQUEsRUFFQSxxQkFBcUI7QUFBQSxFQU90QixRQUFjO0FBQ25CLFNBQUssZ0JBQWdCLEtBQUs7QUFDMUIsU0FBSyxxQkFBcUI7QUFBQSxFQUM1QjtBQUFBLEVBRU8sT0FBZ0I7QUFDckIsUUFBSSxLQUFLLG9CQUFvQixLQUFLLGVBQWU7QUFDL0MsYUFBTztBQUFBLElBQ1Q7QUFFQSxTQUFLLGtCQUFrQixLQUFLO0FBQzVCLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFTyxxQkFBcUIsbUJBQWlDO0FBQzNELFNBQUsscUJBQXFCO0FBQzFCLFNBQUssWUFBWTtBQUFBLEVBQ25CO0FBQUEsRUFFTyxTQUFTLE9BQWdCO0FBQzlCLFNBQUssZ0JBQWdCO0FBQUEsRUFDdkI7QUFBQSxFQUVBLE1BQWEsb0JBQW9CLE9BQXlCO0FBQ3hELFNBQUssU0FBUyxLQUFLO0FBQ25CLFFBQUk7QUFDRixXQUFLLHFCQUFzQixNQUFNLEtBQUssVUFBVSxLQUFLLGFBQWEsS0FBNEI7QUFBQSxJQUNoRyxTQUFTLE9BQU87QUFDZCxjQUFRLE1BQU0scUJBQXFCO0FBQUEsUUFDakMsY0FBYyxLQUFLO0FBQUEsUUFDbkI7QUFBQSxNQUNGLEdBQUcsS0FBSztBQUNSLFdBQUsscUJBQXFCO0FBQUEsSUFDNUI7QUFDQSxTQUFLLFlBQVksS0FBSztBQUFBLEVBQ3hCO0FBQUEsRUFFUSxZQUFZLE9BQWlCO0FBQ25DLFFBQUksQ0FBQyxLQUFLLG9CQUFvQjtBQUM1QjtBQUFBLElBQ0Y7QUFFQSxZQUFRLEtBQUssaUNBQWlDLEtBQUssWUFBWSxrQ0FBa0M7QUFBQSxNQUMvRixjQUFjLEtBQUs7QUFBQSxNQUNuQixjQUFjLEtBQUs7QUFBQSxNQUNuQixtQkFBbUIsS0FBSztBQUFBLE1BQ3hCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
307
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5TZXR0aW5nc01hbmFnZXJCYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFBsdWdpbiBzZXR0aW5ncyBtYW5hZ2VyIGJhc2UgY2xhc3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vVHJhbnNmb3JtZXJzL1RyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgTWF5YmVSZXR1cm4sXG4gIFN0cmluZ0tleXNcbn0gZnJvbSAnLi4vLi4vVHlwZS50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEV4dHJhY3RQbHVnaW4sXG4gIEV4dHJhY3RQbHVnaW5TZXR0aW5ncyxcbiAgUGx1Z2luVHlwZXNCYXNlXG59IGZyb20gJy4vUGx1Z2luVHlwZXNCYXNlLnRzJztcblxuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLy4uL0Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGdldEFsbEtleXMgfSBmcm9tICcuLi8uLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgRGF0ZVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vVHJhbnNmb3JtZXJzL0RhdGVUcmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBEdXJhdGlvblRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vVHJhbnNmb3JtZXJzL0R1cmF0aW9uVHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgR3JvdXBUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uL1RyYW5zZm9ybWVycy9Hcm91cFRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IFNraXBQcml2YXRlUHJvcGVydHlUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uL1RyYW5zZm9ybWVycy9Ta2lwUHJpdmF0ZVByb3BlcnR5VHJhbnNmb3JtZXIudHMnO1xuXG5jb25zdCBkZWZhdWx0VHJhbnNmb3JtZXIgPSBuZXcgR3JvdXBUcmFuc2Zvcm1lcihbXG4gIG5ldyBTa2lwUHJpdmF0ZVByb3BlcnR5VHJhbnNmb3JtZXIoKSxcbiAgbmV3IERhdGVUcmFuc2Zvcm1lcigpLFxuICBuZXcgRHVyYXRpb25UcmFuc2Zvcm1lcigpXG5dKTtcblxudHlwZSBWYWxpZGF0b3I8VD4gPSAodmFsdWU6IFQpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj47XG5cbmFic3RyYWN0IGNsYXNzIFByb3h5SGFuZGxlckJhc2U8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IGltcGxlbWVudHMgUHJveHlIYW5kbGVyPFBsdWdpblNldHRpbmdzPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvcGVydGllczogUHJvcGVydGllc01hcDxQbHVnaW5TZXR0aW5ncz4pIHt9XG5cbiAgcHVibGljIGdldCh0YXJnZXQ6IFBsdWdpblNldHRpbmdzLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgICBjb25zdCByZWNvcmQgPSB0YXJnZXQgYXMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj47XG4gICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlY29yZFtwcm9wXTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllcy5nZXQocHJvcCk7XG4gICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIHJlY29yZFtwcm9wXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5OiBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PHVua25vd24+KTogdW5rbm93bjtcbn1cblxuY2xhc3MgRWRpdGFibGVTZXR0aW5nc1Byb3h5SGFuZGxlcjxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBQcm94eUhhbmRsZXJCYXNlPFBsdWdpblNldHRpbmdzPiB7XG4gIHByaXZhdGUgdmFsaWRhdGlvblByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgcHVibGljIHNldCh0YXJnZXQ6IFBsdWdpblNldHRpbmdzLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVjb3JkID0gdGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+O1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmVjb3JkW3Byb3BdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllcy5nZXQocHJvcCk7XG4gICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgcmVjb3JkW3Byb3BdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm9wZXJ0eS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy52YWxpZGF0aW9uUHJvbWlzZSA9IHRoaXMudmFsaWRhdGlvblByb21pc2UudGhlbigoKSA9PiBwcm9wZXJ0eS5zZXRWYWx1ZUFuZFZhbGlkYXRlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5OiBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PHVua25vd24+KTogdW5rbm93biB7XG4gICAgcmV0dXJuIHByb3BlcnR5LmN1cnJlbnRWYWx1ZTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuY2xhc3MgUHJvcGVydGllc01hcDxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBNYXA8c3RyaW5nLCBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PGFueT4+IHtcbiAgcHVibGljIGdldFR5cGVkPFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+Pihwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZSk6IFBsdWdpblNldHRpbmdzUHJvcGVydHk8UGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXT4ge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gc3VwZXIuZ2V0KHByb3BlcnR5TmFtZSk7XG4gICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSAke1N0cmluZyhwcm9wZXJ0eU5hbWUpfSBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHkgYXMgUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUeXBlZDxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPj4oXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgdmFsdWU6IFBsdWdpblNldHRpbmdzUHJvcGVydHk8UGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXT5cbiAgKTogdGhpcyB7XG4gICAgcmV0dXJuIHN1cGVyLnNldChwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiAgfVxufVxuXG5jbGFzcyBTYWZlU2V0dGluZ3NQcm94eUhhbmRsZXI8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgUHJveHlIYW5kbGVyQmFzZTxQbHVnaW5TZXR0aW5ncz4ge1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eTogUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTx1bmtub3duPik6IHVua25vd24ge1xuICAgIHJldHVybiBwcm9wZXJ0eS5zYWZlVmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBtYW5hZ2luZyBwbHVnaW4gc2V0dGluZ3MuXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIHJlcHJlc2VudGluZyB0aGUgcGx1Z2luIHNldHRpbmdzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpblNldHRpbmdzTWFuYWdlckJhc2U8UGx1Z2luVHlwZXMgZXh0ZW5kcyBQbHVnaW5UeXBlc0Jhc2U+IHtcbiAgcHVibGljIHJlYWRvbmx5IGFwcDogQXBwO1xuICBwdWJsaWMgcmVhZG9ubHkgc2FmZVNldHRpbmdzOiBSZWFkb25seURlZXA8RXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPj47XG5cbiAgcHJpdmF0ZSBkZWZhdWx0U2V0dGluZ3M6IEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW5UeXBlcz47XG4gIHByaXZhdGUgcHJvcGVydGllczogUHJvcGVydGllc01hcDxFeHRyYWN0UGx1Z2luU2V0dGluZ3M8UGx1Z2luVHlwZXM+PjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSB2YWxpZGF0b3JzOiBNYXA8c3RyaW5nLCBWYWxpZGF0b3I8YW55Pj4gPSBuZXcgTWFwPHN0cmluZywgVmFsaWRhdG9yPGFueT4+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBwbHVnaW46IEV4dHJhY3RQbHVnaW48UGx1Z2luVHlwZXM+KSB7XG4gICAgdGhpcy5hcHAgPSBwbHVnaW4uYXBwO1xuICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0gdGhpcy5jcmVhdGVEZWZhdWx0U2V0dGluZ3MoKTtcblxuICAgIHRoaXMuYWRkVmFsaWRhdG9ycygpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXNNYXA8RXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPj4oKTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIGdldEFsbEtleXModGhpcy5kZWZhdWx0U2V0dGluZ3MpKSB7XG4gICAgICB0aGlzLnByb3BlcnRpZXMuc2V0KFxuICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgIG5ldyBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5KHByb3BlcnR5TmFtZSwgdGhpcy5kZWZhdWx0U2V0dGluZ3NbcHJvcGVydHlOYW1lXSwgdGhpcy52YWxpZGF0b3JzLmdldChwcm9wZXJ0eU5hbWUpID8/IG5vb3ApXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdG9ycy5jbGVhcigpO1xuXG4gICAgdGhpcy5zYWZlU2V0dGluZ3MgPSBuZXcgUHJveHkodGhpcy5kZWZhdWx0U2V0dGluZ3MsIG5ldyBTYWZlU2V0dGluZ3NQcm94eUhhbmRsZXI8RXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPj4odGhpcy5wcm9wZXJ0aWVzKSkgYXMgUmVhZG9ubHlEZWVwPFxuICAgICAgRXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPlxuICAgID47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZWRpdEFuZFNhdmUoZWRpdG9yOiAoc2V0dGluZ3M6IEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW5UeXBlcz4pID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlZGl0YWJsZVNldHRpbmdzID0gbmV3IFByb3h5KHRoaXMuZGVmYXVsdFNldHRpbmdzLCBuZXcgRWRpdGFibGVTZXR0aW5nc1Byb3h5SGFuZGxlcjxFeHRyYWN0UGx1Z2luU2V0dGluZ3M8UGx1Z2luVHlwZXM+Pih0aGlzLnByb3BlcnRpZXMpKSBhcyB7XG4gICAgICB2YWxpZGF0aW9uUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcbiAgICB9ICYgRXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPjtcbiAgICBhd2FpdCBlZGl0b3IoZWRpdGFibGVTZXR0aW5ncyk7XG4gICAgYXdhaXQgZWRpdGFibGVTZXR0aW5ncy52YWxpZGF0aW9uUHJvbWlzZTtcbiAgICBhd2FpdCB0aGlzLnNhdmVUb0ZpbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9wZXJ0eTxQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW5UeXBlcz4+PihcbiAgICBwcm9wZXJ0eU5hbWU6IFByb3BlcnR5TmFtZVxuICApOiBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW5UeXBlcz5bUHJvcGVydHlOYW1lXT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMuZ2V0VHlwZWQocHJvcGVydHlOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkRnJvbUZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiB0aGlzLnByb3BlcnRpZXMudmFsdWVzKCkpIHtcbiAgICAgIHByb3BlcnR5LnJlc2V0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucGx1Z2luLmxvYWREYXRhKCkgYXMgdW5rbm93bjtcblxuICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgY29uc3QgdHlwZSA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyAnQXJyYXknIDogdHlwZW9mIGRhdGE7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZS4gRXhwZWN0ZWQgT2JqZWN0LCBnb3Q6ICR7dHlwZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBvcmlnaW5hbEpzb24gPSBKU09OLnN0cmluZ2lmeShyZWNvcmQpO1xuICAgIHJlY29yZCA9IHRoaXMuZ2V0VHJhbnNmb3JtZXIoKS50cmFuc2Zvcm1PYmplY3RSZWN1cnNpdmVseShyZWNvcmQpO1xuICAgIGF3YWl0IHRoaXMub25Mb2FkUmVjb3JkKHJlY29yZCk7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzVG9TYXZlOiBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PHVua25vd24+W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzLmdldChwcm9wZXJ0eU5hbWUpO1xuICAgICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gcHJvcGVydHk6ICR7cHJvcGVydHlOYW1lfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZW9mIHByb3BlcnR5LmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgdmFsdWUgdHlwZScsIHtcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgcHJvcGVydHlUeXBlOiB0eXBlb2YgcHJvcGVydHkuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHJvcGVydHkuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgcHJvcGVydGllc1RvU2F2ZS5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXNUb1NhdmUpIHtcbiAgICAgIGF3YWl0IHByb3BlcnR5LnNldFZhbHVlQW5kVmFsaWRhdGUocHJvcGVydHkuY3VycmVudFZhbHVlKTtcbiAgICAgIHByb3BlcnR5LnNhdmUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdKc29uID0gSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGhpcy5wcmVwYXJlUmVjb3JkVG9TYXZlKCkpO1xuXG4gICAgaWYgKG5ld0pzb24gIT09IG9yaWdpbmFsSnNvbikge1xuICAgICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlSW1wbCgpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucGx1Z2luLm9uTG9hZFNldHRpbmdzKHRoaXMuZ2V0U2F2ZWRTZXR0aW5ncygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgbmV3IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVRvRmlsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvbGRTZXR0aW5ncyA9IHRoaXMuZ2V0U2F2ZWRTZXR0aW5ncygpO1xuXG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgdGhpcy5wcm9wZXJ0aWVzLnZhbHVlcygpKSB7XG4gICAgICBoYXNDaGFuZ2VzIHx8PSBwcm9wZXJ0eS5zYXZlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNDaGFuZ2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlVG9GaWxlSW1wbCgpO1xuICAgIGF3YWl0IHRoaXMucGx1Z2luLm9uU2F2ZVNldHRpbmdzKHRoaXMuZ2V0U2F2ZWRTZXR0aW5ncygpLCBvbGRTZXR0aW5ncyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkVmFsaWRhdG9yPFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPj4+KFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lLFxuICAgIHZhbGlkYXRvcjogVmFsaWRhdG9yPEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW5UeXBlcz5bUHJvcGVydHlOYW1lXT5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0b3JzLnNldChwcm9wZXJ0eU5hbWUsIHZhbGlkYXRvcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlRGVmYXVsdFNldHRpbmdzKCk6IEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW5UeXBlcz47XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zZm9ybWVyKCk6IFRyYW5zZm9ybWVyIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zZm9ybWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gc2V0dGluZ3MgYXJlIGxvYWRlZC5cbiAgICpcbiAgICogQHBhcmFtIF9yZWNvcmQgLSBUaGUgcmVjb3JkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG9uTG9hZFJlY29yZChfcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIHNldHRpbmdzIGFyZSBzYXZpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBfcmVjb3JkIC0gVGhlIHJlY29yZC5cbiAgICovXG4gIHByb3RlY3RlZCBvblNhdmluZ1JlY29yZChfcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2F2ZWRTZXR0aW5ncygpOiBFeHRyYWN0UGx1Z2luU2V0dGluZ3M8UGx1Z2luVHlwZXM+IHtcbiAgICBjb25zdCBzYXZlZFNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgcHJvcGVydHldIG9mIHRoaXMucHJvcGVydGllcy5lbnRyaWVzKCkpIHtcbiAgICAgIHNhdmVkU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5Lmxhc3RTYXZlZFZhbHVlIGFzXG4gICAgICAgIHwgRXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPltTdHJpbmdLZXlzPEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW5UeXBlcz4+XVxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5kZWZhdWx0U2V0dGluZ3MpIGFzIG9iamVjdDtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc2F2ZWRTZXR0aW5ncywgcHJvdG8pO1xuXG4gICAgcmV0dXJuIHNhdmVkU2V0dGluZ3MgYXMgRXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVJlY29yZFRvU2F2ZSgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgY29uc3Qgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCBwcm9wZXJ0eV0gb2YgdGhpcy5wcm9wZXJ0aWVzLmVudHJpZXMoKSkge1xuICAgICAgc2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5LmN1cnJlbnRWYWx1ZSBhcyB1bmtub3duO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub25TYXZpbmdSZWNvcmQoc2V0dGluZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmb3JtZXIoKS50cmFuc2Zvcm1PYmplY3RSZWN1cnNpdmVseShzZXR0aW5ncyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVUb0ZpbGVJbXBsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVEYXRhKGF3YWl0IHRoaXMucHJlcGFyZVJlY29yZFRvU2F2ZSgpKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcHJvcGVydHkgb2YgYSBwbHVnaW4gc2V0dGluZ3MuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5LlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxUPiB7XG4gIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhc3RTYXZlZFZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9sYXN0U2F2ZWRWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2FmZVZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWxpZGF0aW9uTWVzc2FnZSA/IHRoaXMuZGVmYXVsdFZhbHVlIDogdGhpcy5fY3VycmVudFZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWxpZGF0aW9uTWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgX2N1cnJlbnRWYWx1ZTogVDtcblxuICBwcml2YXRlIF9sYXN0U2F2ZWRWYWx1ZTogVDtcblxuICBwcml2YXRlIF92YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFZhbHVlOiBULCBwcml2YXRlIHJlYWRvbmx5IHZhbGlkYXRvcjogVmFsaWRhdG9yPFQ+KSB7XG4gICAgdGhpcy5fbGFzdFNhdmVkVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMuX3ZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fbGFzdFNhdmVkVmFsdWUgPT09IHRoaXMuX2N1cnJlbnRWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX2xhc3RTYXZlZFZhbHVlID0gdGhpcy5fY3VycmVudFZhbHVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHNldFZhbGlkYXRpb25NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl92YWxpZGF0aW9uTWVzc2FnZSA9IHZhbGlkYXRpb25NZXNzYWdlO1xuICAgIHRoaXMuc2hvd1dhcm5pbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFZhbHVlQW5kVmFsaWRhdGUodmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5fdmFsaWRhdGlvbk1lc3NhZ2UgPSAoYXdhaXQgdGhpcy52YWxpZGF0b3IodGhpcy5fY3VycmVudFZhbHVlKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/ICcnO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiB0aGlzLnByb3BlcnR5TmFtZSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0sIGVycm9yKTtcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb25NZXNzYWdlID0gJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICB9XG4gICAgdGhpcy5zaG93V2FybmluZyh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dXYXJuaW5nKHZhbHVlPzogVCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCBzZXQgcGx1Z2luIHNldHRpbmc6ICR7dGhpcy5wcm9wZXJ0eU5hbWV9LiBVc2luZyBkZWZhdWx0IHZhbHVlIGluc3RlYWQuYCwge1xuICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmRlZmF1bHRWYWx1ZSxcbiAgICAgIHByb3BlcnR5TmFtZTogdGhpcy5wcm9wZXJ0eU5hbWUsXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZTogdGhpcy5fdmFsaWRhdGlvbk1lc3NhZ2UsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUJBLHNCQUFxQjtBQUNyQixvQkFBMkI7QUFDM0IsNkJBQWdDO0FBQ2hDLGlDQUFvQztBQUNwQyw4QkFBaUM7QUFDakMsNENBQStDO0FBRS9DLE1BQU0scUJBQXFCLElBQUkseUNBQWlCO0FBQUEsRUFDOUMsSUFBSSxxRUFBK0I7QUFBQSxFQUNuQyxJQUFJLHVDQUFnQjtBQUFBLEVBQ3BCLElBQUksK0NBQW9CO0FBQzFC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
@@ -7,23 +7,23 @@ import type { App } from 'obsidian';
7
7
  import type { Promisable, ReadonlyDeep } from 'type-fest';
8
8
  import type { Transformer } from '../../Transformers/Transformer.cjs';
9
9
  import type { MaybeReturn, StringKeys } from '../../Type.cjs';
10
- import type { PluginBase } from './PluginBase.cjs';
10
+ import type { ExtractPlugin, ExtractPluginSettings, PluginTypesBase } from './PluginTypesBase.cjs';
11
11
  type Validator<T> = (value: T) => Promisable<MaybeReturn<string>>;
12
12
  /**
13
13
  * Base class for managing plugin settings.
14
14
  *
15
15
  * @typeParam PluginSettings - The type representing the plugin settings object.
16
16
  */
17
- export declare abstract class PluginSettingsManagerBase<PluginSettings extends object> {
18
- readonly plugin: PluginBase<PluginSettings>;
17
+ export declare abstract class PluginSettingsManagerBase<PluginTypes extends PluginTypesBase> {
18
+ readonly plugin: ExtractPlugin<PluginTypes>;
19
19
  readonly app: App;
20
- readonly safeSettings: ReadonlyDeep<PluginSettings>;
20
+ readonly safeSettings: ReadonlyDeep<ExtractPluginSettings<PluginTypes>>;
21
21
  private defaultSettings;
22
22
  private properties;
23
23
  private validators;
24
- constructor(plugin: PluginBase<PluginSettings>);
25
- editAndSave(editor: (settings: PluginSettings) => Promisable<void>): Promise<void>;
26
- getProperty<PropertyName extends StringKeys<PluginSettings>>(propertyName: PropertyName): PluginSettingsProperty<PluginSettings[PropertyName]>;
24
+ constructor(plugin: ExtractPlugin<PluginTypes>);
25
+ editAndSave(editor: (settings: ExtractPluginSettings<PluginTypes>) => Promisable<void>): Promise<void>;
26
+ getProperty<PropertyName extends StringKeys<ExtractPluginSettings<PluginTypes>>>(propertyName: PropertyName): PluginSettingsProperty<ExtractPluginSettings<PluginTypes>[PropertyName]>;
27
27
  loadFromFile(): Promise<void>;
28
28
  /**
29
29
  * Saves the new plugin settings.
@@ -31,9 +31,9 @@ export declare abstract class PluginSettingsManagerBase<PluginSettings extends o
31
31
  * @returns A {@link Promise} that resolves when the settings are saved.
32
32
  */
33
33
  saveToFile(): Promise<void>;
34
- protected addValidator<PropertyName extends StringKeys<PluginSettings>>(propertyName: PropertyName, validator: Validator<PluginSettings[PropertyName]>): void;
34
+ protected addValidator<PropertyName extends StringKeys<ExtractPluginSettings<PluginTypes>>>(propertyName: PropertyName, validator: Validator<ExtractPluginSettings<PluginTypes>[PropertyName]>): void;
35
35
  protected addValidators(): void;
36
- protected abstract createDefaultSettings(): PluginSettings;
36
+ protected abstract createDefaultSettings(): ExtractPluginSettings<PluginTypes>;
37
37
  protected getTransformer(): Transformer;
38
38
  /**
39
39
  * Called when the plugin settings are loaded.
@@ -55,7 +55,6 @@ class PluginSettingsTabBase extends import_obsidian.PluginSettingTab {
55
55
  */
56
56
  bind(valueComponent, propertyName, options) {
57
57
  const DEFAULT_OPTIONS = {
58
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
59
58
  componentToPluginSettingsValueConverter: (value2) => value2,
60
59
  onChanged: import_Function.noop,
61
60
  pluginSettingsToComponentValueConverter: (value2) => value2,
@@ -112,9 +111,12 @@ class PluginSettingsTabBase extends import_obsidian.PluginSettingTab {
112
111
  super.hide();
113
112
  (0, import_Async.invokeAsyncSafely)(() => this.plugin.settingsManager.saveToFile());
114
113
  }
114
+ show() {
115
+ this.app.setting.openTab(this);
116
+ }
115
117
  }
116
118
  // Annotate the CommonJS export names for ESM import in node:
117
119
  0 && (module.exports = {
118
120
  PluginSettingsTabBase
119
121
  });
120
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5TZXR0aW5nc1RhYkJhc2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5nIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBJdCBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kIHRvIGJpbmQgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsZSBjaGFuZ2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29uZGl0aW9uYWxLZXlzLFxuICBQcm9taXNhYmxlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIFBsdWdpblNldHRpbmdUYWIsXG4gIHNldFRvb2x0aXBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFN0cmluZ0tleXMgfSBmcm9tICcuLi8uLi9UeXBlLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuLi9Db21wb25lbnRzL1ZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXIgfSBmcm9tICcuLi9WYWxpZGF0aW9uTWVzc2FnZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkJhc2UgfSBmcm9tICcuL1BsdWdpbkJhc2UudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5IH0gZnJvbSAnLi9QbHVnaW5TZXR0aW5nc01hbmFnZXJCYXNlLnRzJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi8uLi9Bc3luYy50cyc7XG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uLy4uL0Nzc0NsYXNzLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8uLi9GdW5jdGlvbi50cyc7XG5pbXBvcnQgeyBnZXRUZXh0QmFzZWRDb21wb25lbnRWYWx1ZSB9IGZyb20gJy4uL0NvbXBvbmVudHMvVGV4dEJhc2VkQ29tcG9uZW50LnRzJztcbmltcG9ydCB7IGdldFZhbGlkYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL0NvbXBvbmVudHMvVmFsaWRhdG9yQ29tcG9uZW50LnRzJztcbmltcG9ydCB7IGlzVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXIgfSBmcm9tICcuLi9WYWxpZGF0aW9uTWVzc2FnZS50cyc7XG5pbXBvcnQgeyBnZXRQbHVnaW5JZCB9IGZyb20gJy4vUGx1Z2luSWQudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGJpbmRpbmcgYSB2YWx1ZSBjb21wb25lbnQgdG8gYSBwbHVnaW4gc2V0dGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5kT3B0aW9uczxUPiB7XG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQgY2hhbmdlcy5cbiAgICovXG4gIG9uQ2hhbmdlZD8obmV3VmFsdWU6IFQgfCB1bmRlZmluZWQsIG9sZFZhbHVlOiBUKTogUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXNldCB0aGUgc2V0dGluZyB3aGVuIHRoZSBjb21wb25lbnQgdmFsdWUgaXMgZW1wdHkuIERlZmF1bHQgaXMgYHRydWVgLlxuICAgKiBBcHBsaWNhYmxlIG9ubHkgdG8gdGV4dC1iYXNlZCBjb21wb25lbnRzLlxuICAgKi9cbiAgc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHZhbGlkYXRpb24gbWVzc2FnZSB3aGVuIHRoZSBjb21wb25lbnQgdmFsdWUgaXMgaW52YWxpZC4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBzaG91bGRTaG93VmFsaWRhdGlvbk1lc3NhZ2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkIG9wdGlvbnMgZm9yIGJpbmRpbmcgYSB2YWx1ZSBjb21wb25lbnQgdG8gYSBwbHVnaW4gc2V0dGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5kT3B0aW9uc0V4dGVuZGVkPFxuICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCxcbiAgVUlWYWx1ZSxcbiAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5cbj4gZXh0ZW5kcyBCaW5kT3B0aW9uczxQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdPiB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUgYmFjayB0byB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdWlWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb21wb25lbnRUb1BsdWdpblNldHRpbmdzVmFsdWVDb252ZXJ0ZXI6ICh1aVZhbHVlOiBVSVZhbHVlKSA9PiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdIHwgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXI7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdmFsdWUgdG8gdGhlIHZhbHVlIHVzZWQgYnkgdGhlIFVJIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpblNldHRpbmdzVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIFVJIGNvbXBvbmVudC5cbiAgICovXG4gIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHBsdWdpblNldHRpbmdzVmFsdWU6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV0pID0+IFVJVmFsdWU7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG50eXBlIEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW4gZXh0ZW5kcyBQbHVnaW5CYXNlPGFueT4+ID0gUGx1Z2luWydfX3BsdWdpblNldHRpbmdzVHlwZSddO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5ncyB0YWJzIGluIE9ic2lkaWFuLlxuICogUHJvdmlkZXMgYSBtZXRob2QgZm9yIGJpbmRpbmcgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsaW5nIGNoYW5nZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUUGx1Z2luIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiB0aGF0IGV4dGVuZHMgUGx1Z2luQmFzZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQbHVnaW5TZXR0aW5nc1RhYkJhc2U8VFBsdWdpbiBleHRlbmRzIFBsdWdpbkJhc2U8YW55Pj4gZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBvdmVycmlkZSBwbHVnaW46IFRQbHVnaW4pIHtcbiAgICBzdXBlcihwbHVnaW4uYXBwLCBwbHVnaW4pO1xuICAgIHRoaXMuY29udGFpbmVyRWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuTGlicmFyeU5hbWUsIGdldFBsdWdpbklkKCksIENzc0NsYXNzLlBsdWdpblNldHRpbmdzVGFiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyB0byBiaW5kIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBiaW5kaW5nIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBVSVZhbHVlLFxuICAgIFRWYWx1ZUNvbXBvbmVudFxuICA+KFxuICAgIHZhbHVlQ29tcG9uZW50OiBUVmFsdWVDb21wb25lbnQgJiBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxVSVZhbHVlPixcbiAgICBwcm9wZXJ0eU5hbWU6IENvbmRpdGlvbmFsS2V5czxFeHRyYWN0UGx1Z2luU2V0dGluZ3M8VFBsdWdpbj4sIFVJVmFsdWU+LFxuICAgIG9wdGlvbnM/OiBCaW5kT3B0aW9uczxVSVZhbHVlPlxuICApOiBUVmFsdWVDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHZhbHVlQ29tcG9uZW50IC0gVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyB0byBiaW5kIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBiaW5kaW5nIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBVSVZhbHVlLFxuICAgIFRWYWx1ZUNvbXBvbmVudCxcbiAgICBQcm9wZXJ0eU5hbWUgZXh0ZW5kcyBTdHJpbmdLZXlzPEV4dHJhY3RQbHVnaW5TZXR0aW5nczxUUGx1Z2luPj5cbiAgPihcbiAgICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT4sXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgb3B0aW9uczogQmluZE9wdGlvbnNFeHRlbmRlZDxFeHRyYWN0UGx1Z2luU2V0dGluZ3M8VFBsdWdpbj4sIFVJVmFsdWUsIFByb3BlcnR5TmFtZT5cbiAgKTogVFZhbHVlQ29tcG9uZW50O1xuICAvKipcbiAgICogQmluZHMgYSB2YWx1ZSBjb21wb25lbnQgdG8gYSBwbHVnaW4gc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIG9mIHRoZSBVSSBjb21wb25lbnQuXG4gICAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHR5cGVQYXJhbSBQcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqIEBwYXJhbSB2YWx1ZUNvbXBvbmVudCAtIFRoZSB2YWx1ZSBjb21wb25lbnQgdG8gYmluZC5cbiAgICogQHBhcmFtIHByb3BlcnR5TmFtZSAtIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgYmluZGluZyB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGJpbmQ8XG4gICAgVUlWYWx1ZSxcbiAgICBUVmFsdWVDb21wb25lbnQsXG4gICAgUHJvcGVydHlOYW1lIGV4dGVuZHMgU3RyaW5nS2V5czxFeHRyYWN0UGx1Z2luU2V0dGluZ3M8VFBsdWdpbj4+XG4gID4oXG4gICAgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+LFxuICAgIHByb3BlcnR5TmFtZTogUHJvcGVydHlOYW1lLFxuICAgIG9wdGlvbnM/OiBCaW5kT3B0aW9uczxFeHRyYWN0UGx1Z2luU2V0dGluZ3M8VFBsdWdpbj5bUHJvcGVydHlOYW1lXT5cbiAgKTogVFZhbHVlQ29tcG9uZW50IHtcbiAgICB0eXBlIFBsdWdpblNldHRpbmdzID0gRXh0cmFjdFBsdWdpblNldHRpbmdzPFRQbHVnaW4+O1xuICAgIHR5cGUgUHJvcGVydHlUeXBlID0gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXTtcbiAgICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlcXVpcmVkPEJpbmRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5TmFtZT4+ID0ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICBjb21wb25lbnRUb1BsdWdpblNldHRpbmdzVmFsdWVDb252ZXJ0ZXI6ICh2YWx1ZTogVUlWYWx1ZSk6IFByb3BlcnR5VHlwZSA9PiB2YWx1ZSBhcyBQcm9wZXJ0eVR5cGUsXG4gICAgICBvbkNoYW5nZWQ6IG5vb3AsXG4gICAgICBwbHVnaW5TZXR0aW5nc1RvQ29tcG9uZW50VmFsdWVDb252ZXJ0ZXI6ICh2YWx1ZTogUHJvcGVydHlUeXBlKTogVUlWYWx1ZSA9PiB2YWx1ZSBhcyBVSVZhbHVlLFxuICAgICAgc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHk6IHRydWUsXG4gICAgICBzaG91bGRTaG93VmFsaWRhdGlvbk1lc3NhZ2U6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3Qgb3B0aW9uc0V4dDogUmVxdWlyZWQ8QmluZE9wdGlvbnNFeHRlbmRlZDxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgUHJvcGVydHlOYW1lPj4gPSB7IC4uLkRFRkFVTFRfT1BUSU9OUywgLi4ub3B0aW9ucyB9O1xuXG4gICAgY29uc3QgdmFsaWRhdG9yRWxlbWVudCA9IGdldFZhbGlkYXRvckNvbXBvbmVudCh2YWx1ZUNvbXBvbmVudCk/LnZhbGlkYXRvckVsO1xuXG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnBsdWdpbi5zZXR0aW5nc01hbmFnZXIuZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKSBhcyBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PFByb3BlcnR5VHlwZT47XG5cbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnR5LmN1cnJlbnRWYWx1ZTtcblxuICAgIGNvbnN0IHRleHRCYXNlZENvbXBvbmVudCA9IGdldFRleHRCYXNlZENvbXBvbmVudFZhbHVlKHZhbHVlQ29tcG9uZW50KTtcbiAgICB0ZXh0QmFzZWRDb21wb25lbnQ/LnNldFBsYWNlaG9sZGVyVmFsdWUob3B0aW9uc0V4dC5wbHVnaW5TZXR0aW5nc1RvQ29tcG9uZW50VmFsdWVDb252ZXJ0ZXIocHJvcGVydHkuZGVmYXVsdFZhbHVlKSk7XG5cbiAgICBpZiAocHJvcGVydHkuY3VycmVudFZhbHVlID09PSBwcm9wZXJ0eS5kZWZhdWx0VmFsdWUgJiYgdGV4dEJhc2VkQ29tcG9uZW50ICYmIG9wdGlvbnNFeHQuc2hvdWxkUmVzZXRTZXR0aW5nV2hlbkNvbXBvbmVudElzRW1wdHkpIHtcbiAgICAgIHRleHRCYXNlZENvbXBvbmVudC5lbXB0eSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZUNvbXBvbmVudC5zZXRWYWx1ZShvcHRpb25zRXh0LnBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcih2YWx1ZSkpO1xuICAgIH1cblxuICAgIHZhbHVlQ29tcG9uZW50Lm9uQ2hhbmdlKGFzeW5jICh1aVZhbHVlKSA9PiB7XG4gICAgICBpZiAodGV4dEJhc2VkQ29tcG9uZW50Py5pc0VtcHR5KCkgJiYgb3B0aW9uc0V4dC5zaG91bGRSZXNldFNldHRpbmdXaGVuQ29tcG9uZW50SXNFbXB0eSkge1xuICAgICAgICBwcm9wZXJ0eS5yZXNldCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gcHJvcGVydHkuY3VycmVudFZhbHVlO1xuICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSBvcHRpb25zRXh0LmNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcih1aVZhbHVlKTtcbiAgICAgIGlmIChpc1ZhbGlkYXRpb25NZXNzYWdlSG9sZGVyKGNvbnZlcnRlZFZhbHVlKSkge1xuICAgICAgICBwcm9wZXJ0eS5zZXRWYWxpZGF0aW9uTWVzc2FnZShjb252ZXJ0ZWRWYWx1ZS52YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBwcm9wZXJ0eS5zZXRWYWx1ZUFuZFZhbGlkYXRlKGNvbnZlcnRlZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaXNWYWxpZGF0aW9uTWVzc2FnZUhvbGRlcihjb252ZXJ0ZWRWYWx1ZSkgPyB1bmRlZmluZWQgOiBjb252ZXJ0ZWRWYWx1ZTtcbiAgICAgIGF3YWl0IG9wdGlvbnNFeHQub25DaGFuZ2VkKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgfSk7XG5cbiAgICB2YWxpZGF0b3JFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHZhbGlkYXRlKTtcbiAgICB2YWxpZGF0b3JFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdmFsaWRhdGUpO1xuXG4gICAgdmFsaWRhdGUoKTtcbiAgICByZXR1cm4gdmFsdWVDb21wb25lbnQ7XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICAgIGlmICghdmFsaWRhdG9yRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghcHJvcGVydHkudmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgdmFsaWRhdG9yRWxlbWVudC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XG4gICAgICAgIHZhbGlkYXRvckVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO1xuICAgICAgICBwcm9wZXJ0eS5zZXRWYWxpZGF0aW9uTWVzc2FnZSh2YWxpZGF0b3JFbGVtZW50LnZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgdmFsaWRhdG9yRWxlbWVudC5zZXRDdXN0b21WYWxpZGl0eShwcm9wZXJ0eS52YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICBzZXRUb29sdGlwKHZhbGlkYXRvckVsZW1lbnQsIHByb3BlcnR5LnZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIGlmICh2YWxpZGF0b3JFbGVtZW50LmlzQWN0aXZlRWxlbWVudCgpICYmIG9wdGlvbnNFeHQuc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHZhbGlkYXRvckVsZW1lbnQucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgaGlkZSgpOiB2b2lkIHtcbiAgICBzdXBlci5oaWRlKCk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gdGhpcy5wbHVnaW4uc2V0dGluZ3NNYW5hZ2VyLnNhdmVUb0ZpbGUoKSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsc0JBR087QUFRUCxtQkFBa0M7QUFDbEMsc0JBQXlCO0FBQ3pCLHNCQUFxQjtBQUNyQixnQ0FBMkM7QUFDM0MsZ0NBQXNDO0FBQ3RDLCtCQUEwQztBQUMxQyxzQkFBNEI7QUEwRHJCLE1BQWUsOEJBQStELGlDQUFpQjtBQUFBLEVBQzdGLFlBQTRCLFFBQWlCO0FBQ2xELFVBQU0sT0FBTyxLQUFLLE1BQU07QUFEUztBQUVqQyxTQUFLLFlBQVksU0FBUyx5QkFBUyxpQkFBYSw2QkFBWSxHQUFHLHlCQUFTLGlCQUFpQjtBQUFBLEVBQzNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBbURPLEtBS0wsZ0JBQ0EsY0FDQSxTQUNpQjtBQUdqQixVQUFNLGtCQUF3RjtBQUFBO0FBQUEsTUFFNUYseUNBQXlDLENBQUNBLFdBQWlDQTtBQUFBLE1BQzNFLFdBQVc7QUFBQSxNQUNYLHlDQUF5QyxDQUFDQSxXQUFpQ0E7QUFBQSxNQUMzRSx3Q0FBd0M7QUFBQSxNQUN4Qyw2QkFBNkI7QUFBQSxJQUMvQjtBQUVBLFVBQU0sYUFBbUYsRUFBRSxHQUFHLGlCQUFpQixHQUFHLFFBQVE7QUFFMUgsVUFBTSx1QkFBbUIsaURBQXNCLGNBQWMsR0FBRztBQUVoRSxVQUFNLFdBQVcsS0FBSyxPQUFPLGdCQUFnQixZQUFZLFlBQVk7QUFFckUsVUFBTSxRQUFRLFNBQVM7QUFFdkIsVUFBTSx5QkFBcUIsc0RBQTJCLGNBQWM7QUFDcEUsd0JBQW9CLG9CQUFvQixXQUFXLHdDQUF3QyxTQUFTLFlBQVksQ0FBQztBQUVqSCxRQUFJLFNBQVMsaUJBQWlCLFNBQVMsZ0JBQWdCLHNCQUFzQixXQUFXLHdDQUF3QztBQUM5SCx5QkFBbUIsTUFBTTtBQUFBLElBQzNCLE9BQU87QUFDTCxxQkFBZSxTQUFTLFdBQVcsd0NBQXdDLEtBQUssQ0FBQztBQUFBLElBQ25GO0FBRUEsbUJBQWUsU0FBUyxPQUFPLFlBQVk7QUFDekMsVUFBSSxvQkFBb0IsUUFBUSxLQUFLLFdBQVcsd0NBQXdDO0FBQ3RGLGlCQUFTLE1BQU07QUFDZjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFdBQVcsU0FBUztBQUMxQixZQUFNLGlCQUFpQixXQUFXLHdDQUF3QyxPQUFPO0FBQ2pGLGNBQUksb0RBQTBCLGNBQWMsR0FBRztBQUM3QyxpQkFBUyxxQkFBcUIsZUFBZSxpQkFBaUI7QUFBQSxNQUNoRSxPQUFPO0FBQ0wsY0FBTSxTQUFTLG9CQUFvQixjQUFjO0FBQUEsTUFDbkQ7QUFDQSxZQUFNLGVBQVcsb0RBQTBCLGNBQWMsSUFBSSxTQUFZO0FBQ3pFLFlBQU0sV0FBVyxVQUFVLFVBQVUsUUFBUTtBQUFBLElBQy9DLENBQUM7QUFFRCxzQkFBa0IsaUJBQWlCLFNBQVMsUUFBUTtBQUNwRCxzQkFBa0IsaUJBQWlCLFFBQVEsUUFBUTtBQUVuRCxhQUFTO0FBQ1QsV0FBTztBQUVQLGFBQVMsV0FBaUI7QUFDeEIsVUFBSSxDQUFDLGtCQUFrQjtBQUNyQjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLENBQUMsU0FBUyxtQkFBbUI7QUFDL0IseUJBQWlCLGtCQUFrQixFQUFFO0FBQ3JDLHlCQUFpQixjQUFjO0FBQy9CLGlCQUFTLHFCQUFxQixpQkFBaUIsaUJBQWlCO0FBQUEsTUFDbEU7QUFFQSx1QkFBaUIsa0JBQWtCLFNBQVMsaUJBQWlCO0FBQzdELHNDQUFXLGtCQUFrQixTQUFTLGlCQUFpQjtBQUN2RCxVQUFJLGlCQUFpQixnQkFBZ0IsS0FBSyxXQUFXLDZCQUE2QjtBQUNoRix5QkFBaUIsZUFBZTtBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVnQixPQUFhO0FBQzNCLFVBQU0sS0FBSztBQUNYLHdDQUFrQixNQUFNLEtBQUssT0FBTyxnQkFBZ0IsV0FBVyxDQUFDO0FBQUEsRUFDbEU7QUFDRjsiLAogICJuYW1lcyI6IFsidmFsdWUiXQp9Cg==
122
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5TZXR0aW5nc1RhYkJhc2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5nIHRhYnMgaW4gT2JzaWRpYW4uXG4gKiBJdCBwcm92aWRlcyBhIHV0aWxpdHkgbWV0aG9kIHRvIGJpbmQgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsZSBjaGFuZ2VzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29uZGl0aW9uYWxLZXlzLFxuICBQcm9taXNhYmxlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIFBsdWdpblNldHRpbmdUYWIsXG4gIHNldFRvb2x0aXBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFN0cmluZ0tleXMgfSBmcm9tICcuLi8uLi9UeXBlLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuLi9Db21wb25lbnRzL1ZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXIgfSBmcm9tICcuLi9WYWxpZGF0aW9uTWVzc2FnZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdzUHJvcGVydHkgfSBmcm9tICcuL1BsdWdpblNldHRpbmdzTWFuYWdlckJhc2UudHMnO1xuaW1wb3J0IHR5cGUge1xuICBFeHRyYWN0UGx1Z2luLFxuICBFeHRyYWN0UGx1Z2luU2V0dGluZ3MsXG4gIFBsdWdpblR5cGVzQmFzZVxufSBmcm9tICcuL1BsdWdpblR5cGVzQmFzZS50cyc7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnLi4vLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi8uLi9Dc3NDbGFzcy50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0VGV4dEJhc2VkQ29tcG9uZW50VmFsdWUgfSBmcm9tICcuLi9Db21wb25lbnRzL1RleHRCYXNlZENvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9Db21wb25lbnRzL1ZhbGlkYXRvckNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBpc1ZhbGlkYXRpb25NZXNzYWdlSG9sZGVyIH0gZnJvbSAnLi4vVmFsaWRhdGlvbk1lc3NhZ2UudHMnO1xuaW1wb3J0IHsgZ2V0UGx1Z2luSWQgfSBmcm9tICcuL1BsdWdpbklkLnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBiaW5kaW5nIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluZE9wdGlvbnM8VD4ge1xuICAvKipcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50IGNoYW5nZXMuXG4gICAqL1xuICBvbkNoYW5nZWQ/KG5ld1ZhbHVlOiBUIHwgdW5kZWZpbmVkLCBvbGRWYWx1ZTogVCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVzZXQgdGhlIHNldHRpbmcgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGlzIGVtcHR5LiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICogQXBwbGljYWJsZSBvbmx5IHRvIHRleHQtYmFzZWQgY29tcG9uZW50cy5cbiAgICovXG4gIHNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2Ugd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGlzIGludmFsaWQuIERlZmF1bHQgaXMgYHRydWVgLlxuICAgKi9cbiAgc2hvdWxkU2hvd1ZhbGlkYXRpb25NZXNzYWdlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBvcHRpb25zIGZvciBiaW5kaW5nIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluZE9wdGlvbnNFeHRlbmRlZDxcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gIFVJVmFsdWUsXG4gIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+XG4+IGV4dGVuZHMgQmluZE9wdGlvbnM8UGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXT4ge1xuICAvKipcbiAgICogQ29udmVydHMgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlIGJhY2sgdG8gdGhlIHBsdWdpbiBzZXR0aW5ncyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHVpVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIHRvIHNldCBvbiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyOiAodWlWYWx1ZTogVUlWYWx1ZSkgPT4gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHlOYW1lXSB8IFZhbGlkYXRpb25NZXNzYWdlSG9sZGVyO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlIHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IHRoZSBVSSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW5TZXR0aW5nc1ZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBVSSBjb21wb25lbnQuXG4gICAqL1xuICBwbHVnaW5TZXR0aW5nc1RvQ29tcG9uZW50VmFsdWVDb252ZXJ0ZXI6IChwbHVnaW5TZXR0aW5nc1ZhbHVlOiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eU5hbWVdKSA9PiBVSVZhbHVlO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIHBsdWdpbiBzZXR0aW5ncyB0YWJzIGluIE9ic2lkaWFuLlxuICogUHJvdmlkZXMgYSBtZXRob2QgZm9yIGJpbmRpbmcgdmFsdWUgY29tcG9uZW50cyB0byBwbHVnaW4gc2V0dGluZ3MgYW5kIGhhbmRsaW5nIGNoYW5nZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUUGx1Z2luIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiB0aGF0IGV4dGVuZHMgUGx1Z2luQmFzZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpblNldHRpbmdzVGFiQmFzZTxQbHVnaW5UeXBlcyBleHRlbmRzIFBsdWdpblR5cGVzQmFzZT4gZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBvdmVycmlkZSBwbHVnaW46IEV4dHJhY3RQbHVnaW48UGx1Z2luVHlwZXM+KSB7XG4gICAgc3VwZXIocGx1Z2luLmFwcCwgcGx1Z2luKTtcbiAgICB0aGlzLmNvbnRhaW5lckVsLmFkZENsYXNzKENzc0NsYXNzLkxpYnJhcnlOYW1lLCBnZXRQbHVnaW5JZCgpLCBDc3NDbGFzcy5QbHVnaW5TZXR0aW5nc1RhYik7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgYSB2YWx1ZSBjb21wb25lbnQgdG8gYSBwbHVnaW4gc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIG9mIHRoZSBVSSBjb21wb25lbnQuXG4gICAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHZhbHVlQ29tcG9uZW50IC0gVGhlIHZhbHVlIGNvbXBvbmVudCB0byBiaW5kLlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIHByb3BlcnR5IG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgYmluZGluZyB0aGUgdmFsdWUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGJpbmQ8XG4gICAgVUlWYWx1ZSxcbiAgICBUVmFsdWVDb21wb25lbnRcbiAgPihcbiAgICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT4sXG4gICAgcHJvcGVydHlOYW1lOiBDb25kaXRpb25hbEtleXM8RXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPiwgVUlWYWx1ZT4sXG4gICAgb3B0aW9ucz86IEJpbmRPcHRpb25zPFVJVmFsdWU+XG4gICk6IFRWYWx1ZUNvbXBvbmVudDtcbiAgLyoqXG4gICAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyB0byBiaW5kIHRvLlxuICAgKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPj5cbiAgPihcbiAgICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT4sXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgb3B0aW9uczogQmluZE9wdGlvbnNFeHRlbmRlZDxFeHRyYWN0UGx1Z2luU2V0dGluZ3M8UGx1Z2luVHlwZXM+LCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+XG4gICk6IFRWYWx1ZUNvbXBvbmVudDtcbiAgLyoqXG4gICAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHlOYW1lIC0gVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyB0byBiaW5kIHRvLlxuICAgKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgdmFsdWUgY29tcG9uZW50IHRvIGJpbmQuXG4gICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIHRvIGJpbmQgdG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGJpbmRpbmcgdGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBiaW5kPFxuICAgIFVJVmFsdWUsXG4gICAgVFZhbHVlQ29tcG9uZW50LFxuICAgIFByb3BlcnR5TmFtZSBleHRlbmRzIFN0cmluZ0tleXM8RXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPj5cbiAgPihcbiAgICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50ICYgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT4sXG4gICAgcHJvcGVydHlOYW1lOiBQcm9wZXJ0eU5hbWUsXG4gICAgb3B0aW9ucz86IEJpbmRPcHRpb25zPEV4dHJhY3RQbHVnaW5TZXR0aW5nczxQbHVnaW5UeXBlcz5bUHJvcGVydHlOYW1lXT5cbiAgKTogVFZhbHVlQ29tcG9uZW50IHtcbiAgICB0eXBlIFBsdWdpblNldHRpbmdzID0gRXh0cmFjdFBsdWdpblNldHRpbmdzPFBsdWdpblR5cGVzPjtcbiAgICB0eXBlIFByb3BlcnR5VHlwZSA9IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5TmFtZV07XG4gICAgY29uc3QgREVGQVVMVF9PUFRJT05TOiBSZXF1aXJlZDxCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+PiA9IHtcbiAgICAgIGNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcjogKHZhbHVlOiBVSVZhbHVlKTogUHJvcGVydHlUeXBlID0+IHZhbHVlIGFzIFByb3BlcnR5VHlwZSxcbiAgICAgIG9uQ2hhbmdlZDogbm9vcCxcbiAgICAgIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHZhbHVlOiBQcm9wZXJ0eVR5cGUpOiBVSVZhbHVlID0+IHZhbHVlIGFzIFVJVmFsdWUsXG4gICAgICBzaG91bGRSZXNldFNldHRpbmdXaGVuQ29tcG9uZW50SXNFbXB0eTogdHJ1ZSxcbiAgICAgIHNob3VsZFNob3dWYWxpZGF0aW9uTWVzc2FnZTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zRXh0OiBSZXF1aXJlZDxCaW5kT3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eU5hbWU+PiA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi5vcHRpb25zIH07XG5cbiAgICBjb25zdCB2YWxpZGF0b3JFbGVtZW50ID0gZ2V0VmFsaWRhdG9yQ29tcG9uZW50KHZhbHVlQ29tcG9uZW50KT8udmFsaWRhdG9yRWw7XG5cbiAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucGx1Z2luLnNldHRpbmdzTWFuYWdlci5nZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIGFzIFBsdWdpblNldHRpbmdzUHJvcGVydHk8UHJvcGVydHlUeXBlPjtcblxuICAgIGNvbnN0IHZhbHVlID0gcHJvcGVydHkuY3VycmVudFZhbHVlO1xuXG4gICAgY29uc3QgdGV4dEJhc2VkQ29tcG9uZW50ID0gZ2V0VGV4dEJhc2VkQ29tcG9uZW50VmFsdWUodmFsdWVDb21wb25lbnQpO1xuICAgIHRleHRCYXNlZENvbXBvbmVudD8uc2V0UGxhY2Vob2xkZXJWYWx1ZShvcHRpb25zRXh0LnBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcihwcm9wZXJ0eS5kZWZhdWx0VmFsdWUpKTtcblxuICAgIGlmIChwcm9wZXJ0eS5jdXJyZW50VmFsdWUgPT09IHByb3BlcnR5LmRlZmF1bHRWYWx1ZSAmJiB0ZXh0QmFzZWRDb21wb25lbnQgJiYgb3B0aW9uc0V4dC5zaG91bGRSZXNldFNldHRpbmdXaGVuQ29tcG9uZW50SXNFbXB0eSkge1xuICAgICAgdGV4dEJhc2VkQ29tcG9uZW50LmVtcHR5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlQ29tcG9uZW50LnNldFZhbHVlKG9wdGlvbnNFeHQucGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgdmFsdWVDb21wb25lbnQub25DaGFuZ2UoYXN5bmMgKHVpVmFsdWUpID0+IHtcbiAgICAgIGlmICh0ZXh0QmFzZWRDb21wb25lbnQ/LmlzRW1wdHkoKSAmJiBvcHRpb25zRXh0LnNob3VsZFJlc2V0U2V0dGluZ1doZW5Db21wb25lbnRJc0VtcHR5KSB7XG4gICAgICAgIHByb3BlcnR5LnJlc2V0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBwcm9wZXJ0eS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IG9wdGlvbnNFeHQuY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyKHVpVmFsdWUpO1xuICAgICAgaWYgKGlzVmFsaWRhdGlvbk1lc3NhZ2VIb2xkZXIoY29udmVydGVkVmFsdWUpKSB7XG4gICAgICAgIHByb3BlcnR5LnNldFZhbGlkYXRpb25NZXNzYWdlKGNvbnZlcnRlZFZhbHVlLnZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHByb3BlcnR5LnNldFZhbHVlQW5kVmFsaWRhdGUoY29udmVydGVkVmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3VmFsdWUgPSBpc1ZhbGlkYXRpb25NZXNzYWdlSG9sZGVyKGNvbnZlcnRlZFZhbHVlKSA/IHVuZGVmaW5lZCA6IGNvbnZlcnRlZFZhbHVlO1xuICAgICAgYXdhaXQgb3B0aW9uc0V4dC5vbkNoYW5nZWQobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9KTtcblxuICAgIHZhbGlkYXRvckVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdmFsaWRhdGUpO1xuICAgIHZhbGlkYXRvckVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB2YWxpZGF0ZSk7XG5cbiAgICB2YWxpZGF0ZSgpO1xuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudDtcblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgICAgaWYgKCF2YWxpZGF0b3JFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwcm9wZXJ0eS52YWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgICB2YWxpZGF0b3JFbGVtZW50LnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICAgICAgdmFsaWRhdG9yRWxlbWVudC5jaGVja1ZhbGlkaXR5KCk7XG4gICAgICAgIHByb3BlcnR5LnNldFZhbGlkYXRpb25NZXNzYWdlKHZhbGlkYXRvckVsZW1lbnQudmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICB2YWxpZGF0b3JFbGVtZW50LnNldEN1c3RvbVZhbGlkaXR5KHByb3BlcnR5LnZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIHNldFRvb2x0aXAodmFsaWRhdG9yRWxlbWVudCwgcHJvcGVydHkudmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgaWYgKHZhbGlkYXRvckVsZW1lbnQuaXNBY3RpdmVFbGVtZW50KCkgJiYgb3B0aW9uc0V4dC5zaG91bGRTaG93VmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgdmFsaWRhdG9yRWxlbWVudC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBoaWRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmhpZGUoKTtcbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLnBsdWdpbi5zZXR0aW5nc01hbmFnZXIuc2F2ZVRvRmlsZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwLnNldHRpbmcub3BlblRhYih0aGlzKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSxzQkFHTztBQVlQLG1CQUFrQztBQUNsQyxzQkFBeUI7QUFDekIsc0JBQXFCO0FBQ3JCLGdDQUEyQztBQUMzQyxnQ0FBc0M7QUFDdEMsK0JBQTBDO0FBQzFDLHNCQUE0QjtBQXNEckIsTUFBZSw4QkFBbUUsaUNBQWlCO0FBQUEsRUFDakcsWUFBNEIsUUFBb0M7QUFDckUsVUFBTSxPQUFPLEtBQUssTUFBTTtBQURTO0FBRWpDLFNBQUssWUFBWSxTQUFTLHlCQUFTLGlCQUFhLDZCQUFZLEdBQUcseUJBQVMsaUJBQWlCO0FBQUEsRUFDM0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFtRE8sS0FLTCxnQkFDQSxjQUNBLFNBQ2lCO0FBR2pCLFVBQU0sa0JBQXdGO0FBQUEsTUFDNUYseUNBQXlDLENBQUNBLFdBQWlDQTtBQUFBLE1BQzNFLFdBQVc7QUFBQSxNQUNYLHlDQUF5QyxDQUFDQSxXQUFpQ0E7QUFBQSxNQUMzRSx3Q0FBd0M7QUFBQSxNQUN4Qyw2QkFBNkI7QUFBQSxJQUMvQjtBQUVBLFVBQU0sYUFBbUYsRUFBRSxHQUFHLGlCQUFpQixHQUFHLFFBQVE7QUFFMUgsVUFBTSx1QkFBbUIsaURBQXNCLGNBQWMsR0FBRztBQUVoRSxVQUFNLFdBQVcsS0FBSyxPQUFPLGdCQUFnQixZQUFZLFlBQVk7QUFFckUsVUFBTSxRQUFRLFNBQVM7QUFFdkIsVUFBTSx5QkFBcUIsc0RBQTJCLGNBQWM7QUFDcEUsd0JBQW9CLG9CQUFvQixXQUFXLHdDQUF3QyxTQUFTLFlBQVksQ0FBQztBQUVqSCxRQUFJLFNBQVMsaUJBQWlCLFNBQVMsZ0JBQWdCLHNCQUFzQixXQUFXLHdDQUF3QztBQUM5SCx5QkFBbUIsTUFBTTtBQUFBLElBQzNCLE9BQU87QUFDTCxxQkFBZSxTQUFTLFdBQVcsd0NBQXdDLEtBQUssQ0FBQztBQUFBLElBQ25GO0FBRUEsbUJBQWUsU0FBUyxPQUFPLFlBQVk7QUFDekMsVUFBSSxvQkFBb0IsUUFBUSxLQUFLLFdBQVcsd0NBQXdDO0FBQ3RGLGlCQUFTLE1BQU07QUFDZjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLFdBQVcsU0FBUztBQUMxQixZQUFNLGlCQUFpQixXQUFXLHdDQUF3QyxPQUFPO0FBQ2pGLGNBQUksb0RBQTBCLGNBQWMsR0FBRztBQUM3QyxpQkFBUyxxQkFBcUIsZUFBZSxpQkFBaUI7QUFBQSxNQUNoRSxPQUFPO0FBQ0wsY0FBTSxTQUFTLG9CQUFvQixjQUFjO0FBQUEsTUFDbkQ7QUFDQSxZQUFNLGVBQVcsb0RBQTBCLGNBQWMsSUFBSSxTQUFZO0FBQ3pFLFlBQU0sV0FBVyxVQUFVLFVBQVUsUUFBUTtBQUFBLElBQy9DLENBQUM7QUFFRCxzQkFBa0IsaUJBQWlCLFNBQVMsUUFBUTtBQUNwRCxzQkFBa0IsaUJBQWlCLFFBQVEsUUFBUTtBQUVuRCxhQUFTO0FBQ1QsV0FBTztBQUVQLGFBQVMsV0FBaUI7QUFDeEIsVUFBSSxDQUFDLGtCQUFrQjtBQUNyQjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLENBQUMsU0FBUyxtQkFBbUI7QUFDL0IseUJBQWlCLGtCQUFrQixFQUFFO0FBQ3JDLHlCQUFpQixjQUFjO0FBQy9CLGlCQUFTLHFCQUFxQixpQkFBaUIsaUJBQWlCO0FBQUEsTUFDbEU7QUFFQSx1QkFBaUIsa0JBQWtCLFNBQVMsaUJBQWlCO0FBQzdELHNDQUFXLGtCQUFrQixTQUFTLGlCQUFpQjtBQUN2RCxVQUFJLGlCQUFpQixnQkFBZ0IsS0FBSyxXQUFXLDZCQUE2QjtBQUNoRix5QkFBaUIsZUFBZTtBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVnQixPQUFhO0FBQzNCLFVBQU0sS0FBSztBQUNYLHdDQUFrQixNQUFNLEtBQUssT0FBTyxnQkFBZ0IsV0FBVyxDQUFDO0FBQUEsRUFDbEU7QUFBQSxFQUVPLE9BQWE7QUFDbEIsU0FBSyxJQUFJLFFBQVEsUUFBUSxJQUFJO0FBQUEsRUFDL0I7QUFDRjsiLAogICJuYW1lcyI6IFsidmFsdWUiXQp9Cg==
@@ -9,7 +9,7 @@ import { PluginSettingTab } from 'obsidian';
9
9
  import type { StringKeys } from '../../Type.cjs';
10
10
  import type { ValueComponentWithChangeTracking } from '../Components/ValueComponentWithChangeTracking.cjs';
11
11
  import type { ValidationMessageHolder } from '../ValidationMessage.cjs';
12
- import type { PluginBase } from './PluginBase.cjs';
12
+ import type { ExtractPlugin, ExtractPluginSettings, PluginTypesBase } from './PluginTypesBase.cjs';
13
13
  /**
14
14
  * Options for binding a value component to a plugin setting.
15
15
  */
@@ -47,16 +47,15 @@ export interface BindOptionsExtended<PluginSettings extends object, UIValue, Pro
47
47
  */
48
48
  pluginSettingsToComponentValueConverter: (pluginSettingsValue: PluginSettings[PropertyName]) => UIValue;
49
49
  }
50
- type ExtractPluginSettings<Plugin extends PluginBase<any>> = Plugin['__pluginSettingsType'];
51
50
  /**
52
51
  * Base class for creating plugin settings tabs in Obsidian.
53
52
  * Provides a method for binding value components to plugin settings and handling changes.
54
53
  *
55
54
  * @typeParam TPlugin - The type of the plugin that extends PluginBase.
56
55
  */
57
- export declare abstract class PluginSettingsTabBase<TPlugin extends PluginBase<any>> extends PluginSettingTab {
58
- plugin: TPlugin;
59
- constructor(plugin: TPlugin);
56
+ export declare abstract class PluginSettingsTabBase<PluginTypes extends PluginTypesBase> extends PluginSettingTab {
57
+ plugin: ExtractPlugin<PluginTypes>;
58
+ constructor(plugin: ExtractPlugin<PluginTypes>);
60
59
  /**
61
60
  * Binds a value component to a plugin setting.
62
61
  *
@@ -67,7 +66,7 @@ export declare abstract class PluginSettingsTabBase<TPlugin extends PluginBase<a
67
66
  * @param options - The options for binding the value component.
68
67
  * @returns The value component.
69
68
  */
70
- bind<UIValue, TValueComponent>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, propertyName: ConditionalKeys<ExtractPluginSettings<TPlugin>, UIValue>, options?: BindOptions<UIValue>): TValueComponent;
69
+ bind<UIValue, TValueComponent>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, propertyName: ConditionalKeys<ExtractPluginSettings<PluginTypes>, UIValue>, options?: BindOptions<UIValue>): TValueComponent;
71
70
  /**
72
71
  * Binds a value component to a plugin setting.
73
72
  *
@@ -79,7 +78,7 @@ export declare abstract class PluginSettingsTabBase<TPlugin extends PluginBase<a
79
78
  * @param options - The options for binding the value component.
80
79
  * @returns The value component.
81
80
  */
82
- bind<UIValue, TValueComponent, PropertyName extends StringKeys<ExtractPluginSettings<TPlugin>>>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, propertyName: PropertyName, options: BindOptionsExtended<ExtractPluginSettings<TPlugin>, UIValue, PropertyName>): TValueComponent;
81
+ bind<UIValue, TValueComponent, PropertyName extends StringKeys<ExtractPluginSettings<PluginTypes>>>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, propertyName: PropertyName, options: BindOptionsExtended<ExtractPluginSettings<PluginTypes>, UIValue, PropertyName>): TValueComponent;
83
82
  hide(): void;
83
+ show(): void;
84
84
  }
85
- export {};
@@ -0,0 +1,24 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>{const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};return browserProcess},"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&module.default?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
7
+
8
+ "use strict";
9
+ var __defProp = Object.defineProperty;
10
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11
+ var __getOwnPropNames = Object.getOwnPropertyNames;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+ var PluginTypesBase_exports = {};
23
+ module.exports = __toCommonJS(PluginTypesBase_exports);
24
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5UeXBlc0Jhc2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogVHlwZXMgaGVscGVycyBmb3IgcGx1Z2luIHR5cGVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luQmFzZSB9IGZyb20gJy4vUGx1Z2luQmFzZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdzTWFuYWdlckJhc2UgfSBmcm9tICcuL1BsdWdpblNldHRpbmdzTWFuYWdlckJhc2UudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc1RhYkJhc2UgfSBmcm9tICcuL1BsdWdpblNldHRpbmdzVGFiQmFzZS50cyc7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBsdWdpbiBmcm9tIHRoZSBwbHVnaW4gdHlwZXMuXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5UeXBlcyAtIFRoZSBwbHVnaW4gdHlwZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEV4dHJhY3RQbHVnaW48UGx1Z2luVHlwZXMgZXh0ZW5kcyBQbHVnaW5UeXBlc0Jhc2U+ID0gUGx1Z2luVHlwZXNbJ3BsdWdpbiddO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBwbHVnaW4gc2V0dGluZ3MgZnJvbSB0aGUgcGx1Z2luIHR5cGVzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luVHlwZXMgLSBUaGUgcGx1Z2luIHR5cGVzLlxuICovXG5leHBvcnQgdHlwZSBFeHRyYWN0UGx1Z2luU2V0dGluZ3M8UGx1Z2luVHlwZXMgZXh0ZW5kcyBQbHVnaW5UeXBlc0Jhc2U+ID0gUGx1Z2luVHlwZXNbJ3BsdWdpblNldHRpbmdzJ107XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBsdWdpbiBzZXR0aW5ncyBtYW5hZ2VyIGZyb20gdGhlIHBsdWdpbiB0eXBlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblR5cGVzIC0gVGhlIHBsdWdpbiB0eXBlcy5cbiAqL1xuZXhwb3J0IHR5cGUgRXh0cmFjdFBsdWdpblNldHRpbmdzTWFuYWdlcjxQbHVnaW5UeXBlcyBleHRlbmRzIFBsdWdpblR5cGVzQmFzZT4gPSBQbHVnaW5UeXBlc1sncGx1Z2luU2V0dGluZ3NNYW5hZ2VyJ107XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBsdWdpbiBzZXR0aW5ncyB0YWIgZnJvbSB0aGUgcGx1Z2luIHR5cGVzLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luVHlwZXMgLSBUaGUgcGx1Z2luIHR5cGVzLlxuICovXG5leHBvcnQgdHlwZSBFeHRyYWN0UGx1Z2luU2V0dGluZ3NUYWI8UGx1Z2luVHlwZXMgZXh0ZW5kcyBQbHVnaW5UeXBlc0Jhc2U+ID0gUGx1Z2luVHlwZXNbJ3BsdWdpblNldHRpbmdzVGFiJ107XG5cbi8qKlxuICogVGhlIGJhc2UgdHlwZSBmb3IgcGx1Z2luIHR5cGVzLlxuICpcbiAqIFRoZSBpbnRlcmZhY2UgaXMgdXNlZCBvbmx5IGZvciB0eXBlIGluZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5UeXBlc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIHBsdWdpbi5cbiAgICovXG4gIHBsdWdpbjogUGx1Z2luQmFzZTxQbHVnaW5UeXBlc0Jhc2U+O1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIHBsdWdpblNldHRpbmdzOiBvYmplY3Q7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIHNldHRpbmdzIG1hbmFnZXIuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwbHVnaW5TZXR0aW5nc01hbmFnZXI6IFBsdWdpblNldHRpbmdzTWFuYWdlckJhc2U8YW55PjtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcGx1Z2luU2V0dGluZ3NUYWI6IFBsdWdpblNldHRpbmdzVGFiQmFzZTxhbnk+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @packageDocumentation
3
+ *
4
+ * Types helpers for plugin types.
5
+ */
6
+ import type { PluginBase } from './PluginBase.cjs';
7
+ import type { PluginSettingsManagerBase } from './PluginSettingsManagerBase.cjs';
8
+ import type { PluginSettingsTabBase } from './PluginSettingsTabBase.cjs';
9
+ /**
10
+ * Extracts the plugin from the plugin types.
11
+ *
12
+ * @typeParam PluginTypes - The plugin types.
13
+ */
14
+ export type ExtractPlugin<PluginTypes extends PluginTypesBase> = PluginTypes['plugin'];
15
+ /**
16
+ * Extracts the plugin settings from the plugin types.
17
+ *
18
+ * @typeParam PluginTypes - The plugin types.
19
+ */
20
+ export type ExtractPluginSettings<PluginTypes extends PluginTypesBase> = PluginTypes['pluginSettings'];
21
+ /**
22
+ * Extracts the plugin settings manager from the plugin types.
23
+ *
24
+ * @typeParam PluginTypes - The plugin types.
25
+ */
26
+ export type ExtractPluginSettingsManager<PluginTypes extends PluginTypesBase> = PluginTypes['pluginSettingsManager'];
27
+ /**
28
+ * Extracts the plugin settings tab from the plugin types.
29
+ *
30
+ * @typeParam PluginTypes - The plugin types.
31
+ */
32
+ export type ExtractPluginSettingsTab<PluginTypes extends PluginTypesBase> = PluginTypes['pluginSettingsTab'];
33
+ /**
34
+ * The base type for plugin types.
35
+ *
36
+ * The interface is used only for type inference.
37
+ */
38
+ export interface PluginTypesBase {
39
+ /**
40
+ * The plugin.
41
+ */
42
+ plugin: PluginBase<PluginTypesBase>;
43
+ /**
44
+ * The plugin settings.
45
+ */
46
+ pluginSettings: object;
47
+ /**
48
+ * The plugin settings manager.
49
+ */
50
+ pluginSettingsManager: PluginSettingsManagerBase<any>;
51
+ /**
52
+ * The plugin settings tab.
53
+ */
54
+ pluginSettingsTab: PluginSettingsTabBase<any>;
55
+ }
@@ -41,7 +41,8 @@ __export(Plugin_exports, {
41
41
  PluginContext: () => PluginContext,
42
42
  PluginId: () => PluginId,
43
43
  PluginSettingsManagerBase: () => PluginSettingsManagerBase,
44
- PluginSettingsTabBase: () => PluginSettingsTabBase
44
+ PluginSettingsTabBase: () => PluginSettingsTabBase,
45
+ PluginTypesBase: () => PluginTypesBase
45
46
  });
46
47
  module.exports = __toCommonJS(Plugin_exports);
47
48
  var ObsidianPluginRepoPaths = __toESM(__extractDefault(require('./ObsidianPluginRepoPaths.cjs')), 1);
@@ -51,6 +52,7 @@ var PluginContext = __toESM(__extractDefault(require('./PluginContext.cjs')), 1)
51
52
  var PluginId = __toESM(__extractDefault(require('./PluginId.cjs')), 1);
52
53
  var PluginSettingsManagerBase = __toESM(__extractDefault(require('./PluginSettingsManagerBase.cjs')), 1);
53
54
  var PluginSettingsTabBase = __toESM(__extractDefault(require('./PluginSettingsTabBase.cjs')), 1);
55
+ var PluginTypesBase = __toESM(__extractDefault(require('./PluginTypesBase.cjs')), 1);
54
56
  // Annotate the CommonJS export names for ESM import in node:
55
57
  0 && (module.exports = {
56
58
  ObsidianPluginRepoPaths,
@@ -59,6 +61,7 @@ var PluginSettingsTabBase = __toESM(__extractDefault(require('./PluginSettingsTa
59
61
  PluginContext,
60
62
  PluginId,
61
63
  PluginSettingsManagerBase,
62
- PluginSettingsTabBase
64
+ PluginSettingsTabBase,
65
+ PluginTypesBase
63
66
  });
64
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIGZyb20gJy4vT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMudHMnO1xuZXhwb3J0ICogYXMgUGx1Z2luIGZyb20gJy4vUGx1Z2luLnRzJztcbmV4cG9ydCAqIGFzIFBsdWdpbkJhc2UgZnJvbSAnLi9QbHVnaW5CYXNlLnRzJztcbmV4cG9ydCAqIGFzIFBsdWdpbkNvbnRleHQgZnJvbSAnLi9QbHVnaW5Db250ZXh0LnRzJztcbmV4cG9ydCAqIGFzIFBsdWdpbklkIGZyb20gJy4vUGx1Z2luSWQudHMnO1xuZXhwb3J0ICogYXMgUGx1Z2luU2V0dGluZ3NNYW5hZ2VyQmFzZSBmcm9tICcuL1BsdWdpblNldHRpbmdzTWFuYWdlckJhc2UudHMnO1xuZXhwb3J0ICogYXMgUGx1Z2luU2V0dGluZ3NUYWJCYXNlIGZyb20gJy4vUGx1Z2luU2V0dGluZ3NUYWJCYXNlLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBLDhCQUF5QztBQUN6QyxhQUF3QjtBQUN4QixpQkFBNEI7QUFDNUIsb0JBQStCO0FBQy9CLGVBQTBCO0FBQzFCLGdDQUEyQztBQUMzQyw0QkFBdUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
67
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzIE9ic2lkaWFuUGx1Z2luUmVwb1BhdGhzIGZyb20gJy4vT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMudHMnO1xuZXhwb3J0ICogYXMgUGx1Z2luIGZyb20gJy4vUGx1Z2luLnRzJztcbmV4cG9ydCAqIGFzIFBsdWdpbkJhc2UgZnJvbSAnLi9QbHVnaW5CYXNlLnRzJztcbmV4cG9ydCAqIGFzIFBsdWdpbkNvbnRleHQgZnJvbSAnLi9QbHVnaW5Db250ZXh0LnRzJztcbmV4cG9ydCAqIGFzIFBsdWdpbklkIGZyb20gJy4vUGx1Z2luSWQudHMnO1xuZXhwb3J0ICogYXMgUGx1Z2luU2V0dGluZ3NNYW5hZ2VyQmFzZSBmcm9tICcuL1BsdWdpblNldHRpbmdzTWFuYWdlckJhc2UudHMnO1xuZXhwb3J0ICogYXMgUGx1Z2luU2V0dGluZ3NUYWJCYXNlIGZyb20gJy4vUGx1Z2luU2V0dGluZ3NUYWJCYXNlLnRzJztcbmV4cG9ydCAqIGFzIFBsdWdpblR5cGVzQmFzZSBmcm9tICcuL1BsdWdpblR5cGVzQmFzZS50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBLDhCQUF5QztBQUN6QyxhQUF3QjtBQUN4QixpQkFBNEI7QUFDNUIsb0JBQStCO0FBQy9CLGVBQTBCO0FBQzFCLGdDQUEyQztBQUMzQyw0QkFBdUM7QUFDdkMsc0JBQWlDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -5,3 +5,4 @@ export * as PluginContext from './PluginContext.cjs';
5
5
  export * as PluginId from './PluginId.cjs';
6
6
  export * as PluginSettingsManagerBase from './PluginSettingsManagerBase.cjs';
7
7
  export * as PluginSettingsTabBase from './PluginSettingsTabBase.cjs';
8
+ export * as PluginTypesBase from './PluginTypesBase.cjs';
@@ -107,6 +107,13 @@ export declare function ignoreError(promise: Promise<unknown>, fallbackValue?: u
107
107
  * @param asyncFn - The asynchronous function to invoke safely.
108
108
  */
109
109
  export declare function invokeAsyncSafely(asyncFn: () => Promise<unknown>): void;
110
+ /**
111
+ * Invokes an asynchronous function after a delay.
112
+ *
113
+ * @param asyncFn - The asynchronous function to invoke.
114
+ * @param delayInMs - The delay in milliseconds.
115
+ */
116
+ export declare function invokeAsyncSafelyAfterDelay(asyncFn: () => Promisable<unknown>, delayInMs?: number): void;
110
117
  /**
111
118
  * Marks an error to terminate retry logic.
112
119
  *