obsidian-integration-testing 11.0.0 → 12.1.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.
Files changed (234) hide show
  1. package/dist/lib/cjs/adb-device-list.cjs +54 -0
  2. package/dist/lib/cjs/adb-device-list.d.cts +72 -0
  3. package/dist/lib/cjs/android-sdk.cjs +52 -0
  4. package/dist/lib/cjs/android-sdk.d.cts +29 -0
  5. package/dist/lib/cjs/app-startup-progress.cjs +87 -0
  6. package/dist/lib/cjs/app-startup-progress.d.cts +128 -0
  7. package/dist/lib/cjs/appium-server-marker.cjs +112 -0
  8. package/dist/lib/cjs/appium-server-marker.d.cts +103 -0
  9. package/dist/lib/cjs/avd-probe-verdict.cjs +90 -0
  10. package/dist/lib/cjs/avd-probe-verdict.d.cts +175 -0
  11. package/dist/lib/cjs/cli.cjs +104 -19
  12. package/dist/lib/cjs/cli.d.cts +16 -8
  13. package/dist/lib/cjs/community-plugin-registry.cjs +52 -0
  14. package/dist/lib/cjs/community-plugin-registry.d.cts +116 -0
  15. package/dist/lib/cjs/config-directory-fallback-error.cjs +57 -0
  16. package/dist/lib/cjs/config-directory-fallback-error.d.cts +64 -0
  17. package/dist/lib/cjs/config-directory.cjs +46 -0
  18. package/dist/lib/cjs/config-directory.d.cts +45 -0
  19. package/dist/lib/cjs/connect-to-cdp.cjs +13 -7
  20. package/dist/lib/cjs/connect-to-cdp.d.cts +19 -0
  21. package/dist/lib/cjs/context-provider.cjs +12 -1
  22. package/dist/lib/cjs/context-provider.d.cts +26 -3
  23. package/dist/lib/cjs/demo-vault-bootstrap.cjs +148 -0
  24. package/dist/lib/cjs/demo-vault-bootstrap.d.cts +114 -0
  25. package/dist/lib/cjs/demo-vault-populate.cjs +38 -10
  26. package/dist/lib/cjs/demo-vault-populate.d.cts +70 -0
  27. package/dist/lib/cjs/device-readiness.cjs +38 -3
  28. package/dist/lib/cjs/device-readiness.d.cts +83 -9
  29. package/dist/lib/cjs/emulator-arguments.cjs +6 -2
  30. package/dist/lib/cjs/emulator-arguments.d.cts +26 -0
  31. package/dist/lib/cjs/emulator-backend.cjs +71 -0
  32. package/dist/lib/cjs/emulator-backend.d.cts +76 -0
  33. package/dist/lib/cjs/emulator-liveness.cjs +72 -0
  34. package/dist/lib/cjs/emulator-liveness.d.cts +158 -0
  35. package/dist/lib/cjs/emulator-snapshot.cjs +57 -0
  36. package/dist/lib/cjs/emulator-snapshot.d.cts +68 -0
  37. package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
  38. package/dist/lib/cjs/eval-in-obsidian.d.cts +42 -13
  39. package/dist/lib/cjs/global-setup-core.cjs +30 -30
  40. package/dist/lib/cjs/global-setup-core.d.cts +27 -2
  41. package/dist/lib/cjs/headless-vault-config.cjs +51 -0
  42. package/dist/lib/cjs/headless-vault-config.d.cts +67 -0
  43. package/dist/lib/cjs/index.cjs +24 -1
  44. package/dist/lib/cjs/index.d.cts +14 -5
  45. package/dist/lib/cjs/installer-asset.cjs +1 -1
  46. package/dist/lib/cjs/installer-asset.d.cts +1 -1
  47. package/dist/lib/cjs/integration-setup-failed-error.cjs +62 -0
  48. package/dist/lib/cjs/integration-setup-failed-error.d.cts +66 -0
  49. package/dist/lib/cjs/jest/global-setup.cjs +2 -2
  50. package/dist/lib/cjs/jest/global-setup.d.cts +5 -1
  51. package/dist/lib/cjs/kill-process-tree.cjs +18 -7
  52. package/dist/lib/cjs/kill-process-tree.d.cts +10 -2
  53. package/dist/lib/cjs/library.cjs +1 -1
  54. package/dist/lib/cjs/mobile-input.cjs +173 -0
  55. package/dist/lib/cjs/mobile-input.d.cts +156 -0
  56. package/dist/lib/cjs/namespace-bootstrap.cjs +92 -9
  57. package/dist/lib/cjs/obsidian-installer.cjs +1 -1
  58. package/dist/lib/cjs/obsidian-instance.cjs +52 -3
  59. package/dist/lib/cjs/obsidian-instance.d.cts +12 -0
  60. package/dist/lib/cjs/obsidian-metadata.cjs +123 -17
  61. package/dist/lib/cjs/obsidian-metadata.d.cts +17 -6
  62. package/dist/lib/cjs/obsidian-version-switch.cjs +3 -3
  63. package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
  64. package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +3 -2
  65. package/dist/lib/cjs/owned-instance-exit-marker.cjs +99 -0
  66. package/dist/lib/cjs/owned-instance-exit-marker.d.cts +106 -0
  67. package/dist/lib/cjs/owned-instance-exited-error.cjs +106 -0
  68. package/dist/lib/cjs/owned-instance-exited-error.d.cts +98 -0
  69. package/dist/lib/cjs/owned-vault-seed.cjs +9 -5
  70. package/dist/lib/cjs/owned-vault-seed.d.cts +24 -3
  71. package/dist/lib/cjs/parent-liveness.cjs +42 -5
  72. package/dist/lib/cjs/parent-liveness.d.cts +37 -5
  73. package/dist/lib/cjs/port-owner.cjs +61 -0
  74. package/dist/lib/cjs/port-owner.d.cts +47 -0
  75. package/dist/lib/cjs/process-capture.cjs +62 -0
  76. package/dist/lib/cjs/process-capture.d.cts +83 -0
  77. package/dist/lib/cjs/process-exit-message.cjs +14 -8
  78. package/dist/lib/cjs/process-exit-message.d.cts +37 -3
  79. package/dist/lib/cjs/process-liveness.cjs +51 -0
  80. package/dist/lib/cjs/process-liveness.d.cts +18 -0
  81. package/dist/lib/cjs/release-catalog.cjs +73 -0
  82. package/dist/lib/cjs/release-catalog.d.cts +125 -0
  83. package/dist/lib/cjs/run-version-matrix.cjs +1 -1
  84. package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
  85. package/dist/lib/cjs/teardown-verdict.cjs +53 -0
  86. package/dist/lib/cjs/teardown-verdict.d.cts +69 -0
  87. package/dist/lib/cjs/temporary-vault.cjs +43 -8
  88. package/dist/lib/cjs/temporary-vault.d.cts +47 -5
  89. package/dist/lib/cjs/transport-appium.cjs +223 -17
  90. package/dist/lib/cjs/transport-appium.d.cts +104 -3
  91. package/dist/lib/cjs/transport-desktop-cdp.cjs +201 -6
  92. package/dist/lib/cjs/transport-desktop-cdp.d.cts +100 -0
  93. package/dist/lib/cjs/transport-factory.cjs +1165 -142
  94. package/dist/lib/cjs/transport-factory.d.cts +10 -1
  95. package/dist/lib/cjs/transport-options.cjs +11 -3
  96. package/dist/lib/cjs/transport-options.d.cts +131 -12
  97. package/dist/lib/cjs/transport.cjs +1 -1
  98. package/dist/lib/cjs/transport.d.cts +7 -1
  99. package/dist/lib/cjs/vault-plugin-install.cjs +40 -0
  100. package/dist/lib/cjs/vault-plugin-install.d.cts +64 -0
  101. package/dist/lib/cjs/vault-teardown-verdict.cjs +42 -0
  102. package/dist/lib/cjs/vault-teardown-verdict.d.cts +57 -0
  103. package/dist/lib/cjs/version-matrix.cjs +1 -1
  104. package/dist/lib/cjs/version-matrix.d.cts +2 -2
  105. package/dist/lib/cjs/vitest/global-setup.cjs +13 -7
  106. package/dist/lib/cjs/vitest/global-setup.d.cts +5 -1
  107. package/dist/lib/cjs/vitest/setup.cjs +2 -1
  108. package/dist/lib/cjs/vitest/setup.d.cts +5 -0
  109. package/dist/lib/cjs/vitest/typings.d.cts +6 -4
  110. package/dist/lib/cjs/webview-cdp.cjs +263 -0
  111. package/dist/lib/cjs/webview-cdp.d.cts +156 -0
  112. package/dist/lib/cjs/wedged-appium-server.cjs +113 -0
  113. package/dist/lib/cjs/wedged-appium-server.d.cts +187 -0
  114. package/dist/lib/esm/adb-device-list.d.mts +72 -0
  115. package/dist/lib/esm/adb-device-list.mjs +28 -0
  116. package/dist/lib/esm/android-sdk.d.mts +29 -0
  117. package/dist/lib/esm/android-sdk.mjs +18 -0
  118. package/dist/lib/esm/app-startup-progress.d.mts +128 -0
  119. package/dist/lib/esm/app-startup-progress.mjs +59 -0
  120. package/dist/lib/esm/appium-server-marker.d.mts +103 -0
  121. package/dist/lib/esm/appium-server-marker.mjs +89 -0
  122. package/dist/lib/esm/avd-probe-verdict.d.mts +175 -0
  123. package/dist/lib/esm/avd-probe-verdict.mjs +62 -0
  124. package/dist/lib/esm/cli.d.mts +16 -8
  125. package/dist/lib/esm/cli.mjs +110 -19
  126. package/dist/lib/esm/community-plugin-registry.d.mts +116 -0
  127. package/dist/lib/esm/community-plugin-registry.mjs +23 -0
  128. package/dist/lib/esm/config-directory-fallback-error.d.mts +64 -0
  129. package/dist/lib/esm/config-directory-fallback-error.mjs +33 -0
  130. package/dist/lib/esm/config-directory.d.mts +45 -0
  131. package/dist/lib/esm/config-directory.mjs +21 -0
  132. package/dist/lib/esm/connect-to-cdp.d.mts +19 -0
  133. package/dist/lib/esm/connect-to-cdp.mjs +13 -7
  134. package/dist/lib/esm/context-provider.d.mts +26 -3
  135. package/dist/lib/esm/context-provider.mjs +10 -1
  136. package/dist/lib/esm/demo-vault-bootstrap.d.mts +114 -0
  137. package/dist/lib/esm/demo-vault-bootstrap.mjs +127 -0
  138. package/dist/lib/esm/demo-vault-populate.d.mts +70 -0
  139. package/dist/lib/esm/demo-vault-populate.mjs +35 -9
  140. package/dist/lib/esm/device-readiness.d.mts +83 -9
  141. package/dist/lib/esm/device-readiness.mjs +34 -2
  142. package/dist/lib/esm/emulator-arguments.d.mts +26 -0
  143. package/dist/lib/esm/emulator-arguments.mjs +6 -2
  144. package/dist/lib/esm/emulator-backend.d.mts +76 -0
  145. package/dist/lib/esm/emulator-backend.mjs +45 -0
  146. package/dist/lib/esm/emulator-liveness.d.mts +158 -0
  147. package/dist/lib/esm/emulator-liveness.mjs +47 -0
  148. package/dist/lib/esm/emulator-snapshot.d.mts +68 -0
  149. package/dist/lib/esm/emulator-snapshot.mjs +32 -0
  150. package/dist/lib/esm/eval-in-obsidian.d.mts +42 -13
  151. package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
  152. package/dist/lib/esm/global-setup-core.d.mts +27 -2
  153. package/dist/lib/esm/global-setup-core.mjs +34 -35
  154. package/dist/lib/esm/headless-vault-config.d.mts +67 -0
  155. package/dist/lib/esm/headless-vault-config.mjs +31 -0
  156. package/dist/lib/esm/index.d.mts +14 -5
  157. package/dist/lib/esm/index.mjs +26 -2
  158. package/dist/lib/esm/installer-asset.d.mts +1 -1
  159. package/dist/lib/esm/installer-asset.mjs +1 -1
  160. package/dist/lib/esm/integration-setup-failed-error.d.mts +66 -0
  161. package/dist/lib/esm/integration-setup-failed-error.mjs +38 -0
  162. package/dist/lib/esm/jest/global-setup.d.mts +5 -1
  163. package/dist/lib/esm/jest/global-setup.mjs +2 -2
  164. package/dist/lib/esm/kill-process-tree.d.mts +10 -2
  165. package/dist/lib/esm/kill-process-tree.mjs +16 -6
  166. package/dist/lib/esm/library.mjs +1 -1
  167. package/dist/lib/esm/mobile-input.d.mts +156 -0
  168. package/dist/lib/esm/mobile-input.mjs +144 -0
  169. package/dist/lib/esm/namespace-bootstrap.mjs +95 -9
  170. package/dist/lib/esm/obsidian-installer.mjs +1 -1
  171. package/dist/lib/esm/obsidian-instance.d.mts +12 -0
  172. package/dist/lib/esm/obsidian-instance.mjs +55 -3
  173. package/dist/lib/esm/obsidian-metadata.d.mts +17 -6
  174. package/dist/lib/esm/obsidian-metadata.mjs +123 -17
  175. package/dist/lib/esm/obsidian-version-switch.mjs +3 -3
  176. package/dist/lib/esm/open-obsidian-settings-tab.d.mts +3 -2
  177. package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
  178. package/dist/lib/esm/owned-instance-exit-marker.d.mts +106 -0
  179. package/dist/lib/esm/owned-instance-exit-marker.mjs +78 -0
  180. package/dist/lib/esm/owned-instance-exited-error.d.mts +98 -0
  181. package/dist/lib/esm/owned-instance-exited-error.mjs +81 -0
  182. package/dist/lib/esm/owned-vault-seed.d.mts +24 -3
  183. package/dist/lib/esm/owned-vault-seed.mjs +9 -5
  184. package/dist/lib/esm/parent-liveness.d.mts +37 -5
  185. package/dist/lib/esm/parent-liveness.mjs +42 -5
  186. package/dist/lib/esm/port-owner.d.mts +47 -0
  187. package/dist/lib/esm/port-owner.mjs +36 -0
  188. package/dist/lib/esm/process-capture.d.mts +83 -0
  189. package/dist/lib/esm/process-capture.mjs +38 -0
  190. package/dist/lib/esm/process-exit-message.d.mts +37 -3
  191. package/dist/lib/esm/process-exit-message.mjs +13 -8
  192. package/dist/lib/esm/process-liveness.d.mts +18 -0
  193. package/dist/lib/esm/process-liveness.mjs +17 -0
  194. package/dist/lib/esm/release-catalog.d.mts +125 -0
  195. package/dist/lib/esm/release-catalog.mjs +46 -0
  196. package/dist/lib/esm/run-version-matrix.d.mts +1 -1
  197. package/dist/lib/esm/run-version-matrix.mjs +1 -1
  198. package/dist/lib/esm/teardown-verdict.d.mts +69 -0
  199. package/dist/lib/esm/teardown-verdict.mjs +28 -0
  200. package/dist/lib/esm/temporary-vault.d.mts +47 -5
  201. package/dist/lib/esm/temporary-vault.mjs +43 -8
  202. package/dist/lib/esm/transport-appium.d.mts +104 -3
  203. package/dist/lib/esm/transport-appium.mjs +233 -17
  204. package/dist/lib/esm/transport-desktop-cdp.d.mts +100 -0
  205. package/dist/lib/esm/transport-desktop-cdp.mjs +208 -7
  206. package/dist/lib/esm/transport-factory.d.mts +10 -1
  207. package/dist/lib/esm/transport-factory.mjs +1220 -149
  208. package/dist/lib/esm/transport-options.d.mts +131 -12
  209. package/dist/lib/esm/transport-options.mjs +9 -2
  210. package/dist/lib/esm/transport.d.mts +7 -1
  211. package/dist/lib/esm/vault-plugin-install.d.mts +64 -0
  212. package/dist/lib/esm/vault-plugin-install.mjs +20 -0
  213. package/dist/lib/esm/vault-teardown-verdict.d.mts +57 -0
  214. package/dist/lib/esm/vault-teardown-verdict.mjs +18 -0
  215. package/dist/lib/esm/version-matrix.d.mts +2 -2
  216. package/dist/lib/esm/version-matrix.mjs +1 -1
  217. package/dist/lib/esm/vitest/global-setup.d.mts +5 -1
  218. package/dist/lib/esm/vitest/global-setup.mjs +14 -7
  219. package/dist/lib/esm/vitest/setup.d.mts +5 -0
  220. package/dist/lib/esm/vitest/setup.mjs +3 -1
  221. package/dist/lib/esm/vitest/typings.d.mts +6 -4
  222. package/dist/lib/esm/webview-cdp.d.mts +156 -0
  223. package/dist/lib/esm/webview-cdp.mjs +235 -0
  224. package/dist/lib/esm/wedged-appium-server.d.mts +187 -0
  225. package/dist/lib/esm/wedged-appium-server.mjs +86 -0
  226. package/package.json +25 -23
  227. package/dist/lib/cjs/native-dialog-monitor.cjs +0 -192
  228. package/dist/lib/cjs/native-dialog-monitor.d.cts +0 -66
  229. package/dist/lib/cjs/obsidian-namespace.cjs +0 -17
  230. package/dist/lib/cjs/obsidian-namespace.d.cts +0 -128
  231. package/dist/lib/esm/native-dialog-monitor.d.mts +0 -66
  232. package/dist/lib/esm/native-dialog-monitor.mjs +0 -158
  233. package/dist/lib/esm/obsidian-namespace.d.mts +0 -128
  234. package/dist/lib/esm/obsidian-namespace.mjs +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-integration-testing",
3
- "version": "11.0.0",
3
+ "version": "12.1.0",
4
4
  "description": "Simplifies integration testing of Obsidian plugins.",
5
5
  "keywords": [
6
6
  "obsidian",
@@ -137,7 +137,6 @@
137
137
  "build": "jiti scripts/build.ts",
138
138
  "build:clean": "jiti scripts/build-clean.ts",
139
139
  "build:compile": "jiti scripts/build-compile.ts",
140
- "build:compile:typescript": "jiti scripts/build-compile-typescript.ts",
141
140
  "build:lib": "jiti scripts/build-lib.ts",
142
141
  "build:types": "jiti scripts/build-types.ts",
143
142
  "collect:runtime-versions": "jiti scripts/collect-runtime-versions.ts",
@@ -151,7 +150,9 @@
151
150
  "lint:fix": "jiti scripts/lint-fix.ts",
152
151
  "lint:md": "jiti scripts/lint-md.ts",
153
152
  "lint:md:fix": "jiti scripts/lint-md-fix.ts",
153
+ "merge:runtime-versions": "jiti scripts/merge-runtime-versions.ts",
154
154
  "prepare": "jiti scripts/prepare.ts",
155
+ "probe:emulator-wedge": "jiti scripts/emulator-wedge-probe.ts",
155
156
  "refresh:metadata": "jiti scripts/refresh-metadata.ts",
156
157
  "spellcheck": "jiti scripts/spellcheck.ts",
157
158
  "test": "jiti scripts/test.ts",
@@ -162,11 +163,12 @@
162
163
  "version": "jiti scripts/version.ts"
163
164
  },
164
165
  "overrides": {
165
- "@puppeteer/browsers": "^3.2.1",
166
+ "@puppeteer/browsers": "^3.2.2",
166
167
  "@sinonjs/fake-timers": "13.0.5",
167
168
  "brace-expansion": "^5.0.9",
168
169
  "deepmerge-ts": "^8.0.2",
169
170
  "eslint-plugin-import": "$eslint-plugin-import-x",
171
+ "fflate": "^0.8.3",
170
172
  "glob": "^13.0.6",
171
173
  "js-yaml": "4.3.1",
172
174
  "lodash": "4.18.1",
@@ -179,47 +181,47 @@
179
181
  "vite": "$vite"
180
182
  },
181
183
  "dependencies": {
182
- "puppeteer-core": "^25.9.0",
184
+ "puppeteer-core": "^25.10.0",
183
185
  "webdriverio": "9.27.0"
184
186
  },
185
187
  "devDependencies": {
186
- "@astrojs/markdown-remark": "^7.2.4",
187
- "@astrojs/starlight": "^0.41.10",
188
+ "@astrojs/markdown-remark": "^7.3.1",
189
+ "@astrojs/starlight": "^0.42.0",
188
190
  "@commitlint/cli": "^21.2.2",
189
191
  "@commitlint/config-conventional": "^21.2.2",
190
192
  "@commitlint/types": "^21.2.0",
191
- "@eslint-community/eslint-plugin-eslint-comments": "^4.7.2",
193
+ "@eslint-community/eslint-plugin-eslint-comments": "^4.8.0",
192
194
  "@eslint/config-helpers": "^0.7.0",
193
195
  "@eslint/js": "^10.0.1",
194
- "@obsidian-typings/obsidian-public-latest": "^6.35.0",
196
+ "@obsidian-typings/obsidian-public-latest": "^6.36.0",
195
197
  "@resvg/resvg-js": "^2.6.2",
196
198
  "@stylistic/eslint-plugin": "^5.10.0",
197
199
  "@total-typescript/ts-reset": "^0.6.1",
198
200
  "@tsconfig/strictest": "^2.0.8",
199
201
  "@types/jest": "^30.0.0",
200
202
  "@types/semver": "^7.8.0",
201
- "@typescript-eslint/rule-tester": "^8.68.0",
202
- "@typescript-eslint/utils": "^8.68.0",
203
- "@vitest/coverage-v8": "^4.1.11",
204
- "astro": "^7.2.9",
203
+ "@typescript-eslint/rule-tester": "^8.70.0",
204
+ "@typescript-eslint/utils": "^8.70.0",
205
+ "@vitest/coverage-v8": "^5.0.0",
206
+ "astro": "^7.3.2",
205
207
  "better-typescript-lib": "^2.12.0",
206
- "cspell": "^10.1.1",
208
+ "cspell": "^10.3.0",
207
209
  "czg": "^1.14.0",
208
210
  "dedent": "^1.7.2",
209
- "dprint": "^0.56.1",
211
+ "dprint": "^0.57.4",
210
212
  "esbuild": "^0.28.2",
211
- "eslint": "^10.9.1",
213
+ "eslint": "^10.10.0",
212
214
  "eslint-import-resolver-typescript": "^4.4.5",
213
215
  "eslint-plugin-astro": "^3.1.0",
214
216
  "eslint-plugin-import-x": "^4.17.1",
215
- "eslint-plugin-jsdoc": "^64.2.1",
216
- "eslint-plugin-perfectionist": "^5.10.1",
217
+ "eslint-plugin-jsdoc": "^64.3.6",
218
+ "eslint-plugin-perfectionist": "^5.11.0",
217
219
  "eslint-plugin-tsdoc": "^0.5.2",
218
220
  "eslint-plugin-unicorn": "^74.0.0",
219
- "globals": "^17.11.0",
221
+ "globals": "^17.12.0",
220
222
  "husky": "^9.1.7",
221
- "jest": "^30.5.0",
222
- "jest-config": "^30.5.0",
223
+ "jest": "^30.5.1",
224
+ "jest-config": "^30.5.1",
223
225
  "jiti": "^2.7.0",
224
226
  "linkinator": "^8.1.0",
225
227
  "markdownlint": "^0.41.1",
@@ -234,13 +236,13 @@
234
236
  "ts-jest": "^29.4.12",
235
237
  "ts-morph": "^28.0.0",
236
238
  "tslib": "^2.8.1",
237
- "type-fest": "^5.8.0",
239
+ "type-fest": "^5.9.0",
238
240
  "typedoc-plugin-mdn-links": "^5.1.1",
239
241
  "typescript": "6.0.3",
240
- "typescript-eslint": "^8.68.0",
242
+ "typescript-eslint": "^8.70.0",
241
243
  "unist-util-visit": "^5.1.0",
242
244
  "vite": "^8.2.2",
243
- "vitest": "^4.1.11",
245
+ "vitest": "^5.0.0",
244
246
  "yaml": "^2.9.0"
245
247
  },
246
248
  "peerDependencies": {
@@ -1,192 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var native_dialog_monitor_exports = {};
30
- __export(native_dialog_monitor_exports, {
31
- NativeDialogMonitor: () => NativeDialogMonitor
32
- });
33
- module.exports = __toCommonJS(native_dialog_monitor_exports);
34
- var import_node_process = __toESM(require("node:process"), 1);
35
- var import_exec = require("./exec.cjs");
36
- const DIALOG_TITLES = /* @__PURE__ */ new Set([
37
- "Error",
38
- "Vault not found."
39
- ]);
40
- const POLL_INTERVAL_IN_MILLISECONDS = 500;
41
- class NativeDialogMonitor {
42
- events = [];
43
- intervalId;
44
- isPolling = false;
45
- /**
46
- * Asserts that no native dialogs were detected during monitoring.
47
- *
48
- * @throws If any dialogs were recorded.
49
- */
50
- assertNoDialogs() {
51
- if (this.events.length === 0) {
52
- return;
53
- }
54
- const descriptions = this.events.map((dialogEvent) => ` - "${dialogEvent.title}" at ${new Date(dialogEvent.timestamp).toISOString()}`).join("\n");
55
- throw new Error(`Native dialog(s) detected during test:
56
- ${descriptions}`);
57
- }
58
- /**
59
- * Returns all dialog events recorded since the monitor started.
60
- *
61
- * @returns The recorded dialog events.
62
- */
63
- getEvents() {
64
- return this.events;
65
- }
66
- /**
67
- * Resets the recorded events without stopping the monitor.
68
- */
69
- reset() {
70
- this.events = [];
71
- }
72
- /**
73
- * Starts polling for native dialogs in the background.
74
- */
75
- start() {
76
- if (this.intervalId) {
77
- return;
78
- }
79
- this.events = [];
80
- this.intervalId = setInterval(() => {
81
- this.poll().catch(() => {
82
- });
83
- }, POLL_INTERVAL_IN_MILLISECONDS);
84
- }
85
- /**
86
- * Stops polling and returns all recorded events.
87
- *
88
- * @returns The recorded dialog events.
89
- */
90
- stop() {
91
- if (this.intervalId) {
92
- clearInterval(this.intervalId);
93
- this.intervalId = void 0;
94
- }
95
- return this.events;
96
- }
97
- /**
98
- * Single poll iteration: detects and dismisses any Obsidian dialog windows.
99
- */
100
- async poll() {
101
- if (this.isPolling) {
102
- return;
103
- }
104
- this.isPolling = true;
105
- try {
106
- const titles = await getObsidianWindowTitles();
107
- for (const title of titles) {
108
- if (!DIALOG_TITLES.has(title)) {
109
- continue;
110
- }
111
- this.events.push({ timestamp: Date.now(), title });
112
- await dismissDialogByTitle(title);
113
- }
114
- } catch {
115
- } finally {
116
- this.isPolling = false;
117
- }
118
- }
119
- }
120
- async function dismissDialogByTitle(title) {
121
- if (import_node_process.default.platform === "win32") {
122
- await dismissDialogWindows(title);
123
- } else if (import_node_process.default.platform === "darwin") {
124
- await dismissDialogMac(title);
125
- } else {
126
- await dismissDialogLinux(title);
127
- }
128
- }
129
- async function dismissDialogLinux(title) {
130
- const escapedTitle = title.replaceAll('"', String.raw`\"`);
131
- await (0, import_exec.exec)(
132
- `xdotool search --name "${escapedTitle}" windowactivate --sync key Return 2>/dev/null || true`,
133
- { isQuiet: true }
134
- );
135
- }
136
- async function dismissDialogMac(title) {
137
- const escapedTitle = title.replaceAll('"', String.raw`\"`);
138
- await (0, import_exec.exec)(
139
- `osascript -e 'tell application "System Events" to tell process "Obsidian" to click button 1 of window "${escapedTitle}"'`,
140
- { isQuiet: true }
141
- );
142
- }
143
- async function dismissDialogWindows(title) {
144
- const escapedTitle = title.replaceAll("'", "''");
145
- const script = [
146
- 'Add-Type -TypeDefinition @"',
147
- "using System; using System.Runtime.InteropServices;",
148
- "public class DlgClose {",
149
- ' [DllImport("user32.dll")] public static extern IntPtr FindWindow(string c, string t);',
150
- ' [DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr h, uint m, IntPtr w, IntPtr l);',
151
- "}",
152
- '"@',
153
- `$h = [DlgClose]::FindWindow($null, '${escapedTitle}')`,
154
- "if ($h -ne [IntPtr]::Zero) { [DlgClose]::SendMessage($h, 0x0010, [IntPtr]::Zero, [IntPtr]::Zero) }"
155
- ].join("; ");
156
- await (0, import_exec.exec)(`powershell -Command "${script}"`, { isQuiet: true });
157
- }
158
- async function getObsidianWindowTitles() {
159
- if (import_node_process.default.platform === "win32") {
160
- return getWindowTitlesWindows();
161
- }
162
- if (import_node_process.default.platform === "darwin") {
163
- return getWindowTitlesMac();
164
- }
165
- return getWindowTitlesLinux();
166
- }
167
- async function getWindowTitlesLinux() {
168
- const output = await (0, import_exec.exec)(
169
- 'xdotool search --name "Obsidian" getwindowname 2>/dev/null || true',
170
- { isQuiet: true }
171
- );
172
- return output.trim().split("\n").filter(Boolean);
173
- }
174
- async function getWindowTitlesMac() {
175
- const output = await (0, import_exec.exec)(
176
- `osascript -e 'tell application "System Events" to get name of every window of (processes whose name is "Obsidian")'`,
177
- { isQuiet: true }
178
- );
179
- return output.trim().split(", ").filter(Boolean);
180
- }
181
- async function getWindowTitlesWindows() {
182
- const output = await (0, import_exec.exec)(
183
- `powershell -Command "Get-Process Obsidian -ErrorAction SilentlyContinue | Where-Object { $_.MainWindowTitle -ne '' } | Select-Object -ExpandProperty MainWindowTitle"`,
184
- { isQuiet: true }
185
- );
186
- return output.trim().split("\n").map((line) => line.trim()).filter(Boolean);
187
- }
188
- // Annotate the CommonJS export names for ESM import in node:
189
- 0 && (module.exports = {
190
- NativeDialogMonitor
191
- });
192
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hdGl2ZS1kaWFsb2ctbW9uaXRvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1vbml0b3JzIGZvciBuYXRpdmUgT1MgZGlhbG9ncyAoRWxlY3Ryb24gYGRpYWxvZy5zaG93RXJyb3JCb3hgLCBgZGlhbG9nLnNob3dNZXNzYWdlQm94U3luY2ApXG4gKiBmcm9tIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBUaGVzZSBkaWFsb2dzIGJsb2NrIHRoZSBtYWluIHByb2Nlc3MgYW5kIGNhbm5vdCBiZSBpbnRlcmNlcHRlZFxuICogZnJvbSB0aGUgcmVuZGVyZXIgdmlhIGBAZWxlY3Ryb24vcmVtb3RlYC5cbiAqXG4gKiBVc2VzIHBsYXRmb3JtLXNwZWNpZmljIHByb2Nlc3Mgd2luZG93IHRpdGxlIGluc3BlY3Rpb24gdG8gZGV0ZWN0IGRpYWxvZ3MsIGFuZFxuICogYXV0by1kaXNtaXNzZXMgdGhlbSBzbyB0aGV5IGRvbid0IGJsb2NrIHRlc3QgZXhlY3V0aW9uLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHV0aWxpdHkuIE5vdCB1bml0LXRlc3RhYmxlOiByZWxpZXMgb24gT1MgcHJvY2VzcyBpbnNwZWN0aW9uLiAqL1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLmNqcyc7XG5cbi8qKlxuICogQSBjYXB0dXJlZCBuYXRpdmUgZGlhbG9nIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdGl2ZURpYWxvZ0V2ZW50IHtcbiAgLyoqXG4gICAqIFdoZW4gdGhlIGRpYWxvZyB3YXMgZGV0ZWN0ZWQuXG4gICAqL1xuICB0aW1lc3RhbXA6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdpbmRvdyB0aXRsZSBvZiB0aGUgZGlhbG9nLlxuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBLbm93biBPYnNpZGlhbiBkaWFsb2cgd2luZG93IHRpdGxlcyB0aGF0IGluZGljYXRlIGFuIGVycm9yIG9yIGJsb2NraW5nIHByb21wdC5cbiAqL1xuY29uc3QgRElBTE9HX1RJVExFUyA9IG5ldyBTZXQoW1xuICAnRXJyb3InLFxuICAnVmF1bHQgbm90IGZvdW5kLidcbl0pO1xuXG5jb25zdCBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcblxuLyoqXG4gKiBNb25pdG9ycyB0aGUgT2JzaWRpYW4gcHJvY2VzcyBmb3IgbmF0aXZlIE9TIGRpYWxvZ3MgYnkgcG9sbGluZyBwcm9jZXNzIHdpbmRvdyB0aXRsZXMuXG4gKlxuICogRGV0ZWN0ZWQgZGlhbG9ncyBhcmUgYXV0by1kaXNtaXNzZWQgKHZpYSBXTV9DTE9TRSAvIEFwcGxlU2NyaXB0IC8geGRvdG9vbCkgc28gdGhleVxuICogZG9uJ3QgYmxvY2sgdGhlIG1haW4gcHJvY2VzcywgYW5kIHJlY29yZGVkIGZvciBsYXRlciBhc3NlcnRpb24uXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MsIG1hY09TLCBhbmQgTGludXguXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXRpdmVEaWFsb2dNb25pdG9yIHtcbiAgcHJpdmF0ZSBldmVudHM6IE5hdGl2ZURpYWxvZ0V2ZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNQb2xsaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFzc2VydHMgdGhhdCBubyBuYXRpdmUgZGlhbG9ncyB3ZXJlIGRldGVjdGVkIGR1cmluZyBtb25pdG9yaW5nLlxuICAgKlxuICAgKiBAdGhyb3dzIElmIGFueSBkaWFsb2dzIHdlcmUgcmVjb3JkZWQuXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0Tm9EaWFsb2dzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbnMgPSB0aGlzLmV2ZW50c1xuICAgICAgLm1hcCgoZGlhbG9nRXZlbnQpID0+IGAgIC0gXCIke2RpYWxvZ0V2ZW50LnRpdGxlfVwiIGF0ICR7bmV3IERhdGUoZGlhbG9nRXZlbnQudGltZXN0YW1wKS50b0lTT1N0cmluZygpfWApXG4gICAgICAuam9pbignXFxuJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBOYXRpdmUgZGlhbG9nKHMpIGRldGVjdGVkIGR1cmluZyB0ZXN0OlxcbiR7ZGVzY3JpcHRpb25zfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRpYWxvZyBldmVudHMgcmVjb3JkZWQgc2luY2UgdGhlIG1vbml0b3Igc3RhcnRlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlY29yZGVkIGRpYWxvZyBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0RXZlbnRzKCk6IHJlYWRvbmx5IE5hdGl2ZURpYWxvZ0V2ZW50W10ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHJlY29yZGVkIGV2ZW50cyB3aXRob3V0IHN0b3BwaW5nIHRoZSBtb25pdG9yLlxuICAgKi9cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRzID0gW107XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHBvbGxpbmcgZm9yIG5hdGl2ZSBkaWFsb2dzIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgcHVibGljIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnBvbGwoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8vIElnbm9yZSBwb2xsIGVycm9ycy5cbiAgICAgIH0pO1xuICAgIH0sIFBPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBwb2xsaW5nIGFuZCByZXR1cm5zIGFsbCByZWNvcmRlZCBldmVudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWNvcmRlZCBkaWFsb2cgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIHN0b3AoKTogcmVhZG9ubHkgTmF0aXZlRGlhbG9nRXZlbnRbXSB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgICAgdGhpcy5pbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ldmVudHM7XG4gIH1cblxuICAvKipcbiAgICogU2luZ2xlIHBvbGwgaXRlcmF0aW9uOiBkZXRlY3RzIGFuZCBkaXNtaXNzZXMgYW55IE9ic2lkaWFuIGRpYWxvZyB3aW5kb3dzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwb2xsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzUG9sbGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzUG9sbGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpdGxlcyA9IGF3YWl0IGdldE9ic2lkaWFuV2luZG93VGl0bGVzKCk7XG4gICAgICBmb3IgKGNvbnN0IHRpdGxlIG9mIHRpdGxlcykge1xuICAgICAgICBpZiAoIURJQUxPR19USVRMRVMuaGFzKHRpdGxlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHMucHVzaCh7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgdGl0bGUgfSk7XG4gICAgICAgIGF3YWl0IGRpc21pc3NEaWFsb2dCeVRpdGxlKHRpdGxlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFByb2Nlc3MgbWF5IG5vdCBiZSBydW5uaW5nIFx1MjAxNCBpZ25vcmUuXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNQb2xsaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGlzbWlzc2VzIGEgbmF0aXZlIGRpYWxvZyB3aW5kb3cgYnkgaXRzIHRpdGxlLlxuICpcbiAqIEBwYXJhbSB0aXRsZSAtIFRoZSB3aW5kb3cgdGl0bGUgdG8gZGlzbWlzcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0RpYWxvZ0J5VGl0bGUodGl0bGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGF3YWl0IGRpc21pc3NEaWFsb2dXaW5kb3dzKHRpdGxlKTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIGF3YWl0IGRpc21pc3NEaWFsb2dNYWModGl0bGUpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGRpc21pc3NEaWFsb2dMaW51eCh0aXRsZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNtaXNzZXMgYSBkaWFsb2cgb24gTGludXggdmlhIHhkb3Rvb2wuXG4gKlxuICogQHBhcmFtIHRpdGxlIC0gVGhlIHdpbmRvdyB0aXRsZSB0byBkaXNtaXNzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNtaXNzRGlhbG9nTGludXgodGl0bGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBlc2NhcGVkVGl0bGUgPSB0aXRsZS5yZXBsYWNlQWxsKCdcIicsIFN0cmluZy5yYXdgXFxcImApO1xuICBhd2FpdCBleGVjKFxuICAgIGB4ZG90b29sIHNlYXJjaCAtLW5hbWUgXCIke2VzY2FwZWRUaXRsZX1cIiB3aW5kb3dhY3RpdmF0ZSAtLXN5bmMga2V5IFJldHVybiAyPi9kZXYvbnVsbCB8fCB0cnVlYCxcbiAgICB7IGlzUXVpZXQ6IHRydWUgfVxuICApO1xufVxuXG4vKipcbiAqIERpc21pc3NlcyBhIGRpYWxvZyBvbiBtYWNPUyB2aWEgQXBwbGVTY3JpcHQuXG4gKlxuICogQHBhcmFtIHRpdGxlIC0gVGhlIHdpbmRvdyB0aXRsZSB0byBkaXNtaXNzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNtaXNzRGlhbG9nTWFjKHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXNjYXBlZFRpdGxlID0gdGl0bGUucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbiAgYXdhaXQgZXhlYyhcbiAgICBgb3Nhc2NyaXB0IC1lICd0ZWxsIGFwcGxpY2F0aW9uIFwiU3lzdGVtIEV2ZW50c1wiIHRvIHRlbGwgcHJvY2VzcyBcIk9ic2lkaWFuXCIgdG8gY2xpY2sgYnV0dG9uIDEgb2Ygd2luZG93IFwiJHtlc2NhcGVkVGl0bGV9XCInYCxcbiAgICB7IGlzUXVpZXQ6IHRydWUgfVxuICApO1xufVxuXG4vKipcbiAqIERpc21pc3NlcyBhIGRpYWxvZyBvbiBXaW5kb3dzIGJ5IHNlbmRpbmcgV01fQ0xPU0UgdmlhIFdpbjMyIEFQSS5cbiAqXG4gKiBAcGFyYW0gdGl0bGUgLSBUaGUgd2luZG93IHRpdGxlIHRvIGRpc21pc3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc21pc3NEaWFsb2dXaW5kb3dzKHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXNjYXBlZFRpdGxlID0gdGl0bGUucmVwbGFjZUFsbCgnXFwnJywgJ1xcJ1xcJycpO1xuICBjb25zdCBzY3JpcHQgPSBbXG4gICAgJ0FkZC1UeXBlIC1UeXBlRGVmaW5pdGlvbiBAXCInLFxuICAgICd1c2luZyBTeXN0ZW07IHVzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsnLFxuICAgICdwdWJsaWMgY2xhc3MgRGxnQ2xvc2UgeycsXG4gICAgJyAgW0RsbEltcG9ydChcInVzZXIzMi5kbGxcIildIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIEludFB0ciBGaW5kV2luZG93KHN0cmluZyBjLCBzdHJpbmcgdCk7JyxcbiAgICAnICBbRGxsSW1wb3J0KFwidXNlcjMyLmRsbFwiKV0gcHVibGljIHN0YXRpYyBleHRlcm4gSW50UHRyIFNlbmRNZXNzYWdlKEludFB0ciBoLCB1aW50IG0sIEludFB0ciB3LCBJbnRQdHIgbCk7JyxcbiAgICAnfScsXG4gICAgJ1wiQCcsXG4gICAgYCRoID0gW0RsZ0Nsb3NlXTo6RmluZFdpbmRvdygkbnVsbCwgJyR7ZXNjYXBlZFRpdGxlfScpYCxcbiAgICAnaWYgKCRoIC1uZSBbSW50UHRyXTo6WmVybykgeyBbRGxnQ2xvc2VdOjpTZW5kTWVzc2FnZSgkaCwgMHgwMDEwLCBbSW50UHRyXTo6WmVybywgW0ludFB0cl06Olplcm8pIH0nXG4gIF0uam9pbignOyAnKTtcbiAgYXdhaXQgZXhlYyhgcG93ZXJzaGVsbCAtQ29tbWFuZCBcIiR7c2NyaXB0fVwiYCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2luZG93IHRpdGxlcyBvZiBhbGwgT2JzaWRpYW4gcHJvY2VzcyB3aW5kb3dzLlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHdpbmRvdyB0aXRsZSBzdHJpbmdzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRPYnNpZGlhbldpbmRvd1RpdGxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1RpdGxlc1dpbmRvd3MoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBnZXRXaW5kb3dUaXRsZXNNYWMoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRXaW5kb3dUaXRsZXNMaW51eCgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgT2JzaWRpYW4gd2luZG93IHRpdGxlcyBvbiBMaW51eCB2aWEgeGRvdG9vbC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB3aW5kb3cgdGl0bGUgc3RyaW5ncy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93VGl0bGVzTGludXgoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKFxuICAgICd4ZG90b29sIHNlYXJjaCAtLW5hbWUgXCJPYnNpZGlhblwiIGdldHdpbmRvd25hbWUgMj4vZGV2L251bGwgfHwgdHJ1ZScsXG4gICAgeyBpc1F1aWV0OiB0cnVlIH1cbiAgKTtcbiAgcmV0dXJuIG91dHB1dC50cmltKCkuc3BsaXQoJ1xcbicpLmZpbHRlcihCb29sZWFuKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE9ic2lkaWFuIHdpbmRvdyB0aXRsZXMgb24gbWFjT1MgdmlhIEFwcGxlU2NyaXB0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHdpbmRvdyB0aXRsZSBzdHJpbmdzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dUaXRsZXNNYWMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKFxuICAgICdvc2FzY3JpcHQgLWUgXFwndGVsbCBhcHBsaWNhdGlvbiBcIlN5c3RlbSBFdmVudHNcIiB0byBnZXQgbmFtZSBvZiBldmVyeSB3aW5kb3cgb2YgKHByb2Nlc3NlcyB3aG9zZSBuYW1lIGlzIFwiT2JzaWRpYW5cIilcXCcnLFxuICAgIHsgaXNRdWlldDogdHJ1ZSB9XG4gICk7XG4gIHJldHVybiBvdXRwdXQudHJpbSgpLnNwbGl0KCcsICcpLmZpbHRlcihCb29sZWFuKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE9ic2lkaWFuIHdpbmRvdyB0aXRsZXMgb24gV2luZG93cyB2aWEgR2V0LVByb2Nlc3MuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygd2luZG93IHRpdGxlIHN0cmluZ3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1RpdGxlc1dpbmRvd3MoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKFxuICAgICdwb3dlcnNoZWxsIC1Db21tYW5kIFwiR2V0LVByb2Nlc3MgT2JzaWRpYW4gLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfCBXaGVyZS1PYmplY3QgeyAkXy5NYWluV2luZG93VGl0bGUgLW5lIFxcJ1xcJyB9IHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgTWFpbldpbmRvd1RpdGxlXCInLFxuICAgIHsgaXNRdWlldDogdHJ1ZSB9XG4gICk7XG4gIHJldHVybiBvdXRwdXQudHJpbSgpLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBLDBCQUFvQjtBQUVwQixrQkFBcUI7QUFvQnJCLE1BQU0sZ0JBQWdCLG9CQUFJLElBQUk7QUFBQSxFQUM1QjtBQUFBLEVBQ0E7QUFDRixDQUFDO0FBRUQsTUFBTSxnQ0FBZ0M7QUFVL0IsTUFBTSxvQkFBb0I7QUFBQSxFQUN2QixTQUE4QixDQUFDO0FBQUEsRUFDL0I7QUFBQSxFQUNBLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPYixrQkFBd0I7QUFDN0IsUUFBSSxLQUFLLE9BQU8sV0FBVyxHQUFHO0FBQzVCO0FBQUEsSUFDRjtBQUVBLFVBQU0sZUFBZSxLQUFLLE9BQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsUUFBUSxZQUFZLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxTQUFTLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFDckcsS0FBSyxJQUFJO0FBQ1osVUFBTSxJQUFJLE1BQU07QUFBQSxFQUEyQyxZQUFZLEVBQUU7QUFB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
@@ -1,66 +0,0 @@
1
- /**
2
- * @file
3
- *
4
- * Monitors for native OS dialogs (Electron `dialog.showErrorBox`, `dialog.showMessageBoxSync`)
5
- * from the Obsidian process. These dialogs block the main process and cannot be intercepted
6
- * from the renderer via `@electron/remote`.
7
- *
8
- * Uses platform-specific process window title inspection to detect dialogs, and
9
- * auto-dismisses them so they don't block test execution.
10
- */
11
- /**
12
- * A captured native dialog event.
13
- */
14
- export interface NativeDialogEvent {
15
- /**
16
- * When the dialog was detected.
17
- */
18
- timestamp: number;
19
- /**
20
- * The window title of the dialog.
21
- */
22
- title: string;
23
- }
24
- /**
25
- * Monitors the Obsidian process for native OS dialogs by polling process window titles.
26
- *
27
- * Detected dialogs are auto-dismissed (via WM_CLOSE / AppleScript / xdotool) so they
28
- * don't block the main process, and recorded for later assertion.
29
- *
30
- * Cross-platform: works on Windows, macOS, and Linux.
31
- */
32
- export declare class NativeDialogMonitor {
33
- private events;
34
- private intervalId;
35
- private isPolling;
36
- /**
37
- * Asserts that no native dialogs were detected during monitoring.
38
- *
39
- * @throws If any dialogs were recorded.
40
- */
41
- assertNoDialogs(): void;
42
- /**
43
- * Returns all dialog events recorded since the monitor started.
44
- *
45
- * @returns The recorded dialog events.
46
- */
47
- getEvents(): readonly NativeDialogEvent[];
48
- /**
49
- * Resets the recorded events without stopping the monitor.
50
- */
51
- reset(): void;
52
- /**
53
- * Starts polling for native dialogs in the background.
54
- */
55
- start(): void;
56
- /**
57
- * Stops polling and returns all recorded events.
58
- *
59
- * @returns The recorded dialog events.
60
- */
61
- stop(): readonly NativeDialogEvent[];
62
- /**
63
- * Single poll iteration: detects and dismisses any Obsidian dialog windows.
64
- */
65
- private poll;
66
- }
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
- var obsidian_namespace_exports = {};
16
- module.exports = __toCommonJS(obsidian_namespace_exports);
17
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLW5hbWVzcGFjZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIG5hbWVzcGFjZVxuICogdXNlZCBpbnNpZGUgdGhlIE9ic2lkaWFuIHByb2Nlc3MuIEFsbCBsaWJyYXJ5IHN0YXRlIGFuZCByZWdpc3RlcmVkIGhlbHBlclxuICogZnVuY3Rpb25zIGxpdmUgdW5kZXIgdGhpcyBzaW5nbGUgbmFtZXNwYWNlIHRvIGF2b2lkIHBvbGx1dGluZyBgd2luZG93YC5cbiAqL1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSByZWdpc3RlcmVkIGBldmFsV3JhcHBlcmAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbFdyYXBwZXJOYW1lc3BhY2VQYXJhbXMge1xuICAvKipcbiAgVGhlIHVzZXIgZnVuY3Rpb24gdG8gZXZhbHVhdGUuXG4gICAqL1xuICBjYWxsYmFjayhpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB1bmtub3duO1xuICAvKipcbiAgT3B0aW9uYWwgY29udGV4dCBJRCBmb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dElkPzogc3RyaW5nO1xuICAvKipcbiAgVXNlci1zdXBwbGllZCBhcmd1bWVudHMgdG8gcGFzcyB0byBgY2FsbGJhY2tgLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZS5pcGNTZW5kU3luY30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBjU2VuZFN5bmNOYW1lc3BhY2VQYXJhbXMge1xuICAvKipcbiAgVGhlIElQQyBjaGFubmVsIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsOiBzdHJpbmc7XG4gIC8qKlxuICBUaGUgSVBDIGFyZ3VtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5uZWxBcmd1bWVudHM6IHVua25vd25bXTtcbn1cblxuLyoqXG4gKiBIb2xkZXIgaW50ZXJmYWNlIGZvciB0eXBlLXNhZmUgYWNjZXNzIHRvIGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ2AuXG4gKiBVc2Ugd2l0aCBgUGFydGlhbDxPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hvbGRlcj5gIHRvIHNhZmVseSBjaGVjayBleGlzdGVuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXIge1xuICBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nOiBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBUaGUgbmFtZXNwYWNlIG9iamVjdCBzdG9yZWQgb24gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYFxuICogaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBSZWdpc3RlcmVkIG9uY2UgdmlhIHtAbGluayBib290c3RyYXBOYW1lc3BhY2V9XG4gKiBhbmQgcmV1c2VkIGFjcm9zcyBhbGwgc3Vic2VxdWVudCBgZXZhbEluT2JzaWRpYW5gIGNhbGxzLlxuICpcbiAqIEFsbCBmdW5jdGlvbnMgYWNjZXNzIGB3aW5kb3cuYXBwYCBkaXJlY3RseSBcdTIwMTQgY2FsbGVycyBkbyBub3QgbmVlZCB0byBwYXNzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlIHtcbiAgLyoqXG4gICAqIFBlcnNpc3RlbnQgY29udGV4dCBvYmplY3RzIGtleWVkIGJ5IHtAbGluayBDb250ZXh0SWR9IHN0cmluZy5cbiAgICogUHJlc2VydmVkIGFjcm9zcyB2ZXJzaW9uIHVwZ3JhZGVzIHNvIGxpdmUgY29udGV4dCByZWZlcmVuY2VzIHN1cnZpdmUuXG4gICAqL1xuICBjb250ZXh0czogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgY3VycmVudCBFbGVjdHJvbiB3aW5kb3cuXG4gICAqL1xuICBkZXN0cm95Q3VycmVudFdpbmRvdygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBXYWl0cyBmb3IgdGhlIE9ic2lkaWFuIHdvcmtzcGFjZSBsYXlvdXQgdG8gYmUgcmVhZHkuXG4gICAqL1xuICBlbnN1cmVMYXlvdXRSZWFkeSgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBlcnJvciBpbnRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIHdpdGggaXRzIGZ1bGwgc3RhY2sgdHJhY2UsXG4gICAqIHJlY3Vyc2l2ZSBgY2F1c2VgIGNoYWluLCBhbmQgdGhlIGFnZ3JlZ2F0ZWQgZXJyb3JzIG9mIGFuIGBBZ2dyZWdhdGVFcnJvcmAuXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLlxuICAgKiBAcmV0dXJucyBBIGZvcm1hdHRlZCBlcnJvciBzdHJpbmcuXG4gICAqL1xuICBlcnJvclRvU3RyaW5nKGVycm9yOiB1bmtub3duKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9wLWxldmVsIHdyYXBwZXIgdGhhdCBzZXRzIHVwIGNvbnRleHQsIHJlc29sdmVzIHRoZSBvYnNpZGlhbiBtb2R1bGUsXG4gICAqIGNhbGxzIHRoZSB1c2VyJ3MgZnVuY3Rpb24sIGFuZCByZXR1cm5zIGEgSlNPTiBlbnZlbG9wZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgaW5jbHVkaW5nIHRoZSB1c2VyJ3MgZnVuY3Rpb24sIGlucHV0LCBhbmQgY29udGV4dCBJRC5cbiAgICogQHJldHVybnMgQSBKU09OLXN0cmluZ2lmaWVkIHJlc3VsdCBlbnZlbG9wZS5cbiAgICovXG4gIGV2YWxXcmFwcGVyKHBhcmFtczogRXZhbFdyYXBwZXJOYW1lc3BhY2VQYXJhbXMpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBgb2JzaWRpYW5gIG1vZHVsZSBhdCBydW50aW1lIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGBvYnNpZGlhbmAgbW9kdWxlLlxuICAgKi9cbiAgZ2V0T2JzaWRpYW5Nb2R1bGUoKTogUHJvbWlzZTx1bmtub3duPjtcblxuICAvKipcbiAgICogU2VuZHMgYW4gSVBDIG1lc3NhZ2Ugc3luY2hyb25vdXNseSB2aWEgRWxlY3Ryb24ncyBgaXBjUmVuZGVyZXJgLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIElQQyBjaGFubmVsIGFuZCBhcmd1bWVudHMuXG4gICAqL1xuICBpcGNTZW5kU3luYyhwYXJhbXM6IElwY1NlbmRTeW5jTmFtZXNwYWNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQ2FjaGVkIGBvYnNpZGlhbmAgbW9kdWxlLCBzZXQgYnkge0BsaW5rIGdldE9ic2lkaWFuTW9kdWxlfSBvbiBmaXJzdCByZXNvbHV0aW9uLlxuICAgKi9cbiAgb2JzaWRpYW5Nb2R1bGU/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YXVsdCdzIGJhc2UgcGF0aCBhcyBhIEpTT04tZW5jb2RlZCBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBKU09OLWVuY29kZWQgYmFzZSBwYXRoLlxuICAgKi9cbiAgcG9sbFZhdWx0QmFzZVBhdGgoKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBTZXRzIGEgYGxvY2FsU3RvcmFnZWAgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBrZXkgYW5kIHZhbHVlIHRvIHNldC5cbiAgICovXG4gIHNldExvY2FsU3RvcmFnZUl0ZW0ocGFyYW1zOiBTZXRMb2NhbFN0b3JhZ2VJdGVtTmFtZXNwYWNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIGxpYnJhcnkgdmVyc2lvbiB0aGF0IHdhcyB1c2VkIHRvIGJvb3RzdHJhcCB0aGlzIG5hbWVzcGFjZS5cbiAgICogVXNlZCB0byBkZXRlY3QgdmVyc2lvbiBtaXNtYXRjaGVzIGFuZCByZS1pbml0aWFsaXplLlxuICAgKi9cbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZS5zZXRMb2NhbFN0b3JhZ2VJdGVtfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXRMb2NhbFN0b3JhZ2VJdGVtTmFtZXNwYWNlUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBsb2NhbFN0b3JhZ2Uga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIC8qKlxuICBUaGUgbG9jYWxTdG9yYWdlIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,128 +0,0 @@
1
- /**
2
- * @file
3
- *
4
- * Type definitions for the `window.__obsidianIntegrationTesting` namespace
5
- * used inside the Obsidian process. All library state and registered helper
6
- * functions live under this single namespace to avoid polluting `window`.
7
- */
8
- /**
9
- * Parameters for the registered `evalWrapper` function.
10
- */
11
- export interface EvalWrapperNamespaceParams {
12
- /**
13
- The user function to evaluate.
14
- */
15
- callback(input: Record<string, unknown>): unknown;
16
- /**
17
- Optional context ID for persistent storage.
18
- */
19
- readonly contextId?: string;
20
- /**
21
- User-supplied arguments to pass to `callback`.
22
- */
23
- readonly input: Record<string, unknown>;
24
- }
25
- /**
26
- * Parameters for {@link ObsidianIntegrationTestingNamespace.ipcSendSync}.
27
- */
28
- export interface IpcSendSyncNamespaceParams {
29
- /**
30
- The IPC channel name.
31
- */
32
- readonly channel: string;
33
- /**
34
- The IPC arguments.
35
- */
36
- readonly channelArguments: unknown[];
37
- }
38
- /**
39
- * Holder interface for type-safe access to `window.__obsidianIntegrationTesting`.
40
- * Use with `Partial<ObsidianIntegrationTestingHolder>` to safely check existence.
41
- */
42
- export interface ObsidianIntegrationTestingHolder {
43
- __obsidianIntegrationTesting: ObsidianIntegrationTestingNamespace;
44
- }
45
- /**
46
- * The namespace object stored on `window.__obsidianIntegrationTesting`
47
- * inside the Obsidian process. Registered once via {@link bootstrapNamespace}
48
- * and reused across all subsequent `evalInObsidian` calls.
49
- *
50
- * All functions access `window.app` directly — callers do not need to pass it.
51
- */
52
- export interface ObsidianIntegrationTestingNamespace {
53
- /**
54
- * Persistent context objects keyed by {@link ContextId} string.
55
- * Preserved across version upgrades so live context references survive.
56
- */
57
- contexts: Record<string, Record<string, unknown>>;
58
- /**
59
- * Destroys the current Electron window.
60
- */
61
- destroyCurrentWindow(): Promise<void>;
62
- /**
63
- * Waits for the Obsidian workspace layout to be ready.
64
- */
65
- ensureLayoutReady(): Promise<void>;
66
- /**
67
- * Converts an error into a human-readable string with its full stack trace,
68
- * recursive `cause` chain, and the aggregated errors of an `AggregateError`.
69
- *
70
- * @param error - The error to convert to a string.
71
- * @returns A formatted error string.
72
- */
73
- errorToString(error: unknown): string;
74
- /**
75
- * The top-level wrapper that sets up context, resolves the obsidian module,
76
- * calls the user's function, and returns a JSON envelope.
77
- *
78
- * @param params - Parameters including the user's function, input, and context ID.
79
- * @returns A JSON-stringified result envelope.
80
- */
81
- evalWrapper(params: EvalWrapperNamespaceParams): Promise<string>;
82
- /**
83
- * Resolves the `obsidian` module at runtime inside the Obsidian process.
84
- *
85
- * @returns The `obsidian` module.
86
- */
87
- getObsidianModule(): Promise<unknown>;
88
- /**
89
- * Sends an IPC message synchronously via Electron's `ipcRenderer`.
90
- *
91
- * @param params - The IPC channel and arguments.
92
- */
93
- ipcSendSync(params: IpcSendSyncNamespaceParams): Promise<void>;
94
- /**
95
- * Cached `obsidian` module, set by {@link getObsidianModule} on first resolution.
96
- */
97
- obsidianModule?: unknown;
98
- /**
99
- * Returns the vault's base path as a JSON-encoded string.
100
- *
101
- * @returns The JSON-encoded base path.
102
- */
103
- pollVaultBasePath(): Promise<string>;
104
- /**
105
- * Sets a `localStorage` item.
106
- *
107
- * @param params - The key and value to set.
108
- */
109
- setLocalStorageItem(params: SetLocalStorageItemNamespaceParams): Promise<void>;
110
- /**
111
- * The library version that was used to bootstrap this namespace.
112
- * Used to detect version mismatches and re-initialize.
113
- */
114
- version: string;
115
- }
116
- /**
117
- * Parameters for {@link ObsidianIntegrationTestingNamespace.setLocalStorageItem}.
118
- */
119
- export interface SetLocalStorageItemNamespaceParams {
120
- /**
121
- The localStorage key.
122
- */
123
- readonly key: string;
124
- /**
125
- The localStorage value.
126
- */
127
- readonly value: string;
128
- }
@@ -1,66 +0,0 @@
1
- /**
2
- * @file
3
- *
4
- * Monitors for native OS dialogs (Electron `dialog.showErrorBox`, `dialog.showMessageBoxSync`)
5
- * from the Obsidian process. These dialogs block the main process and cannot be intercepted
6
- * from the renderer via `@electron/remote`.
7
- *
8
- * Uses platform-specific process window title inspection to detect dialogs, and
9
- * auto-dismisses them so they don't block test execution.
10
- */
11
- /**
12
- * A captured native dialog event.
13
- */
14
- export interface NativeDialogEvent {
15
- /**
16
- * When the dialog was detected.
17
- */
18
- timestamp: number;
19
- /**
20
- * The window title of the dialog.
21
- */
22
- title: string;
23
- }
24
- /**
25
- * Monitors the Obsidian process for native OS dialogs by polling process window titles.
26
- *
27
- * Detected dialogs are auto-dismissed (via WM_CLOSE / AppleScript / xdotool) so they
28
- * don't block the main process, and recorded for later assertion.
29
- *
30
- * Cross-platform: works on Windows, macOS, and Linux.
31
- */
32
- export declare class NativeDialogMonitor {
33
- private events;
34
- private intervalId;
35
- private isPolling;
36
- /**
37
- * Asserts that no native dialogs were detected during monitoring.
38
- *
39
- * @throws If any dialogs were recorded.
40
- */
41
- assertNoDialogs(): void;
42
- /**
43
- * Returns all dialog events recorded since the monitor started.
44
- *
45
- * @returns The recorded dialog events.
46
- */
47
- getEvents(): readonly NativeDialogEvent[];
48
- /**
49
- * Resets the recorded events without stopping the monitor.
50
- */
51
- reset(): void;
52
- /**
53
- * Starts polling for native dialogs in the background.
54
- */
55
- start(): void;
56
- /**
57
- * Stops polling and returns all recorded events.
58
- *
59
- * @returns The recorded dialog events.
60
- */
61
- stop(): readonly NativeDialogEvent[];
62
- /**
63
- * Single poll iteration: detects and dismisses any Obsidian dialog windows.
64
- */
65
- private poll;
66
- }