obsidian-dev-utils 74.2.0 → 75.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 +6 -0
- package/dist/dev/main.js +78 -79
- package/dist/lib/cjs/debug.cjs +4 -4
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/{setup/async-operation-tracking-jest-setup.cjs → jest-setup.cjs} +3 -3
- package/dist/lib/cjs/jest-setup.d.cts +13 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/object-utils.cjs +6 -3
- package/dist/lib/cjs/obsidian/app.cjs +3 -19
- package/dist/lib/cjs/obsidian/app.d.cts +0 -11
- package/dist/lib/cjs/obsidian/callout.cjs +1 -2
- package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.cjs +2 -4
- package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.d.cts +0 -6
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +3 -3
- package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +2 -2
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +3 -3
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +5 -8
- package/dist/lib/cjs/obsidian/link.cjs +5 -5
- package/dist/lib/cjs/obsidian/link.d.cts +1 -2
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +6 -6
- package/dist/lib/cjs/obsidian/plugin/plugin-context.cjs +4 -4
- package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +2 -3
- package/dist/lib/cjs/obsidian/queue.cjs +9 -10
- package/dist/lib/cjs/obsidian/queue.d.cts +1 -12
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +146 -0
- package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +29 -0
- package/dist/lib/cjs/{setup/async-operation-tracking-setup.cjs → setup.cjs} +14 -9
- package/dist/lib/cjs/setup.d.cts +44 -0
- package/dist/lib/cjs/{setup/async-operation-tracking-vitest-setup.cjs → vitest-setup.cjs} +3 -3
- package/dist/lib/cjs/vitest-setup.d.cts +11 -0
- package/dist/lib/esm/debug.mjs +4 -4
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/jest-setup.d.mts +13 -0
- package/dist/lib/esm/jest-setup.mjs +33 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/object-utils.mjs +6 -3
- package/dist/lib/esm/obsidian/app.d.mts +0 -11
- package/dist/lib/esm/obsidian/app.mjs +2 -17
- package/dist/lib/esm/obsidian/callout.mjs +1 -2
- package/dist/lib/esm/obsidian/components/generate-markdown-link-default-params-component.d.mts +0 -6
- package/dist/lib/esm/obsidian/components/generate-markdown-link-default-params-component.mjs +2 -4
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +2 -2
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +5 -8
- package/dist/lib/esm/obsidian/link.d.mts +1 -2
- package/dist/lib/esm/obsidian/link.mjs +5 -5
- package/dist/lib/esm/obsidian/metadata-cache.mjs +6 -6
- package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +2 -3
- package/dist/lib/esm/obsidian/plugin/plugin-context.mjs +4 -4
- package/dist/lib/esm/obsidian/queue.d.mts +1 -12
- package/dist/lib/esm/obsidian/queue.mjs +9 -10
- package/dist/lib/esm/obsidian-dev-utils-state.d.mts +29 -0
- package/dist/lib/esm/obsidian-dev-utils-state.mjs +37 -0
- package/dist/lib/esm/setup.d.mts +44 -0
- package/dist/lib/esm/setup.mjs +40 -0
- package/dist/lib/esm/vitest-setup.d.mts +11 -0
- package/dist/lib/esm/vitest-setup.mjs +33 -0
- package/package.json +1 -11
- package/dist/lib/cjs/setup/async-operation-tracking-jest-setup.d.cts +0 -12
- package/dist/lib/cjs/setup/async-operation-tracking-setup.d.cts +0 -47
- package/dist/lib/cjs/setup/async-operation-tracking-vitest-setup.d.cts +0 -10
- package/dist/lib/esm/setup/async-operation-tracking-jest-setup.d.mts +0 -12
- package/dist/lib/esm/setup/async-operation-tracking-jest-setup.mjs +0 -33
- package/dist/lib/esm/setup/async-operation-tracking-setup.d.mts +0 -47
- package/dist/lib/esm/setup/async-operation-tracking-setup.mjs +0 -35
- package/dist/lib/esm/setup/async-operation-tracking-vitest-setup.d.mts +0 -10
- package/dist/lib/esm/setup/async-operation-tracking-vitest-setup.mjs +0 -33
- package/setup/async-operation-tracking-jest-setup/package.json +0 -6
- package/setup/async-operation-tracking-setup/package.json +0 -6
- package/setup/async-operation-tracking-vitest-setup/package.json +0 -6
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Initializes the plugin context and sets up the plugin ID.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { Component } from 'obsidian';
|
|
8
8
|
/**
|
|
9
9
|
* Sets the CSS class of an element.
|
|
10
10
|
*
|
|
@@ -22,7 +22,6 @@ export declare function initDebugController(win: Window, component: Component):
|
|
|
22
22
|
/**
|
|
23
23
|
* Initializes the plugin context.
|
|
24
24
|
*
|
|
25
|
-
* @param app - The Obsidian app instance.
|
|
26
25
|
* @param pluginId - The plugin ID.
|
|
27
26
|
*/
|
|
28
|
-
export declare function initPluginContext(
|
|
27
|
+
export declare function initPluginContext(pluginId: string): void;
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
LIBRARY_STYLES,
|
|
33
33
|
LIBRARY_VERSION
|
|
34
34
|
} from "../../library.mjs";
|
|
35
|
-
import { getObsidianDevUtilsState } from "
|
|
35
|
+
import { getObsidianDevUtilsState } from "../../obsidian-dev-utils-state.mjs";
|
|
36
36
|
import {
|
|
37
37
|
getPluginId,
|
|
38
38
|
setPluginId
|
|
@@ -58,10 +58,10 @@ function initDebugController(win, component) {
|
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
|
-
function initPluginContext(
|
|
61
|
+
function initPluginContext(pluginId) {
|
|
62
62
|
setPluginId(pluginId);
|
|
63
63
|
showInitialDebugMessage(pluginId);
|
|
64
|
-
const lastLibraryVersionWrapper = getObsidianDevUtilsState(
|
|
64
|
+
const lastLibraryVersionWrapper = getObsidianDevUtilsState("lastLibraryVersion", "0.0.0");
|
|
65
65
|
if (compareVersions(LIBRARY_VERSION, lastLibraryVersionWrapper.value) <= 0) {
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
@@ -79,4 +79,4 @@ export {
|
|
|
79
79
|
initDebugController,
|
|
80
80
|
initPluginContext
|
|
81
81
|
};
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW4gY29udGV4dCBhbmQgc2V0cyB1cCB0aGUgcGx1Z2luIElELlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9kZWJ1Zy1jb250cm9sbGVyLnRzJztcblxuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi8uLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RGVidWdDb250cm9sbGVyLFxuICBzaG93SW5pdGlhbERlYnVnTWVzc2FnZVxufSBmcm9tICcuLi8uLi9kZWJ1Zy50cyc7XG5pbXBvcnQge1xuICBMSUJSQVJZX05BTUUsXG4gIExJQlJBUllfU1RZTEVTLFxuICBMSUJSQVJZX1ZFUlNJT05cbn0gZnJvbSAnLi4vLi4vbGlicmFyeS50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi8uLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgZ2V0UGx1Z2luSWQsXG4gIHNldFBsdWdpbklkXG59IGZyb20gJy4vcGx1Z2luLWlkLnRzJztcblxuaW50ZXJmYWNlIFBsdWdpbkNvbnRleHRXaW5kb3cge1xuICBERUJVRzogRGVidWdDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBTVFlMRVNfSUQgPSBgJHtMSUJSQVJZX05BTUV9LXN0eWxlc2A7XG5cbi8qKlxuICogU2V0cyB0aGUgQ1NTIGNsYXNzIG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsIC0gVGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBDU1MgY2xhc3Mgb2YuXG4gKiBAcGFyYW0gY3NzQ2xhc3NlcyAtIFRoZSBDU1MgY2xhc3NlcyB0byBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRQbHVnaW5Dc3NDbGFzc2VzKGVsOiBIVE1MRWxlbWVudCwgY3NzQ2xhc3Nlcz86IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IGNzc0NsYXNzZXNBcnIgPSBbQ3NzQ2xhc3MuTGlicmFyeU5hbWUsIGdldFBsdWdpbklkKCldO1xuICBpZiAoQXJyYXkuaXNBcnJheShjc3NDbGFzc2VzKSkge1xuICAgIGNzc0NsYXNzZXNBcnIucHVzaCguLi5jc3NDbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY3NzQ2xhc3NlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjc3NDbGFzc2VzQXJyLnB1c2goY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgZWwuYWRkQ2xhc3MoLi4uY3NzQ2xhc3Nlc0Fycik7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGRlYnVnIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHdpbiAtIFRoZSB3aW5kb3cgdG8gaW5pdGlhbGl6ZSB0aGUgZGVidWcgY29udHJvbGxlciBmb3IuXG4gKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0byByZWdpc3RlciBjbGVhbnVwIG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdERlYnVnQ29udHJvbGxlcih3aW46IFdpbmRvdywgY29tcG9uZW50OiBDb21wb25lbnQpOiB2b2lkIHtcbiAgY29uc3QgcGx1Z2luQ29udGV4dFdpbmRvdyA9IHdpbiBhcyBQYXJ0aWFsPFBsdWdpbkNvbnRleHRXaW5kb3c+O1xuICBjb25zdCBvbGREZWJ1ZyA9IHBsdWdpbkNvbnRleHRXaW5kb3cuREVCVUc7XG4gIGNvbnN0IG5ld0RlYnVnID0gZ2V0RGVidWdDb250cm9sbGVyKCk7XG4gIHBsdWdpbkNvbnRleHRXaW5kb3cuREVCVUcgPSBuZXdEZWJ1ZztcblxuICBjb21wb25lbnQucmVnaXN0ZXIoKCkgPT4ge1xuICAgIGlmIChwbHVnaW5Db250ZXh0V2luZG93LkRFQlVHID09PSBuZXdEZWJ1Zykge1xuICAgICAgcGx1Z2luQ29udGV4dFdpbmRvdy5ERUJVRyA9IG9sZERlYnVnO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIHBsdWdpbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0UGx1Z2luQ29udGV4dChwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gIHNldFBsdWdpbklkKHBsdWdpbklkKTtcbiAgc2hvd0luaXRpYWxEZWJ1Z01lc3NhZ2UocGx1Z2luSWQpO1xuXG4gIGNvbnN0IGxhc3RMaWJyYXJ5VmVyc2lvbldyYXBwZXIgPSBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ2xhc3RMaWJyYXJ5VmVyc2lvbicsICcwLjAuMCcpO1xuICBpZiAoY29tcGFyZVZlcnNpb25zKExJQlJBUllfVkVSU0lPTiwgbGFzdExpYnJhcnlWZXJzaW9uV3JhcHBlci52YWx1ZSkgPD0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxhc3RMaWJyYXJ5VmVyc2lvbldyYXBwZXIudmFsdWUgPSBMSUJSQVJZX1ZFUlNJT047XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLWFjdGl2ZS1kb2MgLS0gTmVlZCB0byBhY2Nlc3MgZG9jdW1lbnQuXG4gIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcihgIyR7U1RZTEVTX0lEfWApPy5yZW1vdmUoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvbm8tZm9yYmlkZGVuLWVsZW1lbnRzLCBvYnNpZGlhbm1kL3ByZWZlci1hY3RpdmUtZG9jIC0tIFdlIG5lZWQgdG8gY3JlYXRlIGEgc3R5bGUgZWxlbWVudCB0byBhcHBseSB0aGUgbGlicmFyeSBzdHlsZXMuXG4gIGRvY3VtZW50LmhlYWQuY3JlYXRlRWwoJ3N0eWxlJywge1xuICAgIGF0dHI6IHtcbiAgICAgIGlkOiBTVFlMRVNfSURcbiAgICB9LFxuICAgIHRleHQ6IExJQlJBUllfU1RZTEVTXG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLHVCQUF1QjtBQUloQyxTQUFTLGdCQUFnQjtBQUN6QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZ0NBQWdDO0FBQ3pDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVAsTUFBTSxZQUFZLEdBQUcsWUFBWTtBQVExQixTQUFTLG9CQUFvQixJQUFpQixZQUFzQztBQUN6RixRQUFNLGdCQUFnQixDQUFDLFNBQVMsYUFBYSxZQUFZLENBQUM7QUFDMUQsTUFBSSxNQUFNLFFBQVEsVUFBVSxHQUFHO0FBQzdCLGtCQUFjLEtBQUssR0FBRyxVQUFVO0FBQUEsRUFDbEMsV0FBVyxPQUFPLGVBQWUsVUFBVTtBQUN6QyxrQkFBYyxLQUFLLFVBQVU7QUFBQSxFQUMvQjtBQUNBLEtBQUcsU0FBUyxHQUFHLGFBQWE7QUFDOUI7QUFRTyxTQUFTLG9CQUFvQixLQUFhLFdBQTRCO0FBQzNFLFFBQU0sc0JBQXNCO0FBQzVCLFFBQU0sV0FBVyxvQkFBb0I7QUFDckMsUUFBTSxXQUFXLG1CQUFtQjtBQUNwQyxzQkFBb0IsUUFBUTtBQUU1QixZQUFVLFNBQVMsTUFBTTtBQUN2QixRQUFJLG9CQUFvQixVQUFVLFVBQVU7QUFDMUMsMEJBQW9CLFFBQVE7QUFBQSxJQUM5QjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBT08sU0FBUyxrQkFBa0IsVUFBd0I7QUFDeEQsY0FBWSxRQUFRO0FBQ3BCLDBCQUF3QixRQUFRO0FBRWhDLFFBQU0sNEJBQTRCLHlCQUF5QixzQkFBc0IsT0FBTztBQUN4RixNQUFJLGdCQUFnQixpQkFBaUIsMEJBQTBCLEtBQUssS0FBSyxHQUFHO0FBQzFFO0FBQUEsRUFDRjtBQUVBLDRCQUEwQixRQUFRO0FBR2xDLFdBQVMsS0FBSyxjQUFjLElBQUksU0FBUyxFQUFFLEdBQUcsT0FBTztBQUVyRCxXQUFTLEtBQUssU0FBUyxTQUFTO0FBQUEsSUFDOUIsTUFBTTtBQUFBLE1BQ0osSUFBSTtBQUFBLElBQ047QUFBQSxJQUNBLE1BQU07QUFBQSxFQUNSLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Contains utility functions for enqueuing and processing functions in Obsidian.
|
|
6
6
|
*/
|
|
7
|
-
import type { App } from 'obsidian';
|
|
8
7
|
import type { Promisable } from 'type-fest';
|
|
9
8
|
/**
|
|
10
9
|
* Options for the {@link addToQueueAndWait} function.
|
|
@@ -14,10 +13,6 @@ export interface AddToQueueAndWaitParams {
|
|
|
14
13
|
* Optional abort signal.
|
|
15
14
|
*/
|
|
16
15
|
readonly abortSignal?: AbortSignal;
|
|
17
|
-
/**
|
|
18
|
-
* The Obsidian application instance.
|
|
19
|
-
*/
|
|
20
|
-
readonly app: App;
|
|
21
16
|
/**
|
|
22
17
|
* The function to add.
|
|
23
18
|
*/
|
|
@@ -47,10 +42,6 @@ export interface AddToQueueParams {
|
|
|
47
42
|
* Optional abort signal.
|
|
48
43
|
*/
|
|
49
44
|
readonly abortSignal?: AbortSignal;
|
|
50
|
-
/**
|
|
51
|
-
* The Obsidian application instance.
|
|
52
|
-
*/
|
|
53
|
-
readonly app: App;
|
|
54
45
|
/**
|
|
55
46
|
* The function to add.
|
|
56
47
|
*/
|
|
@@ -86,7 +77,5 @@ export declare function addToQueue(params: AddToQueueParams): void;
|
|
|
86
77
|
export declare function addToQueueAndWait(params: AddToQueueAndWaitParams): Promise<void>;
|
|
87
78
|
/**
|
|
88
79
|
* Flushes the queue;
|
|
89
|
-
*
|
|
90
|
-
* @param app - The Obsidian application instance.
|
|
91
80
|
*/
|
|
92
|
-
export declare function flushQueue(
|
|
81
|
+
export declare function flushQueue(): Promise<void>;
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
noop,
|
|
35
35
|
noopAsync
|
|
36
36
|
} from "../function.mjs";
|
|
37
|
-
import { getObsidianDevUtilsState } from "
|
|
37
|
+
import { getObsidianDevUtilsState } from "../obsidian-dev-utils-state.mjs";
|
|
38
38
|
import { runWithTimeoutNotice } from "./async-with-notice.mjs";
|
|
39
39
|
import { t } from "./i18n/i18n.mjs";
|
|
40
40
|
import { invokeAsyncAndLog } from "./logger.mjs";
|
|
@@ -49,7 +49,7 @@ async function addToQueueAndWait(params) {
|
|
|
49
49
|
const timeoutInMilliseconds = params.timeoutInMilliseconds ?? DEFAULT_TIMEOUT_IN_MILLISECONDS;
|
|
50
50
|
const stackTrace = params.stackTrace ?? getStackTrace(1);
|
|
51
51
|
const operationName = params.operationName ?? "";
|
|
52
|
-
const queue = getQueue(
|
|
52
|
+
const queue = getQueue().value;
|
|
53
53
|
queue.items.push({
|
|
54
54
|
abortSignal,
|
|
55
55
|
operationFn: params.operationFn,
|
|
@@ -58,21 +58,20 @@ async function addToQueueAndWait(params) {
|
|
|
58
58
|
stackTrace,
|
|
59
59
|
timeoutInMilliseconds
|
|
60
60
|
});
|
|
61
|
-
queue.promise = queue.promise.then(() => processNextQueueItem(
|
|
61
|
+
queue.promise = queue.promise.then(() => processNextQueueItem());
|
|
62
62
|
await queue.promise;
|
|
63
63
|
}
|
|
64
|
-
async function flushQueue(
|
|
64
|
+
async function flushQueue() {
|
|
65
65
|
await addToQueueAndWait({
|
|
66
|
-
app,
|
|
67
66
|
operationFn: noop,
|
|
68
67
|
operationName: t(($) => $.obsidianDevUtils.queue.flushQueue)
|
|
69
68
|
});
|
|
70
69
|
}
|
|
71
|
-
function getQueue(
|
|
72
|
-
return getObsidianDevUtilsState(
|
|
70
|
+
function getQueue() {
|
|
71
|
+
return getObsidianDevUtilsState("queue", { items: [], promise: noopAsync() });
|
|
73
72
|
}
|
|
74
|
-
async function processNextQueueItem(
|
|
75
|
-
const queue = getQueue(
|
|
73
|
+
async function processNextQueueItem() {
|
|
74
|
+
const queue = getQueue().value;
|
|
76
75
|
const item = queue.items[0];
|
|
77
76
|
if (!item) {
|
|
78
77
|
return;
|
|
@@ -101,4 +100,4 @@ export {
|
|
|
101
100
|
addToQueueAndWait,
|
|
102
101
|
flushQueue
|
|
103
102
|
};
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3F1ZXVlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVucXVldWluZyBhbmQgcHJvY2Vzc2luZyBmdW5jdGlvbnMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVdyYXBwZXIgfSBmcm9tICcuLi92YWx1ZS13cmFwcGVyLnRzJztcblxuaW1wb3J0IHtcbiAgYWJvcnRTaWduYWxBbnksXG4gIGFib3J0U2lnbmFsTmV2ZXJcbn0gZnJvbSAnLi4vYWJvcnQtY29udHJvbGxlci50cyc7XG5pbXBvcnQge1xuICBhZGRFcnJvckhhbmRsZXIsXG4gIGludm9rZUFzeW5jU2FmZWx5XG59IGZyb20gJy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IGdldFN0YWNrVHJhY2UgfSBmcm9tICcuLi9lcnJvci50cyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNcbn0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IHJ1bldpdGhUaW1lb3V0Tm90aWNlIH0gZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgaW52b2tlQXN5bmNBbmRMb2cgfSBmcm9tICcuL2xvZ2dlci50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIHtAbGluayBhZGRUb1F1ZXVlQW5kV2FpdH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkVG9RdWV1ZUFuZFdhaXRQYXJhbXMge1xuICAvKipcbiAgICogT3B0aW9uYWwgYWJvcnQgc2lnbmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAgICovXG4gIG9wZXJhdGlvbkZuKHRoaXM6IHZvaWQsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG5hbWUgb2YgdGhlIG9wZXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgc3RhY2sgdHJhY2UuXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIHtAbGluayBhZGRUb1F1ZXVlfSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRUb1F1ZXVlUGFyYW1zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFib3J0IHNpZ25hbC5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBhZGQuXG4gICAqL1xuICBvcGVyYXRpb25Gbih0aGlzOiB2b2lkLCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSB0aW1lb3V0IG5vdGljZS4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTaG93VGltZW91dE5vdGljZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUXVldWUge1xuICBpdGVtczogUXVldWVJdGVtW107XG4gIHByb21pc2U6IFByb21pc2U8dm9pZD47XG59XG5cbmludGVyZmFjZSBRdWV1ZUl0ZW0ge1xuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIG9wZXJhdGlvbkZuKHRoaXM6IHZvaWQsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8dm9pZD47XG4gIG9wZXJhdGlvbk5hbWU6IHN0cmluZztcbiAgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U6IGJvb2xlYW47XG4gIHN0YWNrVHJhY2U6IHN0cmluZztcbiAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvUXVldWUocGFyYW1zOiBBZGRUb1F1ZXVlUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBhZGRUb1F1ZXVlQW5kV2FpdChwYXJhbXMpLCBzdGFja1RyYWNlKTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgcHJldmlvdXMgZnVuY3Rpb24gY29tcGxldGVzIGFuZCByZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZnVuY3Rpb24gY29tcGxldGVzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVG9RdWV1ZUFuZFdhaXQocGFyYW1zOiBBZGRUb1F1ZXVlQW5kV2FpdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhYm9ydFNpZ25hbCA9IHBhcmFtcy5hYm9ydFNpZ25hbCA/PyBhYm9ydFNpZ25hbE5ldmVyKCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3QgREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuICBjb25zdCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgPSBwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBvcGVyYXRpb25OYW1lID0gcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJyc7XG4gIGNvbnN0IHF1ZXVlID0gZ2V0UXVldWUoKS52YWx1ZTtcbiAgcXVldWUuaXRlbXMucHVzaCh7XG4gICAgYWJvcnRTaWduYWwsXG4gICAgb3BlcmF0aW9uRm46IHBhcmFtcy5vcGVyYXRpb25GbixcbiAgICBvcGVyYXRpb25OYW1lLFxuICAgIHNob3VsZFNob3dUaW1lb3V0Tm90aWNlOiBwYXJhbXMuc2hvdWxkU2hvd1RpbWVvdXROb3RpY2UgPz8gdHJ1ZSxcbiAgICBzdGFja1RyYWNlLFxuICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICB9KTtcbiAgcXVldWUucHJvbWlzZSA9IHF1ZXVlLnByb21pc2UudGhlbigoKSA9PiBwcm9jZXNzTmV4dFF1ZXVlSXRlbSgpKTtcbiAgYXdhaXQgcXVldWUucHJvbWlzZTtcbn1cblxuLyoqXG4gKiBGbHVzaGVzIHRoZSBxdWV1ZTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoUXVldWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGFkZFRvUXVldWVBbmRXYWl0KHtcbiAgICBvcGVyYXRpb25Gbjogbm9vcCxcbiAgICBvcGVyYXRpb25OYW1lOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucXVldWUuZmx1c2hRdWV1ZSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFF1ZXVlKCk6IFZhbHVlV3JhcHBlcjxRdWV1ZT4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdxdWV1ZScsIHsgaXRlbXM6IFtdLCBwcm9taXNlOiBub29wQXN5bmMoKSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHF1ZXVlID0gZ2V0UXVldWUoKS52YWx1ZTtcbiAgY29uc3QgaXRlbSA9IHF1ZXVlLml0ZW1zWzBdO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVmZW5zaXZlIGNoZWNrOyBwcm9jZXNzTmV4dFF1ZXVlSXRlbSBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbiBpdGVtIGlzIHB1c2hlZC4gKi9cbiAgaWYgKCFpdGVtKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgYXdhaXQgYWRkRXJyb3JIYW5kbGVyKCgpID0+XG4gICAgcnVuV2l0aFRpbWVvdXROb3RpY2Uoe1xuICAgICAgY29udGV4dDogeyBxdWV1ZWRGbjogaXRlbS5vcGVyYXRpb25GbiB9LFxuICAgICAgYXN5bmMgb3BlcmF0aW9uRm4oYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IGludm9rZUFzeW5jQW5kTG9nKFxuICAgICAgICAgIGl0ZW0ub3BlcmF0aW9uTmFtZSB8fCBwcm9jZXNzTmV4dFF1ZXVlSXRlbS5uYW1lLFxuICAgICAgICAgIGl0ZW0ub3BlcmF0aW9uRm4sXG4gICAgICAgICAgYWJvcnRTaWduYWxBbnkoYWJvcnRTaWduYWwsIGl0ZW0uYWJvcnRTaWduYWwpLFxuICAgICAgICAgIGl0ZW0uc3RhY2tUcmFjZVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IGl0ZW0ub3BlcmF0aW9uTmFtZSxcbiAgICAgIHNob3VsZFNob3dUaW1lb3V0Tm90aWNlOiBpdGVtLnNob3VsZFNob3dUaW1lb3V0Tm90aWNlLFxuICAgICAgc3RhY2tUcmFjZTogaXRlbS5zdGFja1RyYWNlLFxuICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBpdGVtLnRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgIH0pXG4gICk7XG4gIHF1ZXVlLml0ZW1zLnNoaWZ0KCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHFCQUFxQjtBQUM5QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsU0FBUztBQUNsQixTQUFTLHlCQUF5QjtBQTJGM0IsU0FBUyxXQUFXLFFBQWdDO0FBQ3pELFFBQU0sYUFBYSxPQUFPLGNBQWMsY0FBYyxDQUFDO0FBQ3ZELG9CQUFrQixNQUFNLGtCQUFrQixNQUFNLEdBQUcsVUFBVTtBQUMvRDtBQU9BLGVBQXNCLGtCQUFrQixRQUFnRDtBQUN0RixRQUFNLGNBQWMsT0FBTyxlQUFlLGlCQUFpQjtBQUMzRCxjQUFZLGVBQWU7QUFFM0IsUUFBTSxrQ0FBa0M7QUFDeEMsUUFBTSx3QkFBd0IsT0FBTyx5QkFBeUI7QUFDOUQsUUFBTSxhQUFhLE9BQU8sY0FBYyxjQUFjLENBQUM7QUFDdkQsUUFBTSxnQkFBZ0IsT0FBTyxpQkFBaUI7QUFDOUMsUUFBTSxRQUFRLFNBQVMsRUFBRTtBQUN6QixRQUFNLE1BQU0sS0FBSztBQUFBLElBQ2Y7QUFBQSxJQUNBLGFBQWEsT0FBTztBQUFBLElBQ3BCO0FBQUEsSUFDQSx5QkFBeUIsT0FBTywyQkFBMkI7QUFBQSxJQUMzRDtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDRCxRQUFNLFVBQVUsTUFBTSxRQUFRLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxRQUFNLE1BQU07QUFDZDtBQUtBLGVBQXNCLGFBQTRCO0FBQ2hELFFBQU0sa0JBQWtCO0FBQUEsSUFDdEIsYUFBYTtBQUFBLElBQ2IsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixNQUFNLFVBQVU7QUFBQSxFQUM3RCxDQUFDO0FBQ0g7QUFFQSxTQUFTLFdBQWdDO0FBQ3ZDLFNBQU8seUJBQXlCLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxTQUFTLFVBQVUsRUFBRSxDQUFDO0FBQzlFO0FBRUEsZUFBZSx1QkFBc0M7QUFDbkQsUUFBTSxRQUFRLFNBQVMsRUFBRTtBQUN6QixRQUFNLE9BQU8sTUFBTSxNQUFNLENBQUM7QUFFMUIsTUFBSSxDQUFDLE1BQU07QUFDVDtBQUFBLEVBQ0Y7QUFHQSxRQUFNO0FBQUEsSUFBZ0IsTUFDcEIscUJBQXFCO0FBQUEsTUFDbkIsU0FBUyxFQUFFLFVBQVUsS0FBSyxZQUFZO0FBQUEsTUFDdEMsTUFBTSxZQUFZLGFBQXlDO0FBQ3pELGNBQU07QUFBQSxVQUNKLEtBQUssaUJBQWlCLHFCQUFxQjtBQUFBLFVBQzNDLEtBQUs7QUFBQSxVQUNMLGVBQWUsYUFBYSxLQUFLLFdBQVc7QUFBQSxVQUM1QyxLQUFLO0FBQUEsUUFDUDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGVBQWUsS0FBSztBQUFBLE1BQ3BCLHlCQUF5QixLQUFLO0FBQUEsTUFDOUIsWUFBWSxLQUFLO0FBQUEsTUFDakIsdUJBQXVCLEtBQUs7QUFBQSxJQUM5QixDQUFDO0FBQUEsRUFDSDtBQUNBLFFBQU0sTUFBTSxNQUFNO0FBQ3BCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Provides access to a process-wide shared-state bag used internally by `obsidian-dev-utils`.
|
|
6
|
+
*
|
|
7
|
+
* The bag is stored on `globalThis.__obsidianDevUtils`, i.e. on the global object of the realm in
|
|
8
|
+
* which `obsidian-dev-utils` is loaded. Because a function's `globalThis` resolves to its defining
|
|
9
|
+
* realm (not the caller's), every consumer that bundles the library in the main Obsidian renderer
|
|
10
|
+
* shares the same bag, regardless of which window is currently active. This intentionally replaces
|
|
11
|
+
* the previous `App`-scoped storage, so callers no longer need to pass an `App` instance.
|
|
12
|
+
*/
|
|
13
|
+
import { ValueWrapper } from './value-wrapper.mjs';
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves or creates a shared-state {@link ValueWrapper} for a given key on `globalThis.__obsidianDevUtils`.
|
|
16
|
+
*
|
|
17
|
+
* @typeParam T - The type of the shared state value.
|
|
18
|
+
* @param key - The key to store or retrieve the shared state under.
|
|
19
|
+
* @param defaultValue - The default value to use if the shared state does not exist yet.
|
|
20
|
+
* @returns The {@link ValueWrapper} that stores the shared state.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getObsidianDevUtilsState<T>(key: string, defaultValue: T): ValueWrapper<T>;
|
|
23
|
+
/**
|
|
24
|
+
* Clears the shared-state bag on `globalThis.__obsidianDevUtils`.
|
|
25
|
+
*
|
|
26
|
+
* Intended for test isolation: call it before each test so accumulated state (debuggers, queues,
|
|
27
|
+
* registered handlers, etc.) does not leak between tests.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resetObsidianDevUtilsState(): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
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() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import { ValueWrapper } from "./value-wrapper.mjs";
|
|
25
|
+
function getObsidianDevUtilsState(key, defaultValue) {
|
|
26
|
+
const wrapper = globalThis;
|
|
27
|
+
wrapper.__obsidianDevUtils ??= {};
|
|
28
|
+
return wrapper.__obsidianDevUtils[key] ??= ValueWrapper.of(defaultValue);
|
|
29
|
+
}
|
|
30
|
+
function resetObsidianDevUtilsState() {
|
|
31
|
+
globalThis.__obsidianDevUtils = {};
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
getObsidianDevUtilsState,
|
|
35
|
+
resetObsidianDevUtilsState
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIGFjY2VzcyB0byBhIHByb2Nlc3Mtd2lkZSBzaGFyZWQtc3RhdGUgYmFnIHVzZWQgaW50ZXJuYWxseSBieSBgb2JzaWRpYW4tZGV2LXV0aWxzYC5cbiAqXG4gKiBUaGUgYmFnIGlzIHN0b3JlZCBvbiBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuRGV2VXRpbHNgLCBpLmUuIG9uIHRoZSBnbG9iYWwgb2JqZWN0IG9mIHRoZSByZWFsbSBpblxuICogd2hpY2ggYG9ic2lkaWFuLWRldi11dGlsc2AgaXMgbG9hZGVkLiBCZWNhdXNlIGEgZnVuY3Rpb24ncyBgZ2xvYmFsVGhpc2AgcmVzb2x2ZXMgdG8gaXRzIGRlZmluaW5nXG4gKiByZWFsbSAobm90IHRoZSBjYWxsZXIncyksIGV2ZXJ5IGNvbnN1bWVyIHRoYXQgYnVuZGxlcyB0aGUgbGlicmFyeSBpbiB0aGUgbWFpbiBPYnNpZGlhbiByZW5kZXJlclxuICogc2hhcmVzIHRoZSBzYW1lIGJhZywgcmVnYXJkbGVzcyBvZiB3aGljaCB3aW5kb3cgaXMgY3VycmVudGx5IGFjdGl2ZS4gVGhpcyBpbnRlbnRpb25hbGx5IHJlcGxhY2VzXG4gKiB0aGUgcHJldmlvdXMgYEFwcGAtc2NvcGVkIHN0b3JhZ2UsIHNvIGNhbGxlcnMgbm8gbG9uZ2VyIG5lZWQgdG8gcGFzcyBhbiBgQXBwYCBpbnN0YW5jZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNPYmplY3QgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW1wb3J0IHsgVmFsdWVXcmFwcGVyIH0gZnJvbSAnLi92YWx1ZS13cmFwcGVyLnRzJztcblxuaW50ZXJmYWNlIE9ic2lkaWFuRGV2VXRpbHNXcmFwcGVyIHtcbiAgX19vYnNpZGlhbkRldlV0aWxzOiBHZW5lcmljT2JqZWN0O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBvciBjcmVhdGVzIGEgc2hhcmVkLXN0YXRlIHtAbGluayBWYWx1ZVdyYXBwZXJ9IGZvciBhIGdpdmVuIGtleSBvbiBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuRGV2VXRpbHNgLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBzaGFyZWQgc3RhdGUgdmFsdWUuXG4gKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBzdG9yZSBvciByZXRyaWV2ZSB0aGUgc2hhcmVkIHN0YXRlIHVuZGVyLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIFRoZSBkZWZhdWx0IHZhbHVlIHRvIHVzZSBpZiB0aGUgc2hhcmVkIHN0YXRlIGRvZXMgbm90IGV4aXN0IHlldC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVmFsdWVXcmFwcGVyfSB0aGF0IHN0b3JlcyB0aGUgc2hhcmVkIHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPFQ+KGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQpOiBWYWx1ZVdyYXBwZXI8VD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBUaGUgc2hhcmVkIHN0YXRlIGludGVudGlvbmFsbHkgbGl2ZXMgb24gdGhlIHJlYWxtIGdsb2JhbC5cbiAgY29uc3Qgd3JhcHBlciA9IGdsb2JhbFRoaXMgYXMgUGFydGlhbDxPYnNpZGlhbkRldlV0aWxzV3JhcHBlcj47XG4gIHdyYXBwZXIuX19vYnNpZGlhbkRldlV0aWxzID8/PSB7fTtcbiAgcmV0dXJuICh3cmFwcGVyLl9fb2JzaWRpYW5EZXZVdGlsc1trZXldID8/PSBWYWx1ZVdyYXBwZXIub2YoZGVmYXVsdFZhbHVlKSkgYXMgVmFsdWVXcmFwcGVyPFQ+O1xufVxuXG4vKipcbiAqIENsZWFycyB0aGUgc2hhcmVkLXN0YXRlIGJhZyBvbiBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuRGV2VXRpbHNgLlxuICpcbiAqIEludGVuZGVkIGZvciB0ZXN0IGlzb2xhdGlvbjogY2FsbCBpdCBiZWZvcmUgZWFjaCB0ZXN0IHNvIGFjY3VtdWxhdGVkIHN0YXRlIChkZWJ1Z2dlcnMsIHF1ZXVlcyxcbiAqIHJlZ2lzdGVyZWQgaGFuZGxlcnMsIGV0Yy4pIGRvZXMgbm90IGxlYWsgYmV0d2VlbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCk6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBUaGUgc2hhcmVkIHN0YXRlIGludGVudGlvbmFsbHkgbGl2ZXMgb24gdGhlIHJlYWxtIGdsb2JhbC5cbiAgKGdsb2JhbFRoaXMgYXMgUGFydGlhbDxPYnNpZGlhbkRldlV0aWxzV3JhcHBlcj4pLl9fb2JzaWRpYW5EZXZVdGlscyA9IHt9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFTLG9CQUFvQjtBQWN0QixTQUFTLHlCQUE0QixLQUFhLGNBQWtDO0FBRXpGLFFBQU0sVUFBVTtBQUNoQixVQUFRLHVCQUF1QixDQUFDO0FBQ2hDLFNBQVEsUUFBUSxtQkFBbUIsR0FBRyxNQUFNLGFBQWEsR0FBRyxZQUFZO0FBQzFFO0FBUU8sU0FBUyw2QkFBbUM7QUFFakQsRUFBQyxXQUFnRCxxQkFBcUIsQ0FBQztBQUN6RTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Framework-agnostic test-setup endpoint for `obsidian-dev-utils`.
|
|
6
|
+
*
|
|
7
|
+
* Wires the library's per-test setup into a test framework's `beforeEach` / `afterEach` lifecycle
|
|
8
|
+
* hooks. Before each test it resets the shared-state bag on `globalThis.__obsidianDevUtils` (so
|
|
9
|
+
* accumulated state such as debuggers, queues, and registered handlers does not leak between tests)
|
|
10
|
+
* and enables async-operation tracking; after each test it disables tracking. Tests can therefore
|
|
11
|
+
* `await waitForAllAsyncOperations()` against a clean, isolated state.
|
|
12
|
+
*
|
|
13
|
+
* This module has no import-time side effects and no dependency on any specific test framework. The
|
|
14
|
+
* thin Vitest/Jest setup files (`vitest-setup.ts` / `jest-setup.ts`) call {@link setup} with the
|
|
15
|
+
* hooks imported from their respective frameworks.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* A test-framework lifecycle hook registrar, such as `beforeEach` or `afterEach`.
|
|
19
|
+
*
|
|
20
|
+
* @param fn - The callback to register with the hook.
|
|
21
|
+
*/
|
|
22
|
+
export type HookRegistrar = (fn: () => void) => void;
|
|
23
|
+
/**
|
|
24
|
+
* Parameters for {@link setup}.
|
|
25
|
+
*/
|
|
26
|
+
export interface SetupParams {
|
|
27
|
+
/**
|
|
28
|
+
* The test framework's `afterEach` hook registrar. Used to tear down per-test state after each test.
|
|
29
|
+
*/
|
|
30
|
+
readonly afterEach: HookRegistrar;
|
|
31
|
+
/**
|
|
32
|
+
* The test framework's `beforeEach` hook registrar. Used to set up fresh per-test state before each test.
|
|
33
|
+
*/
|
|
34
|
+
readonly beforeEach: HookRegistrar;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Registers `obsidian-dev-utils` per-test setup with a test framework's lifecycle hooks.
|
|
38
|
+
*
|
|
39
|
+
* Before each test (via the supplied `beforeEach`) it resets the shared-state bag and enables
|
|
40
|
+
* async-operation tracking; after each test (via the supplied `afterEach`) it disables tracking.
|
|
41
|
+
*
|
|
42
|
+
* @param params - The lifecycle hook registrars to wire setup into.
|
|
43
|
+
*/
|
|
44
|
+
export declare function setup(params: SetupParams): void;
|
|
@@ -0,0 +1,40 @@
|
|
|
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() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
disableAsyncOperationTracking,
|
|
26
|
+
enableAsyncOperationTracking
|
|
27
|
+
} from "./async.mjs";
|
|
28
|
+
import { resetObsidianDevUtilsState } from "./obsidian-dev-utils-state.mjs";
|
|
29
|
+
function setup(params) {
|
|
30
|
+
params.beforeEach(beforeEachHandler);
|
|
31
|
+
params.afterEach(disableAsyncOperationTracking);
|
|
32
|
+
}
|
|
33
|
+
function beforeEachHandler() {
|
|
34
|
+
resetObsidianDevUtilsState();
|
|
35
|
+
enableAsyncOperationTracking();
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
setup
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NldHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRnJhbWV3b3JrLWFnbm9zdGljIHRlc3Qtc2V0dXAgZW5kcG9pbnQgZm9yIGBvYnNpZGlhbi1kZXYtdXRpbHNgLlxuICpcbiAqIFdpcmVzIHRoZSBsaWJyYXJ5J3MgcGVyLXRlc3Qgc2V0dXAgaW50byBhIHRlc3QgZnJhbWV3b3JrJ3MgYGJlZm9yZUVhY2hgIC8gYGFmdGVyRWFjaGAgbGlmZWN5Y2xlXG4gKiBob29rcy4gQmVmb3JlIGVhY2ggdGVzdCBpdCByZXNldHMgdGhlIHNoYXJlZC1zdGF0ZSBiYWcgb24gYGdsb2JhbFRoaXMuX19vYnNpZGlhbkRldlV0aWxzYCAoc29cbiAqIGFjY3VtdWxhdGVkIHN0YXRlIHN1Y2ggYXMgZGVidWdnZXJzLCBxdWV1ZXMsIGFuZCByZWdpc3RlcmVkIGhhbmRsZXJzIGRvZXMgbm90IGxlYWsgYmV0d2VlbiB0ZXN0cylcbiAqIGFuZCBlbmFibGVzIGFzeW5jLW9wZXJhdGlvbiB0cmFja2luZzsgYWZ0ZXIgZWFjaCB0ZXN0IGl0IGRpc2FibGVzIHRyYWNraW5nLiBUZXN0cyBjYW4gdGhlcmVmb3JlXG4gKiBgYXdhaXQgd2FpdEZvckFsbEFzeW5jT3BlcmF0aW9ucygpYCBhZ2FpbnN0IGEgY2xlYW4sIGlzb2xhdGVkIHN0YXRlLlxuICpcbiAqIFRoaXMgbW9kdWxlIGhhcyBubyBpbXBvcnQtdGltZSBzaWRlIGVmZmVjdHMgYW5kIG5vIGRlcGVuZGVuY3kgb24gYW55IHNwZWNpZmljIHRlc3QgZnJhbWV3b3JrLiBUaGVcbiAqIHRoaW4gVml0ZXN0L0plc3Qgc2V0dXAgZmlsZXMgKGB2aXRlc3Qtc2V0dXAudHNgIC8gYGplc3Qtc2V0dXAudHNgKSBjYWxsIHtAbGluayBzZXR1cH0gd2l0aCB0aGVcbiAqIGhvb2tzIGltcG9ydGVkIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBmcmFtZXdvcmtzLlxuICovXG5cbmltcG9ydCB7XG4gIGRpc2FibGVBc3luY09wZXJhdGlvblRyYWNraW5nLFxuICBlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nXG59IGZyb20gJy4vYXN5bmMudHMnO1xuaW1wb3J0IHsgcmVzZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyc7XG5cbi8qKlxuICogQSB0ZXN0LWZyYW1ld29yayBsaWZlY3ljbGUgaG9vayByZWdpc3RyYXIsIHN1Y2ggYXMgYGJlZm9yZUVhY2hgIG9yIGBhZnRlckVhY2hgLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBjYWxsYmFjayB0byByZWdpc3RlciB3aXRoIHRoZSBob29rLlxuICovXG5leHBvcnQgdHlwZSBIb29rUmVnaXN0cmFyID0gKGZuOiAoKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzZXR1cH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXBQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHRlc3QgZnJhbWV3b3JrJ3MgYGFmdGVyRWFjaGAgaG9vayByZWdpc3RyYXIuIFVzZWQgdG8gdGVhciBkb3duIHBlci10ZXN0IHN0YXRlIGFmdGVyIGVhY2ggdGVzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFmdGVyRWFjaDogSG9va1JlZ2lzdHJhcjtcblxuICAvKipcbiAgICogVGhlIHRlc3QgZnJhbWV3b3JrJ3MgYGJlZm9yZUVhY2hgIGhvb2sgcmVnaXN0cmFyLiBVc2VkIHRvIHNldCB1cCBmcmVzaCBwZXItdGVzdCBzdGF0ZSBiZWZvcmUgZWFjaCB0ZXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgYmVmb3JlRWFjaDogSG9va1JlZ2lzdHJhcjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYG9ic2lkaWFuLWRldi11dGlsc2AgcGVyLXRlc3Qgc2V0dXAgd2l0aCBhIHRlc3QgZnJhbWV3b3JrJ3MgbGlmZWN5Y2xlIGhvb2tzLlxuICpcbiAqIEJlZm9yZSBlYWNoIHRlc3QgKHZpYSB0aGUgc3VwcGxpZWQgYGJlZm9yZUVhY2hgKSBpdCByZXNldHMgdGhlIHNoYXJlZC1zdGF0ZSBiYWcgYW5kIGVuYWJsZXNcbiAqIGFzeW5jLW9wZXJhdGlvbiB0cmFja2luZzsgYWZ0ZXIgZWFjaCB0ZXN0ICh2aWEgdGhlIHN1cHBsaWVkIGBhZnRlckVhY2hgKSBpdCBkaXNhYmxlcyB0cmFja2luZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGxpZmVjeWNsZSBob29rIHJlZ2lzdHJhcnMgdG8gd2lyZSBzZXR1cCBpbnRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dXAocGFyYW1zOiBTZXR1cFBhcmFtcyk6IHZvaWQge1xuICBwYXJhbXMuYmVmb3JlRWFjaChiZWZvcmVFYWNoSGFuZGxlcik7XG4gIHBhcmFtcy5hZnRlckVhY2goZGlzYWJsZUFzeW5jT3BlcmF0aW9uVHJhY2tpbmcpO1xufVxuXG5mdW5jdGlvbiBiZWZvcmVFYWNoSGFuZGxlcigpOiB2b2lkIHtcbiAgcmVzZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoKTtcbiAgZW5hYmxlQXN5bmNPcGVyYXRpb25UcmFja2luZygpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGtDQUFrQztBQWdDcEMsU0FBUyxNQUFNLFFBQTJCO0FBQy9DLFNBQU8sV0FBVyxpQkFBaUI7QUFDbkMsU0FBTyxVQUFVLDZCQUE2QjtBQUNoRDtBQUVBLFNBQVMsb0JBQTBCO0FBQ2pDLDZCQUEyQjtBQUMzQiwrQkFBNkI7QUFDL0I7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Vitest setup file for `obsidian-dev-utils`.
|
|
6
|
+
*
|
|
7
|
+
* Add it to your Vitest config's `setupFiles` (or import it from another setup file). Before each
|
|
8
|
+
* test it resets the shared-state bag and enables async-operation tracking; after each test it
|
|
9
|
+
* disables tracking, so tests can `await waitForAllAsyncOperations()` against isolated state.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
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() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
afterEach,
|
|
26
|
+
beforeEach
|
|
27
|
+
} from "vitest";
|
|
28
|
+
import { setup } from "./setup.mjs";
|
|
29
|
+
setup({
|
|
30
|
+
afterEach,
|
|
31
|
+
beforeEach
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZpdGVzdC1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFZpdGVzdCBzZXR1cCBmaWxlIGZvciBgb2JzaWRpYW4tZGV2LXV0aWxzYC5cbiAqXG4gKiBBZGQgaXQgdG8geW91ciBWaXRlc3QgY29uZmlnJ3MgYHNldHVwRmlsZXNgIChvciBpbXBvcnQgaXQgZnJvbSBhbm90aGVyIHNldHVwIGZpbGUpLiBCZWZvcmUgZWFjaFxuICogdGVzdCBpdCByZXNldHMgdGhlIHNoYXJlZC1zdGF0ZSBiYWcgYW5kIGVuYWJsZXMgYXN5bmMtb3BlcmF0aW9uIHRyYWNraW5nOyBhZnRlciBlYWNoIHRlc3QgaXRcbiAqIGRpc2FibGVzIHRyYWNraW5nLCBzbyB0ZXN0cyBjYW4gYGF3YWl0IHdhaXRGb3JBbGxBc3luY09wZXJhdGlvbnMoKWAgYWdhaW5zdCBpc29sYXRlZCBzdGF0ZS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhpbiBWaXRlc3Qgc2V0dXAtZmlsZSBnbHVlOyBzZXR1cCBpcyB1bml0LXRlc3RlZCBzZXBhcmF0ZWx5LiAqL1xuaW1wb3J0IHtcbiAgYWZ0ZXJFYWNoLFxuICBiZWZvcmVFYWNoXG59IGZyb20gJ3ZpdGVzdCc7XG5cbmltcG9ydCB7IHNldHVwIH0gZnJvbSAnLi9zZXR1cC50cyc7XG5cbnNldHVwKHtcbiAgYWZ0ZXJFYWNoLFxuICBiZWZvcmVFYWNoXG59KTtcbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxhQUFhO0FBRXRCLE1BQU07QUFBQSxFQUNKO0FBQUEsRUFDQTtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-dev-utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "75.0.0",
|
|
4
4
|
"description": "This is the collection of useful functions that you can use for your Obsidian plugin development.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian"
|
|
@@ -577,16 +577,6 @@
|
|
|
577
577
|
"default": "./dist/lib/cjs/script-utils/test-runners/*.cjs"
|
|
578
578
|
}
|
|
579
579
|
},
|
|
580
|
-
"./setup/*": {
|
|
581
|
-
"import": {
|
|
582
|
-
"types": "./dist/lib/esm/setup/*.d.mts",
|
|
583
|
-
"default": "./dist/lib/esm/setup/*.mjs"
|
|
584
|
-
},
|
|
585
|
-
"require": {
|
|
586
|
-
"types": "./dist/lib/cjs/setup/*.d.cts",
|
|
587
|
-
"default": "./dist/lib/cjs/setup/*.cjs"
|
|
588
|
-
}
|
|
589
|
-
},
|
|
590
580
|
"./transformers": {
|
|
591
581
|
"import": {
|
|
592
582
|
"types": "./dist/lib/esm/transformers/index.d.mts",
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/// <reference path="../library.d.cts" />
|
|
2
|
-
/**
|
|
3
|
-
* @file
|
|
4
|
-
*
|
|
5
|
-
* Jest setup file that enables async-operation tracking for the duration of each test.
|
|
6
|
-
*
|
|
7
|
-
* Add it to your Jest config's `setupFilesAfterEach` (or import it from another setup file). It enables
|
|
8
|
-
* tracking before each test and disables it afterwards, so tests can `await waitForAllAsyncOperations()`.
|
|
9
|
-
*
|
|
10
|
-
* This is a per-test setup file, not a Jest `globalSetup` module, so it has no default export.
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/// <reference path="../library.d.cts" />
|
|
2
|
-
/**
|
|
3
|
-
* @file
|
|
4
|
-
*
|
|
5
|
-
* Framework-agnostic test-setup endpoint for async-operation tracking.
|
|
6
|
-
*
|
|
7
|
-
* Wires {@link enableAsyncOperationTracking} / {@link disableAsyncOperationTracking} into a test
|
|
8
|
-
* framework's `beforeEach` / `afterEach` lifecycle hooks. Each test gets a fresh tracking session:
|
|
9
|
-
* tracking is enabled before the test runs and disabled (clearing any tracked operations) after it
|
|
10
|
-
* finishes, so a test can `await waitForAllAsyncOperations()` without leaking module-global state into
|
|
11
|
-
* the next test.
|
|
12
|
-
*
|
|
13
|
-
* This module has no import-time side effects and no dependency on any specific test framework. The
|
|
14
|
-
* thin Vitest/Jest setup files (`async-operation-tracking-vitest-setup.ts` /
|
|
15
|
-
* `async-operation-tracking-jest-setup.ts`) call {@link setupAsyncOperationTracking} with the hooks
|
|
16
|
-
* imported from their respective frameworks.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* A test-framework lifecycle hook registrar, such as `beforeEach` or `afterEach`.
|
|
20
|
-
*
|
|
21
|
-
* @param fn - The callback to register with the hook.
|
|
22
|
-
*/
|
|
23
|
-
export type HookRegistrar = (fn: () => void) => void;
|
|
24
|
-
/**
|
|
25
|
-
* Parameters for {@link setupAsyncOperationTracking}.
|
|
26
|
-
*/
|
|
27
|
-
export interface SetupAsyncOperationTrackingParams {
|
|
28
|
-
/**
|
|
29
|
-
* The test framework's `afterEach` hook registrar. Used to disable async-operation tracking after
|
|
30
|
-
* each test.
|
|
31
|
-
*/
|
|
32
|
-
readonly afterEach: HookRegistrar;
|
|
33
|
-
/**
|
|
34
|
-
* The test framework's `beforeEach` hook registrar. Used to enable async-operation tracking before
|
|
35
|
-
* each test.
|
|
36
|
-
*/
|
|
37
|
-
readonly beforeEach: HookRegistrar;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Registers async-operation tracking with a test framework's lifecycle hooks.
|
|
41
|
-
*
|
|
42
|
-
* Enables tracking before each test (via the supplied `beforeEach`) and disables it after each test
|
|
43
|
-
* (via the supplied `afterEach`), so every test runs with a fresh tracking session.
|
|
44
|
-
*
|
|
45
|
-
* @param params - The lifecycle hook registrars to wire tracking into.
|
|
46
|
-
*/
|
|
47
|
-
export declare function setupAsyncOperationTracking(params: SetupAsyncOperationTrackingParams): void;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/// <reference path="../library.d.cts" />
|
|
2
|
-
/**
|
|
3
|
-
* @file
|
|
4
|
-
*
|
|
5
|
-
* Vitest setup file that enables async-operation tracking for the duration of each test.
|
|
6
|
-
*
|
|
7
|
-
* Add it to your Vitest config's `setupFiles` (or import it from another setup file). It enables
|
|
8
|
-
* tracking before each test and disables it afterwards, so tests can `await waitForAllAsyncOperations()`.
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/// <reference path="../library.d.mts" />
|
|
2
|
-
/**
|
|
3
|
-
* @file
|
|
4
|
-
*
|
|
5
|
-
* Jest setup file that enables async-operation tracking for the duration of each test.
|
|
6
|
-
*
|
|
7
|
-
* Add it to your Jest config's `setupFilesAfterEach` (or import it from another setup file). It enables
|
|
8
|
-
* tracking before each test and disables it afterwards, so tests can `await waitForAllAsyncOperations()`.
|
|
9
|
-
*
|
|
10
|
-
* This is a per-test setup file, not a Jest `globalSetup` module, so it has no default export.
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
@@ -1,33 +0,0 @@
|
|
|
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() {
|
|
7
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
-
if (globalThis.process) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const browserProcess = {
|
|
13
|
-
browser: true,
|
|
14
|
-
cwd() {
|
|
15
|
-
return '/';
|
|
16
|
-
},
|
|
17
|
-
env: {},
|
|
18
|
-
platform: 'android'
|
|
19
|
-
};
|
|
20
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
-
globalThis.process = browserProcess;
|
|
22
|
-
})();
|
|
23
|
-
|
|
24
|
-
import {
|
|
25
|
-
afterEach,
|
|
26
|
-
beforeEach
|
|
27
|
-
} from "@jest/globals";
|
|
28
|
-
import { setupAsyncOperationTracking } from "./async-operation-tracking-setup.mjs";
|
|
29
|
-
setupAsyncOperationTracking({
|
|
30
|
-
afterEach,
|
|
31
|
-
beforeEach
|
|
32
|
-
});
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NldHVwL2FzeW5jLW9wZXJhdGlvbi10cmFja2luZy1qZXN0LXNldHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSmVzdCBzZXR1cCBmaWxlIHRoYXQgZW5hYmxlcyBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiBlYWNoIHRlc3QuXG4gKlxuICogQWRkIGl0IHRvIHlvdXIgSmVzdCBjb25maWcncyBgc2V0dXBGaWxlc0FmdGVyRWFjaGAgKG9yIGltcG9ydCBpdCBmcm9tIGFub3RoZXIgc2V0dXAgZmlsZSkuIEl0IGVuYWJsZXNcbiAqIHRyYWNraW5nIGJlZm9yZSBlYWNoIHRlc3QgYW5kIGRpc2FibGVzIGl0IGFmdGVyd2FyZHMsIHNvIHRlc3RzIGNhbiBgYXdhaXQgd2FpdEZvckFsbEFzeW5jT3BlcmF0aW9ucygpYC5cbiAqXG4gKiBUaGlzIGlzIGEgcGVyLXRlc3Qgc2V0dXAgZmlsZSwgbm90IGEgSmVzdCBgZ2xvYmFsU2V0dXBgIG1vZHVsZSwgc28gaXQgaGFzIG5vIGRlZmF1bHQgZXhwb3J0LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGluIEplc3Qgc2V0dXAtZmlsZSBnbHVlOyBzZXR1cEFzeW5jT3BlcmF0aW9uVHJhY2tpbmcgaXMgdW5pdC10ZXN0ZWQgc2VwYXJhdGVseS4gKi9cbmltcG9ydCB7XG4gIGFmdGVyRWFjaCxcbiAgYmVmb3JlRWFjaFxufSBmcm9tICdAamVzdC9nbG9iYWxzJztcblxuaW1wb3J0IHsgc2V0dXBBc3luY09wZXJhdGlvblRyYWNraW5nIH0gZnJvbSAnLi9hc3luYy1vcGVyYXRpb24tdHJhY2tpbmctc2V0dXAudHMnO1xuXG5zZXR1cEFzeW5jT3BlcmF0aW9uVHJhY2tpbmcoe1xuICBhZnRlckVhY2gsXG4gIGJlZm9yZUVhY2hcbn0pO1xuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLG1DQUFtQztBQUU1Qyw0QkFBNEI7QUFBQSxFQUMxQjtBQUFBLEVBQ0E7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/// <reference path="../library.d.mts" />
|
|
2
|
-
/**
|
|
3
|
-
* @file
|
|
4
|
-
*
|
|
5
|
-
* Framework-agnostic test-setup endpoint for async-operation tracking.
|
|
6
|
-
*
|
|
7
|
-
* Wires {@link enableAsyncOperationTracking} / {@link disableAsyncOperationTracking} into a test
|
|
8
|
-
* framework's `beforeEach` / `afterEach` lifecycle hooks. Each test gets a fresh tracking session:
|
|
9
|
-
* tracking is enabled before the test runs and disabled (clearing any tracked operations) after it
|
|
10
|
-
* finishes, so a test can `await waitForAllAsyncOperations()` without leaking module-global state into
|
|
11
|
-
* the next test.
|
|
12
|
-
*
|
|
13
|
-
* This module has no import-time side effects and no dependency on any specific test framework. The
|
|
14
|
-
* thin Vitest/Jest setup files (`async-operation-tracking-vitest-setup.ts` /
|
|
15
|
-
* `async-operation-tracking-jest-setup.ts`) call {@link setupAsyncOperationTracking} with the hooks
|
|
16
|
-
* imported from their respective frameworks.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* A test-framework lifecycle hook registrar, such as `beforeEach` or `afterEach`.
|
|
20
|
-
*
|
|
21
|
-
* @param fn - The callback to register with the hook.
|
|
22
|
-
*/
|
|
23
|
-
export type HookRegistrar = (fn: () => void) => void;
|
|
24
|
-
/**
|
|
25
|
-
* Parameters for {@link setupAsyncOperationTracking}.
|
|
26
|
-
*/
|
|
27
|
-
export interface SetupAsyncOperationTrackingParams {
|
|
28
|
-
/**
|
|
29
|
-
* The test framework's `afterEach` hook registrar. Used to disable async-operation tracking after
|
|
30
|
-
* each test.
|
|
31
|
-
*/
|
|
32
|
-
readonly afterEach: HookRegistrar;
|
|
33
|
-
/**
|
|
34
|
-
* The test framework's `beforeEach` hook registrar. Used to enable async-operation tracking before
|
|
35
|
-
* each test.
|
|
36
|
-
*/
|
|
37
|
-
readonly beforeEach: HookRegistrar;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Registers async-operation tracking with a test framework's lifecycle hooks.
|
|
41
|
-
*
|
|
42
|
-
* Enables tracking before each test (via the supplied `beforeEach`) and disables it after each test
|
|
43
|
-
* (via the supplied `afterEach`), so every test runs with a fresh tracking session.
|
|
44
|
-
*
|
|
45
|
-
* @param params - The lifecycle hook registrars to wire tracking into.
|
|
46
|
-
*/
|
|
47
|
-
export declare function setupAsyncOperationTracking(params: SetupAsyncOperationTrackingParams): void;
|
|
@@ -1,35 +0,0 @@
|
|
|
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() {
|
|
7
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
-
if (globalThis.process) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const browserProcess = {
|
|
13
|
-
browser: true,
|
|
14
|
-
cwd() {
|
|
15
|
-
return '/';
|
|
16
|
-
},
|
|
17
|
-
env: {},
|
|
18
|
-
platform: 'android'
|
|
19
|
-
};
|
|
20
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
-
globalThis.process = browserProcess;
|
|
22
|
-
})();
|
|
23
|
-
|
|
24
|
-
import {
|
|
25
|
-
disableAsyncOperationTracking,
|
|
26
|
-
enableAsyncOperationTracking
|
|
27
|
-
} from "../async.mjs";
|
|
28
|
-
function setupAsyncOperationTracking(params) {
|
|
29
|
-
params.beforeEach(enableAsyncOperationTracking);
|
|
30
|
-
params.afterEach(disableAsyncOperationTracking);
|
|
31
|
-
}
|
|
32
|
-
export {
|
|
33
|
-
setupAsyncOperationTracking
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NldHVwL2FzeW5jLW9wZXJhdGlvbi10cmFja2luZy1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEZyYW1ld29yay1hZ25vc3RpYyB0ZXN0LXNldHVwIGVuZHBvaW50IGZvciBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmcuXG4gKlxuICogV2lyZXMge0BsaW5rIGVuYWJsZUFzeW5jT3BlcmF0aW9uVHJhY2tpbmd9IC8ge0BsaW5rIGRpc2FibGVBc3luY09wZXJhdGlvblRyYWNraW5nfSBpbnRvIGEgdGVzdFxuICogZnJhbWV3b3JrJ3MgYGJlZm9yZUVhY2hgIC8gYGFmdGVyRWFjaGAgbGlmZWN5Y2xlIGhvb2tzLiBFYWNoIHRlc3QgZ2V0cyBhIGZyZXNoIHRyYWNraW5nIHNlc3Npb246XG4gKiB0cmFja2luZyBpcyBlbmFibGVkIGJlZm9yZSB0aGUgdGVzdCBydW5zIGFuZCBkaXNhYmxlZCAoY2xlYXJpbmcgYW55IHRyYWNrZWQgb3BlcmF0aW9ucykgYWZ0ZXIgaXRcbiAqIGZpbmlzaGVzLCBzbyBhIHRlc3QgY2FuIGBhd2FpdCB3YWl0Rm9yQWxsQXN5bmNPcGVyYXRpb25zKClgIHdpdGhvdXQgbGVha2luZyBtb2R1bGUtZ2xvYmFsIHN0YXRlIGludG9cbiAqIHRoZSBuZXh0IHRlc3QuXG4gKlxuICogVGhpcyBtb2R1bGUgaGFzIG5vIGltcG9ydC10aW1lIHNpZGUgZWZmZWN0cyBhbmQgbm8gZGVwZW5kZW5jeSBvbiBhbnkgc3BlY2lmaWMgdGVzdCBmcmFtZXdvcmsuIFRoZVxuICogdGhpbiBWaXRlc3QvSmVzdCBzZXR1cCBmaWxlcyAoYGFzeW5jLW9wZXJhdGlvbi10cmFja2luZy12aXRlc3Qtc2V0dXAudHNgIC9cbiAqIGBhc3luYy1vcGVyYXRpb24tdHJhY2tpbmctamVzdC1zZXR1cC50c2ApIGNhbGwge0BsaW5rIHNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZ30gd2l0aCB0aGUgaG9va3NcbiAqIGltcG9ydGVkIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBmcmFtZXdvcmtzLlxuICovXG5cbmltcG9ydCB7XG4gIGRpc2FibGVBc3luY09wZXJhdGlvblRyYWNraW5nLFxuICBlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nXG59IGZyb20gJy4uL2FzeW5jLnRzJztcblxuLyoqXG4gKiBBIHRlc3QtZnJhbWV3b3JrIGxpZmVjeWNsZSBob29rIHJlZ2lzdHJhciwgc3VjaCBhcyBgYmVmb3JlRWFjaGAgb3IgYGFmdGVyRWFjaGAuXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGNhbGxiYWNrIHRvIHJlZ2lzdGVyIHdpdGggdGhlIGhvb2suXG4gKi9cbmV4cG9ydCB0eXBlIEhvb2tSZWdpc3RyYXIgPSAoZm46ICgpID0+IHZvaWQpID0+IHZvaWQ7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXBBc3luY09wZXJhdGlvblRyYWNraW5nUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXN0IGZyYW1ld29yaydzIGBhZnRlckVhY2hgIGhvb2sgcmVnaXN0cmFyLiBVc2VkIHRvIGRpc2FibGUgYXN5bmMtb3BlcmF0aW9uIHRyYWNraW5nIGFmdGVyXG4gICAqIGVhY2ggdGVzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFmdGVyRWFjaDogSG9va1JlZ2lzdHJhcjtcblxuICAvKipcbiAgICogVGhlIHRlc3QgZnJhbWV3b3JrJ3MgYGJlZm9yZUVhY2hgIGhvb2sgcmVnaXN0cmFyLiBVc2VkIHRvIGVuYWJsZSBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmcgYmVmb3JlXG4gICAqIGVhY2ggdGVzdC5cbiAgICovXG4gIHJlYWRvbmx5IGJlZm9yZUVhY2g6IEhvb2tSZWdpc3RyYXI7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFzeW5jLW9wZXJhdGlvbiB0cmFja2luZyB3aXRoIGEgdGVzdCBmcmFtZXdvcmsncyBsaWZlY3ljbGUgaG9va3MuXG4gKlxuICogRW5hYmxlcyB0cmFja2luZyBiZWZvcmUgZWFjaCB0ZXN0ICh2aWEgdGhlIHN1cHBsaWVkIGBiZWZvcmVFYWNoYCkgYW5kIGRpc2FibGVzIGl0IGFmdGVyIGVhY2ggdGVzdFxuICogKHZpYSB0aGUgc3VwcGxpZWQgYGFmdGVyRWFjaGApLCBzbyBldmVyeSB0ZXN0IHJ1bnMgd2l0aCBhIGZyZXNoIHRyYWNraW5nIHNlc3Npb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBsaWZlY3ljbGUgaG9vayByZWdpc3RyYXJzIHRvIHdpcmUgdHJhY2tpbmcgaW50by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZyhwYXJhbXM6IFNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZ1BhcmFtcyk6IHZvaWQge1xuICBwYXJhbXMuYmVmb3JlRWFjaChlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nKTtcbiAgcGFyYW1zLmFmdGVyRWFjaChkaXNhYmxlQXN5bmNPcGVyYXRpb25UcmFja2luZyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQWtDQSxTQUFTLDRCQUE0QixRQUFpRDtBQUMzRixTQUFPLFdBQVcsNEJBQTRCO0FBQzlDLFNBQU8sVUFBVSw2QkFBNkI7QUFDaEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|