obsidian-dev-utils 22.0.0 → 22.1.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/lib/cjs/Async.cjs +2 -2
- package/dist/lib/cjs/Library.cjs +1 -1
- package/dist/lib/cjs/Object.cjs +1 -1
- package/dist/lib/cjs/Object.d.cts +6 -0
- package/dist/lib/cjs/codemirror/StateFieldSpec.cjs +1 -1
- package/dist/lib/cjs/codemirror/StateFieldSpec.d.cts +4 -4
- package/dist/lib/cjs/obsidian/Loop.cjs +2 -1
- package/dist/lib/cjs/obsidian/Modals/Prompt.cjs +1 -1
- package/dist/lib/cjs/obsidian/Modals/Prompt.d.cts +1 -1
- package/dist/lib/cjs/obsidian/Plugin/PluginBase.cjs +9 -35
- package/dist/lib/cjs/obsidian/Plugin/PluginBase.d.cts +5 -23
- package/dist/lib/cjs/obsidian/Plugin/PluginSettingsManagerBase.cjs +161 -0
- package/dist/lib/cjs/obsidian/Plugin/PluginSettingsManagerBase.d.cts +41 -0
- package/dist/lib/cjs/obsidian/Plugin/PluginSettingsTabBase.cjs +34 -48
- package/dist/lib/cjs/obsidian/Plugin/PluginSettingsTabBase.d.cts +12 -31
- package/dist/lib/cjs/obsidian/Plugin/index.cjs +4 -7
- package/dist/lib/cjs/obsidian/Plugin/index.d.cts +1 -2
- package/dist/lib/cjs/obsidian/Vault.cjs +2 -2
- package/dist/lib/esm/Async.mjs +2 -2
- package/dist/lib/esm/Library.mjs +1 -1
- package/dist/lib/esm/Object.d.mts +6 -0
- package/dist/lib/esm/Object.mjs +1 -1
- package/dist/lib/esm/codemirror/StateFieldSpec.d.mts +4 -4
- package/dist/lib/esm/obsidian/Loop.mjs +2 -1
- package/dist/lib/esm/obsidian/Modals/Prompt.d.mts +1 -1
- package/dist/lib/esm/obsidian/Modals/Prompt.mjs +1 -1
- package/dist/lib/esm/obsidian/Plugin/PluginBase.d.mts +5 -23
- package/dist/lib/esm/obsidian/Plugin/PluginBase.mjs +9 -35
- package/dist/lib/esm/obsidian/Plugin/PluginSettingsManagerBase.d.mts +41 -0
- package/dist/lib/esm/obsidian/Plugin/PluginSettingsManagerBase.mjs +137 -0
- package/dist/lib/esm/obsidian/Plugin/PluginSettingsTabBase.d.mts +12 -31
- package/dist/lib/esm/obsidian/Plugin/PluginSettingsTabBase.mjs +35 -52
- package/dist/lib/esm/obsidian/Plugin/index.d.mts +1 -2
- package/dist/lib/esm/obsidian/Plugin/index.mjs +3 -5
- package/dist/lib/esm/obsidian/Vault.mjs +2 -2
- package/obsidian/Plugin/{PluginSettingsBase → PluginSettingsManagerBase}/package.json +3 -3
- package/package.json +7 -7
- package/dist/lib/cjs/obsidian/Plugin/EmptySettings.cjs +0 -38
- package/dist/lib/cjs/obsidian/Plugin/EmptySettings.d.cts +0 -14
- package/dist/lib/cjs/obsidian/Plugin/PluginSettingsBase.cjs +0 -92
- package/dist/lib/cjs/obsidian/Plugin/PluginSettingsBase.d.cts +0 -31
- package/dist/lib/esm/obsidian/Plugin/EmptySettings.d.mts +0 -14
- package/dist/lib/esm/obsidian/Plugin/EmptySettings.mjs +0 -14
- package/dist/lib/esm/obsidian/Plugin/PluginSettingsBase.d.mts +0 -31
- package/dist/lib/esm/obsidian/Plugin/PluginSettingsBase.mjs +0 -68
- package/obsidian/Plugin/EmptySettings/package.json +0 -6
@@ -17,7 +17,7 @@ export interface StateFieldSpec<Value> {
|
|
17
17
|
* @param b - The second value to compare.
|
18
18
|
* @returns `true` if the values are the same, `false` otherwise.
|
19
19
|
*/
|
20
|
-
compare
|
20
|
+
compare?(a: Value, b: Value): boolean;
|
21
21
|
/**
|
22
22
|
* Creates the initial value for the field when a state is created.
|
23
23
|
*
|
@@ -33,7 +33,7 @@ export interface StateFieldSpec<Value> {
|
|
33
33
|
* @param state - The state to deserialize the value for.
|
34
34
|
* @returns The deserialized value.
|
35
35
|
*/
|
36
|
-
fromJSON
|
36
|
+
fromJSON?(json: unknown, state: EditorState): Value;
|
37
37
|
/**
|
38
38
|
* Provide extensions based on this field. The given function will
|
39
39
|
* be called once with the initialized field. It will usually want
|
@@ -45,7 +45,7 @@ export interface StateFieldSpec<Value> {
|
|
45
45
|
* @param field - The initialized field.
|
46
46
|
* @returns The extensions to enable when the field is present in a configuration.
|
47
47
|
*/
|
48
|
-
provide
|
48
|
+
provide?(field: StateField<Value>): Extension;
|
49
49
|
/**
|
50
50
|
* A function used to serialize this field's content to JSON. Only
|
51
51
|
* necessary when this field is included in the argument to
|
@@ -55,7 +55,7 @@ export interface StateFieldSpec<Value> {
|
|
55
55
|
* @param state - The state to serialize the value for.
|
56
56
|
* @returns The serialized value.
|
57
57
|
*/
|
58
|
-
toJSON
|
58
|
+
toJSON?(value: Value, state: EditorState): unknown;
|
59
59
|
/**
|
60
60
|
* Compute a new value from the field's previous value and a
|
61
61
|
* [transaction](https://codemirror.net/6/docs/ref/#state.Transaction).
|
@@ -42,6 +42,7 @@ async function loop(options) {
|
|
42
42
|
try {
|
43
43
|
await options.processItem(item);
|
44
44
|
} catch (error) {
|
45
|
+
console.error("Error processing item", item);
|
45
46
|
if (!options.shouldContinueOnError) {
|
46
47
|
notice.hide();
|
47
48
|
throw error;
|
@@ -57,4 +58,4 @@ async function loop(options) {
|
|
57
58
|
export {
|
58
59
|
loop
|
59
60
|
};
|
60
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIExvb3BcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBsb29waW5nIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50XG59IGZyb20gJy4uL0Vycm9yLnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgbG9vcCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29wT3B0aW9uczxUPiB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBhYm9ydCBzaWduYWwgdG8gY2FuY2VsIHRoZSBsb29wLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBidWlsZCB0aGUgbm90aWNlIG1lc3NhZ2UgZm9yIGVhY2ggaXRlbS5cbiAgICovXG4gIGJ1aWxkTm90aWNlTWVzc2FnZShpdGVtOiBULCBpdGVyYXRpb25TdHI6IHN0cmluZyk6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpdGVtcyB0byBsb29wIG92ZXIuXG4gICAqL1xuICBpdGVtczogVFtdO1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gdGltZW91dCBmb3IgdGhlIG5vdGljZS5cbiAgICovXG4gIG5vdGljZU1pblRpbWVvdXRJbk1zPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgZWFjaCBpdGVtLlxuICAgKi9cbiAgcHJvY2Vzc0l0ZW0oaXRlbTogVCk6IFByb21pc2FibGU8dm9pZD47XG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIHByb2dyZXNzIGJhci5cbiAgICovXG4gIHByb2dyZXNzQmFyVGl0bGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbnRpbnVlIHRoZSBsb29wIG9uIGVycm9yLlxuICAgKi9cbiAgc2hvdWxkQ29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHByb2dyZXNzIGJhci5cbiAgICovXG4gIHNob3VsZFNob3dQcm9ncmVzc0Jhcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTG9vcHMgb3ZlciBhIGxpc3Qgb2YgaXRlbXMgYW5kIHByb2Nlc3NlcyBlYWNoIGl0ZW0uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvb3AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb29wPFQ+KG9wdGlvbnM6IExvb3BPcHRpb25zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGl0ZW1zID0gb3B0aW9ucy5pdGVtcztcbiAgbGV0IGl0ZXJhdGlvbkNvdW50ID0gMDtcbiAgY29uc3Qgbm90aWNlID0gbmV3IE5vdGljZSgnJywgMCk7XG4gIGNvbnN0IERFRkFVTFRfTk9USUNFX01JTl9USU1FT1VUX0lOX01TID0gMjAwMDtcbiAgY29uc3Qgbm90aWNlTWluVGltZW91dFByb21pc2UgPSBzbGVlcChvcHRpb25zLm5vdGljZU1pblRpbWVvdXRJbk1zID8/
|
61
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIExvb3BcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBsb29waW5nIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50XG59IGZyb20gJy4uL0Vycm9yLnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgbG9vcCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29wT3B0aW9uczxUPiB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBhYm9ydCBzaWduYWwgdG8gY2FuY2VsIHRoZSBsb29wLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBidWlsZCB0aGUgbm90aWNlIG1lc3NhZ2UgZm9yIGVhY2ggaXRlbS5cbiAgICovXG4gIGJ1aWxkTm90aWNlTWVzc2FnZShpdGVtOiBULCBpdGVyYXRpb25TdHI6IHN0cmluZyk6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpdGVtcyB0byBsb29wIG92ZXIuXG4gICAqL1xuICBpdGVtczogVFtdO1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gdGltZW91dCBmb3IgdGhlIG5vdGljZS5cbiAgICovXG4gIG5vdGljZU1pblRpbWVvdXRJbk1zPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgZWFjaCBpdGVtLlxuICAgKi9cbiAgcHJvY2Vzc0l0ZW0oaXRlbTogVCk6IFByb21pc2FibGU8dm9pZD47XG4gIC8qKlxuICAgKiBUaGUgdGl0bGUgb2YgdGhlIHByb2dyZXNzIGJhci5cbiAgICovXG4gIHByb2dyZXNzQmFyVGl0bGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbnRpbnVlIHRoZSBsb29wIG9uIGVycm9yLlxuICAgKi9cbiAgc2hvdWxkQ29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHByb2dyZXNzIGJhci5cbiAgICovXG4gIHNob3VsZFNob3dQcm9ncmVzc0Jhcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTG9vcHMgb3ZlciBhIGxpc3Qgb2YgaXRlbXMgYW5kIHByb2Nlc3NlcyBlYWNoIGl0ZW0uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGxvb3AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb29wPFQ+KG9wdGlvbnM6IExvb3BPcHRpb25zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGl0ZW1zID0gb3B0aW9ucy5pdGVtcztcbiAgbGV0IGl0ZXJhdGlvbkNvdW50ID0gMDtcbiAgY29uc3Qgbm90aWNlID0gbmV3IE5vdGljZSgnJywgMCk7XG4gIGNvbnN0IERFRkFVTFRfTk9USUNFX01JTl9USU1FT1VUX0lOX01TID0gMjAwMDtcbiAgY29uc3Qgbm90aWNlTWluVGltZW91dFByb21pc2UgPSBzbGVlcChvcHRpb25zLm5vdGljZU1pblRpbWVvdXRJbk1zID8/IERFRkFVTFRfTk9USUNFX01JTl9USU1FT1VUX0lOX01TKTtcbiAgY29uc3QgcHJvZ3Jlc3NCYXJFbCA9IGNyZWF0ZUVsKCdwcm9ncmVzcycpO1xuICBwcm9ncmVzc0JhckVsLm1heCA9IGl0ZW1zLmxlbmd0aDtcbiAgaWYgKG9wdGlvbnMuc2hvdWxkU2hvd1Byb2dyZXNzQmFyKSB7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgpO1xuICAgIGlmIChvcHRpb25zLnByb2dyZXNzQmFyVGl0bGUpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZFRleHQob3B0aW9ucy5wcm9ncmVzc0JhclRpdGxlKTtcbiAgICB9XG4gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQocHJvZ3Jlc3NCYXJFbCk7XG4gICAgbm90aWNlLnNldE1lc3NhZ2UoZnJhZ21lbnQpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVyYXRpb25Db3VudCsrO1xuICAgIGNvbnN0IGl0ZXJhdGlvblN0ciA9IGAjICR7aXRlcmF0aW9uQ291bnQudG9TdHJpbmcoKX0gLyAke2l0ZW1zLmxlbmd0aC50b1N0cmluZygpfWA7XG4gICAgY29uc3QgbWVzc2FnZSA9IG9wdGlvbnMuYnVpbGROb3RpY2VNZXNzYWdlKGl0ZW0sIGl0ZXJhdGlvblN0cik7XG4gICAgaWYgKCFvcHRpb25zLnNob3VsZFNob3dQcm9ncmVzc0Jhcikge1xuICAgICAgbm90aWNlLnNldE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuICAgIGdldExpYkRlYnVnZ2VyKCdMb29wJykobWVzc2FnZSk7XG5cbiAgICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvcHRpb25zLnByb2Nlc3NJdGVtKGl0ZW0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIGl0ZW0nLCBpdGVtKTtcbiAgICAgIGlmICghb3B0aW9ucy5zaG91bGRDb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgbm90aWNlLmhpZGUoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBhc3luY0Vycm9yV3JhcHBlci5jYXVzZSA9IGVycm9yO1xuICAgICAgZW1pdEFzeW5jRXJyb3JFdmVudChhc3luY0Vycm9yV3JhcHBlcik7XG4gICAgfVxuICAgIHByb2dyZXNzQmFyRWwudmFsdWUrKztcbiAgfVxuICBhd2FpdCBub3RpY2VNaW5UaW1lb3V0UHJvbWlzZTtcbiAgbm90aWNlLmhpZGUoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFPQSxTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQTZDUCxlQUFzQixLQUFRLFNBQXdDO0FBQ3BFLFFBQU0sUUFBUSxRQUFRO0FBQ3RCLE1BQUksaUJBQWlCO0FBQ3JCLFFBQU0sU0FBUyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQy9CLFFBQU0sbUNBQW1DO0FBQ3pDLFFBQU0sMEJBQTBCLE1BQU0sUUFBUSx3QkFBd0IsZ0NBQWdDO0FBQ3RHLFFBQU0sZ0JBQWdCLFNBQVMsVUFBVTtBQUN6QyxnQkFBYyxNQUFNLE1BQU07QUFDMUIsTUFBSSxRQUFRLHVCQUF1QjtBQUNqQyxVQUFNLFdBQVcsZUFBZTtBQUNoQyxRQUFJLFFBQVEsa0JBQWtCO0FBQzVCLGVBQVMsV0FBVyxRQUFRLGdCQUFnQjtBQUFBLElBQzlDO0FBQ0EsYUFBUyxZQUFZLGFBQWE7QUFDbEMsV0FBTyxXQUFXLFFBQVE7QUFBQSxFQUM1QjtBQUNBLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFFBQUksUUFBUSxhQUFhLFNBQVM7QUFDaEMsYUFBTyxLQUFLO0FBQ1o7QUFBQSxJQUNGO0FBQ0E7QUFDQSxVQUFNLGVBQWUsS0FBSyxlQUFlLFNBQVMsQ0FBQyxNQUFNLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDaEYsVUFBTSxVQUFVLFFBQVEsbUJBQW1CLE1BQU0sWUFBWTtBQUM3RCxRQUFJLENBQUMsUUFBUSx1QkFBdUI7QUFDbEMsYUFBTyxXQUFXLE9BQU87QUFBQSxJQUMzQjtBQUNBLG1CQUFlLE1BQU0sRUFBRSxPQUFPO0FBRTlCLFVBQU0sb0JBQW9CLElBQUksTUFBTSwyQkFBMkI7QUFDL0QsUUFBSTtBQUNGLFlBQU0sUUFBUSxZQUFZLElBQUk7QUFBQSxJQUNoQyxTQUFTLE9BQU87QUFDZCxjQUFRLE1BQU0seUJBQXlCLElBQUk7QUFDM0MsVUFBSSxDQUFDLFFBQVEsdUJBQXVCO0FBQ2xDLGVBQU8sS0FBSztBQUNaLGNBQU07QUFBQSxNQUNSO0FBQ0Esd0JBQWtCLFFBQVE7QUFDMUIsMEJBQW9CLGlCQUFpQjtBQUFBLElBQ3ZDO0FBQ0Esa0JBQWM7QUFBQSxFQUNoQjtBQUNBLFFBQU07QUFDTixTQUFPLEtBQUs7QUFDZDsiLAogICJuYW1lcyI6IFtdCn0K
|
@@ -39,7 +39,7 @@ export interface PromptOptions {
|
|
39
39
|
* @param value - The input value to validate.
|
40
40
|
* @returns an error message if the value is invalid, or null if the value is valid.
|
41
41
|
*/
|
42
|
-
valueValidator
|
42
|
+
valueValidator?(value: string): Promisable<string | void>;
|
43
43
|
}
|
44
44
|
/**
|
45
45
|
* Displays a prompt modal in Obsidian to get user input.
|
@@ -92,4 +92,4 @@ async function prompt(options) {
|
|
92
92
|
export {
|
93
93
|
prompt
|
94
94
|
};
|
95
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01vZGFscy9Qcm9tcHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIFByb21wdFxuICogVXRpbGl0eSBmb3IgZGlzcGxheWluZyBhIHByb21wdCBtb2RhbCBpbiBPYnNpZGlhbi5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgZnVuY3Rpb24gdG8gZGlzcGxheSBhIG1vZGFsIHRoYXQgcHJvbXB0cyB0aGUgdXNlciBmb3IgaW5wdXQuIFRoZSBtb2RhbCBpbmNsdWRlcyBcIk9LXCIgYW5kIFwiQ2FuY2VsXCIgYnV0dG9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgVGV4dENvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzZVJlc29sdmUgfSBmcm9tICcuLi8uLi9Bc3luYy50cyc7XG5cbmltcG9ydCB7XG4gIGNvbnZlcnRBc3luY1RvU3luYyxcbiAgaW52b2tlQXN5bmNTYWZlbHlcbn0gZnJvbSAnLi4vLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi8uLi9Dc3NDbGFzcy50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHtcbiAgTW9kYWxCYXNlLFxuICBzaG93TW9kYWxcbn0gZnJvbSAnLi9Nb2RhbEJhc2UudHMnO1xuXG4vKipcbiAqIFRoZSBvcHRpb25zIGZvciB0aGUgcHJvbXB0IG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBmb3IgdGhlIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgKi9cbiAgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgdG8gcHJlLWZpbGwgdGhlIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBmb3IgdGhlIFwiT0tcIiBidXR0b24uXG4gICAqL1xuICBva0J1dHRvblRleHQ/
|
95
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01vZGFscy9Qcm9tcHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIFByb21wdFxuICogVXRpbGl0eSBmb3IgZGlzcGxheWluZyBhIHByb21wdCBtb2RhbCBpbiBPYnNpZGlhbi5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgZnVuY3Rpb24gdG8gZGlzcGxheSBhIG1vZGFsIHRoYXQgcHJvbXB0cyB0aGUgdXNlciBmb3IgaW5wdXQuIFRoZSBtb2RhbCBpbmNsdWRlcyBcIk9LXCIgYW5kIFwiQ2FuY2VsXCIgYnV0dG9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgVGV4dENvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzZVJlc29sdmUgfSBmcm9tICcuLi8uLi9Bc3luYy50cyc7XG5cbmltcG9ydCB7XG4gIGNvbnZlcnRBc3luY1RvU3luYyxcbiAgaW52b2tlQXN5bmNTYWZlbHlcbn0gZnJvbSAnLi4vLi4vQXN5bmMudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi8uLi9Dc3NDbGFzcy50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHtcbiAgTW9kYWxCYXNlLFxuICBzaG93TW9kYWxcbn0gZnJvbSAnLi9Nb2RhbEJhc2UudHMnO1xuXG4vKipcbiAqIFRoZSBvcHRpb25zIGZvciB0aGUgcHJvbXB0IG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBmb3IgdGhlIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgKi9cbiAgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgdG8gcHJlLWZpbGwgdGhlIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBmb3IgdGhlIFwiT0tcIiBidXR0b24uXG4gICAqL1xuICBva0J1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBtb2RhbC5cbiAgICovXG4gIHRpdGxlPzogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgdmFsdWUuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnB1dCB2YWx1ZSB0byB2YWxpZGF0ZS5cbiAgICogQHJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWludmFsaWQtdm9pZC10eXBlXG4gIHZhbHVlVmFsaWRhdG9yPyh2YWx1ZTogc3RyaW5nKTogUHJvbWlzYWJsZTxzdHJpbmcgfCB2b2lkPjtcbn1cblxuY2xhc3MgUHJvbXB0TW9kYWwgZXh0ZW5kcyBNb2RhbEJhc2U8bnVsbCB8IHN0cmluZywgUHJvbXB0T3B0aW9ucz4ge1xuICBwcml2YXRlIGlzT2tDbGlja2VkID0gZmFsc2U7XG4gIHByaXZhdGUgb3B0aW9uczogUmVxdWlyZWQ8UHJvbXB0T3B0aW9ucz47XG4gIHByaXZhdGUgdmFsdWU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogUHJvbXB0T3B0aW9ucywgcmVzb2x2ZTogUHJvbWlzZVJlc29sdmU8bnVsbCB8IHN0cmluZz4pIHtcbiAgICBzdXBlcihvcHRpb25zLCByZXNvbHZlLCBDc3NDbGFzcy5Qcm9tcHRNb2RhbCk7XG4gICAgY29uc3QgREVGQVVMVF9PUFRJT05TOiBSZXF1aXJlZDxQcm9tcHRPcHRpb25zPiA9IHtcbiAgICAgIGFwcDogb3B0aW9ucy5hcHAsXG4gICAgICBjYW5jZWxCdXR0b25UZXh0OiAnQ2FuY2VsJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogJycsXG4gICAgICBva0J1dHRvblRleHQ6ICdPSycsXG4gICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICB0aXRsZTogJycsXG4gICAgICB2YWx1ZVZhbGlkYXRvcjogbm9vcFxuICAgIH07XG4gICAgdGhpcy5vcHRpb25zID0geyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcbiAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy5kZWZhdWx0VmFsdWUgPz8gJyc7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdmUodGhpcy5pc09rQ2xpY2tlZCA/IHRoaXMudmFsdWUgOiBudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy50aXRsZUVsLnNldFRleHQodGhpcy5vcHRpb25zLnRpdGxlKTtcbiAgICBjb25zdCB0ZXh0Q29tcG9uZW50ID0gbmV3IFRleHRDb21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIGNvbnN0IGlucHV0RWwgPSB0ZXh0Q29tcG9uZW50LmlucHV0RWw7XG5cbiAgICBjb25zdCB2YWxpZGF0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGF3YWl0IHRoaXMub3B0aW9ucy52YWx1ZVZhbGlkYXRvcihpbnB1dEVsLnZhbHVlKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpbnB1dEVsLnNldEN1c3RvbVZhbGlkaXR5KGVycm9yTWVzc2FnZSA/PyAnJyk7XG4gICAgICBpbnB1dEVsLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgfTtcblxuICAgIHRleHRDb21wb25lbnQuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgdGV4dENvbXBvbmVudC5zZXRQbGFjZWhvbGRlcih0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIpO1xuICAgIGlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuVGV4dEJveCk7XG4gICAgdGV4dENvbXBvbmVudC5vbkNoYW5nZSgobmV3VmFsdWUpID0+IHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9KTtcbiAgICBpbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPayhldmVudCwgdGV4dENvbXBvbmVudCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBjb252ZXJ0QXN5bmNUb1N5bmModmFsaWRhdGUpKTtcbiAgICBpbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgY29udmVydEFzeW5jVG9TeW5jKHZhbGlkYXRlKSk7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkodmFsaWRhdGUpO1xuICAgIGNvbnN0IG9rQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgb2tCdXR0b24uc2V0QnV0dG9uVGV4dCh0aGlzLm9wdGlvbnMub2tCdXR0b25UZXh0KTtcbiAgICBva0J1dHRvbi5zZXRDdGEoKTtcbiAgICBva0J1dHRvbi5vbkNsaWNrKChldmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVPayhldmVudCwgdGV4dENvbXBvbmVudCk7XG4gICAgfSk7XG4gICAgb2tCdXR0b24uc2V0Q2xhc3MoQ3NzQ2xhc3MuT2tCdXR0b24pO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMub3B0aW9ucy5jYW5jZWxCdXR0b25UZXh0KTtcbiAgICBjYW5jZWxCdXR0b24ub25DbGljayh0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICAgIGNhbmNlbEJ1dHRvbi5zZXRDbGFzcyhDc3NDbGFzcy5DYW5jZWxCdXR0b24pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVPayhldmVudDogRXZlbnQsIHRleHRDb21wb25lbnQ6IFRleHRDb21wb25lbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGV4dENvbXBvbmVudC5pbnB1dEVsLmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNPa0NsaWNrZWQgPSB0cnVlO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BsYXlzIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuIHRvIGdldCB1c2VyIGlucHV0LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBwcm9tcHQgbW9kYWwuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB1c2VyIGlucHV0IG9yIG51bGwgaWYgdGhlIHByb21wdCB3YXMgY2FuY2VsbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbXB0KG9wdGlvbnM6IFByb21wdE9wdGlvbnMpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHNob3dNb2RhbDxudWxsIHwgc3RyaW5nPigocmVzb2x2ZSkgPT4gbmV3IFByb21wdE1vZGFsKG9wdGlvbnMsIHJlc29sdmUpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFVQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUlQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxZQUFZO0FBQ3JCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBNkNQLE1BQU0sb0JBQW9CLFVBQXdDO0FBQUEsRUFDeEQsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQUEsRUFFRCxZQUFZLFNBQXdCLFNBQXdDO0FBQ2pGLFVBQU0sU0FBUyxTQUFTLFNBQVMsV0FBVztBQUM1QyxVQUFNLGtCQUEyQztBQUFBLE1BQy9DLEtBQUssUUFBUTtBQUFBLE1BQ2Isa0JBQWtCO0FBQUEsTUFDbEIsY0FBYztBQUFBLE1BQ2QsY0FBYztBQUFBLE1BQ2QsYUFBYTtBQUFBLE1BQ2IsT0FBTztBQUFBLE1BQ1AsZ0JBQWdCO0FBQUEsSUFDbEI7QUFDQSxTQUFLLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixHQUFHLFFBQVE7QUFDaEQsU0FBSyxRQUFRLFFBQVEsZ0JBQWdCO0FBQUEsRUFDdkM7QUFBQSxFQUVnQixVQUFnQjtBQUM5QixTQUFLLFFBQVEsS0FBSyxjQUFjLEtBQUssUUFBUSxJQUFJO0FBQUEsRUFDbkQ7QUFBQSxFQUVnQixTQUFlO0FBQzdCLFNBQUssUUFBUSxRQUFRLEtBQUssUUFBUSxLQUFLO0FBQ3ZDLFVBQU0sZ0JBQWdCLElBQUksY0FBYyxLQUFLLFNBQVM7QUFDdEQsVUFBTSxVQUFVLGNBQWM7QUFFOUIsVUFBTSxXQUFXLFlBQTJCO0FBQzFDLFlBQU0sZUFBZSxNQUFNLEtBQUssUUFBUSxlQUFlLFFBQVEsS0FBSztBQUNwRSxjQUFRLGtCQUFrQixnQkFBZ0IsRUFBRTtBQUM1QyxjQUFRLGVBQWU7QUFBQSxJQUN6QjtBQUVBLGtCQUFjLFNBQVMsS0FBSyxLQUFLO0FBQ2pDLGtCQUFjLGVBQWUsS0FBSyxRQUFRLFdBQVc7QUFDckQsWUFBUSxTQUFTLFNBQVMsT0FBTztBQUNqQyxrQkFBYyxTQUFTLENBQUMsYUFBYTtBQUNuQyxXQUFLLFFBQVE7QUFBQSxJQUNmLENBQUM7QUFDRCxZQUFRLGlCQUFpQixXQUFXLENBQUMsVUFBeUI7QUFDNUQsVUFBSSxNQUFNLFFBQVEsU0FBUztBQUN6QixhQUFLLFNBQVMsT0FBTyxhQUFhO0FBQUEsTUFDcEMsV0FBVyxNQUFNLFFBQVEsVUFBVTtBQUNqQyxhQUFLLE1BQU07QUFBQSxNQUNiO0FBQUEsSUFDRixDQUFDO0FBQ0QsWUFBUSxpQkFBaUIsU0FBUyxtQkFBbUIsUUFBUSxDQUFDO0FBQzlELFlBQVEsaUJBQWlCLFNBQVMsbUJBQW1CLFFBQVEsQ0FBQztBQUM5RCxzQkFBa0IsUUFBUTtBQUMxQixVQUFNLFdBQVcsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTO0FBQ25ELGFBQVMsY0FBYyxLQUFLLFFBQVEsWUFBWTtBQUNoRCxhQUFTLE9BQU87QUFDaEIsYUFBUyxRQUFRLENBQUMsVUFBVTtBQUMxQixXQUFLLFNBQVMsT0FBTyxhQUFhO0FBQUEsSUFDcEMsQ0FBQztBQUNELGFBQVMsU0FBUyxTQUFTLFFBQVE7QUFDbkMsVUFBTSxlQUFlLElBQUksZ0JBQWdCLEtBQUssU0FBUztBQUN2RCxpQkFBYSxjQUFjLEtBQUssUUFBUSxnQkFBZ0I7QUFDeEQsaUJBQWEsUUFBUSxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDMUMsaUJBQWEsU0FBUyxTQUFTLFlBQVk7QUFBQSxFQUM3QztBQUFBLEVBRVEsU0FBUyxPQUFjLGVBQW9DO0FBQ2pFLFVBQU0sZUFBZTtBQUNyQixRQUFJLENBQUMsY0FBYyxRQUFRLGNBQWMsR0FBRztBQUMxQztBQUFBLElBQ0Y7QUFFQSxTQUFLLGNBQWM7QUFDbkIsU0FBSyxNQUFNO0FBQUEsRUFDYjtBQUNGO0FBUUEsZUFBc0IsT0FBTyxTQUFnRDtBQUMzRSxTQUFPLE1BQU0sVUFBeUIsQ0FBQyxZQUFZLElBQUksWUFBWSxTQUFTLE9BQU8sQ0FBQztBQUN0RjsiLAogICJuYW1lcyI6IFtdCn0K
|
@@ -9,14 +9,13 @@
|
|
9
9
|
import type { PluginSettingTab } from 'obsidian';
|
10
10
|
import type { Promisable, ReadonlyDeep } from 'type-fest';
|
11
11
|
import { Plugin } from 'obsidian';
|
12
|
-
import
|
13
|
-
import type { PluginSettingsBase } from './PluginSettingsBase.mjs';
|
12
|
+
import { PluginSettingsManagerBase } from './PluginSettingsManagerBase.mjs';
|
14
13
|
/**
|
15
14
|
* Base class for creating Obsidian plugins with built-in support for settings management, error handling, and notifications.
|
16
15
|
*
|
17
16
|
* @typeParam PluginSettings - The type representing the plugin settings object.
|
18
17
|
*/
|
19
|
-
export declare abstract class PluginBase<PluginSettings extends
|
18
|
+
export declare abstract class PluginBase<PluginSettings extends object = object> extends Plugin {
|
20
19
|
/**
|
21
20
|
* Gets the AbortSignal used for aborting long-running operations.
|
22
21
|
*
|
@@ -29,14 +28,9 @@ export declare abstract class PluginBase<PluginSettings extends PluginSettingsBa
|
|
29
28
|
* @returns The readonly plugin settings.
|
30
29
|
*/
|
31
30
|
get settings(): ReadonlyDeep<PluginSettings>;
|
32
|
-
|
33
|
-
* Gets a writable copy of the plugin settings.
|
34
|
-
*
|
35
|
-
* @returns A writable copy of the plugin settings.
|
36
|
-
*/
|
37
|
-
get settingsClone(): PluginSettings;
|
31
|
+
get settingsManager(): PluginSettingsManagerBase<PluginSettings>;
|
38
32
|
private _abortSignal;
|
39
|
-
private
|
33
|
+
private _settingsManager;
|
40
34
|
private notice?;
|
41
35
|
/**
|
42
36
|
* Logs a message to the console.
|
@@ -59,13 +53,6 @@ export declare abstract class PluginBase<PluginSettings extends PluginSettingsBa
|
|
59
53
|
* Called when the plugin is loaded
|
60
54
|
*/
|
61
55
|
onload(): Promise<void>;
|
62
|
-
/**
|
63
|
-
* Saves the new plugin settings.
|
64
|
-
*
|
65
|
-
* @param newSettings - The new settings to save.
|
66
|
-
* @returns A promise that resolves when the settings are saved.
|
67
|
-
*/
|
68
|
-
saveSettings(newSettings: PluginSettings): Promise<void>;
|
69
56
|
/**
|
70
57
|
* Creates the plugin settings. This method must be implemented by subclasses.
|
71
58
|
*
|
@@ -79,6 +66,7 @@ export declare abstract class PluginBase<PluginSettings extends PluginSettingsBa
|
|
79
66
|
* @returns The settings tab or null if not applicable.
|
80
67
|
*/
|
81
68
|
protected abstract createPluginSettingsTab(): null | PluginSettingTab;
|
69
|
+
protected abstract createSettingsManager(): PluginSettingsManagerBase<PluginSettings>;
|
82
70
|
/**
|
83
71
|
* Called when the layout is ready. This method can be overridden by subclasses to perform actions once
|
84
72
|
* the layout is ready.
|
@@ -99,10 +87,4 @@ export declare abstract class PluginBase<PluginSettings extends PluginSettingsBa
|
|
99
87
|
* @param message - The message to display.
|
100
88
|
*/
|
101
89
|
protected showNotice(message: string): void;
|
102
|
-
/**
|
103
|
-
* Loads the plugin settings from the saved data.
|
104
|
-
*
|
105
|
-
* @returns A promise that resolves when the settings are loaded.
|
106
|
-
*/
|
107
|
-
private loadSettings;
|
108
90
|
}
|
@@ -13,6 +13,7 @@ import { getDebugger } from "../../Debug.mjs";
|
|
13
13
|
import { registerAsyncErrorEventHandler } from "../../Error.mjs";
|
14
14
|
import { noop } from "../../Function.mjs";
|
15
15
|
import { initPluginContext } from "./PluginContext.mjs";
|
16
|
+
import { PluginSettingsManagerBase } from "./PluginSettingsManagerBase.mjs";
|
16
17
|
class PluginBase extends Plugin {
|
17
18
|
/**
|
18
19
|
* Gets the AbortSignal used for aborting long-running operations.
|
@@ -28,18 +29,13 @@ class PluginBase extends Plugin {
|
|
28
29
|
* @returns The readonly plugin settings.
|
29
30
|
*/
|
30
31
|
get settings() {
|
31
|
-
return this.
|
32
|
+
return this.settingsManager.safeSettings;
|
32
33
|
}
|
33
|
-
|
34
|
-
|
35
|
-
*
|
36
|
-
* @returns A writable copy of the plugin settings.
|
37
|
-
*/
|
38
|
-
get settingsClone() {
|
39
|
-
return this.createPluginSettings(this.settings.toJSON());
|
34
|
+
get settingsManager() {
|
35
|
+
return this._settingsManager;
|
40
36
|
}
|
41
37
|
_abortSignal;
|
42
|
-
|
38
|
+
_settingsManager;
|
43
39
|
notice;
|
44
40
|
/**
|
45
41
|
* Logs a message to the console.
|
@@ -62,7 +58,7 @@ class PluginBase extends Plugin {
|
|
62
58
|
* Called when the external settings change.
|
63
59
|
*/
|
64
60
|
async onExternalSettingsChange() {
|
65
|
-
await this.
|
61
|
+
await this.settingsManager.loadFromFile();
|
66
62
|
}
|
67
63
|
/**
|
68
64
|
* Called when the plugin is loaded
|
@@ -72,7 +68,8 @@ class PluginBase extends Plugin {
|
|
72
68
|
this.register(registerAsyncErrorEventHandler(() => {
|
73
69
|
this.showNotice("An unhandled error occurred. Please check the console for more information.");
|
74
70
|
}));
|
75
|
-
|
71
|
+
this._settingsManager = this.createSettingsManager();
|
72
|
+
await this.onExternalSettingsChange();
|
76
73
|
const pluginSettingsTab = this.createPluginSettingsTab();
|
77
74
|
if (pluginSettingsTab) {
|
78
75
|
this.addSettingTab(pluginSettingsTab);
|
@@ -87,17 +84,6 @@ class PluginBase extends Plugin {
|
|
87
84
|
this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this));
|
88
85
|
}, 0);
|
89
86
|
}
|
90
|
-
/**
|
91
|
-
* Saves the new plugin settings.
|
92
|
-
*
|
93
|
-
* @param newSettings - The new settings to save.
|
94
|
-
* @returns A promise that resolves when the settings are saved.
|
95
|
-
*/
|
96
|
-
async saveSettings(newSettings) {
|
97
|
-
const json = newSettings.toJSON();
|
98
|
-
this._settings = this.createPluginSettings(json);
|
99
|
-
await this.saveData(json);
|
100
|
-
}
|
101
87
|
/**
|
102
88
|
* Called when the layout is ready. This method can be overridden by subclasses to perform actions once
|
103
89
|
* the layout is ready.
|
@@ -128,20 +114,8 @@ class PluginBase extends Plugin {
|
|
128
114
|
this.notice = new Notice(`${this.manifest.name}
|
129
115
|
${message}`);
|
130
116
|
}
|
131
|
-
/**
|
132
|
-
* Loads the plugin settings from the saved data.
|
133
|
-
*
|
134
|
-
* @returns A promise that resolves when the settings are loaded.
|
135
|
-
*/
|
136
|
-
async loadSettings() {
|
137
|
-
const data = await this.loadData();
|
138
|
-
this._settings = this.createPluginSettings(data);
|
139
|
-
if (this.settings.shouldSaveAfterLoad) {
|
140
|
-
await this.saveSettings(this._settings);
|
141
|
-
}
|
142
|
-
}
|
143
117
|
}
|
144
118
|
export {
|
145
119
|
PluginBase
|
146
120
|
};
|
147
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5CYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBQbHVnaW5CYXNlXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHByb3ZpZGluZyB1dGlsaXR5IG1ldGhvZHMgZm9yIHNldHRpbmdzIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgbm90aWZpY2F0aW9ucy5cbiAqXG4gKiBUaGlzIGNsYXNzIHNpbXBsaWZpZXMgdGhlIHByb2Nlc3Mgb2YgbWFuYWdpbmcgcGx1Z2luIHNldHRpbmdzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsIGFuZCBoYW5kbGluZyBlcnJvcnMuXG4gKiBTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgbWV0aG9kcyB0byBjcmVhdGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgc2V0dGluZ3MgdGFicywgYW5kIGNvbXBsZXRlIHBsdWdpbi1zcGVjaWZpY1xuICogbG9hZGluZyB0YXNrcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdUYWIgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBOb3RpY2UsXG4gIFBsdWdpblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRW1wdHlTZXR0aW5ncyB9IGZyb20gJy4vRW1wdHlTZXR0aW5ncy50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdzQmFzZSB9IGZyb20gJy4vUGx1Z2luU2V0dGluZ3NCYXNlLnRzJztcblxuaW1wb3J0IHsgZ2V0RGVidWdnZXIgfSBmcm9tICcuLi8uLi9EZWJ1Zy50cyc7XG5pbXBvcnQgeyByZWdpc3RlckFzeW5jRXJyb3JFdmVudEhhbmRsZXIgfSBmcm9tICcuLi8uLi9FcnJvci50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgaW5pdFBsdWdpbkNvbnRleHQgfSBmcm9tICcuL1BsdWdpbkNvbnRleHQudHMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIE9ic2lkaWFuIHBsdWdpbnMgd2l0aCBidWlsdC1pbiBzdXBwb3J0IGZvciBzZXR0aW5ncyBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIHJlcHJlc2VudGluZyB0aGUgcGx1Z2luIHNldHRpbmdzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2U8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nc0Jhc2UgPSBFbXB0eVNldHRpbmdzPiBleHRlbmRzIFBsdWdpbiB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBYm9ydFNpZ25hbCB1c2VkIGZvciBhYm9ydGluZyBsb25nLXJ1bm5pbmcgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFib3J0IHNpZ25hbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWJvcnRTaWduYWwoKTogQWJvcnRTaWduYWwge1xuICAgIHJldHVybiB0aGlzLl9hYm9ydFNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSByZWFkb25seSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWFkb25seSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncyBhcyBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3M+O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSB3cml0YWJsZSBjb3B5IG9mIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgd3JpdGFibGUgY29weSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgcHVibGljIGdldCBzZXR0aW5nc0Nsb25lKCk6IFBsdWdpblNldHRpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVQbHVnaW5TZXR0aW5ncyh0aGlzLnNldHRpbmdzLnRvSlNPTigpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fib3J0U2lnbmFsITogQWJvcnRTaWduYWw7XG5cbiAgcHJpdmF0ZSBfc2V0dGluZ3MhOiBQbHVnaW5TZXR0aW5ncztcblxuICBwcml2YXRlIG5vdGljZT86IE5vdGljZTtcblxuICAvKipcbiAgICogTG9ncyBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUuXG4gICAqXG4gICAqIFVzZSBpbnN0ZWFkIG9mIGBjb25zb2xlLmRlYnVnKClgLlxuICAgKlxuICAgKiBUaG9zZSBtZXNzYWdlcyBhcmUgbm90IHNob3duIGJ5IGRlZmF1bHQsIGJ1dCB0aGV5IGNhbiBiZSBzaG93biBieSBlbmFibGluZyBgeW91ci1wbHVnaW4taWRgIGRlYnVnZ2VyIG5hbWVzcGFjZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL21uYW91bW92L29ic2lkaWFuLWRldi11dGlscy8/dGFiPXJlYWRtZS1vdi1maWxlI2RlYnVnZ2luZ30gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICAgKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gbG9nLlxuICAgKi9cbiAgcHVibGljIGNvbnNvbGVEZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIC8vIFNraXAgdGhlIGBjb25zb2xlRGVidWcoKWAgY2FsbCBpdHNlbGZcbiAgICBjb25zdCBGUkFNRVNfVE9fU0tJUCA9IDE7XG4gICAgY29uc3QgX2RlYnVnZ2VyID0gZ2V0RGVidWdnZXIodGhpcy5tYW5pZmVzdC5pZCwgRlJBTUVTX1RPX1NLSVApO1xuICAgIF9kZWJ1Z2dlcihtZXNzYWdlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZXh0ZXJuYWwgc2V0dGluZ3MgY2hhbmdlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGluaXRQbHVnaW5Db250ZXh0KHRoaXMuYXBwLCB0aGlzLm1hbmlmZXN0LmlkKTtcblxuICAgIHRoaXMucmVnaXN0ZXIocmVnaXN0ZXJBc3luY0Vycm9yRXZlbnRIYW5kbGVyKCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd05vdGljZSgnQW4gdW5oYW5kbGVkIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgfSkpO1xuXG4gICAgYXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcbiAgICBjb25zdCBwbHVnaW5TZXR0aW5nc1RhYiA9IHRoaXMuY3JlYXRlUGx1Z2luU2V0dGluZ3NUYWIoKTtcbiAgICBpZiAocGx1Z2luU2V0dGluZ3NUYWIpIHtcbiAgICAgIHRoaXMuYWRkU2V0dGluZ1RhYihwbHVnaW5TZXR0aW5nc1RhYik7XG4gICAgfVxuXG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuX2Fib3J0U2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMub25sb2FkQ29tcGxldGUoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHRoaXMub25MYXlvdXRSZWFkeS5iaW5kKHRoaXMpKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgbmV3IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIG5ld1NldHRpbmdzIC0gVGhlIG5ldyBzZXR0aW5ncyB0byBzYXZlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgc2F2ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVNldHRpbmdzKG5ld1NldHRpbmdzOiBQbHVnaW5TZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGpzb24gPSBuZXdTZXR0aW5ncy50b0pTT04oKTtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHRoaXMuY3JlYXRlUGx1Z2luU2V0dGluZ3MoanNvbik7XG4gICAgYXdhaXQgdGhpcy5zYXZlRGF0YShqc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwbHVnaW4gc2V0dGluZ3MuIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSB0byBjcmVhdGUgdGhlIHBsdWdpbiBzZXR0aW5ncyBmcm9tLlxuICAgKiBAcmV0dXJucyBUaGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZVBsdWdpblNldHRpbmdzKGRhdGE6IHVua25vd24pOiBQbHVnaW5TZXR0aW5ncztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBsdWdpbiBzZXR0aW5ncyB0YWIuIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldHRpbmdzIHRhYiBvciBudWxsIGlmIG5vdCBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZVBsdWdpblNldHRpbmdzVGFiKCk6IG51bGwgfCBQbHVnaW5TZXR0aW5nVGFiO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgbGF5b3V0IGlzIHJlYWR5LiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHBlcmZvcm0gYWN0aW9ucyBvbmNlXG4gICAqIHRoZSBsYXlvdXQgaXMgcmVhZHkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvciB2b2lkIGluZGljYXRpbmcgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGxheW91dCBzZXR1cC5cbiAgICovXG4gIHByb3RlY3RlZCBvbkxheW91dFJlYWR5KCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIG5vb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGxvYWRpbmcgaXMgY29tcGxldGUuIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBwZXJmb3JtXG4gICAqIGFueSBhZGRpdGlvbmFsIHNldHVwIHJlcXVpcmVkIGFmdGVyIGxvYWRpbmcgaXMgY29tcGxldGUuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvciB2b2lkIGluZGljYXRpbmcgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGxvYWQgcHJvY2Vzcy5cbiAgICovXG4gIHByb3RlY3RlZCBvbmxvYWRDb21wbGV0ZSgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBub29wKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgYSBub3RpY2UgbWVzc2FnZSB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3dOb3RpY2UobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubm90aWNlKSB7XG4gICAgICB0aGlzLm5vdGljZS5oaWRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpY2UgPSBuZXcgTm90aWNlKGAke3RoaXMubWFuaWZlc3QubmFtZX1cXG4ke21lc3NhZ2V9YCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHBsdWdpbiBzZXR0aW5ncyBmcm9tIHRoZSBzYXZlZCBkYXRhLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMubG9hZERhdGEoKSBhcyB1bmtub3duO1xuICAgIHRoaXMuX3NldHRpbmdzID0gdGhpcy5jcmVhdGVQbHVnaW5TZXR0aW5ncyhkYXRhKTtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5zaG91bGRTYXZlQWZ0ZXJMb2FkKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncyh0aGlzLl9zZXR0aW5ncyk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBZUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFLUCxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLFlBQVk7QUFDckIsU0FBUyx5QkFBeUI7QUFPM0IsTUFBZSxtQkFBOEUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU16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
|
121
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5CYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBQbHVnaW5CYXNlXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHByb3ZpZGluZyB1dGlsaXR5IG1ldGhvZHMgZm9yIHNldHRpbmdzIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgbm90aWZpY2F0aW9ucy5cbiAqXG4gKiBUaGlzIGNsYXNzIHNpbXBsaWZpZXMgdGhlIHByb2Nlc3Mgb2YgbWFuYWdpbmcgcGx1Z2luIHNldHRpbmdzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsIGFuZCBoYW5kbGluZyBlcnJvcnMuXG4gKiBTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgbWV0aG9kcyB0byBjcmVhdGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgc2V0dGluZ3MgdGFicywgYW5kIGNvbXBsZXRlIHBsdWdpbi1zcGVjaWZpY1xuICogbG9hZGluZyB0YXNrcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdUYWIgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gIFByb21pc2FibGUsXG4gIFJlYWRvbmx5RGVlcFxufSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBOb3RpY2UsXG4gIFBsdWdpblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldERlYnVnZ2VyIH0gZnJvbSAnLi4vLi4vRGVidWcudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBc3luY0Vycm9yRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vRXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLy4uL0Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGluaXRQbHVnaW5Db250ZXh0IH0gZnJvbSAnLi9QbHVnaW5Db250ZXh0LnRzJztcbmltcG9ydCB7IFBsdWdpblNldHRpbmdzTWFuYWdlckJhc2UgfSBmcm9tICcuL1BsdWdpblNldHRpbmdzTWFuYWdlckJhc2UudHMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIE9ic2lkaWFuIHBsdWdpbnMgd2l0aCBidWlsdC1pbiBzdXBwb3J0IGZvciBzZXR0aW5ncyBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSB0eXBlIHJlcHJlc2VudGluZyB0aGUgcGx1Z2luIHNldHRpbmdzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2U8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+IGV4dGVuZHMgUGx1Z2luIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIEFib3J0U2lnbmFsIHVzZWQgZm9yIGFib3J0aW5nIGxvbmctcnVubmluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgYWJvcnQgc2lnbmFsLlxuICAgKi9cbiAgcHVibGljIGdldCBhYm9ydFNpZ25hbCgpOiBBYm9ydFNpZ25hbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Fib3J0U2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlYWRvbmx5IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlYWRvbmx5IHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dGluZ3MoKTogUmVhZG9ubHlEZWVwPFBsdWdpblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NNYW5hZ2VyLnNhZmVTZXR0aW5ncztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2V0dGluZ3NNYW5hZ2VyKCk6IFBsdWdpblNldHRpbmdzTWFuYWdlckJhc2U8UGx1Z2luU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3NNYW5hZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWJvcnRTaWduYWwhOiBBYm9ydFNpZ25hbDtcblxuICBwcml2YXRlIF9zZXR0aW5nc01hbmFnZXIhOiBQbHVnaW5TZXR0aW5nc01hbmFnZXJCYXNlPFBsdWdpblNldHRpbmdzPjtcblxuICBwcml2YXRlIG5vdGljZT86IE5vdGljZTtcblxuICAvKipcbiAgICogTG9ncyBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUuXG4gICAqXG4gICAqIFVzZSBpbnN0ZWFkIG9mIGBjb25zb2xlLmRlYnVnKClgLlxuICAgKlxuICAgKiBUaG9zZSBtZXNzYWdlcyBhcmUgbm90IHNob3duIGJ5IGRlZmF1bHQsIGJ1dCB0aGV5IGNhbiBiZSBzaG93biBieSBlbmFibGluZyBgeW91ci1wbHVnaW4taWRgIGRlYnVnZ2VyIG5hbWVzcGFjZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL21uYW91bW92L29ic2lkaWFuLWRldi11dGlscy8/dGFiPXJlYWRtZS1vdi1maWxlI2RlYnVnZ2luZ30gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICAgKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gbG9nLlxuICAgKi9cbiAgcHVibGljIGNvbnNvbGVEZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIC8vIFNraXAgdGhlIGBjb25zb2xlRGVidWcoKWAgY2FsbCBpdHNlbGZcbiAgICBjb25zdCBGUkFNRVNfVE9fU0tJUCA9IDE7XG4gICAgY29uc3QgX2RlYnVnZ2VyID0gZ2V0RGVidWdnZXIodGhpcy5tYW5pZmVzdC5pZCwgRlJBTUVTX1RPX1NLSVApO1xuICAgIF9kZWJ1Z2dlcihtZXNzYWdlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZXh0ZXJuYWwgc2V0dGluZ3MgY2hhbmdlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzTWFuYWdlci5sb2FkRnJvbUZpbGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZFxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpbml0UGx1Z2luQ29udGV4dCh0aGlzLmFwcCwgdGhpcy5tYW5pZmVzdC5pZCk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcigoKSA9PiB7XG4gICAgICB0aGlzLnNob3dOb3RpY2UoJ0FuIHVuaGFuZGxlZCBlcnJvciBvY2N1cnJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuX3NldHRpbmdzTWFuYWdlciA9IHRoaXMuY3JlYXRlU2V0dGluZ3NNYW5hZ2VyKCk7XG5cbiAgICBhd2FpdCB0aGlzLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpO1xuICAgIGNvbnN0IHBsdWdpblNldHRpbmdzVGFiID0gdGhpcy5jcmVhdGVQbHVnaW5TZXR0aW5nc1RhYigpO1xuICAgIGlmIChwbHVnaW5TZXR0aW5nc1RhYikge1xuICAgICAgdGhpcy5hZGRTZXR0aW5nVGFiKHBsdWdpblNldHRpbmdzVGFiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5fYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5vbmxvYWRDb21wbGV0ZSgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkodGhpcy5vbkxheW91dFJlYWR5LmJpbmQodGhpcykpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHBsdWdpbiBzZXR0aW5ncy4gVGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGNyZWF0ZSB0aGUgcGx1Z2luIHNldHRpbmdzIGZyb20uXG4gICAqIEByZXR1cm5zIFRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlUGx1Z2luU2V0dGluZ3MoZGF0YTogdW5rbm93bik6IFBsdWdpblNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGx1Z2luIHNldHRpbmdzIHRhYi4gVGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZ3MgdGFiIG9yIG51bGwgaWYgbm90IGFwcGxpY2FibGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlUGx1Z2luU2V0dGluZ3NUYWIoKTogbnVsbCB8IFBsdWdpblNldHRpbmdUYWI7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZVNldHRpbmdzTWFuYWdlcigpOiBQbHVnaW5TZXR0aW5nc01hbmFnZXJCYXNlPFBsdWdpblNldHRpbmdzPjtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGxheW91dCBpcyByZWFkeS4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyB0byBwZXJmb3JtIGFjdGlvbnMgb25jZVxuICAgKiB0aGUgbGF5b3V0IGlzIHJlYWR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb3Igdm9pZCBpbmRpY2F0aW5nIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBsYXlvdXQgc2V0dXAuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25MYXlvdXRSZWFkeSgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBub29wKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBsb2FkaW5nIGlzIGNvbXBsZXRlLiBUaGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgdG8gcGVyZm9ybVxuICAgKiBhbnkgYWRkaXRpb25hbCBzZXR1cCByZXF1aXJlZCBhZnRlciBsb2FkaW5nIGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb3Igdm9pZCBpbmRpY2F0aW5nIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBsb2FkIHByb2Nlc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25sb2FkQ29tcGxldGUoKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgbm9vcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgbm90aWNlIG1lc3NhZ2UgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG93Tm90aWNlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5vdGljZSkge1xuICAgICAgdGhpcy5ub3RpY2UuaGlkZSgpO1xuICAgIH1cblxuICAgIHRoaXMubm90aWNlID0gbmV3IE5vdGljZShgJHt0aGlzLm1hbmlmZXN0Lm5hbWV9XFxuJHttZXNzYWdlfWApO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBZUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLFlBQVk7QUFDckIsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxpQ0FBaUM7QUFPbkMsTUFBZSxtQkFBMkQsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU10RixJQUFXLGNBQTJCO0FBQ3BDLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFXLFdBQXlDO0FBQ2xELFdBQU8sS0FBSyxnQkFBZ0I7QUFBQSxFQUM5QjtBQUFBLEVBRUEsSUFBVyxrQkFBNkQ7QUFDdEUsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRVE7QUFBQSxFQUVBO0FBQUEsRUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBY0QsYUFBYSxZQUFvQixNQUF1QjtBQUU3RCxVQUFNLGlCQUFpQjtBQUN2QixVQUFNLFlBQVksWUFBWSxLQUFLLFNBQVMsSUFBSSxjQUFjO0FBQzlELGNBQVUsU0FBUyxHQUFHLElBQUk7QUFBQSxFQUM1QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsTUFBc0IsMkJBQTBDO0FBQzlELFVBQU0sS0FBSyxnQkFBZ0IsYUFBYTtBQUFBLEVBQzFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFzQixTQUF3QjtBQUM1QyxzQkFBa0IsS0FBSyxLQUFLLEtBQUssU0FBUyxFQUFFO0FBRTVDLFNBQUssU0FBUywrQkFBK0IsTUFBTTtBQUNqRCxXQUFLLFdBQVcsNkVBQTZFO0FBQUEsSUFDL0YsQ0FBQyxDQUFDO0FBRUYsU0FBSyxtQkFBbUIsS0FBSyxzQkFBc0I7QUFFbkQsVUFBTSxLQUFLLHlCQUF5QjtBQUNwQyxVQUFNLG9CQUFvQixLQUFLLHdCQUF3QjtBQUN2RCxRQUFJLG1CQUFtQjtBQUNyQixXQUFLLGNBQWMsaUJBQWlCO0FBQUEsSUFDdEM7QUFFQSxVQUFNLGtCQUFrQixJQUFJLGdCQUFnQjtBQUM1QyxTQUFLLGVBQWUsZ0JBQWdCO0FBQ3BDLFNBQUssU0FBUyxNQUFNO0FBQ2xCLHNCQUFnQixNQUFNO0FBQUEsSUFDeEIsQ0FBQztBQUNELFVBQU0sS0FBSyxlQUFlO0FBQzFCLGVBQVcsTUFBTTtBQUNmLFdBQUssSUFBSSxVQUFVLGNBQWMsS0FBSyxjQUFjLEtBQUssSUFBSSxDQUFDO0FBQUEsSUFDaEUsR0FBRyxDQUFDO0FBQUEsRUFDTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBeUJVLGdCQUFrQztBQUMxQyxTQUFLO0FBQUEsRUFDUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUVUsaUJBQW1DO0FBQzNDLFNBQUs7QUFBQSxFQUNQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1UsV0FBVyxTQUF1QjtBQUMxQyxRQUFJLEtBQUssUUFBUTtBQUNmLFdBQUssT0FBTyxLQUFLO0FBQUEsSUFDbkI7QUFFQSxTQUFLLFNBQVMsSUFBSSxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUk7QUFBQSxFQUFLLE9BQU8sRUFBRTtBQUFBLEVBQzlEO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import type { ReadonlyDeep } from 'type-fest';
|
2
|
+
import { Plugin } from 'obsidian';
|
3
|
+
import type { StringKeys } from '../../Object.mjs';
|
4
|
+
import type { Transformer } from '../../Transformers/Transformer.mjs';
|
5
|
+
declare class PluginSettingsProperty<PluginSettings extends object, Property extends StringKeys<PluginSettings>> {
|
6
|
+
private readonly manager;
|
7
|
+
private readonly property;
|
8
|
+
readonly defaultValue: PluginSettings[Property];
|
9
|
+
validationMessage: string;
|
10
|
+
private value;
|
11
|
+
constructor(manager: PluginSettingsManagerBase<PluginSettings>, property: Property, defaultValue: PluginSettings[Property]);
|
12
|
+
clear(): void;
|
13
|
+
get(): PluginSettings[Property];
|
14
|
+
getSafe(): PluginSettings[Property];
|
15
|
+
set(value: PluginSettings[Property] | undefined): Promise<void>;
|
16
|
+
}
|
17
|
+
/**
|
18
|
+
* Base class for managing plugin settings.
|
19
|
+
*
|
20
|
+
* @typeParam PluginSettings - The type representing the plugin settings object.
|
21
|
+
*/
|
22
|
+
export declare abstract class PluginSettingsManagerBase<PluginSettings extends object> {
|
23
|
+
private plugin;
|
24
|
+
readonly safeSettings: ReadonlyDeep<PluginSettings>;
|
25
|
+
private properties;
|
26
|
+
constructor(plugin: Plugin);
|
27
|
+
getProperty<Property extends StringKeys<PluginSettings>>(property: Property): PluginSettingsProperty<PluginSettings, Property>;
|
28
|
+
loadFromFile(): Promise<void>;
|
29
|
+
/**
|
30
|
+
* Saves the new plugin settings.
|
31
|
+
*
|
32
|
+
* @returns A promise that resolves when the settings are saved.
|
33
|
+
*/
|
34
|
+
saveToFile(): Promise<void>;
|
35
|
+
validate<Property extends StringKeys<PluginSettings>>(_property: Property, _value: PluginSettings[Property]): Promise<string | void>;
|
36
|
+
protected abstract createDefaultSettings(): PluginSettings;
|
37
|
+
protected getTransformer(): Transformer;
|
38
|
+
protected prepareRecord(_record: Record<string, unknown>): Promise<void>;
|
39
|
+
private getSettings;
|
40
|
+
}
|
41
|
+
export {};
|
@@ -0,0 +1,137 @@
|
|
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 initEsm(){if(globalThis.process){return}const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};globalThis.process=browserProcess})();
|
7
|
+
|
8
|
+
import { Plugin } from "obsidian";
|
9
|
+
import { noopAsync } from "../../Function.mjs";
|
10
|
+
import { DateTransformer } from "../../Transformers/DateTransformer.mjs";
|
11
|
+
import { DurationTransformer } from "../../Transformers/DurationTransformer.mjs";
|
12
|
+
import { GroupTransformer } from "../../Transformers/GroupTransformer.mjs";
|
13
|
+
import { SkipPrivatePropertyTransformer } from "../../Transformers/SkipPrivatePropertyTransformer.mjs";
|
14
|
+
const defaultTransformer = new GroupTransformer([
|
15
|
+
new SkipPrivatePropertyTransformer(),
|
16
|
+
new DateTransformer(),
|
17
|
+
new DurationTransformer()
|
18
|
+
]);
|
19
|
+
class PluginSettingsProperty {
|
20
|
+
constructor(manager, property, defaultValue) {
|
21
|
+
this.manager = manager;
|
22
|
+
this.property = property;
|
23
|
+
this.defaultValue = defaultValue;
|
24
|
+
}
|
25
|
+
validationMessage = "";
|
26
|
+
value;
|
27
|
+
clear() {
|
28
|
+
this.value = void 0;
|
29
|
+
this.validationMessage = "";
|
30
|
+
}
|
31
|
+
get() {
|
32
|
+
return this.value ?? this.defaultValue;
|
33
|
+
}
|
34
|
+
getSafe() {
|
35
|
+
return this.validationMessage ? this.defaultValue : this.get();
|
36
|
+
}
|
37
|
+
async set(value) {
|
38
|
+
this.value = value;
|
39
|
+
if (this.value !== void 0) {
|
40
|
+
this.validationMessage = await this.manager.validate(this.property, this.value) ?? "";
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
class PropertiesMap extends Map {
|
45
|
+
getTyped(key) {
|
46
|
+
const property = super.get(key);
|
47
|
+
if (!property) {
|
48
|
+
throw new Error(`Property ${String(key)} not found`);
|
49
|
+
}
|
50
|
+
return property;
|
51
|
+
}
|
52
|
+
setTyped(key, value) {
|
53
|
+
return super.set(key, value);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
class PluginSettingsManagerBase {
|
57
|
+
constructor(plugin) {
|
58
|
+
this.plugin = plugin;
|
59
|
+
const defaultSettings = this.createDefaultSettings();
|
60
|
+
this.properties = new PropertiesMap();
|
61
|
+
for (const key of Object.keys(defaultSettings)) {
|
62
|
+
this.properties.set(key, new PluginSettingsProperty(this, key, defaultSettings[key]));
|
63
|
+
}
|
64
|
+
this.safeSettings = new Proxy(defaultSettings, {
|
65
|
+
get: (_target, prop) => {
|
66
|
+
if (typeof prop !== "string") {
|
67
|
+
return void 0;
|
68
|
+
}
|
69
|
+
return this.properties.get(prop);
|
70
|
+
}
|
71
|
+
});
|
72
|
+
}
|
73
|
+
safeSettings;
|
74
|
+
properties;
|
75
|
+
getProperty(property) {
|
76
|
+
return this.properties.getTyped(property);
|
77
|
+
}
|
78
|
+
async loadFromFile() {
|
79
|
+
for (const property of this.properties.values()) {
|
80
|
+
property.clear();
|
81
|
+
}
|
82
|
+
const data = await this.plugin.loadData();
|
83
|
+
if (data === void 0 || data === null) {
|
84
|
+
return;
|
85
|
+
}
|
86
|
+
if (typeof data !== "object" || Array.isArray(data)) {
|
87
|
+
const type = Array.isArray(data) ? "Array" : typeof data;
|
88
|
+
console.error(`Invalid data type. Expected Object, got: ${type}`);
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
let record = data;
|
92
|
+
record = this.getTransformer().transformObjectRecursively(record);
|
93
|
+
await this.prepareRecord(record);
|
94
|
+
for (const [key, value] of Object.entries(record)) {
|
95
|
+
const propertyObj = this.properties.get(key);
|
96
|
+
if (!propertyObj) {
|
97
|
+
console.warn(`Unknown property: ${key}`);
|
98
|
+
continue;
|
99
|
+
}
|
100
|
+
if (typeof value !== typeof propertyObj.defaultValue) {
|
101
|
+
console.warn(`Invalid value type. Expected ${typeof propertyObj.defaultValue}, got: ${typeof value}`);
|
102
|
+
continue;
|
103
|
+
}
|
104
|
+
await propertyObj.set(value);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
/**
|
108
|
+
* Saves the new plugin settings.
|
109
|
+
*
|
110
|
+
* @returns A promise that resolves when the settings are saved.
|
111
|
+
*/
|
112
|
+
async saveToFile() {
|
113
|
+
const record = this.getTransformer().transformObjectRecursively(this.getSettings());
|
114
|
+
await this.plugin.saveData(record);
|
115
|
+
}
|
116
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
|
117
|
+
async validate(_property, _value) {
|
118
|
+
await noopAsync();
|
119
|
+
}
|
120
|
+
getTransformer() {
|
121
|
+
return defaultTransformer;
|
122
|
+
}
|
123
|
+
async prepareRecord(_record) {
|
124
|
+
await noopAsync();
|
125
|
+
}
|
126
|
+
getSettings() {
|
127
|
+
const settings = {};
|
128
|
+
for (const [key, property] of this.properties.entries()) {
|
129
|
+
settings[key] = property.get();
|
130
|
+
}
|
131
|
+
return settings;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
export {
|
135
|
+
PluginSettingsManagerBase
|
136
|
+
};
|
137
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9QbHVnaW5TZXR0aW5nc01hbmFnZXJCYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHlwZSB7IFJlYWRvbmx5RGVlcCB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBTdHJpbmdLZXlzIH0gZnJvbSAnLi4vLi4vT2JqZWN0LnRzJztcbmltcG9ydCB0eXBlIHsgVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi9UcmFuc2Zvcm1lcnMvVHJhbnNmb3JtZXIudHMnO1xuXG5pbXBvcnQgeyBub29wQXN5bmMgfSBmcm9tICcuLi8uLi9GdW5jdGlvbi50cyc7XG5pbXBvcnQgeyBEYXRlVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi9UcmFuc2Zvcm1lcnMvRGF0ZVRyYW5zZm9ybWVyLnRzJztcbmltcG9ydCB7IER1cmF0aW9uVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi9UcmFuc2Zvcm1lcnMvRHVyYXRpb25UcmFuc2Zvcm1lci50cyc7XG5pbXBvcnQgeyBHcm91cFRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vVHJhbnNmb3JtZXJzL0dyb3VwVHJhbnNmb3JtZXIudHMnO1xuaW1wb3J0IHsgU2tpcFByaXZhdGVQcm9wZXJ0eVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vVHJhbnNmb3JtZXJzL1NraXBQcml2YXRlUHJvcGVydHlUcmFuc2Zvcm1lci50cyc7XG5cbmNvbnN0IGRlZmF1bHRUcmFuc2Zvcm1lciA9IG5ldyBHcm91cFRyYW5zZm9ybWVyKFtcbiAgbmV3IFNraXBQcml2YXRlUHJvcGVydHlUcmFuc2Zvcm1lcigpLFxuICBuZXcgRGF0ZVRyYW5zZm9ybWVyKCksXG4gIG5ldyBEdXJhdGlvblRyYW5zZm9ybWVyKClcbl0pO1xuXG5jbGFzcyBQbHVnaW5TZXR0aW5nc1Byb3BlcnR5PFBsdWdpblNldHRpbmdzIGV4dGVuZHMgb2JqZWN0LCBQcm9wZXJ0eSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+PiB7XG4gIHB1YmxpYyB2YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICBwcml2YXRlIHZhbHVlOiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eV0gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWFuYWdlcjogUGx1Z2luU2V0dGluZ3NNYW5hZ2VyQmFzZTxQbHVnaW5TZXR0aW5ncz4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldXG4gICkge31cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gIH1cblxuICBwdWJsaWMgZ2V0KCk6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5XSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPz8gdGhpcy5kZWZhdWx0VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2FmZSgpOiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eV0ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID8gdGhpcy5kZWZhdWx0VmFsdWUgOiB0aGlzLmdldCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldCh2YWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAoYXdhaXQgdGhpcy5tYW5hZ2VyLnZhbGlkYXRlKHRoaXMucHJvcGVydHksIHRoaXMudmFsdWUpIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gJyc7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFByb3BlcnRpZXNNYXA8UGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgTWFwPHN0cmluZywgUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQbHVnaW5TZXR0aW5ncywgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+PiB7XG4gIHB1YmxpYyBnZXRUeXBlZDxQcm9wZXJ0eSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+PihrZXk6IFByb3BlcnR5KTogUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQbHVnaW5TZXR0aW5ncywgUHJvcGVydHk+IHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHN1cGVyLmdldChrZXkpO1xuICAgIGlmICghcHJvcGVydHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgJHtTdHJpbmcoa2V5KX0gbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5IGFzIFBsdWdpblNldHRpbmdzUHJvcGVydHk8UGx1Z2luU2V0dGluZ3MsIFByb3BlcnR5PjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUeXBlZDxQcm9wZXJ0eSBleHRlbmRzIFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+PihrZXk6IFByb3BlcnR5LCB2YWx1ZTogUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQbHVnaW5TZXR0aW5ncywgUHJvcGVydHk+KTogdGhpcyB7XG4gICAgcmV0dXJuIHN1cGVyLnNldChrZXksIHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIG1hbmFnaW5nIHBsdWdpbiBzZXR0aW5ncy5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBwbHVnaW4gc2V0dGluZ3Mgb2JqZWN0LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGx1Z2luU2V0dGluZ3NNYW5hZ2VyQmFzZTxQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdD4ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2FmZVNldHRpbmdzOiBSZWFkb25seURlZXA8UGx1Z2luU2V0dGluZ3M+O1xuXG4gIHByaXZhdGUgcHJvcGVydGllczogUHJvcGVydGllc01hcDxQbHVnaW5TZXR0aW5ncz47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcGx1Z2luOiBQbHVnaW4pIHtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXR0aW5ncygpO1xuICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzTWFwPFBsdWdpblNldHRpbmdzPigpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGVmYXVsdFNldHRpbmdzKSBhcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPltdKSB7XG4gICAgICB0aGlzLnByb3BlcnRpZXMuc2V0KGtleSwgbmV3IFBsdWdpblNldHRpbmdzUHJvcGVydHkodGhpcywga2V5LCBkZWZhdWx0U2V0dGluZ3Nba2V5XSkpO1xuICAgIH1cblxuICAgIHRoaXMuc2FmZVNldHRpbmdzID0gbmV3IFByb3h5KGRlZmF1bHRTZXR0aW5ncywge1xuICAgICAgZ2V0OiAoX3RhcmdldCwgcHJvcCk6IHVua25vd24gPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMuZ2V0KHByb3ApO1xuICAgICAgfVxuICAgIH0pIGFzIFJlYWRvbmx5RGVlcDxQbHVnaW5TZXR0aW5ncz47XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvcGVydHk8UHJvcGVydHkgZXh0ZW5kcyBTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPj4ocHJvcGVydHk6IFByb3BlcnR5KTogUGx1Z2luU2V0dGluZ3NQcm9wZXJ0eTxQbHVnaW5TZXR0aW5ncywgUHJvcGVydHk+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmdldFR5cGVkKHByb3BlcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkRnJvbUZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiB0aGlzLnByb3BlcnRpZXMudmFsdWVzKCkpIHtcbiAgICAgIHByb3BlcnR5LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucGx1Z2luLmxvYWREYXRhKCkgYXMgdW5rbm93bjtcblxuICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgY29uc3QgdHlwZSA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyAnQXJyYXknIDogdHlwZW9mIGRhdGE7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZS4gRXhwZWN0ZWQgT2JqZWN0LCBnb3Q6ICR7dHlwZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZWNvcmQgPSB0aGlzLmdldFRyYW5zZm9ybWVyKCkudHJhbnNmb3JtT2JqZWN0UmVjdXJzaXZlbHkocmVjb3JkKTtcbiAgICBhd2FpdCB0aGlzLnByZXBhcmVSZWNvcmQocmVjb3JkKTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5T2JqID0gdGhpcy5wcm9wZXJ0aWVzLmdldChrZXkpO1xuICAgICAgaWYgKCFwcm9wZXJ0eU9iaikge1xuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gcHJvcGVydHk6ICR7a2V5fWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZW9mIHByb3BlcnR5T2JqLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgdmFsdWUgdHlwZS4gRXhwZWN0ZWQgJHt0eXBlb2YgcHJvcGVydHlPYmouZGVmYXVsdFZhbHVlfSwgZ290OiAke3R5cGVvZiB2YWx1ZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHByb3BlcnR5T2JqLnNldCh2YWx1ZSBhcyBQbHVnaW5TZXR0aW5nc1tTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPl0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgbmV3IHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNhdmVUb0ZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5nZXRUcmFuc2Zvcm1lcigpLnRyYW5zZm9ybU9iamVjdFJlY3Vyc2l2ZWx5KHRoaXMuZ2V0U2V0dGluZ3MoKSk7XG4gICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZURhdGEocmVjb3JkKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGVcbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlPFByb3BlcnR5IGV4dGVuZHMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4+KF9wcm9wZXJ0eTogUHJvcGVydHksIF92YWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldKTogUHJvbWlzZTxzdHJpbmcgfCB2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlRGVmYXVsdFNldHRpbmdzKCk6IFBsdWdpblNldHRpbmdzO1xuXG4gIHByb3RlY3RlZCBnZXRUcmFuc2Zvcm1lcigpOiBUcmFuc2Zvcm1lciB7XG4gICAgcmV0dXJuIGRlZmF1bHRUcmFuc2Zvcm1lcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBwcmVwYXJlUmVjb3JkKF9yZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNldHRpbmdzKCk6IFJlY29yZDxTdHJpbmdLZXlzPFBsdWdpblNldHRpbmdzPiwgdW5rbm93bj4ge1xuICAgIGNvbnN0IHNldHRpbmdzOiBSZWNvcmQ8U3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz4sIHVua25vd24+ID0ge30gYXMgUmVjb3JkPFN0cmluZ0tleXM8UGx1Z2luU2V0dGluZ3M+LCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHByb3BlcnR5XSBvZiB0aGlzLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG4gICAgICBzZXR0aW5nc1trZXkgYXMgU3RyaW5nS2V5czxQbHVnaW5TZXR0aW5ncz5dID0gcHJvcGVydHkuZ2V0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBRUEsU0FBUyxjQUFjO0FBS3ZCLFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsd0JBQXdCO0FBQ2pDLFNBQVMsc0NBQXNDO0FBRS9DLE1BQU0scUJBQXFCLElBQUksaUJBQWlCO0FBQUEsRUFDOUMsSUFBSSwrQkFBK0I7QUFBQSxFQUNuQyxJQUFJLGdCQUFn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
|
@@ -3,49 +3,34 @@
|
|
3
3
|
* This module defines a base class for creating plugin setting tabs in Obsidian.
|
4
4
|
* It provides a utility method to bind value components to plugin settings and handle changes.
|
5
5
|
*/
|
6
|
-
import type { BaseComponent } from 'obsidian';
|
7
6
|
import type { ConditionalKeys, Promisable } from 'type-fest';
|
8
7
|
import { PluginSettingTab } from 'obsidian';
|
8
|
+
import type { StringKeys } from '../../Object.mjs';
|
9
9
|
import type { ValueComponentWithChangeTracking } from '../Components/ValueComponentWithChangeTracking.mjs';
|
10
10
|
import type { PluginBase } from './PluginBase.mjs';
|
11
|
-
import type { PluginSettingsBase } from './PluginSettingsBase.mjs';
|
12
11
|
/**
|
13
12
|
* Options for binding a value component to a plugin setting.
|
14
13
|
*/
|
15
|
-
export interface BindOptions
|
14
|
+
export interface BindOptions {
|
16
15
|
/**
|
17
16
|
* A callback function that is called when the value of the component changes.
|
18
17
|
*/
|
19
|
-
onChanged
|
20
|
-
/**
|
21
|
-
* The plugin settings object to bind the component to. Default is the plugin's current settings.
|
22
|
-
*/
|
23
|
-
pluginSettings?: PluginSettings;
|
24
|
-
/**
|
25
|
-
* If true, saves the plugin settings automatically after the component value changes. Default is `true`.
|
26
|
-
*/
|
27
|
-
shouldAutoSave?: boolean;
|
18
|
+
onChanged?(): Promisable<void>;
|
28
19
|
/**
|
29
20
|
* If true, shows the validation message when the component value is invalid. Default is `true`.
|
30
21
|
*/
|
31
22
|
shouldShowValidationMessage?: boolean;
|
32
|
-
/**
|
33
|
-
* Validates the UI value before setting it on the plugin settings.
|
34
|
-
* @param uiValue - The value of the UI component.
|
35
|
-
* @returns An error message if the value is invalid, or `(empty string)` or `void` if it is valid.
|
36
|
-
*/
|
37
|
-
valueValidator?: (uiValue: UIValue) => Promisable<string | void>;
|
38
23
|
}
|
39
24
|
/**
|
40
25
|
* Extended options for binding a value component to a plugin setting.
|
41
26
|
*/
|
42
|
-
export interface BindOptionsExtended<PluginSettings, UIValue, Property extends
|
27
|
+
export interface BindOptionsExtended<PluginSettings extends object, UIValue, Property extends StringKeys<PluginSettings>> extends BindOptions {
|
43
28
|
/**
|
44
29
|
* Converts the UI component's value back to the plugin settings value.
|
45
30
|
* @param uiValue - The value of the UI component.
|
46
31
|
* @returns The value to set on the plugin settings.
|
47
32
|
*/
|
48
|
-
componentToPluginSettingsValueConverter: (uiValue: UIValue) => PluginSettings[Property];
|
33
|
+
componentToPluginSettingsValueConverter: (uiValue: UIValue) => PluginSettings[Property] | ValidationMessageHolder;
|
49
34
|
/**
|
50
35
|
* Converts the plugin settings value to the value used by the UI component.
|
51
36
|
* @param pluginSettingsValue - The value of the property in the plugin settings.
|
@@ -53,7 +38,10 @@ export interface BindOptionsExtended<PluginSettings, UIValue, Property extends k
|
|
53
38
|
*/
|
54
39
|
pluginSettingsToComponentValueConverter: (pluginSettingsValue: PluginSettings[Property]) => UIValue;
|
55
40
|
}
|
56
|
-
type ExtractPluginSettings<T extends PluginBase<any>> =
|
41
|
+
type ExtractPluginSettings<T extends PluginBase<any>> = Writable<T['settings']>;
|
42
|
+
interface ValidationMessageHolder {
|
43
|
+
validationMessage: string;
|
44
|
+
}
|
57
45
|
/**
|
58
46
|
* Base class for creating plugin settings tabs in Obsidian.
|
59
47
|
* Provides a method for binding value components to plugin settings and handling changes.
|
@@ -62,7 +50,6 @@ type ExtractPluginSettings<T extends PluginBase<any>> = PluginSettingsBase & T['
|
|
62
50
|
*/
|
63
51
|
export declare abstract class PluginSettingsTabBase<TPlugin extends PluginBase<any>> extends PluginSettingTab {
|
64
52
|
plugin: TPlugin;
|
65
|
-
private validatorsMap;
|
66
53
|
constructor(plugin: TPlugin);
|
67
54
|
/**
|
68
55
|
* Binds a value component to a plugin setting.
|
@@ -74,7 +61,7 @@ export declare abstract class PluginSettingsTabBase<TPlugin extends PluginBase<a
|
|
74
61
|
* @param options - The options for binding the value component.
|
75
62
|
* @returns The value component.
|
76
63
|
*/
|
77
|
-
bind<UIValue, TValueComponent>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, property: ConditionalKeys<ExtractPluginSettings<TPlugin>, UIValue>, options?: BindOptions
|
64
|
+
bind<UIValue, TValueComponent>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, property: ConditionalKeys<ExtractPluginSettings<TPlugin>, UIValue>, options?: BindOptions): TValueComponent;
|
78
65
|
/**
|
79
66
|
* Binds a value component to a plugin setting.
|
80
67
|
*
|
@@ -86,13 +73,7 @@ export declare abstract class PluginSettingsTabBase<TPlugin extends PluginBase<a
|
|
86
73
|
* @param options - The options for binding the value component.
|
87
74
|
* @returns The value component.
|
88
75
|
*/
|
89
|
-
bind<UIValue, TValueComponent, Property extends
|
90
|
-
|
91
|
-
* Revalidates the value component.
|
92
|
-
*
|
93
|
-
* @param baseComponent - The base component to revalidate.
|
94
|
-
* @returns A promise that resolves to a boolean indicating whether the value component is valid.
|
95
|
-
*/
|
96
|
-
protected revalidate(baseComponent: BaseComponent): Promise<boolean>;
|
76
|
+
bind<UIValue, TValueComponent, Property extends StringKeys<ExtractPluginSettings<TPlugin>>>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>, property: Property, options: BindOptionsExtended<ExtractPluginSettings<TPlugin>, UIValue, Property>): TValueComponent;
|
77
|
+
hide(): void;
|
97
78
|
}
|
98
79
|
export {};
|