obsidian-integration-testing 9.2.1 → 10.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/README.md +45 -45
- package/dist/lib/cjs/appium-dependencies.cjs +5 -5
- package/dist/lib/cjs/appium-dependencies.d.cts +4 -2
- package/dist/lib/cjs/appium-session-config.cjs +1 -1
- package/dist/lib/cjs/asar-fallback-detection.cjs +4 -4
- package/dist/lib/cjs/asar-fallback-detection.d.cts +15 -7
- package/dist/lib/cjs/avd-list.cjs +1 -1
- package/dist/lib/cjs/avd-list.d.cts +6 -2
- package/dist/lib/cjs/cli.cjs +4 -4
- package/dist/lib/cjs/compatibility-options.cjs +13 -13
- package/dist/lib/cjs/compatibility-options.d.cts +24 -12
- package/dist/lib/cjs/connect-to-cdp.cjs +4 -4
- package/dist/lib/cjs/connect-to-cdp.d.cts +6 -6
- package/dist/lib/cjs/context-id.cjs +5 -5
- package/dist/lib/cjs/context-id.d.cts +1 -1
- package/dist/lib/cjs/context-provider.cjs +5 -5
- package/dist/lib/cjs/context-provider.d.cts +4 -4
- package/dist/lib/cjs/demo-vault-populate.cjs +5 -5
- package/dist/lib/cjs/demo-vault-populate.d.cts +4 -4
- package/dist/lib/cjs/demo-vault-tree.cjs +4 -4
- package/dist/lib/cjs/demo-vault-tree.d.cts +3 -3
- package/dist/lib/cjs/device-readiness.cjs +3 -3
- package/dist/lib/cjs/device-readiness.d.cts +7 -3
- package/dist/lib/cjs/ecmascript-version.cjs +1 -1
- package/dist/lib/cjs/electron-compatibility.cjs +4 -4
- package/dist/lib/cjs/electron-compatibility.d.cts +33 -17
- package/dist/lib/cjs/emulator-arguments.cjs +36 -0
- package/dist/lib/{esm/emulator-args.d.mts → cjs/emulator-arguments.d.cts} +6 -4
- package/dist/lib/cjs/enable-plugin.cjs +29 -29
- package/dist/lib/cjs/enable-plugin.d.cts +6 -6
- package/dist/lib/cjs/eval-in-obsidian.cjs +9 -9
- package/dist/lib/cjs/eval-in-obsidian.d.cts +23 -23
- package/dist/lib/cjs/exec.cjs +49 -53
- package/dist/lib/cjs/exec.d.cts +9 -9
- package/dist/lib/cjs/function-expression.cjs +8 -8
- package/dist/lib/cjs/function-expression.d.cts +4 -4
- package/dist/lib/cjs/generate-function-call.cjs +6 -6
- package/dist/lib/cjs/generate-function-call.d.cts +15 -9
- package/dist/lib/cjs/global-setup-core.cjs +43 -43
- package/dist/lib/cjs/global-setup-core.d.cts +19 -9
- package/dist/lib/cjs/incompatible-installer-version-error.cjs +10 -4
- package/dist/lib/cjs/incompatible-installer-version-error.d.cts +18 -6
- package/dist/lib/cjs/index.cjs +10 -10
- package/dist/lib/cjs/index.d.cts +8 -8
- package/dist/lib/cjs/installer-asset.cjs +4 -4
- package/dist/lib/cjs/installer-asset.d.cts +21 -7
- package/dist/lib/cjs/installer-compatibility.cjs +4 -4
- package/dist/lib/cjs/installer-compatibility.d.cts +36 -18
- package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +3 -3
- package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +1 -1
- package/dist/lib/cjs/jest/global-setup.cjs +11 -11
- package/dist/lib/cjs/jest/global-setup.d.cts +12 -8
- package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +2 -3
- package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +1 -2
- package/dist/lib/cjs/jest/global-teardown.cjs +2 -3
- package/dist/lib/cjs/jest/global-teardown.d.cts +1 -2
- package/dist/lib/cjs/jest/setup.cjs +2 -2
- package/dist/lib/cjs/jest/setup.d.cts +1 -1
- package/dist/lib/cjs/json-with-functions.cjs +7 -7
- package/dist/lib/cjs/leftover-cleanup.cjs +14 -14
- package/dist/lib/cjs/leftover-cleanup.d.cts +42 -20
- package/dist/lib/cjs/library.cjs +2 -2
- package/dist/lib/cjs/namespace-bootstrap.cjs +46 -40
- package/dist/lib/cjs/native-dialog-monitor.cjs +15 -13
- package/dist/lib/cjs/normalize-optional-properties.cjs +3 -3
- package/dist/lib/cjs/normalize-optional-properties.d.cts +2 -2
- package/dist/lib/cjs/obsidian-config.cjs +30 -31
- package/dist/lib/cjs/obsidian-config.d.cts +8 -8
- package/dist/lib/cjs/obsidian-executable.cjs +2 -2
- package/dist/lib/cjs/obsidian-installer.cjs +37 -37
- package/dist/lib/cjs/obsidian-installer.d.cts +7 -3
- package/dist/lib/cjs/obsidian-instance.cjs +7 -4
- package/dist/lib/cjs/obsidian-instance.d.cts +25 -8
- package/dist/lib/cjs/obsidian-metadata.cjs +1 -1
- package/dist/lib/cjs/obsidian-metadata.d.cts +36 -12
- package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
- package/dist/lib/cjs/obsidian-namespace.d.cts +25 -11
- package/dist/lib/cjs/obsidian-version-switch.cjs +9 -9
- package/dist/lib/cjs/obsidian-version-switch.d.cts +14 -10
- package/dist/lib/cjs/obsidian-version.cjs +3 -3
- package/dist/lib/cjs/obsidian-version.d.cts +15 -5
- package/dist/lib/cjs/owned-vault-seed.cjs +1 -1
- package/dist/lib/cjs/owned-vault-seed.d.cts +24 -8
- package/dist/lib/cjs/parent-liveness.cjs +93 -0
- package/dist/lib/cjs/parent-liveness.d.cts +80 -0
- package/dist/lib/cjs/poll-in-obsidian.cjs +5 -5
- package/dist/lib/cjs/poll-in-obsidian.d.cts +12 -12
- package/dist/lib/cjs/poll-until.cjs +1 -1
- package/dist/lib/cjs/poll-until.d.cts +21 -7
- package/dist/lib/cjs/process-exit-message.cjs +1 -1
- package/dist/lib/cjs/process-exit-message.d.cts +21 -7
- package/dist/lib/cjs/renderer-boot-detection.cjs +9 -9
- package/dist/lib/cjs/renderer-boot-detection.d.cts +31 -27
- package/dist/lib/cjs/renderer-failed-to-initialize-error.cjs +1 -1
- package/dist/lib/cjs/renderer-failed-to-initialize-error.d.cts +1 -1
- package/dist/lib/cjs/setup-lock.cjs +26 -26
- package/dist/lib/cjs/setup-lock.d.cts +6 -2
- package/dist/lib/cjs/silent-asar-fallback-error.cjs +7 -3
- package/dist/lib/cjs/silent-asar-fallback-error.d.cts +12 -4
- package/dist/lib/cjs/spawn-options.cjs +1 -1
- package/dist/lib/cjs/spawn-options.d.cts +3 -1
- package/dist/lib/cjs/strict-proxy.cjs +25 -25
- package/dist/lib/cjs/strict-proxy.d.cts +3 -3
- package/dist/lib/cjs/temporary-vault.cjs +166 -0
- package/dist/lib/cjs/{temp-vault.d.cts → temporary-vault.d.cts} +3 -3
- package/dist/lib/cjs/transport-appium.cjs +7 -7
- package/dist/lib/cjs/transport-appium.d.cts +7 -3
- package/dist/lib/cjs/transport-desktop-cdp.cjs +77 -56
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +41 -17
- package/dist/lib/cjs/transport-factory.cjs +62 -63
- package/dist/lib/cjs/type-guards.cjs +3 -3
- package/dist/lib/cjs/type-guards.d.cts +2 -2
- package/dist/lib/cjs/vault-path-match.cjs +9 -9
- package/dist/lib/cjs/vault-path-match.d.cts +11 -11
- package/dist/lib/cjs/version-matrix.cjs +1 -1
- package/dist/lib/cjs/version-matrix.d.cts +51 -17
- package/dist/lib/cjs/visibility.cjs +7 -7
- package/dist/lib/cjs/visibility.d.cts +5 -5
- package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +3 -3
- package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +2 -2
- package/dist/lib/cjs/vitest/global-setup.cjs +9 -9
- package/dist/lib/cjs/vitest/global-setup.d.cts +4 -4
- package/dist/lib/cjs/vitest/setup.cjs +2 -2
- package/dist/lib/cjs/vitest/typings.d.cts +2 -2
- package/dist/lib/esm/appium-dependencies.d.mts +4 -2
- package/dist/lib/esm/appium-dependencies.mjs +4 -4
- package/dist/lib/esm/appium-session-config.mjs +1 -1
- package/dist/lib/esm/asar-fallback-detection.d.mts +15 -7
- package/dist/lib/esm/asar-fallback-detection.mjs +3 -3
- package/dist/lib/esm/avd-list.d.mts +6 -2
- package/dist/lib/esm/avd-list.mjs +1 -1
- package/dist/lib/esm/cli.mjs +4 -4
- package/dist/lib/esm/compatibility-options.d.mts +24 -12
- package/dist/lib/esm/compatibility-options.mjs +10 -10
- package/dist/lib/esm/connect-to-cdp.d.mts +6 -6
- package/dist/lib/esm/connect-to-cdp.mjs +6 -6
- package/dist/lib/esm/context-id.d.mts +1 -1
- package/dist/lib/esm/context-id.mjs +5 -5
- package/dist/lib/esm/context-provider.d.mts +4 -4
- package/dist/lib/esm/context-provider.mjs +5 -5
- package/dist/lib/esm/demo-vault-populate.d.mts +4 -4
- package/dist/lib/esm/demo-vault-populate.mjs +5 -5
- package/dist/lib/esm/demo-vault-tree.d.mts +3 -3
- package/dist/lib/esm/demo-vault-tree.mjs +4 -4
- package/dist/lib/esm/device-readiness.d.mts +7 -3
- package/dist/lib/esm/device-readiness.mjs +3 -3
- package/dist/lib/esm/ecmascript-version.mjs +1 -1
- package/dist/lib/esm/electron-compatibility.d.mts +33 -17
- package/dist/lib/esm/electron-compatibility.mjs +3 -3
- package/dist/lib/{cjs/emulator-args.d.cts → esm/emulator-arguments.d.mts} +6 -4
- package/dist/lib/esm/emulator-arguments.mjs +12 -0
- package/dist/lib/esm/enable-plugin.d.mts +6 -6
- package/dist/lib/esm/enable-plugin.mjs +29 -29
- package/dist/lib/esm/eval-in-obsidian.d.mts +23 -23
- package/dist/lib/esm/eval-in-obsidian.mjs +9 -9
- package/dist/lib/esm/exec.d.mts +9 -9
- package/dist/lib/esm/exec.mjs +49 -53
- package/dist/lib/esm/function-expression.d.mts +4 -4
- package/dist/lib/esm/function-expression.mjs +8 -8
- package/dist/lib/esm/generate-function-call.d.mts +15 -9
- package/dist/lib/esm/generate-function-call.mjs +6 -6
- package/dist/lib/esm/global-setup-core.d.mts +19 -9
- package/dist/lib/esm/global-setup-core.mjs +45 -45
- package/dist/lib/esm/incompatible-installer-version-error.d.mts +18 -6
- package/dist/lib/esm/incompatible-installer-version-error.mjs +10 -4
- package/dist/lib/esm/index.d.mts +8 -8
- package/dist/lib/esm/index.mjs +9 -9
- package/dist/lib/esm/installer-asset.d.mts +21 -7
- package/dist/lib/esm/installer-asset.mjs +4 -4
- package/dist/lib/esm/installer-compatibility.d.mts +36 -18
- package/dist/lib/esm/installer-compatibility.mjs +3 -3
- package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +1 -1
- package/dist/lib/esm/jest/global-setup-no-plugin.mjs +3 -3
- package/dist/lib/esm/jest/global-setup.d.mts +12 -8
- package/dist/lib/esm/jest/global-setup.mjs +10 -10
- package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +1 -2
- package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +2 -3
- package/dist/lib/esm/jest/global-teardown.d.mts +1 -2
- package/dist/lib/esm/jest/global-teardown.mjs +2 -3
- package/dist/lib/esm/jest/setup.d.mts +1 -1
- package/dist/lib/esm/jest/setup.mjs +2 -2
- package/dist/lib/esm/json-with-functions.mjs +7 -7
- package/dist/lib/esm/leftover-cleanup.d.mts +42 -20
- package/dist/lib/esm/leftover-cleanup.mjs +12 -12
- package/dist/lib/esm/library.mjs +2 -2
- package/dist/lib/esm/namespace-bootstrap.mjs +46 -40
- package/dist/lib/esm/native-dialog-monitor.mjs +15 -13
- package/dist/lib/esm/normalize-optional-properties.d.mts +2 -2
- package/dist/lib/esm/normalize-optional-properties.mjs +3 -3
- package/dist/lib/esm/obsidian-config.d.mts +8 -8
- package/dist/lib/esm/obsidian-config.mjs +27 -28
- package/dist/lib/esm/obsidian-executable.mjs +2 -2
- package/dist/lib/esm/obsidian-installer.d.mts +7 -3
- package/dist/lib/esm/obsidian-installer.mjs +36 -36
- package/dist/lib/esm/obsidian-instance.d.mts +25 -8
- package/dist/lib/esm/obsidian-instance.mjs +7 -4
- package/dist/lib/esm/obsidian-metadata.d.mts +36 -12
- package/dist/lib/esm/obsidian-metadata.mjs +1 -1
- package/dist/lib/esm/obsidian-namespace.d.mts +25 -11
- package/dist/lib/esm/obsidian-version-switch.d.mts +14 -10
- package/dist/lib/esm/obsidian-version-switch.mjs +9 -9
- package/dist/lib/esm/obsidian-version.d.mts +15 -5
- package/dist/lib/esm/obsidian-version.mjs +3 -3
- package/dist/lib/esm/owned-vault-seed.d.mts +24 -8
- package/dist/lib/esm/owned-vault-seed.mjs +1 -1
- package/dist/lib/esm/parent-liveness.d.mts +80 -0
- package/dist/lib/esm/parent-liveness.mjs +67 -0
- package/dist/lib/esm/poll-in-obsidian.d.mts +12 -12
- package/dist/lib/esm/poll-in-obsidian.mjs +5 -5
- package/dist/lib/esm/poll-until.d.mts +21 -7
- package/dist/lib/esm/poll-until.mjs +1 -1
- package/dist/lib/esm/process-exit-message.d.mts +21 -7
- package/dist/lib/esm/process-exit-message.mjs +1 -1
- package/dist/lib/esm/renderer-boot-detection.d.mts +31 -27
- package/dist/lib/esm/renderer-boot-detection.mjs +7 -7
- package/dist/lib/esm/renderer-failed-to-initialize-error.d.mts +1 -1
- package/dist/lib/esm/renderer-failed-to-initialize-error.mjs +1 -1
- package/dist/lib/esm/setup-lock.d.mts +6 -2
- package/dist/lib/esm/setup-lock.mjs +26 -26
- package/dist/lib/esm/silent-asar-fallback-error.d.mts +12 -4
- package/dist/lib/esm/silent-asar-fallback-error.mjs +7 -3
- package/dist/lib/esm/spawn-options.d.mts +3 -1
- package/dist/lib/esm/spawn-options.mjs +1 -1
- package/dist/lib/esm/strict-proxy.d.mts +3 -3
- package/dist/lib/esm/strict-proxy.mjs +25 -25
- package/dist/lib/esm/{temp-vault.d.mts → temporary-vault.d.mts} +3 -3
- package/dist/lib/esm/temporary-vault.mjs +157 -0
- package/dist/lib/esm/transport-appium.d.mts +7 -3
- package/dist/lib/esm/transport-appium.mjs +7 -7
- package/dist/lib/esm/transport-desktop-cdp.d.mts +41 -17
- package/dist/lib/esm/transport-desktop-cdp.mjs +86 -65
- package/dist/lib/esm/transport-factory.mjs +71 -72
- package/dist/lib/esm/type-guards.d.mts +2 -2
- package/dist/lib/esm/type-guards.mjs +3 -3
- package/dist/lib/esm/vault-path-match.d.mts +11 -11
- package/dist/lib/esm/vault-path-match.mjs +7 -7
- package/dist/lib/esm/version-matrix.d.mts +51 -17
- package/dist/lib/esm/version-matrix.mjs +1 -1
- package/dist/lib/esm/visibility.d.mts +5 -5
- package/dist/lib/esm/visibility.mjs +5 -5
- package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +2 -2
- package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +3 -3
- package/dist/lib/esm/vitest/global-setup.d.mts +4 -4
- package/dist/lib/esm/vitest/global-setup.mjs +8 -8
- package/dist/lib/esm/vitest/setup.mjs +2 -2
- package/dist/lib/esm/vitest/typings.d.mts +2 -2
- package/dist/obsidian-integration-testing-10.0.0.tgz +0 -0
- package/package.json +15 -13
- package/dist/lib/cjs/emulator-args.cjs +0 -36
- package/dist/lib/cjs/temp-vault.cjs +0 -166
- package/dist/lib/esm/emulator-args.mjs +0 -12
- package/dist/lib/esm/temp-vault.mjs +0 -157
- package/dist/obsidian-integration-testing-9.2.1.tgz +0 -0
|
@@ -9,21 +9,31 @@
|
|
|
9
9
|
* Parameters for the registered `evalWrapper` function.
|
|
10
10
|
*/
|
|
11
11
|
export interface EvalWrapperNamespaceParams {
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
/**
|
|
13
|
+
The user function to evaluate.
|
|
14
|
+
*/
|
|
15
|
+
callback(input: Record<string, unknown>): unknown;
|
|
16
|
+
/**
|
|
17
|
+
Optional context ID for persistent storage.
|
|
18
|
+
*/
|
|
15
19
|
readonly contextId?: string;
|
|
16
|
-
/**
|
|
17
|
-
|
|
20
|
+
/**
|
|
21
|
+
User-supplied arguments to pass to `callback`.
|
|
22
|
+
*/
|
|
23
|
+
readonly input: Record<string, unknown>;
|
|
18
24
|
}
|
|
19
25
|
/**
|
|
20
26
|
* Parameters for {@link ObsidianIntegrationTestingNamespace.ipcSendSync}.
|
|
21
27
|
*/
|
|
22
28
|
export interface IpcSendSyncNamespaceParams {
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
/**
|
|
30
|
+
The IPC channel name.
|
|
31
|
+
*/
|
|
26
32
|
readonly channel: string;
|
|
33
|
+
/**
|
|
34
|
+
The IPC arguments.
|
|
35
|
+
*/
|
|
36
|
+
readonly channelArguments: unknown[];
|
|
27
37
|
}
|
|
28
38
|
/**
|
|
29
39
|
* Holder interface for type-safe access to `window.__obsidianIntegrationTesting`.
|
|
@@ -65,7 +75,7 @@ export interface ObsidianIntegrationTestingNamespace {
|
|
|
65
75
|
* The top-level wrapper that sets up context, resolves the obsidian module,
|
|
66
76
|
* calls the user's function, and returns a JSON envelope.
|
|
67
77
|
*
|
|
68
|
-
* @param params - Parameters including the user's function,
|
|
78
|
+
* @param params - Parameters including the user's function, input, and context ID.
|
|
69
79
|
* @returns A JSON-stringified result envelope.
|
|
70
80
|
*/
|
|
71
81
|
evalWrapper(params: EvalWrapperNamespaceParams): Promise<string>;
|
|
@@ -107,8 +117,12 @@ export interface ObsidianIntegrationTestingNamespace {
|
|
|
107
117
|
* Parameters for {@link ObsidianIntegrationTestingNamespace.setLocalStorageItem}.
|
|
108
118
|
*/
|
|
109
119
|
export interface SetLocalStorageItemNamespaceParams {
|
|
110
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
The localStorage key.
|
|
122
|
+
*/
|
|
111
123
|
readonly key: string;
|
|
112
|
-
/**
|
|
124
|
+
/**
|
|
125
|
+
The localStorage value.
|
|
126
|
+
*/
|
|
113
127
|
readonly value: string;
|
|
114
128
|
}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* @file
|
|
3
3
|
*
|
|
4
4
|
* Integration-time helpers for provisioning a specific Obsidian **asar** (the
|
|
5
|
-
* app code) into an isolated user-data
|
|
5
|
+
* app code) into an isolated user-data directory.
|
|
6
6
|
*
|
|
7
7
|
* Obsidian's bootstrap loads the highest of (its shell's bundled
|
|
8
8
|
* `resources/obsidian.asar`, the `obsidian-<version>.asar` files in the
|
|
9
|
-
* user-data
|
|
9
|
+
* user-data directory). So placing an asar here only takes effect when its version is
|
|
10
10
|
* **>= the shell's bundled version** (upgrade-only — confirmed by the Phase 0
|
|
11
11
|
* spike). Running an older version requires pinning the installer/shell instead
|
|
12
12
|
* (see `obsidian-installer.ts`).
|
|
@@ -16,20 +16,24 @@ import type { DesktopReleasesManifest } from './obsidian-version.mjs';
|
|
|
16
16
|
* A discovered `obsidian-<version>.asar` file.
|
|
17
17
|
*/
|
|
18
18
|
export interface DiscoveredAsar {
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
Absolute path to the asar file.
|
|
21
|
+
*/
|
|
20
22
|
readonly path: string;
|
|
21
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
The `x.y.z` version parsed from the file name.
|
|
25
|
+
*/
|
|
22
26
|
readonly version: string;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
25
|
-
* Copies an asar file into a user-data
|
|
29
|
+
* Copies an asar file into a user-data directory under its canonical
|
|
26
30
|
* `obsidian-<version>.asar` name.
|
|
27
31
|
*
|
|
28
32
|
* @param asarPath - Source asar path.
|
|
29
33
|
* @param version - The asar's version (used for the destination file name).
|
|
30
|
-
* @param
|
|
34
|
+
* @param userDataDirectory - Destination user-data directory.
|
|
31
35
|
*/
|
|
32
|
-
export declare function copyAsarIntoUserData(asarPath: string, version: string,
|
|
36
|
+
export declare function copyAsarIntoUserData(asarPath: string, version: string, userDataDirectory: string): void;
|
|
33
37
|
/**
|
|
34
38
|
* Ensures the asar for a concrete version is present in the local cache,
|
|
35
39
|
* downloading and decompressing it if necessary.
|
|
@@ -49,10 +53,10 @@ export declare function fetchDesktopReleasesManifest(): Promise<DesktopReleasesM
|
|
|
49
53
|
/**
|
|
50
54
|
* Finds the newest `obsidian-<version>.asar` in a directory.
|
|
51
55
|
*
|
|
52
|
-
* @param
|
|
53
|
-
* @returns The newest discovered asar, or `undefined` if none / the
|
|
56
|
+
* @param directory - The directory to scan (e.g. the user's Obsidian config directory).
|
|
57
|
+
* @returns The newest discovered asar, or `undefined` if none / the directory is unreadable.
|
|
54
58
|
*/
|
|
55
|
-
export declare function findNewestAsar(
|
|
59
|
+
export declare function findNewestAsar(directory: string): DiscoveredAsar | undefined;
|
|
56
60
|
/**
|
|
57
61
|
* Returns the local cache path for a concrete version's asar (the file may not
|
|
58
62
|
* yet exist).
|
|
@@ -23,11 +23,11 @@ const CATALYST_ASAR_RELEASE_BASE_URL = "https://releases.obsidian.md/release";
|
|
|
23
23
|
const CACHE_ROOT = join(tmpdir(), "obsidian-integration-testing");
|
|
24
24
|
const ASAR_CACHE_DIR = join(CACHE_ROOT, "asar-cache");
|
|
25
25
|
const ASAR_FILE_PATTERN = /^obsidian-(?<version>\d+\.\d+\.\d+)\.asar$/;
|
|
26
|
-
function copyAsarIntoUserData(asarPath, version,
|
|
27
|
-
mkdirSync(
|
|
28
|
-
const
|
|
29
|
-
copyFileSync(asarPath,
|
|
30
|
-
log(`[version-switch] Provisioned ${getVersionAsarFileName(version)} into ${
|
|
26
|
+
function copyAsarIntoUserData(asarPath, version, userDataDirectory) {
|
|
27
|
+
mkdirSync(userDataDirectory, { recursive: true });
|
|
28
|
+
const destination = join(userDataDirectory, getVersionAsarFileName(version));
|
|
29
|
+
copyFileSync(asarPath, destination);
|
|
30
|
+
log(`[version-switch] Provisioned ${getVersionAsarFileName(version)} into ${userDataDirectory}.`);
|
|
31
31
|
}
|
|
32
32
|
async function ensureAsarCached(version) {
|
|
33
33
|
mkdirSync(ASAR_CACHE_DIR, { recursive: true });
|
|
@@ -56,10 +56,10 @@ async function fetchDesktopReleasesManifest() {
|
|
|
56
56
|
}
|
|
57
57
|
return await response.json();
|
|
58
58
|
}
|
|
59
|
-
function findNewestAsar(
|
|
59
|
+
function findNewestAsar(directory) {
|
|
60
60
|
let entries;
|
|
61
61
|
try {
|
|
62
|
-
entries = readdirSync(
|
|
62
|
+
entries = readdirSync(directory);
|
|
63
63
|
} catch {
|
|
64
64
|
return void 0;
|
|
65
65
|
}
|
|
@@ -71,7 +71,7 @@ function findNewestAsar(dir) {
|
|
|
71
71
|
}
|
|
72
72
|
const version = match.groups?.["version"] ?? "";
|
|
73
73
|
if (!newest || compareVersions(version, newest.version) > 0) {
|
|
74
|
-
newest = { path: join(
|
|
74
|
+
newest = { path: join(directory, entry), version };
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
return newest;
|
|
@@ -116,4 +116,4 @@ export {
|
|
|
116
116
|
getCachedAsarPath,
|
|
117
117
|
resolveConcreteVersion
|
|
118
118
|
};
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW50ZWdyYXRpb24tdGltZSBoZWxwZXJzIGZvciBwcm92aXNpb25pbmcgYSBzcGVjaWZpYyBPYnNpZGlhbiAqKmFzYXIqKiAodGhlXG4gKiBhcHAgY29kZSkgaW50byBhbiBpc29sYXRlZCB1c2VyLWRhdGEgZGlyLlxuICpcbiAqIE9ic2lkaWFuJ3MgYm9vdHN0cmFwIGxvYWRzIHRoZSBoaWdoZXN0IG9mIChpdHMgc2hlbGwncyBidW5kbGVkXG4gKiBgcmVzb3VyY2VzL29ic2lkaWFuLmFzYXJgLCB0aGUgYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBmaWxlcyBpbiB0aGVcbiAqIHVzZXItZGF0YSBkaXIpLiBTbyBwbGFjaW5nIGFuIGFzYXIgaGVyZSBvbmx5IHRha2VzIGVmZmVjdCB3aGVuIGl0cyB2ZXJzaW9uIGlzXG4gKiAqKj49IHRoZSBzaGVsbCdzIGJ1bmRsZWQgdmVyc2lvbioqICh1cGdyYWRlLW9ubHkgXHUyMDE0IGNvbmZpcm1lZCBieSB0aGUgUGhhc2UgMFxuICogc3Bpa2UpLiBSdW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gcmVxdWlyZXMgcGlubmluZyB0aGUgaW5zdGFsbGVyL3NoZWxsIGluc3RlYWRcbiAqIChzZWUgYG9ic2lkaWFuLWluc3RhbGxlci50c2ApLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGRvd25sb2FkL2ZpbGVzeXN0ZW0gZ2x1ZSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHtcbiAgY29weUZpbGVTeW5jLFxuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICdub2RlOnpsaWInO1xuXG5pbXBvcnQgdHlwZSB7IERlc2t0b3BSZWxlYXNlc01hbmlmZXN0IH0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLm1qcyc7XG5cbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLm1qcyc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLm1qcyc7XG5pbXBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMLFxuICBnZXRWZXJzaW9uQXNhckZpbGVOYW1lLFxuICBwYXJzZVZlcnNpb25TcGVjLFxuICByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24ubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgcmVxdWlyZWQgdG8gZmV0Y2ggYXNhciBwYWNrYWdlcyBmcm9tXG4gKiBgcmVsZWFzZXMub2JzaWRpYW4ubWRgICh0aGUgZW5kcG9pbnQgaXMgQ2xvdWRmbGFyZS1nYXRlZCBhZ2FpbnN0IG5vbi1icm93c2VyXG4gKiBjbGllbnRzKS4gTWF0Y2hlcyB0aGUgVUEgZG9jdW1lbnRlZCBpbiB0aGUgb2JzaWRpYW4tdmVyc2lvbnMgcmVwby5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipwdWJsaWMqKiAoc3RhYmxlKSByZWxlYXNlIGFzYXJzLCBwdWJsaXNoZWQgYXMgR2l0SHViIHJlbGVhc2VcbiAqIGFzc2V0cyB1bmRlciBgLi4uL2Rvd25sb2FkL3Y8dmVyc2lvbj4vb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLlxuICovXG5jb25zdCBQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipjYXRhbHlzdCoqIChlYXJseSBhY2Nlc3MgLyBpbnNpZGVyKSByZWxlYXNlIGFzYXJzLCBzZXJ2ZWQgZnJvbVxuICogdGhlIE9ic2lkaWFuIENETiBhcyBgLi4uL3JlbGVhc2Uvb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLiBQdWJsaWMgdmVyc2lvbnNcbiAqIGFyZSBOT1QgaG9zdGVkIGhlcmUgKHRoZSBDRE4gcmV0dXJucyBhbiBlbXB0eSBib2R5IGZvciB0aGVtKS5cbiAqL1xuY29uc3QgQ0FUQUxZU1RfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vcmVsZWFzZXMub2JzaWRpYW4ubWQvcmVsZWFzZSc7XG5cbmNvbnN0IENBQ0hFX1JPT1QgPSBqb2luKHRtcGRpcigpLCAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycpO1xuY29uc3QgQVNBUl9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdhc2FyLWNhY2hlJyk7XG5jb25zdCBBU0FSX0ZJTEVfUEFUVEVSTiA9IC9eb2JzaWRpYW4tKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspXFwuYXNhciQvO1xuXG4vKipcbiAqIEEgZGlzY292ZXJlZCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJlZEFzYXIge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgYXNhciBmaWxlLiAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBgeC55LnpgIHZlcnNpb24gcGFyc2VkIGZyb20gdGhlIGZpbGUgbmFtZS4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvcGllcyBhbiBhc2FyIGZpbGUgaW50byBhIHVzZXItZGF0YSBkaXIgdW5kZXIgaXRzIGNhbm9uaWNhbFxuICogYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBuYW1lLlxuICpcbiAqIEBwYXJhbSBhc2FyUGF0aCAtIFNvdXJjZSBhc2FyIHBhdGguXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBhc2FyJ3MgdmVyc2lvbiAodXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbmFtZSkuXG4gKiBAcGFyYW0gdXNlckRhdGFEaXIgLSBEZXN0aW5hdGlvbiB1c2VyLWRhdGEgZGlyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUFzYXJJbnRvVXNlckRhdGEoYXNhclBhdGg6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCB1c2VyRGF0YURpcjogc3RyaW5nKTogdm9pZCB7XG4gIG1rZGlyU3luYyh1c2VyRGF0YURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGRlc3QgPSBqb2luKHVzZXJEYXRhRGlyLCBnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pKTtcbiAgY29weUZpbGVTeW5jKGFzYXJQYXRoLCBkZXN0KTtcbiAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIFByb3Zpc2lvbmVkICR7Z2V0VmVyc2lvbkFzYXJGaWxlTmFtZSh2ZXJzaW9uKX0gaW50byAke3VzZXJEYXRhRGlyfS5gKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBhc2FyIGZvciBhIGNvbmNyZXRlIHZlcnNpb24gaXMgcHJlc2VudCBpbiB0aGUgbG9jYWwgY2FjaGUsXG4gKiBkb3dubG9hZGluZyBhbmQgZGVjb21wcmVzc2luZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjYWNoZWQgYXNhci5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGRvd25sb2FkIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQXNhckNhY2hlZCh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBta2RpclN5bmMoQVNBUl9DQUNIRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBjYWNoZWRQYXRoID0gZ2V0Q2FjaGVkQXNhclBhdGgodmVyc2lvbik7XG4gIGlmIChleGlzdHNTeW5jKGNhY2hlZFBhdGgpKSB7XG4gICAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIFVzaW5nIGNhY2hlZCBhc2FyIGZvciAke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBjYWNoZWRQYXRoO1xuICB9XG5cbiAgLy8gQSB2ZXJzaW9uJ3MgYXNhci5neiBsaXZlcyBvbiBleGFjdGx5IG9uZSBob3N0IGRlcGVuZGluZyBvbiBpdHMgY2hhbm5lbFxuICAvLyAocHVibGljIFx1MjE5MiBHaXRIdWIgcmVsZWFzZSBhc3NldHMsIGNhdGFseXN0IFx1MjE5MiB0aGUgT2JzaWRpYW4gQ0ROKS4gVGhlIGNvbmNyZXRlXG4gIC8vIFZlcnNpb24gYWxvbmUgZG9lcyBub3QgdGVsbCB1cyB3aGljaCwgc28gdHJ5IGJvdGggYW5kIHVzZSB0aGUgZmlyc3QgdGhhdFxuICAvLyBSZXR1cm5zIGEgdmFsaWQgYXJjaGl2ZS5cbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHVybCBvZiBnZXRBc2FyRG93bmxvYWRVcmxzKHZlcnNpb24pKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFzYXIgPSBhd2FpdCBkb3dubG9hZEFuZERlY29tcHJlc3NBc2FyKHVybCk7XG4gICAgICB3cml0ZUZpbGVTeW5jKGNhY2hlZFBhdGgsIGFzYXIpO1xuICAgICAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIENhY2hlZCBhc2FyICR7dmVyc2lvbn0gKCR7U3RyaW5nKGFzYXIubGVuZ3RoKX0gYnl0ZXMpIC0+ICR7Y2FjaGVkUGF0aH1gKTtcbiAgICAgIHJldHVybiBjYWNoZWRQYXRoO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChgJHt1cmx9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkb3dubG9hZCBPYnNpZGlhbiBhc2FyICR7dmVyc2lvbn0uIEF0dGVtcHRzOiAke2Vycm9ycy5qb2luKCc7ICcpfWApO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYW5kIHBhcnNlcyBPYnNpZGlhbidzIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3QuXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBtYW5pZmVzdC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIG1hbmlmZXN0IGNhbm5vdCBiZSBmZXRjaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCgpOiBQcm9taXNlPERlc2t0b3BSZWxlYXNlc01hbmlmZXN0PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goREVTS1RPUF9SRUxFQVNFU19NQU5JRkVTVF9VUkwpO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZGVza3RvcCByZWxlYXNlcyBtYW5pZmVzdDogSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG4gIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRGVza3RvcFJlbGVhc2VzTWFuaWZlc3Q7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG5ld2VzdCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGluIGEgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSBkaXIgLSBUaGUgZGlyZWN0b3J5IHRvIHNjYW4gKGUuZy4gdGhlIHVzZXIncyBPYnNpZGlhbiBjb25maWcgZGlyKS5cbiAqIEByZXR1cm5zIFRoZSBuZXdlc3QgZGlzY292ZXJlZCBhc2FyLCBvciBgdW5kZWZpbmVkYCBpZiBub25lIC8gdGhlIGRpciBpcyB1bnJlYWRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5ld2VzdEFzYXIoZGlyOiBzdHJpbmcpOiBEaXNjb3ZlcmVkQXNhciB8IHVuZGVmaW5lZCB7XG4gIGxldCBlbnRyaWVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICBlbnRyaWVzID0gcmVhZGRpclN5bmMoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBuZXdlc3Q6IERpc2NvdmVyZWRBc2FyIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtYXRjaCA9IEFTQVJfRklMRV9QQVRURVJOLmV4ZWMoZW50cnkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gbWF0Y2guZ3JvdXBzPy5bJ3ZlcnNpb24nXSA/PyAnJztcbiAgICBpZiAoIW5ld2VzdCB8fCBjb21wYXJlVmVyc2lvbnModmVyc2lvbiwgbmV3ZXN0LnZlcnNpb24pID4gMCkge1xuICAgICAgbmV3ZXN0ID0geyBwYXRoOiBqb2luKGRpciwgZW50cnkpLCB2ZXJzaW9uIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdlc3Q7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbG9jYWwgY2FjaGUgcGF0aCBmb3IgYSBjb25jcmV0ZSB2ZXJzaW9uJ3MgYXNhciAodGhlIGZpbGUgbWF5IG5vdFxuICogeWV0IGV4aXN0KS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdGhlIGFzYXIgaXMgY2FjaGVkIGF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkQXNhclBhdGgodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oQVNBUl9DQUNIRV9ESVIsIGdldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbikpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgdmVyc2lvbiBzcGVjaWZpZXIgKGV4cGxpY2l0IG9yIGNoYW5uZWwgYWxpYXMpIHRvIGEgY29uY3JldGVcbiAqIGB4LnkuemAgdmVyc2lvbiwgZmV0Y2hpbmcgdGhlIG1hbmlmZXN0IG9ubHkgd2hlbiBhIGNoYW5uZWwgYWxpYXMgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0gc3BlYyAtIFRoZSB2ZXJzaW9uIHNwZWNpZmllci5cbiAqIEByZXR1cm5zIFRoZSBjb25jcmV0ZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvbmNyZXRlVmVyc2lvbihzcGVjOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVZlcnNpb25TcGVjKHNwZWMpO1xuICBpZiAocGFyc2VkLmtpbmQgPT09ICdleHBsaWNpdCcpIHtcbiAgICByZXR1cm4gcGFyc2VkLnZlcnNpb247XG4gIH1cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBmZXRjaERlc2t0b3BSZWxlYXNlc01hbmlmZXN0KCk7XG4gIHJldHVybiByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdChtYW5pZmVzdCwgcGFyc2VkLmNoYW5uZWwpO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyBhIGd6aXAtY29tcHJlc3NlZCBhc2FyIGZyb20gYSBVUkwgYW5kIGRlY29tcHJlc3NlcyBpdC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGAuYXNhci5nemAgVVJMLlxuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBhc2FyIGJ5dGVzLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVxdWVzdCBmYWlscywgdGhlIGJvZHkgaXMgZW1wdHksIG9yIGRlY29tcHJlc3Npb24gZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQW5kRGVjb21wcmVzc0FzYXIodXJsOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsb2coYFt2ZXJzaW9uLXN3aXRjaF0gRG93bmxvYWRpbmcgYXNhciBmcm9tICR7dXJsfSAuLi5gKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG5cbiAgY29uc3QgZ3ogPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgaWYgKGd6Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZW1wdHkgcmVzcG9uc2UgYm9keScpO1xuICB9XG4gIHJldHVybiBndW56aXBTeW5jKGd6KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjYW5kaWRhdGUgYC5hc2FyLmd6YCBkb3dubG9hZCBVUkxzIGZvciBhIGNvbmNyZXRlIHZlcnNpb24uXG4gKlxuICogVGhlIHZlcnNpb24ncyBleGFjdCBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2cgKGZyb20gdXBzdHJlYW1cbiAqIGBvYnNpZGlhbi12ZXJzaW9ucy5qc29uYCkgaXMgdHJpZWQgZmlyc3Qgd2hlbiBwcmVzZW50OyB0aGUgaGFuZC1yb2xsZWQgcHVibGljXG4gKiAoR2l0SHViKSBhbmQgY2F0YWx5c3QgKENETikgZ3Vlc3NlcyBmb2xsb3cgYXMgYSBmYWxsYmFjayBmb3IgdmVyc2lvbnMgYWJzZW50XG4gKiBmcm9tIHRoZSBjYXRhbG9nIChvciBhIHN0YWxlIGNhdGFsb2cpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgVVJMcyB0byB0cnksIGluIG9yZGVyLlxuICovXG5mdW5jdGlvbiBnZXRBc2FyRG93bmxvYWRVcmxzKHZlcnNpb246IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgYXNhckd6RmlsZU5hbWUgPSBgJHtnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pfS5nemA7XG4gIGNvbnN0IGZhbGxiYWNrVXJscyA9IFtcbiAgICBgJHtQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMfS92JHt2ZXJzaW9ufS8ke2FzYXJHekZpbGVOYW1lfWAsXG4gICAgYCR7Q0FUQUxZU1RfQVNBUl9SRUxFQVNFX0JBU0VfVVJMfS8ke2FzYXJHekZpbGVOYW1lfWBcbiAgXTtcblxuICBjb25zdCBiYWtlZFVybCA9IGdldFZlcnNpb25NZXRhZGF0YSh2ZXJzaW9uKT8uZG93bmxvYWRzPy5hc2FyO1xuICByZXR1cm4gYmFrZWRVcmwgPyBbYmFrZWRVcmwsIC4uLmZhbGxiYWNrVXJsc10gOiBmYWxsYmFja1VybHM7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFnQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFDdkIsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsa0JBQWtCO0FBSTNCLFNBQVMsV0FBVztBQUNwQixTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU9QLE1BQU0sc0JBQXNCO0FBTTVCLE1BQU0sK0JBQStCO0FBT3JDLE1BQU0saUNBQWlDO0FBRXZD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
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW50ZWdyYXRpb24tdGltZSBoZWxwZXJzIGZvciBwcm92aXNpb25pbmcgYSBzcGVjaWZpYyBPYnNpZGlhbiAqKmFzYXIqKiAodGhlXG4gKiBhcHAgY29kZSkgaW50byBhbiBpc29sYXRlZCB1c2VyLWRhdGEgZGlyZWN0b3J5LlxuICpcbiAqIE9ic2lkaWFuJ3MgYm9vdHN0cmFwIGxvYWRzIHRoZSBoaWdoZXN0IG9mIChpdHMgc2hlbGwncyBidW5kbGVkXG4gKiBgcmVzb3VyY2VzL29ic2lkaWFuLmFzYXJgLCB0aGUgYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBmaWxlcyBpbiB0aGVcbiAqIHVzZXItZGF0YSBkaXJlY3RvcnkpLiBTbyBwbGFjaW5nIGFuIGFzYXIgaGVyZSBvbmx5IHRha2VzIGVmZmVjdCB3aGVuIGl0cyB2ZXJzaW9uIGlzXG4gKiAqKj49IHRoZSBzaGVsbCdzIGJ1bmRsZWQgdmVyc2lvbioqICh1cGdyYWRlLW9ubHkgXHUyMDE0IGNvbmZpcm1lZCBieSB0aGUgUGhhc2UgMFxuICogc3Bpa2UpLiBSdW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gcmVxdWlyZXMgcGlubmluZyB0aGUgaW5zdGFsbGVyL3NoZWxsIGluc3RlYWRcbiAqIChzZWUgYG9ic2lkaWFuLWluc3RhbGxlci50c2ApLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGRvd25sb2FkL2ZpbGVzeXN0ZW0gZ2x1ZSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHtcbiAgY29weUZpbGVTeW5jLFxuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICdub2RlOnpsaWInO1xuXG5pbXBvcnQgdHlwZSB7IERlc2t0b3BSZWxlYXNlc01hbmlmZXN0IH0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLm1qcyc7XG5cbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLm1qcyc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLm1qcyc7XG5pbXBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMLFxuICBnZXRWZXJzaW9uQXNhckZpbGVOYW1lLFxuICBwYXJzZVZlcnNpb25TcGVjLFxuICByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24ubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgcmVxdWlyZWQgdG8gZmV0Y2ggYXNhciBwYWNrYWdlcyBmcm9tXG4gKiBgcmVsZWFzZXMub2JzaWRpYW4ubWRgICh0aGUgZW5kcG9pbnQgaXMgQ2xvdWRmbGFyZS1nYXRlZCBhZ2FpbnN0IG5vbi1icm93c2VyXG4gKiBjbGllbnRzKS4gTWF0Y2hlcyB0aGUgVUEgZG9jdW1lbnRlZCBpbiB0aGUgb2JzaWRpYW4tdmVyc2lvbnMgcmVwby5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipwdWJsaWMqKiAoc3RhYmxlKSByZWxlYXNlIGFzYXJzLCBwdWJsaXNoZWQgYXMgR2l0SHViIHJlbGVhc2VcbiAqIGFzc2V0cyB1bmRlciBgLi4uL2Rvd25sb2FkL3Y8dmVyc2lvbj4vb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLlxuICovXG5jb25zdCBQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipjYXRhbHlzdCoqIChlYXJseSBhY2Nlc3MgLyBpbnNpZGVyKSByZWxlYXNlIGFzYXJzLCBzZXJ2ZWQgZnJvbVxuICogdGhlIE9ic2lkaWFuIENETiBhcyBgLi4uL3JlbGVhc2Uvb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLiBQdWJsaWMgdmVyc2lvbnNcbiAqIGFyZSBOT1QgaG9zdGVkIGhlcmUgKHRoZSBDRE4gcmV0dXJucyBhbiBlbXB0eSBib2R5IGZvciB0aGVtKS5cbiAqL1xuY29uc3QgQ0FUQUxZU1RfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vcmVsZWFzZXMub2JzaWRpYW4ubWQvcmVsZWFzZSc7XG5cbmNvbnN0IENBQ0hFX1JPT1QgPSBqb2luKHRtcGRpcigpLCAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycpO1xuY29uc3QgQVNBUl9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdhc2FyLWNhY2hlJyk7XG5jb25zdCBBU0FSX0ZJTEVfUEFUVEVSTiA9IC9eb2JzaWRpYW4tKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspXFwuYXNhciQvO1xuXG4vKipcbiAqIEEgZGlzY292ZXJlZCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJlZEFzYXIge1xuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgYXNhciBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYHgueS56YCB2ZXJzaW9uIHBhcnNlZCBmcm9tIHRoZSBmaWxlIG5hbWUuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29waWVzIGFuIGFzYXIgZmlsZSBpbnRvIGEgdXNlci1kYXRhIGRpcmVjdG9yeSB1bmRlciBpdHMgY2Fub25pY2FsXG4gKiBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIG5hbWUuXG4gKlxuICogQHBhcmFtIGFzYXJQYXRoIC0gU291cmNlIGFzYXIgcGF0aC5cbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGFzYXIncyB2ZXJzaW9uICh1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gZmlsZSBuYW1lKS5cbiAqIEBwYXJhbSB1c2VyRGF0YURpcmVjdG9yeSAtIERlc3RpbmF0aW9uIHVzZXItZGF0YSBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5QXNhckludG9Vc2VyRGF0YShhc2FyUGF0aDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHVzZXJEYXRhRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgbWtkaXJTeW5jKHVzZXJEYXRhRGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgZGVzdGluYXRpb24gPSBqb2luKHVzZXJEYXRhRGlyZWN0b3J5LCBnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pKTtcbiAgY29weUZpbGVTeW5jKGFzYXJQYXRoLCBkZXN0aW5hdGlvbik7XG4gIGxvZyhgW3ZlcnNpb24tc3dpdGNoXSBQcm92aXNpb25lZCAke2dldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbil9IGludG8gJHt1c2VyRGF0YURpcmVjdG9yeX0uYCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgYXNhciBmb3IgYSBjb25jcmV0ZSB2ZXJzaW9uIGlzIHByZXNlbnQgaW4gdGhlIGxvY2FsIGNhY2hlLFxuICogZG93bmxvYWRpbmcgYW5kIGRlY29tcHJlc3NpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY2FjaGVkIGFzYXIuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBkb3dubG9hZCBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFzYXJDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbWtkaXJTeW5jKEFTQVJfQ0FDSEVfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgY2FjaGVkUGF0aCA9IGdldENhY2hlZEFzYXJQYXRoKHZlcnNpb24pO1xuICBpZiAoZXhpc3RzU3luYyhjYWNoZWRQYXRoKSkge1xuICAgIGxvZyhgW3ZlcnNpb24tc3dpdGNoXSBVc2luZyBjYWNoZWQgYXNhciBmb3IgJHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gY2FjaGVkUGF0aDtcbiAgfVxuXG4gIC8vIEEgdmVyc2lvbidzIGFzYXIuZ3ogbGl2ZXMgb24gZXhhY3RseSBvbmUgaG9zdCBkZXBlbmRpbmcgb24gaXRzIGNoYW5uZWxcbiAgLy8gKHB1YmxpYyBcdTIxOTIgR2l0SHViIHJlbGVhc2UgYXNzZXRzLCBjYXRhbHlzdCBcdTIxOTIgdGhlIE9ic2lkaWFuIENETikuIFRoZSBjb25jcmV0ZVxuICAvLyBWZXJzaW9uIGFsb25lIGRvZXMgbm90IHRlbGwgdXMgd2hpY2gsIHNvIHRyeSBib3RoIGFuZCB1c2UgdGhlIGZpcnN0IHRoYXRcbiAgLy8gUmV0dXJucyBhIHZhbGlkIGFyY2hpdmUuXG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgZ2V0QXNhckRvd25sb2FkVXJscyh2ZXJzaW9uKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhc2FyID0gYXdhaXQgZG93bmxvYWRBbmREZWNvbXByZXNzQXNhcih1cmwpO1xuICAgICAgd3JpdGVGaWxlU3luYyhjYWNoZWRQYXRoLCBhc2FyKTtcbiAgICAgIGxvZyhgW3ZlcnNpb24tc3dpdGNoXSBDYWNoZWQgYXNhciAke3ZlcnNpb259ICgke1N0cmluZyhhc2FyLmxlbmd0aCl9IGJ5dGVzKSAtPiAke2NhY2hlZFBhdGh9YCk7XG4gICAgICByZXR1cm4gY2FjaGVkUGF0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goYCR7dXJsfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZG93bmxvYWQgT2JzaWRpYW4gYXNhciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX1gKTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGFuZCBwYXJzZXMgT2JzaWRpYW4ncyBkZXNrdG9wIHJlbGVhc2VzIG1hbmlmZXN0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgbWFuaWZlc3QuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBtYW5pZmVzdCBjYW5ub3QgYmUgZmV0Y2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoRGVza3RvcFJlbGVhc2VzTWFuaWZlc3QoKTogUHJvbWlzZTxEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMKTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3Q6IEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIERlc2t0b3BSZWxlYXNlc01hbmlmZXN0O1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBuZXdlc3QgYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBpbiBhIGRpcmVjdG9yeS5cbiAqXG4gKiBAcGFyYW0gZGlyZWN0b3J5IC0gVGhlIGRpcmVjdG9yeSB0byBzY2FuIChlLmcuIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnIGRpcmVjdG9yeSkuXG4gKiBAcmV0dXJucyBUaGUgbmV3ZXN0IGRpc2NvdmVyZWQgYXNhciwgb3IgYHVuZGVmaW5lZGAgaWYgbm9uZSAvIHRoZSBkaXJlY3RvcnkgaXMgdW5yZWFkYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXdlc3RBc2FyKGRpcmVjdG9yeTogc3RyaW5nKTogRGlzY292ZXJlZEFzYXIgfCB1bmRlZmluZWQge1xuICBsZXQgZW50cmllczogc3RyaW5nW107XG4gIHRyeSB7XG4gICAgZW50cmllcyA9IHJlYWRkaXJTeW5jKGRpcmVjdG9yeSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgbmV3ZXN0OiBEaXNjb3ZlcmVkQXNhciB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBBU0FSX0ZJTEVfUEFUVEVSTi5leGVjKGVudHJ5KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbiA9IG1hdGNoLmdyb3Vwcz8uWyd2ZXJzaW9uJ10gPz8gJyc7XG4gICAgaWYgKCFuZXdlc3QgfHwgY29tcGFyZVZlcnNpb25zKHZlcnNpb24sIG5ld2VzdC52ZXJzaW9uKSA+IDApIHtcbiAgICAgIG5ld2VzdCA9IHsgcGF0aDogam9pbihkaXJlY3RvcnksIGVudHJ5KSwgdmVyc2lvbiB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3ZXN0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxvY2FsIGNhY2hlIHBhdGggZm9yIGEgY29uY3JldGUgdmVyc2lvbidzIGFzYXIgKHRoZSBmaWxlIG1heSBub3RcbiAqIHlldCBleGlzdCkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRoZSBhc2FyIGlzIGNhY2hlZCBhdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlZEFzYXJQYXRoKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKEFTQVJfQ0FDSEVfRElSLCBnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIHZlcnNpb24gc3BlY2lmaWVyIChleHBsaWNpdCBvciBjaGFubmVsIGFsaWFzKSB0byBhIGNvbmNyZXRlXG4gKiBgeC55LnpgIHZlcnNpb24sIGZldGNoaW5nIHRoZSBtYW5pZmVzdCBvbmx5IHdoZW4gYSBjaGFubmVsIGFsaWFzIGlzIHVzZWQuXG4gKlxuICogQHBhcmFtIHNwZWMgLSBUaGUgdmVyc2lvbiBzcGVjaWZpZXIuXG4gKiBAcmV0dXJucyBUaGUgY29uY3JldGUgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDb25jcmV0ZVZlcnNpb24oc3BlYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VWZXJzaW9uU3BlYyhzcGVjKTtcbiAgaWYgKHBhcnNlZC5raW5kID09PSAnZXhwbGljaXQnKSB7XG4gICAgcmV0dXJuIHBhcnNlZC52ZXJzaW9uO1xuICB9XG4gIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgZmV0Y2hEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCgpO1xuICByZXR1cm4gcmVzb2x2ZVZlcnNpb25Gcm9tTWFuaWZlc3QobWFuaWZlc3QsIHBhcnNlZC5jaGFubmVsKTtcbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBnemlwLWNvbXByZXNzZWQgYXNhciBmcm9tIGEgVVJMIGFuZCBkZWNvbXByZXNzZXMgaXQuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBgLmFzYXIuZ3pgIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBkZWNvbXByZXNzZWQgYXNhciBieXRlcy5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMsIHRoZSBib2R5IGlzIGVtcHR5LCBvciBkZWNvbXByZXNzaW9uIGZhaWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFuZERlY29tcHJlc3NBc2FyKHVybDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIERvd25sb2FkaW5nIGFzYXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuXG4gIGNvbnN0IGd6ID0gQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG4gIGlmIChnei5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VtcHR5IHJlc3BvbnNlIGJvZHknKTtcbiAgfVxuICByZXR1cm4gZ3VuemlwU3luYyhneik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FuZGlkYXRlIGAuYXNhci5nemAgZG93bmxvYWQgVVJMcyBmb3IgYSBjb25jcmV0ZSB2ZXJzaW9uLlxuICpcbiAqIFRoZSB2ZXJzaW9uJ3MgZXhhY3QgVVJMIGJha2VkIGludG8gdGhlIGBtZXRhZGF0YS5qc29uYCBjYXRhbG9nIChmcm9tIHVwc3RyZWFtXG4gKiBgb2JzaWRpYW4tdmVyc2lvbnMuanNvbmApIGlzIHRyaWVkIGZpcnN0IHdoZW4gcHJlc2VudDsgdGhlIGhhbmQtcm9sbGVkIHB1YmxpY1xuICogKEdpdEh1YikgYW5kIGNhdGFseXN0IChDRE4pIGd1ZXNzZXMgZm9sbG93IGFzIGEgZmFsbGJhY2sgZm9yIHZlcnNpb25zIGFic2VudFxuICogZnJvbSB0aGUgY2F0YWxvZyAob3IgYSBzdGFsZSBjYXRhbG9nKS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIFVSTHMgdG8gdHJ5LCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gZ2V0QXNhckRvd25sb2FkVXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFzYXJHekZpbGVOYW1lID0gYCR7Z2V0VmVyc2lvbkFzYXJGaWxlTmFtZSh2ZXJzaW9uKX0uZ3pgO1xuICBjb25zdCBmYWxsYmFja1VybHMgPSBbXG4gICAgYCR7UFVCTElDX0FTQVJfUkVMRUFTRV9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHthc2FyR3pGaWxlTmFtZX1gLFxuICAgIGAke0NBVEFMWVNUX0FTQVJfUkVMRUFTRV9CQVNFX1VSTH0vJHthc2FyR3pGaWxlTmFtZX1gXG4gIF07XG5cbiAgY29uc3QgYmFrZWRVcmwgPSBnZXRWZXJzaW9uTWV0YWRhdGEodmVyc2lvbik/LmRvd25sb2Fkcz8uYXNhcjtcbiAgcmV0dXJuIGJha2VkVXJsID8gW2Jha2VkVXJsLCAuLi5mYWxsYmFja1VybHNdIDogZmFsbGJhY2tVcmxzO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBZ0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsWUFBWTtBQUNyQixTQUFTLGtCQUFrQjtBQUkzQixTQUFTLFdBQVc7QUFDcEIsU0FBUywwQkFBMEI7QUFDbkM7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
|
|
@@ -28,16 +28,22 @@ export declare const DESKTOP_RELEASES_MANIFEST_URL = "https://raw.githubusercont
|
|
|
28
28
|
* A version specifier resolved against a release channel.
|
|
29
29
|
*/
|
|
30
30
|
export interface ChannelVersionSpec {
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
The channel to resolve against the manifest.
|
|
33
|
+
*/
|
|
32
34
|
readonly channel: ReleaseChannel;
|
|
33
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
Discriminant.
|
|
37
|
+
*/
|
|
34
38
|
readonly kind: 'channel';
|
|
35
39
|
}
|
|
36
40
|
/**
|
|
37
41
|
* The `beta` (catalyst) entry of {@link DesktopReleasesManifest}.
|
|
38
42
|
*/
|
|
39
43
|
export interface DesktopReleasesBeta {
|
|
40
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
The latest catalyst version, e.g. `'1.13.1'`.
|
|
46
|
+
*/
|
|
41
47
|
readonly latestVersion: string;
|
|
42
48
|
}
|
|
43
49
|
/**
|
|
@@ -57,9 +63,13 @@ export interface DesktopReleasesManifest {
|
|
|
57
63
|
* A version specifier naming a concrete `x.y.z` version.
|
|
58
64
|
*/
|
|
59
65
|
export interface ExplicitVersionSpec {
|
|
60
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
Discriminant.
|
|
68
|
+
*/
|
|
61
69
|
readonly kind: 'explicit';
|
|
62
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
The concrete `x.y.z` version.
|
|
72
|
+
*/
|
|
63
73
|
readonly version: string;
|
|
64
74
|
}
|
|
65
75
|
/**
|
|
@@ -6,8 +6,8 @@ const VERSION_SEGMENT_COUNT = 3;
|
|
|
6
6
|
function compareVersions(a, b) {
|
|
7
7
|
const aSegments = parseVersionSegments(a);
|
|
8
8
|
const bSegments = parseVersionSegments(b);
|
|
9
|
-
for (let
|
|
10
|
-
const diff = (aSegments[
|
|
9
|
+
for (let index = 0; index < VERSION_SEGMENT_COUNT; index++) {
|
|
10
|
+
const diff = (aSegments[index] ?? 0) - (bSegments[index] ?? 0);
|
|
11
11
|
if (diff !== 0) {
|
|
12
12
|
return diff;
|
|
13
13
|
}
|
|
@@ -52,4 +52,4 @@ export {
|
|
|
52
52
|
parseVersionSpec,
|
|
53
53
|
resolveVersionFromManifest
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLXZlcnNpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIHJlc29sdmluZyBPYnNpZGlhbiBkZXNrdG9wIHZlcnNpb24gc3BlY2lmaWVycy5cbiAqXG4gKiBBIHZlcnNpb24gc3BlY2lmaWVyIGlzIGVpdGhlciBhbiBleHBsaWNpdCBgeC55LnpgIHN0cmluZyBvciBvbmUgb2YgdGhlXG4gKiBjaGFubmVsIGFsaWFzZXMge0BsaW5rIFBVQkxJQ19MQVRFU1R9IC8ge0BsaW5rIENBVEFMWVNUX0xBVEVTVH0sIHdoaWNoIHJlc29sdmVcbiAqIGFnYWluc3QgT2JzaWRpYW4ncyBwdWJsaXNoZWQgZGVza3RvcCByZWxlYXNlcyBtYW5pZmVzdC5cbiAqXG4gKiBUaGUgbmV0d29yayBjYWxsIHRoYXQgZmV0Y2hlcyB0aGUgbWFuaWZlc3QgbGl2ZXMgaW4gdGhlIGludGVncmF0aW9uLXRpbWVcbiAqIHZlcnNpb24tc3dpdGNoIG1vZHVsZTsgZXZlcnl0aGluZyBoZXJlIGlzIHB1cmUgYW5kIHVuaXQtdGVzdGVkLlxuICovXG5cbi8qKlxuICogVmVyc2lvbiBzcGVjaWZpZXIgYWxpYXMgcmVzb2x2aW5nIHRvIHRoZSBsYXRlc3QgKipwdWJsaWMqKiBkZXNrdG9wIHJlbGVhc2VcbiAqICh0aGUgbWFuaWZlc3QncyBgbGF0ZXN0VmVyc2lvbmApLlxuICovXG5leHBvcnQgY29uc3QgUFVCTElDX0xBVEVTVCA9ICdwdWJsaWMtbGF0ZXN0JztcblxuLyoqXG4gKiBWZXJzaW9uIHNwZWNpZmllciBhbGlhcyByZXNvbHZpbmcgdG8gdGhlIGxhdGVzdCAqKmNhdGFseXN0KiogKGVhcmx5IGFjY2VzcyAvXG4gKiBpbnNpZGVyKSBkZXNrdG9wIHJlbGVhc2UgKHRoZSBtYW5pZmVzdCdzIGBiZXRhLmxhdGVzdFZlcnNpb25gKS5cbiAqL1xuZXhwb3J0IGNvbnN0IENBVEFMWVNUX0xBVEVTVCA9ICdjYXRhbHlzdC1sYXRlc3QnO1xuXG4vKipcbiAqIFVSTCBvZiBPYnNpZGlhbidzIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3QgKHJhdyBKU09OKS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL21hc3Rlci9kZXNrdG9wLXJlbGVhc2VzLmpzb24nO1xuXG5jb25zdCBFWFBMSUNJVF9WRVJTSU9OX1BBVFRFUk4gPSAvXlxcZCtcXC5cXGQrXFwuXFxkKyQvO1xuY29uc3QgVkVSU0lPTl9TRUdNRU5UX0NPVU5UID0gMztcblxuLyoqXG4gKiBBIHZlcnNpb24gc3BlY2lmaWVyIHJlc29sdmVkIGFnYWluc3QgYSByZWxlYXNlIGNoYW5uZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbFZlcnNpb25TcGVjIHtcbiAgLyoqXG4gIFRoZSBjaGFubmVsIHRvIHJlc29sdmUgYWdhaW5zdCB0aGUgbWFuaWZlc3QuXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsOiBSZWxlYXNlQ2hhbm5lbDtcblxuICAvKipcbiAgRGlzY3JpbWluYW50LlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogJ2NoYW5uZWwnO1xufVxuXG4vKipcbiAqIFRoZSBgYmV0YWAgKGNhdGFseXN0KSBlbnRyeSBvZiB7QGxpbmsgRGVza3RvcFJlbGVhc2VzTWFuaWZlc3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlc2t0b3BSZWxlYXNlc0JldGEge1xuICAvKipcbiAgVGhlIGxhdGVzdCBjYXRhbHlzdCB2ZXJzaW9uLCBlLmcuIGAnMS4xMy4xJ2AuXG4gICAqL1xuICByZWFkb25seSBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBPYnNpZGlhbidzIGBkZXNrdG9wLXJlbGVhc2VzLmpzb25gIHRoaXMgbGlicmFyeSByZWFkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGNhdGFseXN0IChlYXJseSBhY2Nlc3MgLyBpbnNpZGVyKSByZWxlYXNlLCB3aGVuIHByZXNlbnQuXG4gICAqL1xuICByZWFkb25seSBiZXRhPzogRGVza3RvcFJlbGVhc2VzQmV0YTtcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBwdWJsaWMgKHN0YWJsZSkgdmVyc2lvbiwgZS5nLiBgJzEuMTIuNydgLlxuICAgKi9cbiAgcmVhZG9ubHkgbGF0ZXN0VmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgdmVyc2lvbiBzcGVjaWZpZXIgbmFtaW5nIGEgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxpY2l0VmVyc2lvblNwZWMge1xuICAvKipcbiAgRGlzY3JpbWluYW50LlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogJ2V4cGxpY2l0JztcblxuICAvKipcbiAgVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJlbGVhc2UgY2hhbm5lbCByZXNvbHZlZCBmcm9tIGEgY2hhbm5lbC1hbGlhcyBzcGVjaWZpZXIuXG4gKlxuICogLSBgcHVibGljYCBcdTIwMTQgdGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZS5cbiAqIC0gYGNhdGFseXN0YCBcdTIwMTQgdGhlIGxhdGVzdCBlYXJseSBhY2Nlc3MgLyBpbnNpZGVyIHJlbGVhc2UuXG4gKi9cbmV4cG9ydCB0eXBlIFJlbGVhc2VDaGFubmVsID0gJ2NhdGFseXN0JyB8ICdwdWJsaWMnO1xuXG4vKipcbiAqIFRoZSBwYXJzZWQgZm9ybSBvZiBhIHZlcnNpb24gc3BlY2lmaWVyLlxuICpcbiAqIC0gYGV4cGxpY2l0YCBcdTIwMTQgYSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiAtIGBjaGFubmVsYCBcdTIwMTQgYSBjaGFubmVsIGFsaWFzIHRvIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIG1hbmlmZXN0LlxuICovXG5leHBvcnQgdHlwZSBWZXJzaW9uU3BlYyA9IENoYW5uZWxWZXJzaW9uU3BlYyB8IEV4cGxpY2l0VmVyc2lvblNwZWM7XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIGB4LnkuemAgdmVyc2lvbiBzdHJpbmdzIG51bWVyaWNhbGx5LCBzZWdtZW50IGJ5IHNlZ21lbnQuXG4gKlxuICogQHBhcmFtIGEgLSBUaGUgZmlyc3QgdmVyc2lvbi5cbiAqIEBwYXJhbSBiIC0gVGhlIHNlY29uZCB2ZXJzaW9uLlxuICogQHJldHVybnMgQSBuZWdhdGl2ZSBudW1iZXIgaWYgYGEgPCBiYCwgYDBgIGlmIGVxdWFsLCBhIHBvc2l0aXZlIG51bWJlciBpZiBgYSA+IGJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgYVNlZ21lbnRzID0gcGFyc2VWZXJzaW9uU2VnbWVudHMoYSk7XG4gIGNvbnN0IGJTZWdtZW50cyA9IHBhcnNlVmVyc2lvblNlZ21lbnRzKGIpO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWRVJTSU9OX1NFR01FTlRfQ09VTlQ7IGluZGV4KyspIHtcbiAgICBjb25zdCBkaWZmID0gKGFTZWdtZW50c1tpbmRleF0gPz8gMCkgLSAoYlNlZ21lbnRzW2luZGV4XSA/PyAwKTtcbiAgICBpZiAoZGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdXNlci1kYXRhIGFzYXIgZmlsZSBuYW1lIGZvciBhIGdpdmVuIHZlcnNpb24sIG1hdGNoaW5nIHRoZSBuYW1lXG4gKiBPYnNpZGlhbiBpdHNlbGYgdXNlcyB3aGVuIGl0IGRvd25sb2FkcyBhbiB1cGRhdGUgKGBvYnNpZGlhbi08dmVyc2lvbj4uYXNhcmApLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYXNhciBmaWxlIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgb2JzaWRpYW4tJHt2ZXJzaW9ufS5hc2FyYDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSB2ZXJzaW9uIHNwZWNpZmllciBpbnRvIGVpdGhlciBhbiBleHBsaWNpdCB2ZXJzaW9uIG9yIGEgY2hhbm5lbCBhbGlhcy5cbiAqXG4gKiBAcGFyYW0gc3BlYyAtIFRoZSBzcGVjaWZpZXI6IGFuIGB4LnkuemAgc3RyaW5nLCB7QGxpbmsgUFVCTElDX0xBVEVTVH0sIG9yIHtAbGluayBDQVRBTFlTVF9MQVRFU1R9LlxuICogQHJldHVybnMgVGhlIHBhcnNlZCB7QGxpbmsgVmVyc2lvblNwZWN9LlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgc3BlY2lmaWVyIGlzIG5laXRoZXIgYSB2YWxpZCBgeC55LnpgIHZlcnNpb24gbm9yIGEga25vd24gYWxpYXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZlcnNpb25TcGVjKHNwZWM6IHN0cmluZyk6IFZlcnNpb25TcGVjIHtcbiAgaWYgKHNwZWMgPT09IFBVQkxJQ19MQVRFU1QpIHtcbiAgICByZXR1cm4geyBjaGFubmVsOiAncHVibGljJywga2luZDogJ2NoYW5uZWwnIH07XG4gIH1cblxuICBpZiAoc3BlYyA9PT0gQ0FUQUxZU1RfTEFURVNUKSB7XG4gICAgcmV0dXJuIHsgY2hhbm5lbDogJ2NhdGFseXN0Jywga2luZDogJ2NoYW5uZWwnIH07XG4gIH1cblxuICBpZiAoRVhQTElDSVRfVkVSU0lPTl9QQVRURVJOLnRlc3Qoc3BlYykpIHtcbiAgICByZXR1cm4geyBraW5kOiAnZXhwbGljaXQnLCB2ZXJzaW9uOiBzcGVjIH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYEludmFsaWQgT2JzaWRpYW4gdmVyc2lvbiBcIiR7c3BlY31cIi4gRXhwZWN0ZWQgYW4gXCJ4LnkuelwiIHZlcnNpb24sIFwiJHtQVUJMSUNfTEFURVNUfVwiLCBvciBcIiR7Q0FUQUxZU1RfTEFURVNUfVwiLmBcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIGNoYW5uZWwgdG8gYSBjb25jcmV0ZSB2ZXJzaW9uIHVzaW5nIGEgZGVza3RvcCByZWxlYXNlcyBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3QgLSBUaGUgcGFyc2VkIG1hbmlmZXN0LlxuICogQHBhcmFtIGNoYW5uZWwgLSBUaGUgY2hhbm5lbCB0byByZXNvbHZlLlxuICogQHJldHVybnMgVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbiBmb3IgdGhlIGNoYW5uZWwuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBjYXRhbHlzdCBjaGFubmVsIGlzIHJlcXVlc3RlZCBidXQgdGhlIG1hbmlmZXN0IGhhcyBubyBgYmV0YWAgZW50cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdChtYW5pZmVzdDogRGVza3RvcFJlbGVhc2VzTWFuaWZlc3QsIGNoYW5uZWw6IFJlbGVhc2VDaGFubmVsKTogc3RyaW5nIHtcbiAgaWYgKGNoYW5uZWwgPT09ICdwdWJsaWMnKSB7XG4gICAgcmV0dXJuIG1hbmlmZXN0LmxhdGVzdFZlcnNpb247XG4gIH1cblxuICBpZiAoIW1hbmlmZXN0LmJldGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3QgaGFzIG5vIGNhdGFseXN0IChiZXRhKSByZWxlYXNlLicpO1xuICB9XG5cbiAgcmV0dXJuIG1hbmlmZXN0LmJldGEubGF0ZXN0VmVyc2lvbjtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYW4gYHgueS56YCB2ZXJzaW9uIGludG8gaXRzIG51bWVyaWMgc2VnbWVudHMuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgdmVyc2lvbiBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgbnVtZXJpYyBzZWdtZW50cy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VWZXJzaW9uU2VnbWVudHModmVyc2lvbjogc3RyaW5nKTogbnVtYmVyW10ge1xuICByZXR1cm4gdmVyc2lvbi5zcGxpdCgnLicpLm1hcCgoc2VnbWVudCkgPT4gTnVtYmVyLnBhcnNlSW50KHNlZ21lbnQsIDEwKSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFpQk8sTUFBTSxnQkFBZ0I7QUFNdEIsTUFBTSxrQkFBa0I7QUFLeEIsTUFBTSxnQ0FBZ0M7QUFFN0MsTUFBTSwyQkFBMkI7QUFDakMsTUFBTSx3QkFBd0I7QUFnRnZCLFNBQVMsZ0JBQWdCLEdBQVcsR0FBbUI7QUFDNUQsUUFBTSxZQUFZLHFCQUFxQixDQUFDO0FBQ3hDLFFBQU0sWUFBWSxxQkFBcUIsQ0FBQztBQUV4QyxXQUFTLFFBQVEsR0FBRyxRQUFRLHVCQUF1QixTQUFTO0FBQzFELFVBQU0sUUFBUSxVQUFVLEtBQUssS0FBSyxNQUFNLFVBQVUsS0FBSyxLQUFLO0FBQzVELFFBQUksU0FBUyxHQUFHO0FBQ2QsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBU08sU0FBUyx1QkFBdUIsU0FBeUI7QUFDOUQsU0FBTyxZQUFZLE9BQU87QUFDNUI7QUFTTyxTQUFTLGlCQUFpQixNQUEyQjtBQUMxRCxNQUFJLFNBQVMsZUFBZTtBQUMxQixXQUFPLEVBQUUsU0FBUyxVQUFVLE1BQU0sVUFBVTtBQUFBLEVBQzlDO0FBRUEsTUFBSSxTQUFTLGlCQUFpQjtBQUM1QixXQUFPLEVBQUUsU0FBUyxZQUFZLE1BQU0sVUFBVTtBQUFBLEVBQ2hEO0FBRUEsTUFBSSx5QkFBeUIsS0FBSyxJQUFJLEdBQUc7QUFDdkMsV0FBTyxFQUFFLE1BQU0sWUFBWSxTQUFTLEtBQUs7QUFBQSxFQUMzQztBQUVBLFFBQU0sSUFBSTtBQUFBLElBQ1IsNkJBQTZCLElBQUksb0NBQW9DLGFBQWEsVUFBVSxlQUFlO0FBQUEsRUFDN0c7QUFDRjtBQVVPLFNBQVMsMkJBQTJCLFVBQW1DLFNBQWlDO0FBQzdHLE1BQUksWUFBWSxVQUFVO0FBQ3hCLFdBQU8sU0FBUztBQUFBLEVBQ2xCO0FBRUEsTUFBSSxDQUFDLFNBQVMsTUFBTTtBQUNsQixVQUFNLElBQUksTUFBTSwyREFBMkQ7QUFBQSxFQUM3RTtBQUVBLFNBQU8sU0FBUyxLQUFLO0FBQ3ZCO0FBUUEsU0FBUyxxQkFBcUIsU0FBMkI7QUFDdkQsU0FBTyxRQUFRLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLE9BQU8sU0FBUyxTQUFTLEVBQUUsQ0FBQztBQUN6RTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -24,11 +24,17 @@
|
|
|
24
24
|
* Parameters for {@link buildOwnedObsidianJson}.
|
|
25
25
|
*/
|
|
26
26
|
export interface BuildOwnedObsidianJsonParams {
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
Last-access timestamp to stamp on the vault entry.
|
|
29
|
+
*/
|
|
28
30
|
readonly ts: number;
|
|
29
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
The randomly-generated vault id used as the registry key and `last_open`.
|
|
33
|
+
*/
|
|
30
34
|
readonly vaultId: string;
|
|
31
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
Absolute path to the harness vault folder.
|
|
37
|
+
*/
|
|
32
38
|
readonly vaultPath: string;
|
|
33
39
|
}
|
|
34
40
|
/**
|
|
@@ -40,20 +46,30 @@ export interface OwnedObsidianJson {
|
|
|
40
46
|
* ignored as an unknown key by newer versions that use the per-entry `open`.
|
|
41
47
|
*/
|
|
42
48
|
readonly last_open: string;
|
|
43
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
Disables the throwaway instance's self-update.
|
|
51
|
+
*/
|
|
44
52
|
readonly updateDisabled: true;
|
|
45
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
Vault registry keyed by vault id.
|
|
55
|
+
*/
|
|
46
56
|
readonly vaults: Readonly<Record<string, OwnedObsidianVaultEntry>>;
|
|
47
57
|
}
|
|
48
58
|
/**
|
|
49
59
|
* A single vault entry in the seeded `obsidian.json`.
|
|
50
60
|
*/
|
|
51
61
|
export interface OwnedObsidianVaultEntry {
|
|
52
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
Per-entry auto-open flag honored by newer Obsidian versions.
|
|
64
|
+
*/
|
|
53
65
|
readonly open: true;
|
|
54
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
Absolute path to the harness vault folder.
|
|
68
|
+
*/
|
|
55
69
|
readonly path: string;
|
|
56
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
Last-access timestamp.
|
|
72
|
+
*/
|
|
57
73
|
readonly ts: number;
|
|
58
74
|
}
|
|
59
75
|
/**
|
|
@@ -11,4 +11,4 @@ function buildOwnedObsidianJson(params) {
|
|
|
11
11
|
export {
|
|
12
12
|
buildOwnedObsidianJson
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL293bmVkLXZhdWx0LXNlZWQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCdWlsZHMgdGhlIGlzb2xhdGVkIGBvYnNpZGlhbi5qc29uYCB0aGUgaGFybmVzcyBwcmUtc2VlZHMgaW50byBhbiBvd25lZFxuICogaW5zdGFuY2UncyB0ZW1wIGAtLXVzZXItZGF0YS1kaXJgIHNvIE9ic2lkaWFuIG9wZW5zIHRoZSBoYXJuZXNzIHZhdWx0IGRpcmVjdGx5XG4gKiBpbnN0ZWFkIG9mIHNob3dpbmcgdGhlIGZpcnN0LXJ1biB2YXVsdC1zZWxlY3RvciAodGhlIGBzdGFydGVyLXNjcmVlbmApLlxuICpcbiAqIFRoZSBhdXRvLW9wZW4gbWFya2VyIGNoYW5nZWQgYWNyb3NzIE9ic2lkaWFuJ3MgaGlzdG9yeSwgc28gdGhlIHNlZWQgY2Fycmllc1xuICogQk9USCBmb3JtcyBhbmQgZWFjaCB2ZXJzaW9uIHJlYWRzIHRoZSBvbmUgaXQgdW5kZXJzdGFuZHMgKGlnbm9yaW5nIHRoZSBvdGhlclxuICogdW5rbm93biBrZXkpIFx1MjAxNCBubyBwZXItdmVyc2lvbiBicmFuY2hpbmc6XG4gKlxuICogLSAqKk9sZCB2ZXJzaW9ucyoqIChjb25maXJtZWQgMC42LjQpIGF1dG8tb3BlbiBmcm9tIGEgKip0b3AtbGV2ZWwgYGxhc3Rfb3BlbmAqKlxuICogICBob2xkaW5nIHRoZSB2YXVsdCBpZCAoYG1haW4uanNgOiBgaWYgKGlkICYmIHZhdWx0cy5oYXNPd25Qcm9wZXJ0eShpZCkpXG4gKiAgIGNyZWF0ZVdpbmRvdyhpZCk7IGVsc2Ugb3BlblN0YXJ0ZXIoKTtgKSwgYW5kIHN0b3JlIGVhY2ggdmF1bHQgZW50cnkgYXMganVzdFxuICogICBgeyBwYXRoLCB0cyB9YC4gV2l0aG91dCBgbGFzdF9vcGVuYCB0aGV5IGZhbGwgdGhyb3VnaCB0byB0aGUgdmF1bHQtc2VsZWN0b3IuXG4gKiAtICoqTmV3ZXIgdmVyc2lvbnMqKiAoY29uZmlybWVkIDAuMTQuNSspIGRyb3BwZWQgYGxhc3Rfb3BlbmAgYW5kIGF1dG8tb3BlbiBmcm9tXG4gKiAgIHRoZSBwZXItZW50cnkgKipgb3BlbjogdHJ1ZWAqKiBmbGFnLlxuICpcbiAqIFNlZWRpbmcgYm90aCB3YXMgdmVyaWZpZWQgdG8gb3BlbiB0aGUgdmF1bHQgZGlyZWN0bHkgKG5vIHNlbGVjdG9yKSBvbiAwLjYuNCxcbiAqIDAuOS4yMCwgMC4xMi4xOSwgMC4xMy4xOSwgMC4xNC41IGFuZCAxLjEyLjcuIGB1cGRhdGVEaXNhYmxlZGAgc3VwcHJlc3NlcyB0aGVcbiAqIHRocm93YXdheSBpbnN0YW5jZSdzIHNlbGYtdXBkYXRlLlxuICovXG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkT3duZWRPYnNpZGlhbkpzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkT3duZWRPYnNpZGlhbkpzb25QYXJhbXMge1xuICAvKipcbiAgTGFzdC1hY2Nlc3MgdGltZXN0YW1wIHRvIHN0YW1wIG9uIHRoZSB2YXVsdCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IHRzOiBudW1iZXI7XG5cbiAgLyoqXG4gIFRoZSByYW5kb21seS1nZW5lcmF0ZWQgdmF1bHQgaWQgdXNlZCBhcyB0aGUgcmVnaXN0cnkga2V5IGFuZCBgbGFzdF9vcGVuYC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0SWQ6IHN0cmluZztcblxuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgaGFybmVzcyB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSB2YXVsdFBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgYG9ic2lkaWFuLmpzb25gIHN0cnVjdHVyZSB0aGUgaGFybmVzcyBzZWVkcyBmb3IgYW4gb3duZWQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3duZWRPYnNpZGlhbkpzb24ge1xuICAvKipcbiAgICogVG9wLWxldmVsIGF1dG8tb3BlbiBtYXJrZXIgKHZhdWx0IGlkKSBob25vcmVkIGJ5IG9sZCBPYnNpZGlhbiB2ZXJzaW9ucztcbiAgICogaWdub3JlZCBhcyBhbiB1bmtub3duIGtleSBieSBuZXdlciB2ZXJzaW9ucyB0aGF0IHVzZSB0aGUgcGVyLWVudHJ5IGBvcGVuYC5cbiAgICovXG4gIHJlYWRvbmx5IGxhc3Rfb3Blbjogc3RyaW5nO1xuXG4gIC8qKlxuICBEaXNhYmxlcyB0aGUgdGhyb3dhd2F5IGluc3RhbmNlJ3Mgc2VsZi11cGRhdGUuXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVEaXNhYmxlZDogdHJ1ZTtcblxuICAvKipcbiAgVmF1bHQgcmVnaXN0cnkga2V5ZWQgYnkgdmF1bHQgaWQuXG4gICAqL1xuICByZWFkb25seSB2YXVsdHM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIE93bmVkT2JzaWRpYW5WYXVsdEVudHJ5Pj47XG59XG5cbi8qKlxuICogQSBzaW5nbGUgdmF1bHQgZW50cnkgaW4gdGhlIHNlZWRlZCBgb2JzaWRpYW4uanNvbmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3duZWRPYnNpZGlhblZhdWx0RW50cnkge1xuICAvKipcbiAgUGVyLWVudHJ5IGF1dG8tb3BlbiBmbGFnIGhvbm9yZWQgYnkgbmV3ZXIgT2JzaWRpYW4gdmVyc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBvcGVuOiB0cnVlO1xuXG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBoYXJuZXNzIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgTGFzdC1hY2Nlc3MgdGltZXN0YW1wLlxuICAgKi9cbiAgcmVhZG9ubHkgdHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGlzb2xhdGVkIGBvYnNpZGlhbi5qc29uYCB0aGF0IGZvcmNlLW9wZW5zIHRoZSBvd25lZCB2YXVsdCBhY3Jvc3MgYWxsXG4gKiBzdXBwb3J0ZWQgT2JzaWRpYW4gdmVyc2lvbnMgKHNlZSB0aGUgZmlsZSBvdmVydmlldyBmb3IgdGhlIGR1YWwtbWFya2VyXG4gKiByYXRpb25hbGUpLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgdmF1bHQgaWQsIHBhdGgsIGFuZCB0aW1lc3RhbXAgdG8gc2VlZC5cbiAqIEByZXR1cm5zIFRoZSBgb2JzaWRpYW4uanNvbmAgb2JqZWN0IHRvIHdyaXRlIGludG8gdGhlIG93bmVkIHVzZXItZGF0YSBkaXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE93bmVkT2JzaWRpYW5Kc29uKHBhcmFtczogQnVpbGRPd25lZE9ic2lkaWFuSnNvblBhcmFtcyk6IE93bmVkT2JzaWRpYW5Kc29uIHtcbiAgcmV0dXJuIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlIC0tIE9ic2lkaWFuJ3Mgb3duIG9ic2lkaWFuLmpzb24gZmllbGQgbmFtZSAob2xkIHZlcnNpb25zJyBhdXRvLW9wZW4gbWFya2VyKS5cbiAgICBsYXN0X29wZW46IHBhcmFtcy52YXVsdElkLFxuICAgIHVwZGF0ZURpc2FibGVkOiB0cnVlLFxuICAgIHZhdWx0czoge1xuICAgICAgW3BhcmFtcy52YXVsdElkXTogeyBvcGVuOiB0cnVlLCBwYXRoOiBwYXJhbXMudmF1bHRQYXRoLCB0czogcGFyYW1zLnRzIH1cbiAgICB9XG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUE0Rk8sU0FBUyx1QkFBdUIsUUFBeUQ7QUFDOUYsU0FBTztBQUFBO0FBQUEsSUFFTCxXQUFXLE9BQU87QUFBQSxJQUNsQixnQkFBZ0I7QUFBQSxJQUNoQixRQUFRO0FBQUEsTUFDTixDQUFDLE9BQU8sT0FBTyxHQUFHLEVBQUUsTUFBTSxNQUFNLE1BQU0sT0FBTyxXQUFXLElBQUksT0FBTyxHQUFHO0FBQUEsSUFDeEU7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Ties a harness-owned Obsidian instance's lifetime to the harness process that
|
|
5
|
+
* launched it, in the one direction the operating system will not do for us.
|
|
6
|
+
*
|
|
7
|
+
* The owned instance is already a child of the harness process, but that link
|
|
8
|
+
* carries no lifetime guarantee. Windows never propagates a parent's death to
|
|
9
|
+
* its children — an orphan simply keeps running with a stale parent id — and on
|
|
10
|
+
* POSIX a `SIGKILL` aimed at a single pid never cascades either. The instance is
|
|
11
|
+
* additionally spawned `detached`, so it is not even in the harness's process
|
|
12
|
+
* group. Teardown therefore relies entirely on the harness running its own
|
|
13
|
+
* cleanup (`killProcessTree` from an `exit`/signal handler), which is exactly
|
|
14
|
+
* what a `SIGKILL`, a Task Manager kill, or an IDE stop button denies it. Every
|
|
15
|
+
* such kill leaks a hidden Obsidian holding a user-data dir and a CDP port, and
|
|
16
|
+
* they accumulate: the next run picks a fresh temp dir and a free port, so
|
|
17
|
+
* nothing collides and nothing complains.
|
|
18
|
+
*
|
|
19
|
+
* The guaranteed fix is an OS primitive — a Windows Job Object with
|
|
20
|
+
* `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE`, or `prctl(PR_SET_PDEATHSIG)` on Linux —
|
|
21
|
+
* but neither is reachable from Node without a native addon, which is far too
|
|
22
|
+
* heavy a dependency for this harness.
|
|
23
|
+
*
|
|
24
|
+
* So we use the one cross-platform resource the kernel *does* reclaim
|
|
25
|
+
* deterministically on process death: a socket. The harness listens on a
|
|
26
|
+
* loopback port and the instance's renderer connects to it. However the harness
|
|
27
|
+
* dies — cleanly, `SIGKILL`ed, or crashed — the kernel closes its end, the
|
|
28
|
+
* renderer sees `close`, and the window destroys itself. No polling, no
|
|
29
|
+
* heartbeat interval, no timeout to tune.
|
|
30
|
+
*
|
|
31
|
+
* Deliberately fail-open: the renderer only arms the destroy handler after the
|
|
32
|
+
* connection is actually established. A watchdog that cannot reach the harness
|
|
33
|
+
* leaves the instance running rather than killing a window the developer is
|
|
34
|
+
* working in.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* A listening loopback server whose accepted connections act as liveness tokens
|
|
38
|
+
* for the harness process.
|
|
39
|
+
*/
|
|
40
|
+
export interface ParentLivenessServer {
|
|
41
|
+
/**
|
|
42
|
+
Stops listening and drops every accepted connection.
|
|
43
|
+
*/
|
|
44
|
+
close(): void;
|
|
45
|
+
/**
|
|
46
|
+
The loopback port the renderer watchdog should connect back to.
|
|
47
|
+
*/
|
|
48
|
+
readonly port: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Loopback host the liveness server binds to. Never exposed off-machine.
|
|
52
|
+
*/
|
|
53
|
+
export declare const PARENT_LIVENESS_HOST = "127.0.0.1";
|
|
54
|
+
/**
|
|
55
|
+
* Builds the expression evaluated in the owned instance's renderer to arm the
|
|
56
|
+
* watchdog.
|
|
57
|
+
*
|
|
58
|
+
* Written in ES5 style (`var`, `function`) with no optional chaining, matching
|
|
59
|
+
* {@link DISMISS_TRUST_DIALOG_EXPR}: the same expression has to parse on the
|
|
60
|
+
* Chromium 80-era renderers of the oldest supported Obsidian versions (L26).
|
|
61
|
+
*
|
|
62
|
+
* Arming is idempotent — a second evaluation finds the stored socket and
|
|
63
|
+
* returns without opening another connection, so a retried readiness pass does
|
|
64
|
+
* not pile up sockets.
|
|
65
|
+
*
|
|
66
|
+
* @param port - The loopback port returned by {@link startParentLivenessServer}.
|
|
67
|
+
* @returns The expression to evaluate, yielding `'armed'`, `'already-armed'`, or `'unavailable'`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function buildParentLivenessWatchdogExpression(port: number): string;
|
|
70
|
+
/**
|
|
71
|
+
* Starts the loopback liveness server the owned instance's renderer connects
|
|
72
|
+
* back to.
|
|
73
|
+
*
|
|
74
|
+
* The server and every accepted socket are `unref`ed, so holding a watchdog
|
|
75
|
+
* connection open never keeps the harness process alive on its own — the
|
|
76
|
+
* connection is a token the kernel reclaims, not work to wait on.
|
|
77
|
+
*
|
|
78
|
+
* @returns A {@link Promise} resolving to the listening {@link ParentLivenessServer}.
|
|
79
|
+
*/
|
|
80
|
+
export declare function startParentLivenessServer(): Promise<ParentLivenessServer>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { createServer } from "node:net";
|
|
2
|
+
const PARENT_LIVENESS_HOST = "127.0.0.1";
|
|
3
|
+
function buildParentLivenessWatchdogExpression(port) {
|
|
4
|
+
return `(function() {
|
|
5
|
+
var FLAG = '__obsidianIntegrationTestingParentLiveness';
|
|
6
|
+
if (window[FLAG]) { return 'already-armed'; }
|
|
7
|
+
var net;
|
|
8
|
+
try {
|
|
9
|
+
net = window.require('node:net');
|
|
10
|
+
} catch (nodePrefixError) {
|
|
11
|
+
try {
|
|
12
|
+
net = window.require('net');
|
|
13
|
+
} catch (barePrefixError) {
|
|
14
|
+
return 'unavailable';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
var socket = net.connect(${String(port)}, '${PARENT_LIVENESS_HOST}');
|
|
18
|
+
window[FLAG] = socket;
|
|
19
|
+
var isConnected = false;
|
|
20
|
+
socket.on('connect', function() { isConnected = true; });
|
|
21
|
+
socket.on('error', function() { /* Handled by the close listener below. */ });
|
|
22
|
+
socket.on('close', function() {
|
|
23
|
+
if (!isConnected) { return; }
|
|
24
|
+
try {
|
|
25
|
+
window.electronWindow.destroy();
|
|
26
|
+
} catch (destroyError) {
|
|
27
|
+
window.close();
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return 'armed';
|
|
31
|
+
})()`;
|
|
32
|
+
}
|
|
33
|
+
async function startParentLivenessServer() {
|
|
34
|
+
const server = createServer((socket) => {
|
|
35
|
+
socket.unref();
|
|
36
|
+
socket.on("error", () => {
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
server.unref();
|
|
40
|
+
const port = await listenOnFreeLoopbackPort(server);
|
|
41
|
+
return {
|
|
42
|
+
close() {
|
|
43
|
+
server.close();
|
|
44
|
+
},
|
|
45
|
+
port
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function listenOnFreeLoopbackPort(server) {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
server.once("error", reject);
|
|
51
|
+
server.listen(0, PARENT_LIVENESS_HOST, () => {
|
|
52
|
+
const address = server.address();
|
|
53
|
+
if (address === null || typeof address === "string") {
|
|
54
|
+
server.close();
|
|
55
|
+
reject(new Error("Failed to determine the parent-liveness port."));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
resolve(address.port);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
PARENT_LIVENESS_HOST,
|
|
64
|
+
buildParentLivenessWatchdogExpression,
|
|
65
|
+
startParentLivenessServer
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3BhcmVudC1saXZlbmVzcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRpZXMgYSBoYXJuZXNzLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlJ3MgbGlmZXRpbWUgdG8gdGhlIGhhcm5lc3MgcHJvY2VzcyB0aGF0XG4gKiBsYXVuY2hlZCBpdCwgaW4gdGhlIG9uZSBkaXJlY3Rpb24gdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBub3QgZG8gZm9yIHVzLlxuICpcbiAqIFRoZSBvd25lZCBpbnN0YW5jZSBpcyBhbHJlYWR5IGEgY2hpbGQgb2YgdGhlIGhhcm5lc3MgcHJvY2VzcywgYnV0IHRoYXQgbGlua1xuICogY2FycmllcyBubyBsaWZldGltZSBndWFyYW50ZWUuIFdpbmRvd3MgbmV2ZXIgcHJvcGFnYXRlcyBhIHBhcmVudCdzIGRlYXRoIHRvXG4gKiBpdHMgY2hpbGRyZW4gXHUyMDE0IGFuIG9ycGhhbiBzaW1wbHkga2VlcHMgcnVubmluZyB3aXRoIGEgc3RhbGUgcGFyZW50IGlkIFx1MjAxNCBhbmQgb25cbiAqIFBPU0lYIGEgYFNJR0tJTExgIGFpbWVkIGF0IGEgc2luZ2xlIHBpZCBuZXZlciBjYXNjYWRlcyBlaXRoZXIuIFRoZSBpbnN0YW5jZSBpc1xuICogYWRkaXRpb25hbGx5IHNwYXduZWQgYGRldGFjaGVkYCwgc28gaXQgaXMgbm90IGV2ZW4gaW4gdGhlIGhhcm5lc3MncyBwcm9jZXNzXG4gKiBncm91cC4gVGVhcmRvd24gdGhlcmVmb3JlIHJlbGllcyBlbnRpcmVseSBvbiB0aGUgaGFybmVzcyBydW5uaW5nIGl0cyBvd25cbiAqIGNsZWFudXAgKGBraWxsUHJvY2Vzc1RyZWVgIGZyb20gYW4gYGV4aXRgL3NpZ25hbCBoYW5kbGVyKSwgd2hpY2ggaXMgZXhhY3RseVxuICogd2hhdCBhIGBTSUdLSUxMYCwgYSBUYXNrIE1hbmFnZXIga2lsbCwgb3IgYW4gSURFIHN0b3AgYnV0dG9uIGRlbmllcyBpdC4gRXZlcnlcbiAqIHN1Y2gga2lsbCBsZWFrcyBhIGhpZGRlbiBPYnNpZGlhbiBob2xkaW5nIGEgdXNlci1kYXRhIGRpciBhbmQgYSBDRFAgcG9ydCwgYW5kXG4gKiB0aGV5IGFjY3VtdWxhdGU6IHRoZSBuZXh0IHJ1biBwaWNrcyBhIGZyZXNoIHRlbXAgZGlyIGFuZCBhIGZyZWUgcG9ydCwgc29cbiAqIG5vdGhpbmcgY29sbGlkZXMgYW5kIG5vdGhpbmcgY29tcGxhaW5zLlxuICpcbiAqIFRoZSBndWFyYW50ZWVkIGZpeCBpcyBhbiBPUyBwcmltaXRpdmUgXHUyMDE0IGEgV2luZG93cyBKb2IgT2JqZWN0IHdpdGhcbiAqIGBKT0JfT0JKRUNUX0xJTUlUX0tJTExfT05fSk9CX0NMT1NFYCwgb3IgYHByY3RsKFBSX1NFVF9QREVBVEhTSUcpYCBvbiBMaW51eCBcdTIwMTRcbiAqIGJ1dCBuZWl0aGVyIGlzIHJlYWNoYWJsZSBmcm9tIE5vZGUgd2l0aG91dCBhIG5hdGl2ZSBhZGRvbiwgd2hpY2ggaXMgZmFyIHRvb1xuICogaGVhdnkgYSBkZXBlbmRlbmN5IGZvciB0aGlzIGhhcm5lc3MuXG4gKlxuICogU28gd2UgdXNlIHRoZSBvbmUgY3Jvc3MtcGxhdGZvcm0gcmVzb3VyY2UgdGhlIGtlcm5lbCAqZG9lcyogcmVjbGFpbVxuICogZGV0ZXJtaW5pc3RpY2FsbHkgb24gcHJvY2VzcyBkZWF0aDogYSBzb2NrZXQuIFRoZSBoYXJuZXNzIGxpc3RlbnMgb24gYVxuICogbG9vcGJhY2sgcG9ydCBhbmQgdGhlIGluc3RhbmNlJ3MgcmVuZGVyZXIgY29ubmVjdHMgdG8gaXQuIEhvd2V2ZXIgdGhlIGhhcm5lc3NcbiAqIGRpZXMgXHUyMDE0IGNsZWFubHksIGBTSUdLSUxMYGVkLCBvciBjcmFzaGVkIFx1MjAxNCB0aGUga2VybmVsIGNsb3NlcyBpdHMgZW5kLCB0aGVcbiAqIHJlbmRlcmVyIHNlZXMgYGNsb3NlYCwgYW5kIHRoZSB3aW5kb3cgZGVzdHJveXMgaXRzZWxmLiBObyBwb2xsaW5nLCBub1xuICogaGVhcnRiZWF0IGludGVydmFsLCBubyB0aW1lb3V0IHRvIHR1bmUuXG4gKlxuICogRGVsaWJlcmF0ZWx5IGZhaWwtb3BlbjogdGhlIHJlbmRlcmVyIG9ubHkgYXJtcyB0aGUgZGVzdHJveSBoYW5kbGVyIGFmdGVyIHRoZVxuICogY29ubmVjdGlvbiBpcyBhY3R1YWxseSBlc3RhYmxpc2hlZC4gQSB3YXRjaGRvZyB0aGF0IGNhbm5vdCByZWFjaCB0aGUgaGFybmVzc1xuICogbGVhdmVzIHRoZSBpbnN0YW5jZSBydW5uaW5nIHJhdGhlciB0aGFuIGtpbGxpbmcgYSB3aW5kb3cgdGhlIGRldmVsb3BlciBpc1xuICogd29ya2luZyBpbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlciB9IGZyb20gJ25vZGU6bmV0JztcblxuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG4vKipcbiAqIEEgbGlzdGVuaW5nIGxvb3BiYWNrIHNlcnZlciB3aG9zZSBhY2NlcHRlZCBjb25uZWN0aW9ucyBhY3QgYXMgbGl2ZW5lc3MgdG9rZW5zXG4gKiBmb3IgdGhlIGhhcm5lc3MgcHJvY2Vzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJlbnRMaXZlbmVzc1NlcnZlciB7XG4gIC8qKlxuICBTdG9wcyBsaXN0ZW5pbmcgYW5kIGRyb3BzIGV2ZXJ5IGFjY2VwdGVkIGNvbm5lY3Rpb24uXG4gICAqL1xuICBjbG9zZSgpOiB2b2lkO1xuXG4gIC8qKlxuICBUaGUgbG9vcGJhY2sgcG9ydCB0aGUgcmVuZGVyZXIgd2F0Y2hkb2cgc2hvdWxkIGNvbm5lY3QgYmFjayB0by5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBMb29wYmFjayBob3N0IHRoZSBsaXZlbmVzcyBzZXJ2ZXIgYmluZHMgdG8uIE5ldmVyIGV4cG9zZWQgb2ZmLW1hY2hpbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBQQVJFTlRfTElWRU5FU1NfSE9TVCA9ICcxMjcuMC4wLjEnO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZWQgaW4gdGhlIG93bmVkIGluc3RhbmNlJ3MgcmVuZGVyZXIgdG8gYXJtIHRoZVxuICogd2F0Y2hkb2cuXG4gKlxuICogV3JpdHRlbiBpbiBFUzUgc3R5bGUgKGB2YXJgLCBgZnVuY3Rpb25gKSB3aXRoIG5vIG9wdGlvbmFsIGNoYWluaW5nLCBtYXRjaGluZ1xuICoge0BsaW5rIERJU01JU1NfVFJVU1RfRElBTE9HX0VYUFJ9OiB0aGUgc2FtZSBleHByZXNzaW9uIGhhcyB0byBwYXJzZSBvbiB0aGVcbiAqIENocm9taXVtIDgwLWVyYSByZW5kZXJlcnMgb2YgdGhlIG9sZGVzdCBzdXBwb3J0ZWQgT2JzaWRpYW4gdmVyc2lvbnMgKEwyNikuXG4gKlxuICogQXJtaW5nIGlzIGlkZW1wb3RlbnQgXHUyMDE0IGEgc2Vjb25kIGV2YWx1YXRpb24gZmluZHMgdGhlIHN0b3JlZCBzb2NrZXQgYW5kXG4gKiByZXR1cm5zIHdpdGhvdXQgb3BlbmluZyBhbm90aGVyIGNvbm5lY3Rpb24sIHNvIGEgcmV0cmllZCByZWFkaW5lc3MgcGFzcyBkb2VzXG4gKiBub3QgcGlsZSB1cCBzb2NrZXRzLlxuICpcbiAqIEBwYXJhbSBwb3J0IC0gVGhlIGxvb3BiYWNrIHBvcnQgcmV0dXJuZWQgYnkge0BsaW5rIHN0YXJ0UGFyZW50TGl2ZW5lc3NTZXJ2ZXJ9LlxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUsIHlpZWxkaW5nIGAnYXJtZWQnYCwgYCdhbHJlYWR5LWFybWVkJ2AsIG9yIGAndW5hdmFpbGFibGUnYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGFyZW50TGl2ZW5lc3NXYXRjaGRvZ0V4cHJlc3Npb24ocG9ydDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAoZnVuY3Rpb24oKSB7XG4gIHZhciBGTEFHID0gJ19fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdQYXJlbnRMaXZlbmVzcyc7XG4gIGlmICh3aW5kb3dbRkxBR10pIHsgcmV0dXJuICdhbHJlYWR5LWFybWVkJzsgfVxuICB2YXIgbmV0O1xuICB0cnkge1xuICAgIG5ldCA9IHdpbmRvdy5yZXF1aXJlKCdub2RlOm5ldCcpO1xuICB9IGNhdGNoIChub2RlUHJlZml4RXJyb3IpIHtcbiAgICB0cnkge1xuICAgICAgbmV0ID0gd2luZG93LnJlcXVpcmUoJ25ldCcpO1xuICAgIH0gY2F0Y2ggKGJhcmVQcmVmaXhFcnJvcikge1xuICAgICAgcmV0dXJuICd1bmF2YWlsYWJsZSc7XG4gICAgfVxuICB9XG4gIHZhciBzb2NrZXQgPSBuZXQuY29ubmVjdCgke1N0cmluZyhwb3J0KX0sICcke1BBUkVOVF9MSVZFTkVTU19IT1NUfScpO1xuICB3aW5kb3dbRkxBR10gPSBzb2NrZXQ7XG4gIHZhciBpc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICBzb2NrZXQub24oJ2Nvbm5lY3QnLCBmdW5jdGlvbigpIHsgaXNDb25uZWN0ZWQgPSB0cnVlOyB9KTtcbiAgc29ja2V0Lm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkgeyAvKiBIYW5kbGVkIGJ5IHRoZSBjbG9zZSBsaXN0ZW5lciBiZWxvdy4gKi8gfSk7XG4gIHNvY2tldC5vbignY2xvc2UnLCBmdW5jdGlvbigpIHtcbiAgICBpZiAoIWlzQ29ubmVjdGVkKSB7IHJldHVybjsgfVxuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuZWxlY3Ryb25XaW5kb3cuZGVzdHJveSgpO1xuICAgIH0gY2F0Y2ggKGRlc3Ryb3lFcnJvcikge1xuICAgICAgd2luZG93LmNsb3NlKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuICdhcm1lZCc7XG59KSgpYDtcbn1cblxuLyoqXG4gKiBTdGFydHMgdGhlIGxvb3BiYWNrIGxpdmVuZXNzIHNlcnZlciB0aGUgb3duZWQgaW5zdGFuY2UncyByZW5kZXJlciBjb25uZWN0c1xuICogYmFjayB0by5cbiAqXG4gKiBUaGUgc2VydmVyIGFuZCBldmVyeSBhY2NlcHRlZCBzb2NrZXQgYXJlIGB1bnJlZmBlZCwgc28gaG9sZGluZyBhIHdhdGNoZG9nXG4gKiBjb25uZWN0aW9uIG9wZW4gbmV2ZXIga2VlcHMgdGhlIGhhcm5lc3MgcHJvY2VzcyBhbGl2ZSBvbiBpdHMgb3duIFx1MjAxNCB0aGVcbiAqIGNvbm5lY3Rpb24gaXMgYSB0b2tlbiB0aGUga2VybmVsIHJlY2xhaW1zLCBub3Qgd29yayB0byB3YWl0IG9uLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgbGlzdGVuaW5nIHtAbGluayBQYXJlbnRMaXZlbmVzc1NlcnZlcn0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFBhcmVudExpdmVuZXNzU2VydmVyKCk6IFByb21pc2U8UGFyZW50TGl2ZW5lc3NTZXJ2ZXI+IHtcbiAgY29uc3Qgc2VydmVyID0gY3JlYXRlU2VydmVyKChzb2NrZXQpID0+IHtcbiAgICBzb2NrZXQudW5yZWYoKTtcbiAgICAvLyBUaGUgY29ubmVjdGlvbiBjYXJyaWVzIG5vIGRhdGEgXHUyMDE0IGl0IGV4aXN0cyBvbmx5IHNvIGl0cyBjbG9zZSBpcyBvYnNlcnZhYmxlLlxuICAgIHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICAvLyBBIHJlbmRlcmVyIHRvcm4gZG93biBtaWQtY29ubmVjdGlvbiByZXNldHMgcmF0aGVyIHRoYW4gY2xvc2VzOyBub3QgYW4gZXJyb3IgaGVyZS5cbiAgICB9KTtcbiAgfSk7XG4gIHNlcnZlci51bnJlZigpO1xuXG4gIGNvbnN0IHBvcnQgPSBhd2FpdCBsaXN0ZW5PbkZyZWVMb29wYmFja1BvcnQoc2VydmVyKTtcbiAgcmV0dXJuIHtcbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgIH0sXG4gICAgcG9ydFxuICB9O1xufVxuXG4vKipcbiAqIEJpbmRzIHRoZSBzZXJ2ZXIgdG8gYW4gZXBoZW1lcmFsIGxvb3BiYWNrIHBvcnQgYW5kIHJlcG9ydHMgd2hpY2ggb25lIGl0IGdvdC5cbiAqXG4gKiBAcGFyYW0gc2VydmVyIC0gVGhlIHNlcnZlciB0byBiaW5kLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBhc3NpZ25lZCBwb3J0LlxuICogQHRocm93cyBJZiB0aGUgc2VydmVyIHJlcG9ydHMgYW4gZXJyb3IgYmVmb3JlIGxpc3RlbmluZywgb3IgYmluZHMgdG8gYSBwaXBlIHJhdGhlciB0aGFuIGEgcG9ydC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlzdGVuT25GcmVlTG9vcGJhY2tQb3J0KHNlcnZlcjogU2VydmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNlcnZlci5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgc2VydmVyLmxpc3RlbigwLCBQQVJFTlRfTElWRU5FU1NfSE9TVCwgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHNlcnZlci5hZGRyZXNzKCk7XG4gICAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgdGhlIHBhcmVudC1saXZlbmVzcyBwb3J0LicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShhZGRyZXNzLnBvcnQpO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQXNDQSxTQUFTLG9CQUFvQjtBQXFCdEIsTUFBTSx1QkFBdUI7QUFpQjdCLFNBQVMsc0NBQXNDLE1BQXNCO0FBQzFFLFNBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFhb0IsT0FBTyxJQUFJLENBQUMsTUFBTSxvQkFBb0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZW5FO0FBWUEsZUFBc0IsNEJBQTJEO0FBQy9FLFFBQU0sU0FBUyxhQUFhLENBQUMsV0FBVztBQUN0QyxXQUFPLE1BQU07QUFFYixXQUFPLEdBQUcsU0FBUyxNQUFNO0FBQUEsSUFFekIsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNELFNBQU8sTUFBTTtBQUViLFFBQU0sT0FBTyxNQUFNLHlCQUF5QixNQUFNO0FBQ2xELFNBQU87QUFBQSxJQUNMLFFBQWM7QUFDWixhQUFPLE1BQU07QUFBQSxJQUNmO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjtBQVNBLGVBQWUseUJBQXlCLFFBQWlDO0FBQ3ZFLFNBQU8sSUFBSSxRQUFnQixDQUFDLFNBQVMsV0FBVztBQUM5QyxXQUFPLEtBQUssU0FBUyxNQUFNO0FBQzNCLFdBQU8sT0FBTyxHQUFHLHNCQUFzQixNQUFNO0FBQzNDLFlBQU0sVUFBVSxPQUFPLFFBQVE7QUFDL0IsVUFBSSxZQUFZLFFBQVEsT0FBTyxZQUFZLFVBQVU7QUFDbkQsZUFBTyxNQUFNO0FBQ2IsZUFBTyxJQUFJLE1BQU0sK0NBQStDLENBQUM7QUFDakU7QUFBQSxNQUNGO0FBQ0EsY0FBUSxRQUFRLElBQUk7QUFBQSxJQUN0QixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -17,28 +17,28 @@
|
|
|
17
17
|
* integration test.
|
|
18
18
|
*/
|
|
19
19
|
import type { Promisable } from 'type-fest';
|
|
20
|
-
import type {
|
|
21
|
-
import type {
|
|
20
|
+
import type { ContextArguments } from './context-id.mjs';
|
|
21
|
+
import type { CommonArguments, GenericObject } from './eval-in-obsidian.mjs';
|
|
22
22
|
import type { ObsidianTransport } from './transport.mjs';
|
|
23
23
|
import { ContextId } from './context-id.mjs';
|
|
24
24
|
/**
|
|
25
25
|
* Parameters for {@link pollInObsidian}. Mirrors {@link EvalInObsidianParams} for
|
|
26
|
-
* the shared forwarded fields (`
|
|
26
|
+
* the shared forwarded fields (`input` / `contextId` / `transport` / `vaultPath`);
|
|
27
27
|
* `start` / `poll` are the in-Obsidian closures and `until` is the Node-side
|
|
28
28
|
* acceptance predicate.
|
|
29
29
|
*/
|
|
30
|
-
export interface PollInObsidianParams<
|
|
31
|
-
/**
|
|
32
|
-
* Additional arguments passed to both `start` and `poll` (serialized like
|
|
33
|
-
* {@link EvalInObsidianParams.args}).
|
|
34
|
-
*/
|
|
35
|
-
readonly args?: Args;
|
|
30
|
+
export interface PollInObsidianParams<Input extends GenericObject, PollResult, TContextId extends ContextId<unknown> | undefined = undefined> {
|
|
36
31
|
/**
|
|
37
32
|
* A {@link ContextId} shared by `start` and `poll`, so `start` can stash
|
|
38
33
|
* non-serializable state that `poll` later reads. When omitted, each closure
|
|
39
34
|
* gets a fresh empty `context`.
|
|
40
35
|
*/
|
|
41
36
|
readonly contextId?: TContextId;
|
|
37
|
+
/**
|
|
38
|
+
* Additional arguments passed to both `start` and `poll` (serialized like
|
|
39
|
+
* {@link EvalInObsidianParams.input}).
|
|
40
|
+
*/
|
|
41
|
+
readonly input?: Input;
|
|
42
42
|
/**
|
|
43
43
|
* Delay between `poll` attempts, in milliseconds.
|
|
44
44
|
*
|
|
@@ -50,13 +50,13 @@ export interface PollInObsidianParams<Args extends GenericObject, PollResult, TC
|
|
|
50
50
|
* ~30s CDP cap): it should read and return a JSON-serializable status, not
|
|
51
51
|
* await the long operation itself.
|
|
52
52
|
*/
|
|
53
|
-
poll(this: void,
|
|
53
|
+
poll(this: void, input: CommonArguments & ContextArguments<TContextId> & Input): Promisable<PollResult>;
|
|
54
54
|
/**
|
|
55
55
|
* An optional closure run **once** before polling begins, to kick off the
|
|
56
56
|
* long-running work (fire-and-forget from Node's perspective). Keep it short —
|
|
57
57
|
* start the work and return; do not await it to completion here.
|
|
58
58
|
*/
|
|
59
|
-
start?(this: void,
|
|
59
|
+
start?(this: void, input: CommonArguments & ContextArguments<TContextId> & Input): Promisable<unknown>;
|
|
60
60
|
/**
|
|
61
61
|
* Total budget before the poll rejects, in milliseconds.
|
|
62
62
|
*
|
|
@@ -89,4 +89,4 @@ export interface PollInObsidianParams<Args extends GenericObject, PollResult, TC
|
|
|
89
89
|
* @param params - The poll parameters.
|
|
90
90
|
* @returns A {@link Promise} that resolves with the first accepted `poll` result.
|
|
91
91
|
*/
|
|
92
|
-
export declare function pollInObsidian<
|
|
92
|
+
export declare function pollInObsidian<Input extends GenericObject, PollResult, TContextId extends ContextId<unknown> | undefined = undefined>(params: PollInObsidianParams<Input, PollResult, TContextId>): Promise<PollResult>;
|