obsidian-integration-testing 9.2.2 → 10.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 (264) hide show
  1. package/README.md +30 -1096
  2. package/dist/lib/cjs/appium-dependencies.cjs +5 -5
  3. package/dist/lib/cjs/appium-dependencies.d.cts +4 -2
  4. package/dist/lib/cjs/appium-session-config.cjs +1 -1
  5. package/dist/lib/cjs/asar-fallback-detection.cjs +4 -4
  6. package/dist/lib/cjs/asar-fallback-detection.d.cts +15 -7
  7. package/dist/lib/cjs/avd-list.cjs +1 -1
  8. package/dist/lib/cjs/avd-list.d.cts +6 -2
  9. package/dist/lib/cjs/capture-obsidian-screenshot.cjs +60 -0
  10. package/dist/lib/cjs/capture-obsidian-screenshot.d.cts +53 -0
  11. package/dist/lib/cjs/capture-screenshot.cjs +82 -0
  12. package/dist/lib/cjs/capture-screenshot.d.cts +99 -0
  13. package/dist/lib/cjs/cli.cjs +4 -4
  14. package/dist/lib/cjs/compatibility-options.cjs +13 -13
  15. package/dist/lib/cjs/compatibility-options.d.cts +24 -12
  16. package/dist/lib/cjs/connect-to-cdp.cjs +10 -4
  17. package/dist/lib/cjs/connect-to-cdp.d.cts +19 -6
  18. package/dist/lib/cjs/context-id.cjs +5 -5
  19. package/dist/lib/cjs/context-id.d.cts +1 -1
  20. package/dist/lib/cjs/context-provider.cjs +5 -5
  21. package/dist/lib/cjs/context-provider.d.cts +4 -4
  22. package/dist/lib/cjs/demo-vault-populate.cjs +5 -5
  23. package/dist/lib/cjs/demo-vault-populate.d.cts +4 -4
  24. package/dist/lib/cjs/demo-vault-tree.cjs +4 -4
  25. package/dist/lib/cjs/demo-vault-tree.d.cts +3 -3
  26. package/dist/lib/cjs/device-readiness.cjs +3 -3
  27. package/dist/lib/cjs/device-readiness.d.cts +7 -3
  28. package/dist/lib/cjs/ecmascript-version.cjs +1 -1
  29. package/dist/lib/cjs/electron-compatibility.cjs +4 -4
  30. package/dist/lib/cjs/electron-compatibility.d.cts +33 -17
  31. package/dist/lib/cjs/emulator-arguments.cjs +36 -0
  32. package/dist/lib/{esm/emulator-args.d.mts → cjs/emulator-arguments.d.cts} +6 -4
  33. package/dist/lib/cjs/enable-plugin.cjs +29 -29
  34. package/dist/lib/cjs/enable-plugin.d.cts +6 -6
  35. package/dist/lib/cjs/eval-in-obsidian.cjs +9 -9
  36. package/dist/lib/cjs/eval-in-obsidian.d.cts +23 -23
  37. package/dist/lib/cjs/exec.cjs +49 -53
  38. package/dist/lib/cjs/exec.d.cts +9 -9
  39. package/dist/lib/cjs/function-expression.cjs +8 -8
  40. package/dist/lib/cjs/function-expression.d.cts +4 -4
  41. package/dist/lib/cjs/generate-function-call.cjs +6 -6
  42. package/dist/lib/cjs/generate-function-call.d.cts +15 -9
  43. package/dist/lib/cjs/global-setup-core.cjs +43 -43
  44. package/dist/lib/cjs/global-setup-core.d.cts +19 -9
  45. package/dist/lib/cjs/incompatible-installer-version-error.cjs +10 -4
  46. package/dist/lib/cjs/incompatible-installer-version-error.d.cts +18 -6
  47. package/dist/lib/cjs/index.cjs +22 -10
  48. package/dist/lib/cjs/index.d.cts +12 -8
  49. package/dist/lib/cjs/installer-asset.cjs +4 -4
  50. package/dist/lib/cjs/installer-asset.d.cts +21 -7
  51. package/dist/lib/cjs/installer-compatibility.cjs +4 -4
  52. package/dist/lib/cjs/installer-compatibility.d.cts +36 -18
  53. package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +3 -3
  54. package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +1 -1
  55. package/dist/lib/cjs/jest/global-setup.cjs +11 -11
  56. package/dist/lib/cjs/jest/global-setup.d.cts +12 -8
  57. package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +2 -3
  58. package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +1 -2
  59. package/dist/lib/cjs/jest/global-teardown.cjs +2 -3
  60. package/dist/lib/cjs/jest/global-teardown.d.cts +1 -2
  61. package/dist/lib/cjs/jest/setup.cjs +2 -2
  62. package/dist/lib/cjs/jest/setup.d.cts +1 -1
  63. package/dist/lib/cjs/json-with-functions.cjs +7 -7
  64. package/dist/lib/cjs/leftover-cleanup.cjs +14 -14
  65. package/dist/lib/cjs/leftover-cleanup.d.cts +42 -20
  66. package/dist/lib/cjs/library.cjs +2 -2
  67. package/dist/lib/cjs/namespace-bootstrap.cjs +46 -40
  68. package/dist/lib/cjs/native-dialog-monitor.cjs +15 -13
  69. package/dist/lib/cjs/normalize-optional-properties.cjs +3 -3
  70. package/dist/lib/cjs/normalize-optional-properties.d.cts +2 -2
  71. package/dist/lib/cjs/obsidian-config.cjs +30 -31
  72. package/dist/lib/cjs/obsidian-config.d.cts +8 -8
  73. package/dist/lib/cjs/obsidian-executable.cjs +2 -2
  74. package/dist/lib/cjs/obsidian-installer.cjs +37 -37
  75. package/dist/lib/cjs/obsidian-installer.d.cts +7 -3
  76. package/dist/lib/cjs/obsidian-instance.cjs +3 -3
  77. package/dist/lib/cjs/obsidian-instance.d.cts +18 -8
  78. package/dist/lib/cjs/obsidian-metadata.cjs +28 -1
  79. package/dist/lib/cjs/obsidian-metadata.d.cts +36 -12
  80. package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
  81. package/dist/lib/cjs/obsidian-namespace.d.cts +25 -11
  82. package/dist/lib/cjs/obsidian-version-switch.cjs +9 -9
  83. package/dist/lib/cjs/obsidian-version-switch.d.cts +14 -10
  84. package/dist/lib/cjs/obsidian-version.cjs +3 -3
  85. package/dist/lib/cjs/obsidian-version.d.cts +15 -5
  86. package/dist/lib/cjs/owned-vault-seed.cjs +1 -1
  87. package/dist/lib/cjs/owned-vault-seed.d.cts +24 -8
  88. package/dist/lib/cjs/parent-liveness.cjs +4 -4
  89. package/dist/lib/cjs/parent-liveness.d.cts +7 -3
  90. package/dist/lib/cjs/poll-in-obsidian.cjs +5 -5
  91. package/dist/lib/cjs/poll-in-obsidian.d.cts +12 -12
  92. package/dist/lib/cjs/poll-until.cjs +1 -1
  93. package/dist/lib/cjs/poll-until.d.cts +21 -7
  94. package/dist/lib/cjs/process-exit-message.cjs +1 -1
  95. package/dist/lib/cjs/process-exit-message.d.cts +21 -7
  96. package/dist/lib/cjs/renderer-boot-detection.cjs +9 -9
  97. package/dist/lib/cjs/renderer-boot-detection.d.cts +31 -27
  98. package/dist/lib/cjs/renderer-failed-to-initialize-error.cjs +1 -1
  99. package/dist/lib/cjs/renderer-failed-to-initialize-error.d.cts +1 -1
  100. package/dist/lib/cjs/setup-lock.cjs +26 -26
  101. package/dist/lib/cjs/setup-lock.d.cts +6 -2
  102. package/dist/lib/cjs/silent-asar-fallback-error.cjs +7 -3
  103. package/dist/lib/cjs/silent-asar-fallback-error.d.cts +12 -4
  104. package/dist/lib/cjs/spawn-options.cjs +1 -1
  105. package/dist/lib/cjs/spawn-options.d.cts +3 -1
  106. package/dist/lib/cjs/strict-proxy.cjs +25 -25
  107. package/dist/lib/cjs/strict-proxy.d.cts +3 -3
  108. package/dist/lib/cjs/temporary-vault.cjs +166 -0
  109. package/dist/lib/cjs/{temp-vault.d.cts → temporary-vault.d.cts} +3 -3
  110. package/dist/lib/cjs/transport-appium.cjs +29 -7
  111. package/dist/lib/cjs/transport-appium.d.cts +23 -3
  112. package/dist/lib/cjs/transport-desktop-cdp.cjs +99 -57
  113. package/dist/lib/cjs/transport-desktop-cdp.d.cts +44 -17
  114. package/dist/lib/cjs/transport-factory.cjs +62 -63
  115. package/dist/lib/cjs/transport.cjs +1 -1
  116. package/dist/lib/cjs/transport.d.cts +15 -0
  117. package/dist/lib/cjs/type-guards.cjs +8 -3
  118. package/dist/lib/cjs/type-guards.d.cts +9 -2
  119. package/dist/lib/cjs/vault-path-match.cjs +9 -9
  120. package/dist/lib/cjs/vault-path-match.d.cts +11 -11
  121. package/dist/lib/cjs/version-matrix.cjs +1 -1
  122. package/dist/lib/cjs/version-matrix.d.cts +51 -17
  123. package/dist/lib/cjs/visibility.cjs +7 -7
  124. package/dist/lib/cjs/visibility.d.cts +5 -5
  125. package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +3 -3
  126. package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +2 -2
  127. package/dist/lib/cjs/vitest/global-setup.cjs +9 -9
  128. package/dist/lib/cjs/vitest/global-setup.d.cts +4 -4
  129. package/dist/lib/cjs/vitest/setup.cjs +2 -2
  130. package/dist/lib/cjs/vitest/typings.d.cts +2 -2
  131. package/dist/lib/esm/appium-dependencies.d.mts +4 -2
  132. package/dist/lib/esm/appium-dependencies.mjs +4 -4
  133. package/dist/lib/esm/appium-session-config.mjs +1 -1
  134. package/dist/lib/esm/asar-fallback-detection.d.mts +15 -7
  135. package/dist/lib/esm/asar-fallback-detection.mjs +3 -3
  136. package/dist/lib/esm/avd-list.d.mts +6 -2
  137. package/dist/lib/esm/avd-list.mjs +1 -1
  138. package/dist/lib/esm/capture-obsidian-screenshot.d.mts +53 -0
  139. package/dist/lib/esm/capture-obsidian-screenshot.mjs +29 -0
  140. package/dist/lib/esm/capture-screenshot.d.mts +99 -0
  141. package/dist/lib/esm/capture-screenshot.mjs +55 -0
  142. package/dist/lib/esm/cli.mjs +4 -4
  143. package/dist/lib/esm/compatibility-options.d.mts +24 -12
  144. package/dist/lib/esm/compatibility-options.mjs +10 -10
  145. package/dist/lib/esm/connect-to-cdp.d.mts +19 -6
  146. package/dist/lib/esm/connect-to-cdp.mjs +12 -6
  147. package/dist/lib/esm/context-id.d.mts +1 -1
  148. package/dist/lib/esm/context-id.mjs +5 -5
  149. package/dist/lib/esm/context-provider.d.mts +4 -4
  150. package/dist/lib/esm/context-provider.mjs +5 -5
  151. package/dist/lib/esm/demo-vault-populate.d.mts +4 -4
  152. package/dist/lib/esm/demo-vault-populate.mjs +5 -5
  153. package/dist/lib/esm/demo-vault-tree.d.mts +3 -3
  154. package/dist/lib/esm/demo-vault-tree.mjs +4 -4
  155. package/dist/lib/esm/device-readiness.d.mts +7 -3
  156. package/dist/lib/esm/device-readiness.mjs +3 -3
  157. package/dist/lib/esm/ecmascript-version.mjs +1 -1
  158. package/dist/lib/esm/electron-compatibility.d.mts +33 -17
  159. package/dist/lib/esm/electron-compatibility.mjs +3 -3
  160. package/dist/lib/{cjs/emulator-args.d.cts → esm/emulator-arguments.d.mts} +6 -4
  161. package/dist/lib/esm/emulator-arguments.mjs +12 -0
  162. package/dist/lib/esm/enable-plugin.d.mts +6 -6
  163. package/dist/lib/esm/enable-plugin.mjs +29 -29
  164. package/dist/lib/esm/eval-in-obsidian.d.mts +23 -23
  165. package/dist/lib/esm/eval-in-obsidian.mjs +9 -9
  166. package/dist/lib/esm/exec.d.mts +9 -9
  167. package/dist/lib/esm/exec.mjs +49 -53
  168. package/dist/lib/esm/function-expression.d.mts +4 -4
  169. package/dist/lib/esm/function-expression.mjs +8 -8
  170. package/dist/lib/esm/generate-function-call.d.mts +15 -9
  171. package/dist/lib/esm/generate-function-call.mjs +6 -6
  172. package/dist/lib/esm/global-setup-core.d.mts +19 -9
  173. package/dist/lib/esm/global-setup-core.mjs +45 -45
  174. package/dist/lib/esm/incompatible-installer-version-error.d.mts +18 -6
  175. package/dist/lib/esm/incompatible-installer-version-error.mjs +10 -4
  176. package/dist/lib/esm/index.d.mts +12 -8
  177. package/dist/lib/esm/index.mjs +21 -9
  178. package/dist/lib/esm/installer-asset.d.mts +21 -7
  179. package/dist/lib/esm/installer-asset.mjs +4 -4
  180. package/dist/lib/esm/installer-compatibility.d.mts +36 -18
  181. package/dist/lib/esm/installer-compatibility.mjs +3 -3
  182. package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +1 -1
  183. package/dist/lib/esm/jest/global-setup-no-plugin.mjs +3 -3
  184. package/dist/lib/esm/jest/global-setup.d.mts +12 -8
  185. package/dist/lib/esm/jest/global-setup.mjs +10 -10
  186. package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +1 -2
  187. package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +2 -3
  188. package/dist/lib/esm/jest/global-teardown.d.mts +1 -2
  189. package/dist/lib/esm/jest/global-teardown.mjs +2 -3
  190. package/dist/lib/esm/jest/setup.d.mts +1 -1
  191. package/dist/lib/esm/jest/setup.mjs +2 -2
  192. package/dist/lib/esm/json-with-functions.mjs +7 -7
  193. package/dist/lib/esm/leftover-cleanup.d.mts +42 -20
  194. package/dist/lib/esm/leftover-cleanup.mjs +12 -12
  195. package/dist/lib/esm/library.mjs +2 -2
  196. package/dist/lib/esm/namespace-bootstrap.mjs +46 -40
  197. package/dist/lib/esm/native-dialog-monitor.mjs +15 -13
  198. package/dist/lib/esm/normalize-optional-properties.d.mts +2 -2
  199. package/dist/lib/esm/normalize-optional-properties.mjs +3 -3
  200. package/dist/lib/esm/obsidian-config.d.mts +8 -8
  201. package/dist/lib/esm/obsidian-config.mjs +27 -28
  202. package/dist/lib/esm/obsidian-executable.mjs +2 -2
  203. package/dist/lib/esm/obsidian-installer.d.mts +7 -3
  204. package/dist/lib/esm/obsidian-installer.mjs +36 -36
  205. package/dist/lib/esm/obsidian-instance.d.mts +18 -8
  206. package/dist/lib/esm/obsidian-instance.mjs +3 -3
  207. package/dist/lib/esm/obsidian-metadata.d.mts +36 -12
  208. package/dist/lib/esm/obsidian-metadata.mjs +28 -1
  209. package/dist/lib/esm/obsidian-namespace.d.mts +25 -11
  210. package/dist/lib/esm/obsidian-version-switch.d.mts +14 -10
  211. package/dist/lib/esm/obsidian-version-switch.mjs +9 -9
  212. package/dist/lib/esm/obsidian-version.d.mts +15 -5
  213. package/dist/lib/esm/obsidian-version.mjs +3 -3
  214. package/dist/lib/esm/owned-vault-seed.d.mts +24 -8
  215. package/dist/lib/esm/owned-vault-seed.mjs +1 -1
  216. package/dist/lib/esm/parent-liveness.d.mts +7 -3
  217. package/dist/lib/esm/parent-liveness.mjs +3 -3
  218. package/dist/lib/esm/poll-in-obsidian.d.mts +12 -12
  219. package/dist/lib/esm/poll-in-obsidian.mjs +5 -5
  220. package/dist/lib/esm/poll-until.d.mts +21 -7
  221. package/dist/lib/esm/poll-until.mjs +1 -1
  222. package/dist/lib/esm/process-exit-message.d.mts +21 -7
  223. package/dist/lib/esm/process-exit-message.mjs +1 -1
  224. package/dist/lib/esm/renderer-boot-detection.d.mts +31 -27
  225. package/dist/lib/esm/renderer-boot-detection.mjs +7 -7
  226. package/dist/lib/esm/renderer-failed-to-initialize-error.d.mts +1 -1
  227. package/dist/lib/esm/renderer-failed-to-initialize-error.mjs +1 -1
  228. package/dist/lib/esm/setup-lock.d.mts +6 -2
  229. package/dist/lib/esm/setup-lock.mjs +26 -26
  230. package/dist/lib/esm/silent-asar-fallback-error.d.mts +12 -4
  231. package/dist/lib/esm/silent-asar-fallback-error.mjs +7 -3
  232. package/dist/lib/esm/spawn-options.d.mts +3 -1
  233. package/dist/lib/esm/spawn-options.mjs +1 -1
  234. package/dist/lib/esm/strict-proxy.d.mts +3 -3
  235. package/dist/lib/esm/strict-proxy.mjs +25 -25
  236. package/dist/lib/esm/{temp-vault.d.mts → temporary-vault.d.mts} +3 -3
  237. package/dist/lib/esm/temporary-vault.mjs +157 -0
  238. package/dist/lib/esm/transport-appium.d.mts +23 -3
  239. package/dist/lib/esm/transport-appium.mjs +32 -7
  240. package/dist/lib/esm/transport-desktop-cdp.d.mts +44 -17
  241. package/dist/lib/esm/transport-desktop-cdp.mjs +113 -67
  242. package/dist/lib/esm/transport-factory.mjs +71 -72
  243. package/dist/lib/esm/transport.d.mts +15 -0
  244. package/dist/lib/esm/type-guards.d.mts +9 -2
  245. package/dist/lib/esm/type-guards.mjs +7 -3
  246. package/dist/lib/esm/vault-path-match.d.mts +11 -11
  247. package/dist/lib/esm/vault-path-match.mjs +7 -7
  248. package/dist/lib/esm/version-matrix.d.mts +51 -17
  249. package/dist/lib/esm/version-matrix.mjs +1 -1
  250. package/dist/lib/esm/visibility.d.mts +5 -5
  251. package/dist/lib/esm/visibility.mjs +5 -5
  252. package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +2 -2
  253. package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +3 -3
  254. package/dist/lib/esm/vitest/global-setup.d.mts +4 -4
  255. package/dist/lib/esm/vitest/global-setup.mjs +8 -8
  256. package/dist/lib/esm/vitest/setup.mjs +2 -2
  257. package/dist/lib/esm/vitest/typings.d.mts +2 -2
  258. package/dist/obsidian-integration-testing-10.1.0.tgz +0 -0
  259. package/package.json +35 -18
  260. package/dist/lib/cjs/emulator-args.cjs +0 -36
  261. package/dist/lib/cjs/temp-vault.cjs +0 -166
  262. package/dist/lib/esm/emulator-args.mjs +0 -12
  263. package/dist/lib/esm/temp-vault.mjs +0 -157
  264. package/dist/obsidian-integration-testing-9.2.2.tgz +0 -0
@@ -1,157 +0,0 @@
1
- import {
2
- mkdirSync,
3
- mkdtempSync,
4
- writeFileSync
5
- } from "node:fs";
6
- import {
7
- readdir,
8
- readFile,
9
- rm
10
- } from "node:fs/promises";
11
- import { tmpdir } from "node:os";
12
- import {
13
- dirname,
14
- join,
15
- relative
16
- } from "node:path";
17
- import { getTransportOptions } from "./context-provider.mjs";
18
- import { TEMP_VAULT_DIR_PREFIX } from "./leftover-cleanup.mjs";
19
- import { getOrCreateTransport } from "./transport-factory.mjs";
20
- import {
21
- registerVault,
22
- unregisterVault
23
- } from "./vault-registry.mjs";
24
- const RM_RETRY_DELAY_IN_MILLISECONDS = 500;
25
- const RM_RETRY_TIMEOUT_IN_MILLISECONDS = 1e4;
26
- class TempVault {
27
- /**
28
- * The absolute path to the temporary vault.
29
- */
30
- path;
31
- /**
32
- * Creates a new temp vault.
33
- *
34
- * @param path - An explicit vault path. If omitted, a temp directory is created.
35
- */
36
- constructor(path) {
37
- this.path = path ?? mkdtempSync(join(tmpdir(), TEMP_VAULT_DIR_PREFIX));
38
- }
39
- /**
40
- * Unregisters the vault from Obsidian and deletes the temp directory.
41
- *
42
- * @param transportOverride - An explicit transport to use when unregistering.
43
- * When omitted, falls back to the transport configured via the context provider.
44
- */
45
- async dispose(transportOverride) {
46
- try {
47
- await unregisterVault(this.path, transportOverride);
48
- } finally {
49
- await retryRm(this.path);
50
- }
51
- }
52
- /**
53
- * Writes files and folders into the vault directory.
54
- * Parent directories are created automatically.
55
- *
56
- * - `string` values are written as UTF-8 text files.
57
- * - `Uint8Array` values (including `Buffer`) are written as binary files.
58
- * - Paths ending with `/` are treated as empty folders (value must be `undefined`).
59
- *
60
- * @param files - Map of file/folder paths to content.
61
- */
62
- populate(files) {
63
- for (const [filePath, content] of Object.entries(files)) {
64
- const fullPath = join(this.path, filePath);
65
- if (filePath.endsWith("/")) {
66
- if (content !== void 0) {
67
- throw new Error(`Folder path "${filePath}" must have undefined content`);
68
- }
69
- mkdirSync(fullPath, { recursive: true });
70
- } else {
71
- if (content === void 0) {
72
- throw new Error(`File path "${filePath}" must have defined content; use a trailing "/" for folders`);
73
- }
74
- mkdirSync(dirname(fullPath), { recursive: true });
75
- writeFileSync(fullPath, content);
76
- }
77
- }
78
- }
79
- /**
80
- * Registers this vault in the running Obsidian instance so the CLI can target it.
81
- *
82
- * @param transportOverride - An explicit transport to use. When omitted,
83
- * falls back to the transport configured via the context provider.
84
- */
85
- async register(transportOverride) {
86
- await registerVault(this.path, transportOverride);
87
- }
88
- /**
89
- * Async disposable support for `await using`.
90
- *
91
- * @returns A promise that resolves when the vault is disposed.
92
- */
93
- async [Symbol.asyncDispose]() {
94
- return this.dispose();
95
- }
96
- /* v8 ignore start -- Integration-time code that requires a running transport. */
97
- /**
98
- * Pushes all files from the local staging directory to the target device
99
- * via the active transport's `pushFiles()`.
100
- *
101
- * On desktop transports this is a no-op (files are already local).
102
- * On mobile transports (Appium) this pushes files to the device.
103
- *
104
- * Call this after {@link populate} and before {@link register} when using
105
- * a mobile transport.
106
- *
107
- * @param transportOverride - An explicit transport to use. When omitted,
108
- * falls back to the transport configured via the context provider.
109
- */
110
- async syncToDevice(transportOverride) {
111
- const transport = transportOverride ?? await getOrCreateTransport(getTransportOptions());
112
- if (!transport.pushFiles) {
113
- return;
114
- }
115
- const files = await this.collectFiles(this.path);
116
- await transport.pushFiles(this.path, files);
117
- }
118
- /**
119
- * Recursively reads all files from a directory into a flat map.
120
- *
121
- * @param dir - The directory to read.
122
- * @returns A map of relative file paths to content buffers.
123
- */
124
- async collectFiles(dir) {
125
- const result = {};
126
- const entries = await readdir(dir, { withFileTypes: true });
127
- for (const entry of entries) {
128
- const fullPath = join(dir, entry.name);
129
- const relativePath = relative(this.path, fullPath);
130
- if (entry.isDirectory()) {
131
- Object.assign(result, await this.collectFiles(fullPath));
132
- } else {
133
- result[relativePath] = await readFile(fullPath);
134
- }
135
- }
136
- return result;
137
- }
138
- /* v8 ignore stop */
139
- }
140
- async function retryRm(path) {
141
- const deadline = Date.now() + RM_RETRY_TIMEOUT_IN_MILLISECONDS;
142
- while (Date.now() < deadline) {
143
- try {
144
- await rm(path, { force: true, recursive: true });
145
- return;
146
- } catch {
147
- await new Promise((resolve) => {
148
- setTimeout(resolve, RM_RETRY_DELAY_IN_MILLISECONDS);
149
- });
150
- }
151
- }
152
- await rm(path, { force: true, recursive: true });
153
- }
154
- export {
155
- TempVault
156
- };
157
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RlbXAtdmF1bHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBNYW5hZ2VzIHRlbXBvcmFyeSB2YXVsdCBsaWZlY3ljbGUgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbmltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICByZWFkZGlyLFxuICByZWFkRmlsZSxcbiAgcm1cbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBnZXRUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5pbXBvcnQgeyBURU1QX1ZBVUxUX0RJUl9QUkVGSVggfSBmcm9tICcuL2xlZnRvdmVyLWNsZWFudXAubWpzJztcbmltcG9ydCB7IGdldE9yQ3JlYXRlVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5tanMnO1xuaW1wb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkubWpzJztcblxuLyoqXG4gKiBDb250ZW50IHZhbHVlIGZvciBhIHNpbmdsZSBlbnRyeSBpbiBhIHtAbGluayBQb3B1bGF0ZUZpbGVzfSBtYXAuXG4gKlxuICogLSBgc3RyaW5nYCBcdTIwMTQgdGV4dCBmaWxlICh3cml0dGVuIGFzIFVURi04KS5cbiAqIC0gYFVpbnQ4QXJyYXlgIFx1MjAxNCBiaW5hcnkgZmlsZSAod3JpdHRlbiBhcyByYXcgYnl0ZXM7IGBCdWZmZXJgIGlzIGFjY2VwdGVkXG4gKiAgIGJlY2F1c2UgYEJ1ZmZlciBleHRlbmRzIFVpbnQ4QXJyYXlgKS5cbiAqIC0gYHVuZGVmaW5lZGAgXHUyMDE0IGVtcHR5IGZvbGRlciAodGhlIGtleSAqKm11c3QqKiBlbmQgd2l0aCBgL2ApLlxuICovXG5leHBvcnQgdHlwZSBQb3B1bGF0ZUZpbGVDb250ZW50ID0gc3RyaW5nIHwgVWludDhBcnJheSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIG1hcCBvZiB2YXVsdC1yZWxhdGl2ZSBwYXRocyB0byB0aGVpciBjb250ZW50LCB1c2VkIGJ5XG4gKiB7QGxpbmsgVGVtcFZhdWx0LnBvcHVsYXRlfS5cbiAqXG4gKiBQYXRocyBlbmRpbmcgd2l0aCBgL2AgZGVub3RlIGZvbGRlcnMgYW5kICoqbXVzdCoqIGhhdmUgYW4gYHVuZGVmaW5lZGAgdmFsdWUuXG4gKiBBbGwgb3RoZXIgcGF0aHMgYXJlIHdyaXR0ZW4gYXMgZmlsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFBvcHVsYXRlRmlsZXNQYXJhbXMgPSBSZWNvcmQ8c3RyaW5nLCBQb3B1bGF0ZUZpbGVDb250ZW50PjtcblxuY29uc3QgUk1fUkVUUllfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgUk1fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwMDtcblxuLyoqXG4gKiBBIHRlbXBvcmFyeSBPYnNpZGlhbiB2YXVsdCBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKlxuICogQ3JlYXRlcyBhIHRlbXAgZGlyZWN0b3J5IGFuZCByZWdpc3RlcnMgaXQgaW4gdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHNvIHRoYXQgdGhlIE9ic2lkaWFuIENMSSBjYW4gdGFyZ2V0IGl0IHZpYSBgY3dkYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBWYXVsdCB7XG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IHZhdWx0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB0ZW1wIHZhdWx0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIEFuIGV4cGxpY2l0IHZhdWx0IHBhdGguIElmIG9taXR0ZWQsIGEgdGVtcCBkaXJlY3RvcnkgaXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoPzogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aCA/PyBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBURU1QX1ZBVUxUX0RJUl9QUkVGSVgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyB0aGUgdmF1bHQgZnJvbSBPYnNpZGlhbiBhbmQgZGVsZXRlcyB0aGUgdGVtcCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRPdmVycmlkZSAtIEFuIGV4cGxpY2l0IHRyYW5zcG9ydCB0byB1c2Ugd2hlbiB1bnJlZ2lzdGVyaW5nLlxuICAgKiAgIFdoZW4gb21pdHRlZCwgZmFsbHMgYmFjayB0byB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyZWQgdmlhIHRoZSBjb250ZXh0IHByb3ZpZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UodHJhbnNwb3J0T3ZlcnJpZGU/OiBPYnNpZGlhblRyYW5zcG9ydCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB1bnJlZ2lzdGVyVmF1bHQodGhpcy5wYXRoLCB0cmFuc3BvcnRPdmVycmlkZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHJldHJ5Um0odGhpcy5wYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGZpbGVzIGFuZCBmb2xkZXJzIGludG8gdGhlIHZhdWx0IGRpcmVjdG9yeS5cbiAgICogUGFyZW50IGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIC0gYHN0cmluZ2AgdmFsdWVzIGFyZSB3cml0dGVuIGFzIFVURi04IHRleHQgZmlsZXMuXG4gICAqIC0gYFVpbnQ4QXJyYXlgIHZhbHVlcyAoaW5jbHVkaW5nIGBCdWZmZXJgKSBhcmUgd3JpdHRlbiBhcyBiaW5hcnkgZmlsZXMuXG4gICAqIC0gUGF0aHMgZW5kaW5nIHdpdGggYC9gIGFyZSB0cmVhdGVkIGFzIGVtcHR5IGZvbGRlcnMgKHZhbHVlIG11c3QgYmUgYHVuZGVmaW5lZGApLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgLSBNYXAgb2YgZmlsZS9mb2xkZXIgcGF0aHMgdG8gY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZShmaWxlczogUG9wdWxhdGVGaWxlc1BhcmFtcyk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhmaWxlcykpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbih0aGlzLnBhdGgsIGZpbGVQYXRoKTtcbiAgICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvbGRlciBwYXRoIFwiJHtmaWxlUGF0aH1cIiBtdXN0IGhhdmUgdW5kZWZpbmVkIGNvbnRlbnRgKTtcbiAgICAgICAgfVxuICAgICAgICBta2RpclN5bmMoZnVsbFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBwYXRoIFwiJHtmaWxlUGF0aH1cIiBtdXN0IGhhdmUgZGVmaW5lZCBjb250ZW50OyB1c2UgYSB0cmFpbGluZyBcIi9cIiBmb3IgZm9sZGVyc2ApO1xuICAgICAgICB9XG4gICAgICAgIG1rZGlyU3luYyhkaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHdyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgdGhpcyB2YXVsdCBpbiB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZSBzbyB0aGUgQ0xJIGNhbiB0YXJnZXQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRPdmVycmlkZSAtIEFuIGV4cGxpY2l0IHRyYW5zcG9ydCB0byB1c2UuIFdoZW4gb21pdHRlZCxcbiAgICogICBmYWxscyBiYWNrIHRvIHRoZSB0cmFuc3BvcnQgY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXIodHJhbnNwb3J0T3ZlcnJpZGU/OiBPYnNpZGlhblRyYW5zcG9ydCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHJlZ2lzdGVyVmF1bHQodGhpcy5wYXRoLCB0cmFuc3BvcnRPdmVycmlkZSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgZGlzcG9zYWJsZSBzdXBwb3J0IGZvciBgYXdhaXQgdXNpbmdgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2YXVsdCBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSB0aGF0IHJlcXVpcmVzIGEgcnVubmluZyB0cmFuc3BvcnQuICovXG5cbiAgLyoqXG4gICAqIFB1c2hlcyBhbGwgZmlsZXMgZnJvbSB0aGUgbG9jYWwgc3RhZ2luZyBkaXJlY3RvcnkgdG8gdGhlIHRhcmdldCBkZXZpY2VcbiAgICogdmlhIHRoZSBhY3RpdmUgdHJhbnNwb3J0J3MgYHB1c2hGaWxlcygpYC5cbiAgICpcbiAgICogT24gZGVza3RvcCB0cmFuc3BvcnRzIHRoaXMgaXMgYSBuby1vcCAoZmlsZXMgYXJlIGFscmVhZHkgbG9jYWwpLlxuICAgKiBPbiBtb2JpbGUgdHJhbnNwb3J0cyAoQXBwaXVtKSB0aGlzIHB1c2hlcyBmaWxlcyB0byB0aGUgZGV2aWNlLlxuICAgKlxuICAgKiBDYWxsIHRoaXMgYWZ0ZXIge0BsaW5rIHBvcHVsYXRlfSBhbmQgYmVmb3JlIHtAbGluayByZWdpc3Rlcn0gd2hlbiB1c2luZ1xuICAgKiBhIG1vYmlsZSB0cmFuc3BvcnQuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRPdmVycmlkZSAtIEFuIGV4cGxpY2l0IHRyYW5zcG9ydCB0byB1c2UuIFdoZW4gb21pdHRlZCxcbiAgICogICBmYWxscyBiYWNrIHRvIHRoZSB0cmFuc3BvcnQgY29uZmlndXJlZCB2aWEgdGhlIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3luY1RvRGV2aWNlKHRyYW5zcG9ydE92ZXJyaWRlPzogT2JzaWRpYW5UcmFuc3BvcnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSB0cmFuc3BvcnRPdmVycmlkZSA/PyBhd2FpdCBnZXRPckNyZWF0ZVRyYW5zcG9ydChnZXRUcmFuc3BvcnRPcHRpb25zKCkpO1xuICAgIGlmICghdHJhbnNwb3J0LnB1c2hGaWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5jb2xsZWN0RmlsZXModGhpcy5wYXRoKTtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHVzaEZpbGVzKHRoaXMucGF0aCwgZmlsZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHJlYWRzIGFsbCBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5IGludG8gYSBmbGF0IG1hcC5cbiAgICpcbiAgICogQHBhcmFtIGRpciAtIFRoZSBkaXJlY3RvcnkgdG8gcmVhZC5cbiAgICogQHJldHVybnMgQSBtYXAgb2YgcmVsYXRpdmUgZmlsZSBwYXRocyB0byBjb250ZW50IGJ1ZmZlcnMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RGaWxlcyhkaXI6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgVWludDhBcnJheT4+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFVpbnQ4QXJyYXk+ID0ge307XG4gICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbihkaXIsIGVudHJ5Lm5hbWUpO1xuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUodGhpcy5wYXRoLCBmdWxsUGF0aCk7XG5cbiAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCBhd2FpdCB0aGlzLmNvbGxlY3RGaWxlcyhmdWxsUGF0aCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W3JlbGF0aXZlUGF0aF0gPSBhd2FpdCByZWFkRmlsZShmdWxsUGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xufVxuXG4vKipcbiAqIFJldHJpZXMgYHJtYCB1bnRpbCBpdCBzdWNjZWVkcyBvciB0aW1lcyBvdXQuXG4gKiBPYnNpZGlhbiBtYXkgaG9sZCBmaWxlIGxvY2tzIGJyaWVmbHkgYWZ0ZXIgYSB3aW5kb3cgaXMgZGVzdHJveWVkLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBkaXJlY3RvcnkgaXMgcmVtb3ZlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmV0cnlSbShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgUk1fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2gge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBSTV9SRVRSWV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8vIEZpbmFsIGF0dGVtcHQgXHUyMDE0IGxldCBpdCB0aHJvdy5cbiAgYXdhaXQgcm0ocGF0aCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBTUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUlQLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsNEJBQTRCO0FBQ3JDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBcUJQLE1BQU0saUNBQWlDO0FBQ3ZDLE1BQU0sbUNBQW1DO0FBUWxDLE1BQU0sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFB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