obsidian-dev-utils 66.0.1 → 68.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/dev/main.js +543 -355
- package/dist/lib/cjs/async-events.cjs +182 -32
- package/dist/lib/cjs/async-events.d.cts +259 -24
- package/dist/lib/cjs/async.cjs +2 -2
- package/dist/lib/cjs/error.cjs +6 -7
- package/dist/lib/cjs/function.cjs +6 -2
- package/dist/lib/cjs/function.d.cts +6 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/object-utils.cjs +1 -1
- package/dist/lib/cjs/object-utils.d.cts +2 -0
- package/dist/lib/cjs/obsidian/active-file-provider.cjs +1 -1
- package/dist/lib/cjs/obsidian/active-file-provider.d.cts +0 -1
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +2 -4
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +1 -1
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +4 -5
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +3 -3
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +3 -3
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +2 -1
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +2 -3
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +1 -1
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +1 -6
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +1 -6
- package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +3 -8
- package/dist/lib/cjs/obsidian/components/abort-signal-component.d.cts +2 -6
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +3 -3
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +3 -8
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.d.cts +2 -6
- package/dist/lib/cjs/obsidian/components/async-events-component.cjs +2 -20
- package/dist/lib/cjs/obsidian/components/async-events-component.d.cts +1 -18
- package/dist/lib/cjs/obsidian/components/component-ex.cjs +235 -0
- package/dist/lib/cjs/obsidian/components/component-ex.d.cts +55 -0
- package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +3 -7
- package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +2 -6
- package/dist/lib/cjs/obsidian/components/disposable-component.cjs +1 -9
- package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +0 -10
- package/dist/lib/cjs/obsidian/components/i18n-component.cjs +4 -9
- package/dist/lib/cjs/obsidian/components/i18n-component.d.cts +3 -7
- package/dist/lib/cjs/obsidian/components/index.cjs +9 -6
- package/dist/lib/cjs/obsidian/components/index.d.cts +2 -1
- package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +10 -4
- package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +3 -3
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +3 -3
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +2 -3
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +4 -4
- package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +3 -3
- package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +3 -8
- package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +2 -6
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +3 -7
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +2 -6
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +75 -33
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +73 -28
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +3 -4
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/components/registry-component.cjs +180 -0
- package/dist/lib/cjs/obsidian/components/registry-component.d.cts +36 -0
- package/dist/lib/cjs/obsidian/markdown.cjs +2 -3
- package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +0 -1
- package/dist/lib/cjs/obsidian/modals/alert.cjs +1 -3
- package/dist/lib/cjs/obsidian/modals/confirm.cjs +1 -3
- package/dist/lib/cjs/obsidian/modals/prompt.cjs +1 -3
- package/dist/lib/cjs/obsidian/modals/select-item.cjs +1 -2
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +23 -22
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +7 -3
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +35 -76
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +35 -36
- package/dist/lib/cjs/obsidian/queue.cjs +2 -2
- package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +1 -2
- package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/setting-components/checkbox-component.d.cts +1 -2
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +4 -2
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +4 -3
- package/dist/lib/cjs/obsidian/setting-components/date-component.cjs +1 -2
- package/dist/lib/cjs/obsidian/setting-components/date-time-component.cjs +1 -2
- package/dist/lib/cjs/obsidian/setting-components/file-component.cjs +1 -3
- package/dist/lib/cjs/obsidian/setting-components/month-component.cjs +1 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +4 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +4 -3
- package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.cjs +1 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-file-component.cjs +1 -3
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +4 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +4 -3
- package/dist/lib/cjs/obsidian/setting-components/time-component.cjs +1 -2
- package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.d.cts +1 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +4 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +4 -3
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +4 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +4 -3
- package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +4 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-text-component.d.cts +1 -2
- package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.cjs +1 -1
- package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.d.cts +1 -2
- package/dist/lib/cjs/obsidian/setting-components/week-component.cjs +1 -2
- package/dist/lib/cjs/obsidian/setting-ex.cjs +3 -1
- package/dist/lib/cjs/obsidian/setting-ex.d.cts +2 -0
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +8 -2
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +10 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +7 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +184 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +242 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +5 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +222 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +4 -0
- package/dist/lib/cjs/transformers/group-transformer.cjs +1 -3
- package/dist/lib/esm/async-events.d.mts +259 -24
- package/dist/lib/esm/async-events.mjs +179 -31
- package/dist/lib/esm/async.mjs +6 -3
- package/dist/lib/esm/error.mjs +6 -7
- package/dist/lib/esm/function.d.mts +6 -0
- package/dist/lib/esm/function.mjs +5 -2
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/object-utils.d.mts +2 -0
- package/dist/lib/esm/object-utils.mjs +1 -1
- package/dist/lib/esm/obsidian/active-file-provider.d.mts +0 -1
- package/dist/lib/esm/obsidian/active-file-provider.mjs +1 -1
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +1 -1
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +2 -4
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +3 -3
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +4 -5
- package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +2 -1
- package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +4 -4
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +1 -1
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +2 -3
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +1 -6
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +1 -6
- package/dist/lib/esm/obsidian/components/abort-signal-component.d.mts +2 -6
- package/dist/lib/esm/obsidian/components/abort-signal-component.mjs +3 -8
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/async-error-handler-component.d.mts +2 -6
- package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -8
- package/dist/lib/esm/obsidian/components/async-events-component.d.mts +1 -18
- package/dist/lib/esm/obsidian/components/async-events-component.mjs +2 -19
- package/dist/lib/esm/obsidian/components/component-ex.d.mts +55 -0
- package/dist/lib/esm/obsidian/components/component-ex.mjs +130 -0
- package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +2 -6
- package/dist/lib/esm/obsidian/components/console-debug-component.mjs +3 -7
- package/dist/lib/esm/obsidian/components/disposable-component.d.mts +0 -10
- package/dist/lib/esm/obsidian/components/disposable-component.mjs +1 -8
- package/dist/lib/esm/obsidian/components/i18n-component.d.mts +3 -7
- package/dist/lib/esm/obsidian/components/i18n-component.mjs +4 -9
- package/dist/lib/esm/obsidian/components/index.d.mts +2 -1
- package/dist/lib/esm/obsidian/components/index.mjs +6 -4
- package/dist/lib/esm/obsidian/components/layout-ready-component.d.mts +3 -3
- package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +10 -4
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +2 -3
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +3 -3
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +4 -4
- package/dist/lib/esm/obsidian/components/plugin-context-component.d.mts +2 -6
- package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +3 -8
- package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +2 -6
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +3 -7
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +73 -28
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +75 -33
- package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.mjs +3 -4
- package/dist/lib/esm/obsidian/components/registry-component.d.mts +36 -0
- package/dist/lib/esm/obsidian/components/registry-component.mjs +72 -0
- package/dist/lib/esm/obsidian/markdown.mjs +2 -3
- package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +0 -1
- package/dist/lib/esm/obsidian/modals/alert.mjs +1 -3
- package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -3
- package/dist/lib/esm/obsidian/modals/prompt.mjs +1 -3
- package/dist/lib/esm/obsidian/modals/select-item.mjs +1 -2
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +7 -3
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +24 -23
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +35 -36
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +35 -77
- package/dist/lib/esm/obsidian/queue.mjs +6 -3
- package/dist/lib/esm/obsidian/rename-delete-handler.mjs +1 -2
- package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +1 -2
- package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +1 -1
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +4 -3
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +4 -2
- package/dist/lib/esm/obsidian/setting-components/date-component.mjs +1 -2
- package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +1 -2
- package/dist/lib/esm/obsidian/setting-components/file-component.mjs +1 -3
- package/dist/lib/esm/obsidian/setting-components/month-component.mjs +1 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +4 -3
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +4 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +1 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +1 -3
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +4 -3
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +4 -2
- package/dist/lib/esm/obsidian/setting-components/time-component.mjs +1 -2
- package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +1 -2
- package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +1 -1
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +4 -3
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +4 -2
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +4 -3
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +4 -2
- package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +1 -2
- package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +4 -2
- package/dist/lib/esm/obsidian/setting-components/value-component-with-change-tracking.d.mts +1 -2
- package/dist/lib/esm/obsidian/setting-components/week-component.mjs +1 -2
- package/dist/lib/esm/obsidian/setting-ex.d.mts +2 -0
- package/dist/lib/esm/obsidian/setting-ex.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +8 -2
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +7 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +7 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +75 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +5 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +131 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +4 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +112 -0
- package/dist/lib/esm/transformers/group-transformer.mjs +1 -3
- package/obsidian/Components/component-ex/package.json +6 -0
- package/obsidian/Components/registry-component/package.json +6 -0
- package/package.json +21 -20
- package/script-utils/linters/eslint-rules/prefer-noop-async/package.json +6 -0
- package/script-utils/linters/eslint-rules/require-component-suffix/package.json +6 -0
- package/script-utils/linters/eslint-rules/require-method-template/package.json +6 -0
- package/dist/lib/cjs/obsidian/components/async-component.cjs +0 -182
- package/dist/lib/cjs/obsidian/components/async-component.d.cts +0 -43
- package/dist/lib/esm/obsidian/components/async-component.d.mts +0 -43
- package/dist/lib/esm/obsidian/components/async-component.mjs +0 -72
- package/obsidian/Components/async-component/package.json +0 -6
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Async event emitter.
|
|
5
5
|
*/
|
|
6
|
+
import type { AbstractConstructor, Promisable } from 'type-fest';
|
|
6
7
|
import type { GenericPromisableVoidFunction } from './function.mjs';
|
|
8
|
+
import type { StringKeys } from './type.mjs';
|
|
7
9
|
/**
|
|
8
10
|
* Async event reference.
|
|
9
11
|
*/
|
|
10
12
|
export interface AsyncEventRef {
|
|
11
13
|
/**
|
|
12
|
-
* An event
|
|
14
|
+
* An event source.
|
|
13
15
|
*/
|
|
14
|
-
|
|
16
|
+
asyncEventSource: GenericAsyncEventSource;
|
|
15
17
|
/**
|
|
16
18
|
* A callback to call when the event is triggered.
|
|
17
19
|
*/
|
|
@@ -25,15 +27,36 @@ export interface AsyncEventRef {
|
|
|
25
27
|
*/
|
|
26
28
|
thisArg: unknown;
|
|
27
29
|
}
|
|
28
|
-
type GenericCallback = GenericPromisableVoidFunction<unknown[]>;
|
|
29
30
|
/**
|
|
30
|
-
* Async event emitter implementation
|
|
31
|
+
* Async event emitter implementation.
|
|
32
|
+
*
|
|
33
|
+
* @typeParam EventMap - Maps event names to their argument tuples.
|
|
34
|
+
* When omitted, the emitter accepts any string event name with any arguments.
|
|
35
|
+
* When provided, methods enforce correct event names and argument types
|
|
36
|
+
* with full autocomplete. Works with both `type` aliases and `interface` declarations.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* // Untyped (default) — any event name, any args:
|
|
41
|
+
* const events = new AsyncEvents();
|
|
42
|
+
* events.on('my-event', (arg1: string) => { ... });
|
|
43
|
+
*
|
|
44
|
+
* // Typed — only declared events with correct args:
|
|
45
|
+
* interface MyEventMap {
|
|
46
|
+
* save: [data: string];
|
|
47
|
+
* load: [id: number, force: boolean];
|
|
48
|
+
* }
|
|
49
|
+
* const events = new AsyncEvents<MyEventMap>();
|
|
50
|
+
* events.on('save', (data) => { ... }); // data: string — autocomplete on event name
|
|
51
|
+
* events.on('load', (id, force) => { ... }); // id: number, force: boolean
|
|
52
|
+
* ```
|
|
31
53
|
*/
|
|
32
|
-
export
|
|
33
|
-
private readonly eventRefsMap;
|
|
54
|
+
export interface AsyncEventSource<EventMap extends EventMapConstraint<EventMap> = EventMapBase> extends GenericAsyncEventSource {
|
|
34
55
|
/**
|
|
35
56
|
* Remove an event listener.
|
|
36
57
|
*
|
|
58
|
+
* @typeParam EventName - The name of the event.
|
|
59
|
+
* @typeParam Args - The arguments of the event.
|
|
37
60
|
* @param name - The name of the event.
|
|
38
61
|
* @param callback - The callback to remove.
|
|
39
62
|
*
|
|
@@ -42,21 +65,30 @@ export declare class AsyncEvents {
|
|
|
42
65
|
* events.off('my-event', myListener);
|
|
43
66
|
* ```
|
|
44
67
|
*/
|
|
45
|
-
off<Args extends
|
|
68
|
+
off<EventName extends StringKeys<EventMap>, Args extends CallbackArgs<EventMap, EventName>>(name: EventName, callback: (...args: Args) => Promisable<void>): void;
|
|
46
69
|
/**
|
|
47
|
-
*
|
|
70
|
+
* Add an event listener.
|
|
48
71
|
*
|
|
49
|
-
* @
|
|
72
|
+
* @typeParam EventName - The name of the event.
|
|
73
|
+
* @typeParam Args - The arguments of the event.
|
|
74
|
+
* @param name - The name of the event.
|
|
75
|
+
* @param callback - The callback to call when the event is triggered.
|
|
76
|
+
* @param thisArg - The context passed as `this` to the `callback`.
|
|
77
|
+
* @returns A reference to the event listener.
|
|
50
78
|
*
|
|
51
79
|
* @example
|
|
52
80
|
* ```ts
|
|
53
|
-
* events.
|
|
81
|
+
* events.on('my-event', async (arg1, arg2) => {
|
|
82
|
+
* await sleep(100);
|
|
83
|
+
* console.log(arg1, arg2);
|
|
84
|
+
* });
|
|
54
85
|
* ```
|
|
55
86
|
*/
|
|
56
|
-
|
|
87
|
+
on<EventName extends StringKeys<EventMap>, Args extends CallbackArgs<EventMap, EventName>>(name: EventName, callback: (...args: Args) => Promisable<void>, thisArg?: unknown): AsyncEventRef;
|
|
57
88
|
/**
|
|
58
|
-
* Add an event listener.
|
|
89
|
+
* Add an event listener that will be triggered only once.
|
|
59
90
|
*
|
|
91
|
+
* @typeParam EventName - The name of the event.
|
|
60
92
|
* @param name - The name of the event.
|
|
61
93
|
* @param callback - The callback to call when the event is triggered.
|
|
62
94
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
@@ -64,24 +96,144 @@ export declare class AsyncEvents {
|
|
|
64
96
|
*
|
|
65
97
|
* @example
|
|
66
98
|
* ```ts
|
|
67
|
-
* events.
|
|
99
|
+
* events.once('my-event', async (arg1, arg2) => {
|
|
68
100
|
* await sleep(100);
|
|
69
101
|
* console.log(arg1, arg2);
|
|
70
102
|
* });
|
|
71
103
|
* ```
|
|
72
104
|
*/
|
|
105
|
+
once<EventName extends StringKeys<EventMap>, Args extends CallbackArgs<EventMap, EventName>>(name: EventName, callback: (...args: Args) => Promisable<void>, thisArg?: unknown): AsyncEventRef;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Interface exposing event-triggering methods for subclasses of mixin-created classes.
|
|
109
|
+
*
|
|
110
|
+
* These methods are `protected` at runtime but surfaced in the declaration type
|
|
111
|
+
* because TypeScript cannot represent `protected` in anonymous-class return types.
|
|
112
|
+
*
|
|
113
|
+
* @typeParam EventMap - Maps event names to their argument tuples.
|
|
114
|
+
*/
|
|
115
|
+
export interface AsyncEventTrigger<EventMap extends EventMapConstraint<EventMap> = EventMapBase> {
|
|
73
116
|
/**
|
|
74
|
-
*
|
|
117
|
+
* Trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
75
118
|
*
|
|
119
|
+
* @typeParam EventName - The name of the event.
|
|
76
120
|
* @param name - The name of the event.
|
|
77
|
-
* @param
|
|
78
|
-
* @param thisArg - The `this` context.
|
|
79
|
-
* @returns A reference to the event listener.
|
|
121
|
+
* @param args - The data to pass to the event listeners.
|
|
80
122
|
*/
|
|
81
|
-
|
|
123
|
+
trigger<EventName extends StringKeys<EventMap>>(name: EventName, ...args: CallbackArgs<EventMap, EventName>): void;
|
|
82
124
|
/**
|
|
83
|
-
*
|
|
125
|
+
* Trigger an event asynchronously.
|
|
126
|
+
*
|
|
127
|
+
* @typeParam EventName - The name of the event.
|
|
128
|
+
* @param name - The name of the event.
|
|
129
|
+
* @param args - The data to pass to the event listeners.
|
|
130
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
131
|
+
*/
|
|
132
|
+
triggerAsync<EventName extends StringKeys<EventMap>>(name: EventName, ...args: CallbackArgs<EventMap, EventName>): Promise<void>;
|
|
133
|
+
/**
|
|
134
|
+
* Try to trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
135
|
+
*
|
|
136
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
137
|
+
* @param eventRef - The event reference.
|
|
138
|
+
* @param args - The data to pass to the event listeners.
|
|
139
|
+
*/
|
|
140
|
+
tryTrigger<Args extends unknown[]>(eventRef: AsyncEventRef, args: Args): void;
|
|
141
|
+
/**
|
|
142
|
+
* Try to trigger an event asynchronously.
|
|
143
|
+
*
|
|
144
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
145
|
+
* @param eventRef - The event reference.
|
|
146
|
+
* @param args - The data to pass to the event listeners.
|
|
147
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
148
|
+
*/
|
|
149
|
+
tryTriggerAsync<Args extends unknown[]>(eventRef: AsyncEventRef, args: Args): Promise<void>;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Resolves callback argument types for an event.
|
|
153
|
+
*
|
|
154
|
+
* - When `EventMap` has an index signature (untyped default): returns `unknown[]`,
|
|
155
|
+
* allowing `Args` to be inferred freely from the callback.
|
|
156
|
+
* - When `EventMap` has explicit keys only (typed map): returns `EventMap[EventName]`,
|
|
157
|
+
* enforcing the declared argument types and enabling autocomplete.
|
|
158
|
+
*
|
|
159
|
+
* @typeParam EventMap - Maps event names to their argument tuples.
|
|
160
|
+
* @typeParam EventName - The name of the event.
|
|
161
|
+
*/
|
|
162
|
+
export type CallbackArgs<EventMap, EventName extends string> = string extends keyof EventMap ? unknown[] : (EventName extends keyof EventMap ? EventMap[EventName] : unknown[]);
|
|
163
|
+
/**
|
|
164
|
+
* Base event map type for untyped emitters.
|
|
165
|
+
*/
|
|
166
|
+
export type EventMapBase = Record<string, unknown[]>;
|
|
167
|
+
/**
|
|
168
|
+
* Interface for event source, used by {@link AsyncEventRef}
|
|
169
|
+
* so that refs can be stored regardless of the emitter's `EventMap`.
|
|
170
|
+
*/
|
|
171
|
+
export interface GenericAsyncEventSource {
|
|
172
|
+
/**
|
|
173
|
+
* Remove an event listener by reference.
|
|
174
|
+
*
|
|
175
|
+
* @param eventRef - The reference to remove.
|
|
176
|
+
*/
|
|
177
|
+
offref(eventRef: AsyncEventRef): void;
|
|
178
|
+
}
|
|
179
|
+
type EventMapConstraint<T> = Record<keyof T, unknown[]>;
|
|
180
|
+
type GenericCallback = GenericPromisableVoidFunction<unknown[]>;
|
|
181
|
+
/**
|
|
182
|
+
* Async event source implementation.
|
|
183
|
+
*
|
|
184
|
+
* @typeParam EventMap - Maps event names to their argument tuples.
|
|
185
|
+
* When omitted, the emitter accepts any string event name with any arguments.
|
|
186
|
+
* When provided, methods enforce correct event names and argument types
|
|
187
|
+
* with full autocomplete. Works with both `type` aliases and `interface` declarations.
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```ts
|
|
191
|
+
* // Untyped (default) — any event name, any args:
|
|
192
|
+
* const events = new AsyncEvents();
|
|
193
|
+
* events.on('my-event', (arg1: string) => { ... });
|
|
194
|
+
*
|
|
195
|
+
* // Typed — only declared events with correct args:
|
|
196
|
+
* interface MyEventMap {
|
|
197
|
+
* save: [data: string];
|
|
198
|
+
* load: [id: number, force: boolean];
|
|
199
|
+
* }
|
|
200
|
+
* const events = new AsyncEvents<MyEventMap>();
|
|
201
|
+
* events.on('save', (data) => { ... }); // data: string — autocomplete on event name
|
|
202
|
+
* events.on('load', (id, force) => { ... }); // id: number, force: boolean
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
export declare abstract class AsyncEventsBase<EventMap extends EventMapConstraint<EventMap> = EventMapBase> implements AsyncEventSource<EventMap> {
|
|
206
|
+
private readonly eventRefsMap;
|
|
207
|
+
/**
|
|
208
|
+
* Remove an event listener.
|
|
84
209
|
*
|
|
210
|
+
* @typeParam EventName - The name of the event.
|
|
211
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
212
|
+
* @param name - The name of the event.
|
|
213
|
+
* @param callback - The callback to remove.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```ts
|
|
217
|
+
* events.off('my-event', myListener);
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
off<EventName extends StringKeys<EventMap>, Args extends CallbackArgs<EventMap, EventName>>(name: EventName, callback: (...args: Args) => Promisable<void>): void;
|
|
221
|
+
/**
|
|
222
|
+
* Remove an event listener by reference.
|
|
223
|
+
*
|
|
224
|
+
* @param eventRef - The reference to the event listener.
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```ts
|
|
228
|
+
* events.offref(myRef);
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
offref(eventRef: AsyncEventRef): void;
|
|
232
|
+
/**
|
|
233
|
+
* Add an event listener.
|
|
234
|
+
*
|
|
235
|
+
* @typeParam EventName - The name of the event.
|
|
236
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
85
237
|
* @param name - The name of the event.
|
|
86
238
|
* @param callback - The callback to call when the event is triggered.
|
|
87
239
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
@@ -89,24 +241,36 @@ export declare class AsyncEvents {
|
|
|
89
241
|
*
|
|
90
242
|
* @example
|
|
91
243
|
* ```ts
|
|
92
|
-
* events.
|
|
244
|
+
* events.on('my-event', async (arg1, arg2) => {
|
|
93
245
|
* await sleep(100);
|
|
94
246
|
* console.log(arg1, arg2);
|
|
95
247
|
* });
|
|
96
248
|
* ```
|
|
97
249
|
*/
|
|
250
|
+
on<EventName extends StringKeys<EventMap>, Args extends CallbackArgs<EventMap, EventName>>(name: EventName, callback: (...args: Args) => Promisable<void>, thisArg?: unknown): AsyncEventRef;
|
|
98
251
|
/**
|
|
99
|
-
*
|
|
252
|
+
* Add an event listener that will be triggered only once.
|
|
100
253
|
*
|
|
254
|
+
* @typeParam EventName - The name of the event.
|
|
255
|
+
* @typeParam Args - The types of the arguments the event callback accepts.
|
|
101
256
|
* @param name - The name of the event.
|
|
102
257
|
* @param callback - The callback to call when the event is triggered.
|
|
103
258
|
* @param thisArg - The context passed as `this` to the `callback`.
|
|
104
259
|
* @returns A reference to the event listener.
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* ```ts
|
|
263
|
+
* events.once('my-event', async (arg1, arg2) => {
|
|
264
|
+
* await sleep(100);
|
|
265
|
+
* console.log(arg1, arg2);
|
|
266
|
+
* });
|
|
267
|
+
* ```
|
|
105
268
|
*/
|
|
106
|
-
once<Args extends
|
|
269
|
+
once<EventName extends StringKeys<EventMap>, Args extends CallbackArgs<EventMap, EventName>>(name: EventName, callback: (...args: Args) => Promisable<void>, thisArg?: unknown): AsyncEventRef;
|
|
107
270
|
/**
|
|
108
271
|
* Trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
109
272
|
*
|
|
273
|
+
* @typeParam EventName - The name of the event.
|
|
110
274
|
* @param name - The name of the event.
|
|
111
275
|
* @param args - The data to pass to the event listeners.
|
|
112
276
|
*
|
|
@@ -115,17 +279,20 @@ export declare class AsyncEvents {
|
|
|
115
279
|
* events.trigger('my-event', 'arg1', 'arg2');
|
|
116
280
|
* ```
|
|
117
281
|
*/
|
|
118
|
-
trigger<
|
|
282
|
+
protected trigger<EventName extends StringKeys<EventMap>>(name: EventName, ...args: CallbackArgs<EventMap, EventName>): void;
|
|
119
283
|
/**
|
|
120
284
|
* Trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
121
285
|
*
|
|
286
|
+
* @typeParam EventName - The name of the event.
|
|
122
287
|
* @param name - The name of the event.
|
|
123
288
|
* @param args - The data to pass to the event listeners.
|
|
289
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
124
290
|
*/
|
|
125
|
-
triggerAsync<
|
|
291
|
+
protected triggerAsync<EventName extends StringKeys<EventMap>>(name: EventName, ...args: CallbackArgs<EventMap, EventName>): Promise<void>;
|
|
126
292
|
/**
|
|
127
293
|
* Try to trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
128
294
|
*
|
|
295
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
129
296
|
* @param eventRef - The event reference.
|
|
130
297
|
* @param args - The data to pass to the event listeners.
|
|
131
298
|
*
|
|
@@ -134,13 +301,81 @@ export declare class AsyncEvents {
|
|
|
134
301
|
* events.tryTrigger(myRef, ['arg1', 'arg2']);
|
|
135
302
|
* ```
|
|
136
303
|
*/
|
|
304
|
+
protected tryTrigger<Args extends unknown[]>(eventRef: AsyncEventRef, args: Args): void;
|
|
305
|
+
/**
|
|
306
|
+
* Try to trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
307
|
+
*
|
|
308
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
309
|
+
* @param eventRef - The event reference.
|
|
310
|
+
* @param args - The data to pass to the event listeners.
|
|
311
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
312
|
+
*/
|
|
313
|
+
protected tryTriggerAsync<Args extends unknown[]>(eventRef: AsyncEventRef, args: Args): Promise<void>;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* A class that extends {@link AsyncEventsBase} and provides public methods for triggering events.
|
|
317
|
+
*
|
|
318
|
+
* This class exists as parity with {@link obsidian#Events}. But exposing publicly `trigger()` methods violates encapsulation.
|
|
319
|
+
*
|
|
320
|
+
* Avoid using it in favor of {@link AsyncEventsBase}.
|
|
321
|
+
*
|
|
322
|
+
* @typeParam EventMap - The type of the event map.
|
|
323
|
+
*/
|
|
324
|
+
export declare class AsyncEvents<EventMap extends EventMapConstraint<EventMap> = EventMapBase> extends AsyncEventsBase<EventMap> {
|
|
325
|
+
/**
|
|
326
|
+
* Trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
327
|
+
*
|
|
328
|
+
* @typeParam EventName - The name of the event.
|
|
329
|
+
* @param name - The name of the event.
|
|
330
|
+
* @param args - The data to pass to the event listeners.
|
|
331
|
+
*/
|
|
332
|
+
trigger<EventName extends StringKeys<EventMap>>(name: EventName, ...args: CallbackArgs<EventMap, EventName>): void;
|
|
333
|
+
/**
|
|
334
|
+
* Trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
335
|
+
*
|
|
336
|
+
* @typeParam EventName - The name of the event.
|
|
337
|
+
* @param name - The name of the event.
|
|
338
|
+
* @param args - The data to pass to the event listeners.
|
|
339
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
340
|
+
*/
|
|
341
|
+
triggerAsync<EventName extends StringKeys<EventMap>>(name: EventName, ...args: CallbackArgs<EventMap, EventName>): Promise<void>;
|
|
342
|
+
/**
|
|
343
|
+
* Try to trigger an event, executing all the listeners in order even if some of them throw an error.
|
|
344
|
+
*
|
|
345
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
346
|
+
* @param eventRef - The event reference.
|
|
347
|
+
* @param args - The data to pass to the event listeners.
|
|
348
|
+
*/
|
|
137
349
|
tryTrigger<Args extends unknown[]>(eventRef: AsyncEventRef, args: Args): void;
|
|
138
350
|
/**
|
|
139
351
|
* Try to trigger an event asynchronously, executing all the listeners in order even if some of them throw an error.
|
|
140
352
|
*
|
|
353
|
+
* @typeParam Args - The types of the arguments the function accepts.
|
|
141
354
|
* @param eventRef - The event reference.
|
|
142
355
|
* @param args - The data to pass to the event listeners.
|
|
356
|
+
* @returns A {@link Promise} that resolves when all listeners have completed.
|
|
143
357
|
*/
|
|
144
358
|
tryTriggerAsync<Args extends unknown[]>(eventRef: AsyncEventRef, args: Args): Promise<void>;
|
|
145
359
|
}
|
|
360
|
+
/**
|
|
361
|
+
* Mixin that adds {@link AsyncEventSource} delegation to a base class.
|
|
362
|
+
*
|
|
363
|
+
* All event methods delegate to a private {@link AsyncEventsBase} instance.
|
|
364
|
+
* The `EventMap` generic is fixed at mixin-application time — if you need a class
|
|
365
|
+
* that is itself generic over its event map, use composition instead.
|
|
366
|
+
*
|
|
367
|
+
* @typeParam EventMap - Maps event names to their argument tuples.
|
|
368
|
+
* @returns A function that takes a base class and returns a new class extending it with {@link AsyncEventSource}.
|
|
369
|
+
*
|
|
370
|
+
* @example
|
|
371
|
+
* ```ts
|
|
372
|
+
* interface MyEvents {
|
|
373
|
+
* save: [data: string];
|
|
374
|
+
* }
|
|
375
|
+
* class MyComponent extends mixinAsyncEvents<MyEvents>()(Component) {
|
|
376
|
+
* // on(), off(), once(), offref() are available
|
|
377
|
+
* }
|
|
378
|
+
* ```
|
|
379
|
+
*/
|
|
380
|
+
export declare function mixinAsyncEvents<EventMap extends EventMapConstraint<EventMap> = EventMapBase>(): <TBase extends AbstractConstructor<object>>(baseClass: TBase) => AbstractConstructor<AsyncEventSource<EventMap> & AsyncEventTrigger<EventMap>> & TBase;
|
|
146
381
|
export {};
|