sweetlink 0.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 (300) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +237 -0
  4. package/dist/daemon/src/codename.d.ts +8 -0
  5. package/dist/daemon/src/codename.d.ts.map +1 -0
  6. package/dist/daemon/src/codename.js +42 -0
  7. package/dist/daemon/src/codename.js.map +1 -0
  8. package/dist/daemon/src/index.d.ts +3 -0
  9. package/dist/daemon/src/index.d.ts.map +1 -0
  10. package/dist/daemon/src/index.js +675 -0
  11. package/dist/daemon/src/index.js.map +1 -0
  12. package/dist/shared/src/env.d.ts +24 -0
  13. package/dist/shared/src/env.d.ts.map +1 -0
  14. package/dist/shared/src/env.js +39 -0
  15. package/dist/shared/src/env.js.map +1 -0
  16. package/dist/shared/src/index.d.ts +211 -0
  17. package/dist/shared/src/index.d.ts.map +1 -0
  18. package/dist/shared/src/index.js +73 -0
  19. package/dist/shared/src/index.js.map +1 -0
  20. package/dist/shared/src/node.d.ts +12 -0
  21. package/dist/shared/src/node.d.ts.map +1 -0
  22. package/dist/shared/src/node.js +67 -0
  23. package/dist/shared/src/node.js.map +1 -0
  24. package/dist/src/codex.d.ts +11 -0
  25. package/dist/src/codex.d.ts.map +1 -0
  26. package/dist/src/codex.js +67 -0
  27. package/dist/src/codex.js.map +1 -0
  28. package/dist/src/commands/click.d.ts +3 -0
  29. package/dist/src/commands/click.d.ts.map +1 -0
  30. package/dist/src/commands/click.js +93 -0
  31. package/dist/src/commands/click.js.map +1 -0
  32. package/dist/src/commands/run-js.d.ts +4 -0
  33. package/dist/src/commands/run-js.d.ts.map +1 -0
  34. package/dist/src/commands/run-js.js +28 -0
  35. package/dist/src/commands/run-js.js.map +1 -0
  36. package/dist/src/commands/trust-ca.d.ts +3 -0
  37. package/dist/src/commands/trust-ca.d.ts.map +1 -0
  38. package/dist/src/commands/trust-ca.js +43 -0
  39. package/dist/src/commands/trust-ca.js.map +1 -0
  40. package/dist/src/core/config-file.d.ts +41 -0
  41. package/dist/src/core/config-file.d.ts.map +1 -0
  42. package/dist/src/core/config-file.js +284 -0
  43. package/dist/src/core/config-file.js.map +1 -0
  44. package/dist/src/core/config.d.ts +23 -0
  45. package/dist/src/core/config.d.ts.map +1 -0
  46. package/dist/src/core/config.js +132 -0
  47. package/dist/src/core/config.js.map +1 -0
  48. package/dist/src/core/env.d.ts +11 -0
  49. package/dist/src/core/env.d.ts.map +1 -0
  50. package/dist/src/core/env.js +30 -0
  51. package/dist/src/core/env.js.map +1 -0
  52. package/dist/src/devtools-registry.d.ts +3 -0
  53. package/dist/src/devtools-registry.d.ts.map +1 -0
  54. package/dist/src/devtools-registry.js +294 -0
  55. package/dist/src/devtools-registry.js.map +1 -0
  56. package/dist/src/env.d.ts +16 -0
  57. package/dist/src/env.d.ts.map +1 -0
  58. package/dist/src/env.js +17 -0
  59. package/dist/src/env.js.map +1 -0
  60. package/dist/src/http.d.ts +2 -0
  61. package/dist/src/http.d.ts.map +1 -0
  62. package/dist/src/http.js +53 -0
  63. package/dist/src/http.js.map +1 -0
  64. package/dist/src/index.d.ts +19 -0
  65. package/dist/src/index.d.ts.map +1 -0
  66. package/dist/src/index.js +1941 -0
  67. package/dist/src/index.js.map +1 -0
  68. package/dist/src/runtime/browser/client.d.ts +10 -0
  69. package/dist/src/runtime/browser/client.d.ts.map +1 -0
  70. package/dist/src/runtime/browser/client.js +497 -0
  71. package/dist/src/runtime/browser/client.js.map +1 -0
  72. package/dist/src/runtime/browser/commands/index.d.ts +10 -0
  73. package/dist/src/runtime/browser/commands/index.d.ts.map +1 -0
  74. package/dist/src/runtime/browser/commands/index.js +219 -0
  75. package/dist/src/runtime/browser/commands/index.js.map +1 -0
  76. package/dist/src/runtime/browser/dom-to-image-loader.d.ts +6 -0
  77. package/dist/src/runtime/browser/dom-to-image-loader.d.ts.map +1 -0
  78. package/dist/src/runtime/browser/dom-to-image-loader.js +50 -0
  79. package/dist/src/runtime/browser/dom-to-image-loader.js.map +1 -0
  80. package/dist/src/runtime/browser/index.d.ts +4 -0
  81. package/dist/src/runtime/browser/index.d.ts.map +1 -0
  82. package/dist/src/runtime/browser/index.js +4 -0
  83. package/dist/src/runtime/browser/index.js.map +1 -0
  84. package/dist/src/runtime/browser/module-loader.d.ts +6 -0
  85. package/dist/src/runtime/browser/module-loader.d.ts.map +1 -0
  86. package/dist/src/runtime/browser/module-loader.js +26 -0
  87. package/dist/src/runtime/browser/module-loader.js.map +1 -0
  88. package/dist/src/runtime/browser/screenshot/hooks.d.ts +71 -0
  89. package/dist/src/runtime/browser/screenshot/hooks.d.ts.map +1 -0
  90. package/dist/src/runtime/browser/screenshot/hooks.js +219 -0
  91. package/dist/src/runtime/browser/screenshot/hooks.js.map +1 -0
  92. package/dist/src/runtime/browser/screenshot/index.d.ts +9 -0
  93. package/dist/src/runtime/browser/screenshot/index.d.ts.map +1 -0
  94. package/dist/src/runtime/browser/screenshot/index.js +90 -0
  95. package/dist/src/runtime/browser/screenshot/index.js.map +1 -0
  96. package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.d.ts +13 -0
  97. package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.d.ts.map +1 -0
  98. package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.js +51 -0
  99. package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.js.map +1 -0
  100. package/dist/src/runtime/browser/screenshot/renderers/html2canvas.d.ts +12 -0
  101. package/dist/src/runtime/browser/screenshot/renderers/html2canvas.d.ts.map +1 -0
  102. package/dist/src/runtime/browser/screenshot/renderers/html2canvas.js +136 -0
  103. package/dist/src/runtime/browser/screenshot/renderers/html2canvas.js.map +1 -0
  104. package/dist/src/runtime/browser/screenshot/targets.d.ts +6 -0
  105. package/dist/src/runtime/browser/screenshot/targets.d.ts.map +1 -0
  106. package/dist/src/runtime/browser/screenshot/targets.js +53 -0
  107. package/dist/src/runtime/browser/screenshot/targets.js.map +1 -0
  108. package/dist/src/runtime/browser/screenshot/utils.d.ts +9 -0
  109. package/dist/src/runtime/browser/screenshot/utils.d.ts.map +1 -0
  110. package/dist/src/runtime/browser/screenshot/utils.js +471 -0
  111. package/dist/src/runtime/browser/screenshot/utils.js.map +1 -0
  112. package/dist/src/runtime/browser/selector-discovery.d.ts +9 -0
  113. package/dist/src/runtime/browser/selector-discovery.d.ts.map +1 -0
  114. package/dist/src/runtime/browser/selector-discovery.js +218 -0
  115. package/dist/src/runtime/browser/selector-discovery.js.map +1 -0
  116. package/dist/src/runtime/browser/storage/session-storage.d.ts +13 -0
  117. package/dist/src/runtime/browser/storage/session-storage.d.ts.map +1 -0
  118. package/dist/src/runtime/browser/storage/session-storage.js +119 -0
  119. package/dist/src/runtime/browser/storage/session-storage.js.map +1 -0
  120. package/dist/src/runtime/browser/types.d.ts +96 -0
  121. package/dist/src/runtime/browser/types.d.ts.map +1 -0
  122. package/dist/src/runtime/browser/types.js +6 -0
  123. package/dist/src/runtime/browser/types.js.map +1 -0
  124. package/dist/src/runtime/browser/utils/console.d.ts +5 -0
  125. package/dist/src/runtime/browser/utils/console.d.ts.map +1 -0
  126. package/dist/src/runtime/browser/utils/console.js +54 -0
  127. package/dist/src/runtime/browser/utils/console.js.map +1 -0
  128. package/dist/src/runtime/browser/utils/environment.d.ts +3 -0
  129. package/dist/src/runtime/browser/utils/environment.d.ts.map +1 -0
  130. package/dist/src/runtime/browser/utils/environment.js +13 -0
  131. package/dist/src/runtime/browser/utils/environment.js.map +1 -0
  132. package/dist/src/runtime/browser/utils/errors.d.ts +3 -0
  133. package/dist/src/runtime/browser/utils/errors.d.ts.map +1 -0
  134. package/dist/src/runtime/browser/utils/errors.js +42 -0
  135. package/dist/src/runtime/browser/utils/errors.js.map +1 -0
  136. package/dist/src/runtime/browser/utils/number.d.ts +2 -0
  137. package/dist/src/runtime/browser/utils/number.d.ts.map +1 -0
  138. package/dist/src/runtime/browser/utils/number.js +2 -0
  139. package/dist/src/runtime/browser/utils/number.js.map +1 -0
  140. package/dist/src/runtime/browser/utils/object.d.ts +3 -0
  141. package/dist/src/runtime/browser/utils/object.d.ts.map +1 -0
  142. package/dist/src/runtime/browser/utils/object.js +9 -0
  143. package/dist/src/runtime/browser/utils/object.js.map +1 -0
  144. package/dist/src/runtime/browser/utils/sanitize.d.ts +2 -0
  145. package/dist/src/runtime/browser/utils/sanitize.d.ts.map +1 -0
  146. package/dist/src/runtime/browser/utils/sanitize.js +28 -0
  147. package/dist/src/runtime/browser/utils/sanitize.js.map +1 -0
  148. package/dist/src/runtime/browser/utils/time.d.ts +2 -0
  149. package/dist/src/runtime/browser/utils/time.d.ts.map +1 -0
  150. package/dist/src/runtime/browser/utils/time.js +7 -0
  151. package/dist/src/runtime/browser/utils/time.js.map +1 -0
  152. package/dist/src/runtime/chrome/constants.d.ts +5 -0
  153. package/dist/src/runtime/chrome/constants.d.ts.map +1 -0
  154. package/dist/src/runtime/chrome/constants.js +5 -0
  155. package/dist/src/runtime/chrome/constants.js.map +1 -0
  156. package/dist/src/runtime/chrome/cookies.d.ts +20 -0
  157. package/dist/src/runtime/chrome/cookies.d.ts.map +1 -0
  158. package/dist/src/runtime/chrome/cookies.js +139 -0
  159. package/dist/src/runtime/chrome/cookies.js.map +1 -0
  160. package/dist/src/runtime/chrome/diagnostics.d.ts +6 -0
  161. package/dist/src/runtime/chrome/diagnostics.d.ts.map +1 -0
  162. package/dist/src/runtime/chrome/diagnostics.js +49 -0
  163. package/dist/src/runtime/chrome/diagnostics.js.map +1 -0
  164. package/dist/src/runtime/chrome/focus.d.ts +2 -0
  165. package/dist/src/runtime/chrome/focus.d.ts.map +1 -0
  166. package/dist/src/runtime/chrome/focus.js +41 -0
  167. package/dist/src/runtime/chrome/focus.js.map +1 -0
  168. package/dist/src/runtime/chrome/launch.d.ts +23 -0
  169. package/dist/src/runtime/chrome/launch.d.ts.map +1 -0
  170. package/dist/src/runtime/chrome/launch.js +102 -0
  171. package/dist/src/runtime/chrome/launch.js.map +1 -0
  172. package/dist/src/runtime/chrome/puppeteer.d.ts +7 -0
  173. package/dist/src/runtime/chrome/puppeteer.d.ts.map +1 -0
  174. package/dist/src/runtime/chrome/puppeteer.js +87 -0
  175. package/dist/src/runtime/chrome/puppeteer.js.map +1 -0
  176. package/dist/src/runtime/chrome/reuse/constants.d.ts +4 -0
  177. package/dist/src/runtime/chrome/reuse/constants.d.ts.map +1 -0
  178. package/dist/src/runtime/chrome/reuse/constants.js +4 -0
  179. package/dist/src/runtime/chrome/reuse/constants.js.map +1 -0
  180. package/dist/src/runtime/chrome/reuse.d.ts +13 -0
  181. package/dist/src/runtime/chrome/reuse.d.ts.map +1 -0
  182. package/dist/src/runtime/chrome/reuse.js +183 -0
  183. package/dist/src/runtime/chrome/reuse.js.map +1 -0
  184. package/dist/src/runtime/chrome/session.d.ts +13 -0
  185. package/dist/src/runtime/chrome/session.d.ts.map +1 -0
  186. package/dist/src/runtime/chrome/session.js +47 -0
  187. package/dist/src/runtime/chrome/session.js.map +1 -0
  188. package/dist/src/runtime/chrome.d.ts +9 -0
  189. package/dist/src/runtime/chrome.d.ts.map +1 -0
  190. package/dist/src/runtime/chrome.js +10 -0
  191. package/dist/src/runtime/chrome.js.map +1 -0
  192. package/dist/src/runtime/cookies.d.ts +37 -0
  193. package/dist/src/runtime/cookies.d.ts.map +1 -0
  194. package/dist/src/runtime/cookies.js +592 -0
  195. package/dist/src/runtime/cookies.js.map +1 -0
  196. package/dist/src/runtime/devstack.d.ts +14 -0
  197. package/dist/src/runtime/devstack.d.ts.map +1 -0
  198. package/dist/src/runtime/devstack.js +174 -0
  199. package/dist/src/runtime/devstack.js.map +1 -0
  200. package/dist/src/runtime/devtools/background.d.ts +5 -0
  201. package/dist/src/runtime/devtools/background.d.ts.map +1 -0
  202. package/dist/src/runtime/devtools/background.js +109 -0
  203. package/dist/src/runtime/devtools/background.js.map +1 -0
  204. package/dist/src/runtime/devtools/cdp.d.ts +16 -0
  205. package/dist/src/runtime/devtools/cdp.d.ts.map +1 -0
  206. package/dist/src/runtime/devtools/cdp.js +392 -0
  207. package/dist/src/runtime/devtools/cdp.js.map +1 -0
  208. package/dist/src/runtime/devtools/config.d.ts +12 -0
  209. package/dist/src/runtime/devtools/config.d.ts.map +1 -0
  210. package/dist/src/runtime/devtools/config.js +78 -0
  211. package/dist/src/runtime/devtools/config.js.map +1 -0
  212. package/dist/src/runtime/devtools/constants.d.ts +10 -0
  213. package/dist/src/runtime/devtools/constants.d.ts.map +1 -0
  214. package/dist/src/runtime/devtools/constants.js +18 -0
  215. package/dist/src/runtime/devtools/constants.js.map +1 -0
  216. package/dist/src/runtime/devtools/diagnostics.d.ts +8 -0
  217. package/dist/src/runtime/devtools/diagnostics.d.ts.map +1 -0
  218. package/dist/src/runtime/devtools/diagnostics.js +189 -0
  219. package/dist/src/runtime/devtools/diagnostics.js.map +1 -0
  220. package/dist/src/runtime/devtools/oauth.d.ts +9 -0
  221. package/dist/src/runtime/devtools/oauth.d.ts.map +1 -0
  222. package/dist/src/runtime/devtools/oauth.js +130 -0
  223. package/dist/src/runtime/devtools/oauth.js.map +1 -0
  224. package/dist/src/runtime/devtools/types.d.ts +108 -0
  225. package/dist/src/runtime/devtools/types.d.ts.map +1 -0
  226. package/dist/src/runtime/devtools/types.js +2 -0
  227. package/dist/src/runtime/devtools/types.js.map +1 -0
  228. package/dist/src/runtime/devtools.d.ts +8 -0
  229. package/dist/src/runtime/devtools.d.ts.map +1 -0
  230. package/dist/src/runtime/devtools.js +9 -0
  231. package/dist/src/runtime/devtools.js.map +1 -0
  232. package/dist/src/runtime/next-devtools.d.ts +2 -0
  233. package/dist/src/runtime/next-devtools.d.ts.map +1 -0
  234. package/dist/src/runtime/next-devtools.js +72 -0
  235. package/dist/src/runtime/next-devtools.js.map +1 -0
  236. package/dist/src/runtime/screenshot.d.ts +78 -0
  237. package/dist/src/runtime/screenshot.d.ts.map +1 -0
  238. package/dist/src/runtime/screenshot.js +232 -0
  239. package/dist/src/runtime/screenshot.js.map +1 -0
  240. package/dist/src/runtime/scripts.d.ts +16 -0
  241. package/dist/src/runtime/scripts.d.ts.map +1 -0
  242. package/dist/src/runtime/scripts.js +110 -0
  243. package/dist/src/runtime/scripts.js.map +1 -0
  244. package/dist/src/runtime/session.d.ts +64 -0
  245. package/dist/src/runtime/session.d.ts.map +1 -0
  246. package/dist/src/runtime/session.js +205 -0
  247. package/dist/src/runtime/session.js.map +1 -0
  248. package/dist/src/runtime/smoke.d.ts +36 -0
  249. package/dist/src/runtime/smoke.d.ts.map +1 -0
  250. package/dist/src/runtime/smoke.js +417 -0
  251. package/dist/src/runtime/smoke.js.map +1 -0
  252. package/dist/src/runtime/url.d.ts +10 -0
  253. package/dist/src/runtime/url.d.ts.map +1 -0
  254. package/dist/src/runtime/url.js +147 -0
  255. package/dist/src/runtime/url.js.map +1 -0
  256. package/dist/src/screenshot-hooks.d.ts +13 -0
  257. package/dist/src/screenshot-hooks.d.ts.map +1 -0
  258. package/dist/src/screenshot-hooks.js +56 -0
  259. package/dist/src/screenshot-hooks.js.map +1 -0
  260. package/dist/src/shared/env.d.ts +23 -0
  261. package/dist/src/shared/env.d.ts.map +1 -0
  262. package/dist/src/shared/env.js +38 -0
  263. package/dist/src/shared/env.js.map +1 -0
  264. package/dist/src/shared/index.d.ts +211 -0
  265. package/dist/src/shared/index.d.ts.map +1 -0
  266. package/dist/src/shared/index.js +73 -0
  267. package/dist/src/shared/index.js.map +1 -0
  268. package/dist/src/shared/node.d.ts +12 -0
  269. package/dist/src/shared/node.d.ts.map +1 -0
  270. package/dist/src/shared/node.js +67 -0
  271. package/dist/src/shared/node.js.map +1 -0
  272. package/dist/src/token.d.ts +4 -0
  273. package/dist/src/token.d.ts.map +1 -0
  274. package/dist/src/token.js +58 -0
  275. package/dist/src/token.js.map +1 -0
  276. package/dist/src/types.d.ts +17 -0
  277. package/dist/src/types.d.ts.map +1 -0
  278. package/dist/src/types.js +2 -0
  279. package/dist/src/types.js.map +1 -0
  280. package/dist/src/util/app-label.d.ts +5 -0
  281. package/dist/src/util/app-label.d.ts.map +1 -0
  282. package/dist/src/util/app-label.js +21 -0
  283. package/dist/src/util/app-label.js.map +1 -0
  284. package/dist/src/util/errors.d.ts +9 -0
  285. package/dist/src/util/errors.d.ts.map +1 -0
  286. package/dist/src/util/errors.js +56 -0
  287. package/dist/src/util/errors.js.map +1 -0
  288. package/dist/src/util/path.d.ts +3 -0
  289. package/dist/src/util/path.d.ts.map +1 -0
  290. package/dist/src/util/path.js +6 -0
  291. package/dist/src/util/path.js.map +1 -0
  292. package/dist/src/util/regex.d.ts +4 -0
  293. package/dist/src/util/regex.d.ts.map +1 -0
  294. package/dist/src/util/regex.js +5 -0
  295. package/dist/src/util/regex.js.map +1 -0
  296. package/dist/src/util/time.d.ts +3 -0
  297. package/dist/src/util/time.d.ts.map +1 -0
  298. package/dist/src/util/time.js +7 -0
  299. package/dist/src/util/time.js.map +1 -0
  300. package/package.json +86 -0
@@ -0,0 +1,219 @@
1
+ import { loadDefaultExportFromUrl } from '../module-loader.js';
2
+ import { discoverSelectorCandidates } from '../selector-discovery.js';
3
+ import { CONSOLE_LEVELS, getConsoleMethod, setConsoleMethod } from '../utils/console.js';
4
+ import { getBrowserWindow } from '../utils/environment.js';
5
+ import { toError } from '../utils/errors.js';
6
+ import { sanitizeResult } from '../utils/sanitize.js';
7
+ export function createCommandExecutor(context) {
8
+ return {
9
+ execute: (command) => executeCommand(command, context),
10
+ };
11
+ }
12
+ function executeCommand(command, context) {
13
+ const started = performance.now();
14
+ try {
15
+ switch (command.type) {
16
+ case 'runScript': {
17
+ return runScriptCommand(command, started);
18
+ }
19
+ case 'getDom': {
20
+ return runGetDomCommand(command, started);
21
+ }
22
+ case 'navigate': {
23
+ return runNavigateCommand(command, started);
24
+ }
25
+ case 'ping': {
26
+ return runPingCommand(command, started);
27
+ }
28
+ case 'screenshot': {
29
+ return runScreenshotCommand(command, started, context);
30
+ }
31
+ case 'discoverSelectors': {
32
+ return runSelectorDiscoveryCommand(command, started);
33
+ }
34
+ default: {
35
+ throw new Error(`Unsupported command type ${command.type}`);
36
+ }
37
+ }
38
+ }
39
+ catch (error) {
40
+ const error_ = toError(error);
41
+ const durationMs = performance.now() - started;
42
+ const result = {
43
+ ok: false,
44
+ commandId: command.id,
45
+ durationMs,
46
+ error: error_.message,
47
+ stack: error_.stack,
48
+ };
49
+ return Promise.resolve(result);
50
+ }
51
+ }
52
+ async function runScriptCommand(command, started) {
53
+ const events = [];
54
+ const restore = command.captureConsole ? interceptConsole(events) : null;
55
+ try {
56
+ const moduleSource = `
57
+ 'use strict';
58
+ export default async function run(window, document, console) {
59
+ ${command.code}
60
+ }
61
+ `;
62
+ const blob = new Blob([moduleSource], { type: 'text/javascript' });
63
+ const moduleUrl = URL.createObjectURL(blob);
64
+ let runner;
65
+ try {
66
+ runner = await loadDefaultExportFromUrl(moduleUrl);
67
+ }
68
+ finally {
69
+ URL.revokeObjectURL(moduleUrl);
70
+ }
71
+ if (typeof runner !== 'function') {
72
+ throw new TypeError('Injected script did not export a runnable function');
73
+ }
74
+ const execute = runner;
75
+ const resultValue = await execute(getBrowserWindow() ?? window, document, console);
76
+ const durationMs = performance.now() - started;
77
+ const response = {
78
+ ok: true,
79
+ commandId: command.id,
80
+ durationMs,
81
+ data: sanitizeResult(resultValue),
82
+ console: events.length > 0 ? events : undefined,
83
+ };
84
+ return response;
85
+ }
86
+ catch (error) {
87
+ const error_ = toError(error);
88
+ const durationMs = performance.now() - started;
89
+ const response = {
90
+ ok: false,
91
+ commandId: command.id,
92
+ durationMs,
93
+ error: error_.message,
94
+ stack: error_.stack,
95
+ console: events.length > 0 ? events : undefined,
96
+ };
97
+ return response;
98
+ }
99
+ finally {
100
+ if (restore) {
101
+ restore();
102
+ }
103
+ }
104
+ }
105
+ function runGetDomCommand(command, started) {
106
+ let data;
107
+ if (command.selector) {
108
+ const element = document.querySelector(command.selector);
109
+ data = element ? element.outerHTML : null;
110
+ }
111
+ else {
112
+ data = document.documentElement.outerHTML;
113
+ }
114
+ const durationMs = performance.now() - started;
115
+ return Promise.resolve({
116
+ ok: true,
117
+ commandId: command.id,
118
+ durationMs,
119
+ data,
120
+ });
121
+ }
122
+ function runNavigateCommand(command, started) {
123
+ (getBrowserWindow() ?? window).location.assign(command.url);
124
+ const durationMs = performance.now() - started;
125
+ return Promise.resolve({
126
+ ok: true,
127
+ commandId: command.id,
128
+ durationMs,
129
+ data: { redirectedTo: command.url },
130
+ });
131
+ }
132
+ function runPingCommand(command, started) {
133
+ const durationMs = performance.now() - started;
134
+ return Promise.resolve({
135
+ ok: true,
136
+ commandId: command.id,
137
+ durationMs,
138
+ data: { now: Date.now() },
139
+ });
140
+ }
141
+ function runSelectorDiscoveryCommand(command, started) {
142
+ const limit = Number.isFinite(command.limit) && command.limit ? Math.max(1, Math.floor(command.limit)) : 20;
143
+ const includeHidden = command.includeHidden === true;
144
+ const candidates = discoverSelectorCandidates({
145
+ scopeSelector: command.scopeSelector ?? null,
146
+ limit,
147
+ includeHidden,
148
+ });
149
+ const durationMs = performance.now() - started;
150
+ const payload = {
151
+ candidates,
152
+ };
153
+ return Promise.resolve({
154
+ ok: true,
155
+ commandId: command.id,
156
+ durationMs,
157
+ data: payload,
158
+ });
159
+ }
160
+ async function runScreenshotCommand(command, started, context) {
161
+ const durationStart = started;
162
+ let targetInfo = context.screenshotHooks.resolveTarget(command);
163
+ try {
164
+ await context.screenshotHooks.applyPreHooks(command, targetInfo);
165
+ if (command.mode === 'element') {
166
+ targetInfo = context.screenshotHooks.resolveTarget(command);
167
+ }
168
+ const data = await context.screenshotHooks.captureScreenshot(command, targetInfo);
169
+ const durationMs = performance.now() - durationStart;
170
+ return {
171
+ ok: true,
172
+ commandId: command.id,
173
+ durationMs,
174
+ data,
175
+ };
176
+ }
177
+ catch (error) {
178
+ const error_ = toError(error);
179
+ const durationMs = performance.now() - durationStart;
180
+ return {
181
+ ok: false,
182
+ commandId: command.id,
183
+ durationMs,
184
+ error: error_.message,
185
+ stack: error_.stack,
186
+ };
187
+ }
188
+ }
189
+ function interceptConsole(buffer) {
190
+ const original = new Map();
191
+ const consoleWithLevels = console;
192
+ for (const level of CONSOLE_LEVELS) {
193
+ const originalFunction = getConsoleMethod(consoleWithLevels, level);
194
+ if (typeof originalFunction !== 'function') {
195
+ continue;
196
+ }
197
+ original.set(level, originalFunction);
198
+ const replacement = ((...arguments_) => {
199
+ buffer.push({
200
+ id: `${level}-${Date.now().toString()}-${Math.random().toString(16).slice(2)}`,
201
+ timestamp: Date.now(),
202
+ level,
203
+ args: arguments_.map((argument) => sanitizeResult(argument)),
204
+ });
205
+ const typedArguments = arguments_;
206
+ originalFunction.apply(console, typedArguments);
207
+ });
208
+ setConsoleMethod(consoleWithLevels, level, replacement);
209
+ }
210
+ return () => {
211
+ for (const level of CONSOLE_LEVELS) {
212
+ const stored = original.get(level);
213
+ if (stored) {
214
+ setConsoleMethod(consoleWithLevels, level, stored);
215
+ }
216
+ }
217
+ };
218
+ }
219
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/runtime/browser/commands/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ type DomToImageModule = {
2
+ toJpeg: (node: HTMLElement, options?: unknown) => Promise<string>;
3
+ };
4
+ export declare function loadDomToImageFromScript(): Promise<DomToImageModule>;
5
+ export {};
6
+ //# sourceMappingURL=dom-to-image-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-to-image-loader.d.ts","sourceRoot":"","sources":["../../../../src/runtime/browser/dom-to-image-loader.ts"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAe9F,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAkD1E"}
@@ -0,0 +1,50 @@
1
+ 'use client';
2
+ const resolveGlobal = (context) => context.domtoimage ?? context.domToImage ?? context.domtoImage ?? null;
3
+ const SCRIPT_URL = '/sweetlink/dom-to-image-more.global.js';
4
+ export async function loadDomToImageFromScript() {
5
+ const context = globalThis;
6
+ const cachedLoader = context.__sweetlinkDomToImagePromise;
7
+ if (cachedLoader) {
8
+ return await cachedLoader;
9
+ }
10
+ const existing = resolveGlobal(context);
11
+ if (existing) {
12
+ context.__sweetlinkDomToImagePromise = Promise.resolve(existing);
13
+ return existing;
14
+ }
15
+ if (!context.document) {
16
+ throw new Error('Unable to load dom-to-image-more: document is not available in this environment');
17
+ }
18
+ const { document } = context;
19
+ const loaderPromise = new Promise((resolve, reject) => {
20
+ const script = document.createElement('script');
21
+ script.src = SCRIPT_URL;
22
+ script.async = true;
23
+ const handleLoad = () => {
24
+ const candidate = resolveGlobal(context);
25
+ if (candidate) {
26
+ resolve(candidate);
27
+ }
28
+ else {
29
+ reject(new Error('dom-to-image-more loaded but did not register a global export'));
30
+ }
31
+ };
32
+ const handleError = () => {
33
+ reject(new Error(`Failed to load dom-to-image-more script from ${SCRIPT_URL}`));
34
+ };
35
+ script.addEventListener('load', handleLoad, { once: true });
36
+ script.addEventListener('error', handleError, { once: true });
37
+ document.head.append(script);
38
+ });
39
+ context.__sweetlinkDomToImagePromise = loaderPromise;
40
+ try {
41
+ return await loaderPromise;
42
+ }
43
+ catch (error) {
44
+ if (context.__sweetlinkDomToImagePromise === loaderPromise) {
45
+ context.__sweetlinkDomToImagePromise = undefined;
46
+ }
47
+ throw error;
48
+ }
49
+ }
50
+ //# sourceMappingURL=dom-to-image-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-to-image-loader.js","sourceRoot":"","sources":["../../../../src/runtime/browser/dom-to-image-loader.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAab,MAAM,aAAa,GAAG,CAAC,OAAgC,EAA2B,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;AAE5J,MAAM,UAAU,GAAG,wCAAwC,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,OAAO,GAAG,UAAqC,CAAC;IACtD,MAAM,YAAY,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAC1D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,MAAM,YAAY,CAAC;IAC5B,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,4BAA4B,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,aAAa,GAAG,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC;QACxB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,UAAU,GAAG,GAAG,EAAE;YACtB,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,SAAS,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,MAAM,CAAC,IAAI,KAAK,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,4BAA4B,GAAG,aAAa,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,MAAM,aAAa,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,4BAA4B,KAAK,aAAa,EAAE,CAAC;YAC3D,OAAO,CAAC,4BAA4B,GAAG,SAAS,CAAC;QACnD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createSweetLinkClient, sweetLinkBrowserTestHelpers } from './client.js';
2
+ export { createSessionStorageAdapter, isStoredSessionFresh } from './storage/session-storage.js';
3
+ export type { SweetLinkClient, SweetLinkClientOptions, SweetLinkHandshakeResponse, SweetLinkSessionBootstrap, SweetLinkStatusSnapshot, SweetLinkStoredSession, } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/runtime/browser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACjG,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ /* biome-ignore lint/performance/noBarrelFile: re-exporting browser helpers to preserve public API surface. */
2
+ export { createSweetLinkClient, sweetLinkBrowserTestHelpers } from './client.js';
3
+ export { createSessionStorageAdapter, isStoredSessionFresh } from './storage/session-storage.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/runtime/browser/index.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,6 @@
1
+ type RuntimeImporter = (specifier: string) => Promise<unknown>;
2
+ export declare function loadModuleFromUrl<T = unknown>(url: string): Promise<T>;
3
+ export declare function loadDefaultExportFromUrl<T>(url: string): Promise<T>;
4
+ export declare function setRuntimeImporterForTesting(importer: RuntimeImporter | null): void;
5
+ export {};
6
+ //# sourceMappingURL=module-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../../../src/runtime/browser/module-loader.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAc/D,wBAAsB,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE5E;AAED,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAOzE;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAEnF"}
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ let runtimeImporter = null;
3
+ const getRuntimeImporter = () => {
4
+ if (!runtimeImporter) {
5
+ // Turbopack tries to statically analyse bare dynamic imports and treats blob URLs as <dynamic> modules.
6
+ // Wrapping the import call in a Function keeps it purely runtime so blob-based scripts bypass module resolution.
7
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
8
+ runtimeImporter = new Function('specifier', 'return import(specifier);');
9
+ }
10
+ return runtimeImporter;
11
+ };
12
+ export async function loadModuleFromUrl(url) {
13
+ return (await getRuntimeImporter()(url));
14
+ }
15
+ export async function loadDefaultExportFromUrl(url) {
16
+ const loadedModule = await loadModuleFromUrl(url);
17
+ const defaultExport = loadedModule.default;
18
+ if (defaultExport === undefined) {
19
+ throw new TypeError(`Module loaded from URL "${url}" does not have a default export`);
20
+ }
21
+ return defaultExport;
22
+ }
23
+ export function setRuntimeImporterForTesting(importer) {
24
+ runtimeImporter = importer;
25
+ }
26
+ //# sourceMappingURL=module-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-loader.js","sourceRoot":"","sources":["../../../../src/runtime/browser/module-loader.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,IAAI,eAAe,GAA2B,IAAI,CAAC;AAEnD,MAAM,kBAAkB,GAAG,GAAoB,EAAE;IAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,wGAAwG;QACxG,iHAAiH;QACjH,8DAA8D;QAC9D,eAAe,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAoB,CAAC;IAC9F,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAc,GAAW;IAC9D,OAAO,CAAC,MAAM,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAM,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAI,GAAW;IAC3D,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAkB,GAAG,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC;IAC3C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,2BAA2B,GAAG,kCAAkC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,QAAgC;IAC3E,eAAe,GAAG,QAAQ,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { SweetLinkScreenshotCommand } from '@sweetlink/shared';
2
+ import { z } from 'zod';
3
+ import type { ScreenshotTargetInfo } from '../types.js';
4
+ type HookRunner = (clientWindow: Window, document_: Document, target: HTMLElement) => Promise<void> | void;
5
+ export declare const screenshotHookSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
6
+ type: z.ZodLiteral<"scrollIntoView">;
7
+ selector: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
8
+ behavior: z.ZodOptional<z.ZodEnum<["auto", "smooth", "instant"]>>;
9
+ block: z.ZodOptional<z.ZodEnum<["start", "center", "end", "nearest"]>>;
10
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
11
+ type: z.ZodLiteral<"scrollIntoView">;
12
+ selector: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
13
+ behavior: z.ZodOptional<z.ZodEnum<["auto", "smooth", "instant"]>>;
14
+ block: z.ZodOptional<z.ZodEnum<["start", "center", "end", "nearest"]>>;
15
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
16
+ type: z.ZodLiteral<"scrollIntoView">;
17
+ selector: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
18
+ behavior: z.ZodOptional<z.ZodEnum<["auto", "smooth", "instant"]>>;
19
+ block: z.ZodOptional<z.ZodEnum<["start", "center", "end", "nearest"]>>;
20
+ }, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
21
+ type: z.ZodLiteral<"waitForSelector">;
22
+ selector: z.ZodString;
23
+ visibility: z.ZodOptional<z.ZodEnum<["any", "visible"]>>;
24
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
25
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
26
+ type: z.ZodLiteral<"waitForSelector">;
27
+ selector: z.ZodString;
28
+ visibility: z.ZodOptional<z.ZodEnum<["any", "visible"]>>;
29
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
30
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
31
+ type: z.ZodLiteral<"waitForSelector">;
32
+ selector: z.ZodString;
33
+ visibility: z.ZodOptional<z.ZodEnum<["any", "visible"]>>;
34
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
35
+ }, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
36
+ type: z.ZodLiteral<"waitForIdle">;
37
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
38
+ frameCount: z.ZodOptional<z.ZodNumber>;
39
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
40
+ type: z.ZodLiteral<"waitForIdle">;
41
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
42
+ frameCount: z.ZodOptional<z.ZodNumber>;
43
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
44
+ type: z.ZodLiteral<"waitForIdle">;
45
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
46
+ frameCount: z.ZodOptional<z.ZodNumber>;
47
+ }, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
48
+ type: z.ZodLiteral<"wait">;
49
+ ms: z.ZodNumber;
50
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
51
+ type: z.ZodLiteral<"wait">;
52
+ ms: z.ZodNumber;
53
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
54
+ type: z.ZodLiteral<"wait">;
55
+ ms: z.ZodNumber;
56
+ }, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
57
+ type: z.ZodLiteral<"script">;
58
+ code: z.ZodString;
59
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
60
+ type: z.ZodLiteral<"script">;
61
+ code: z.ZodString;
62
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
63
+ type: z.ZodLiteral<"script">;
64
+ code: z.ZodString;
65
+ }, z.ZodTypeAny, "passthrough">>]>;
66
+ export type ScreenshotHook = z.infer<typeof screenshotHookSchema>;
67
+ export declare const createHookRunner: (source: string) => HookRunner;
68
+ export declare function applyScreenshotPreHooks(command: SweetLinkScreenshotCommand, initialTarget: ScreenshotTargetInfo): Promise<void>;
69
+ export declare const delay: (ms: number) => Promise<void>;
70
+ export {};
71
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/browser/screenshot/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAKxD,KAAK,UAAU,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AA0C3G,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAM/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,UAyBjD,CAAC;AASF,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,0BAA0B,EACnC,aAAa,EAAE,oBAAoB,GAClC,OAAO,CAAC,IAAI,CAAC,CAoDf;AAoGD,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAA0F,CAAC"}
@@ -0,0 +1,219 @@
1
+ import { z } from 'zod';
2
+ import { loadDefaultExportFromUrl } from '../module-loader.js';
3
+ import { getBrowserWindow } from '../utils/environment.js';
4
+ import { clamp } from '../utils/number.js';
5
+ import { isRecord, toTrimmedNonEmptyString } from '../utils/object.js';
6
+ const scrollIntoViewHookSchema = z
7
+ .object({
8
+ type: z.literal('scrollIntoView'),
9
+ selector: z.union([z.string(), z.null()]).optional(),
10
+ behavior: z.enum(['auto', 'smooth', 'instant']).optional(),
11
+ block: z.enum(['start', 'center', 'end', 'nearest']).optional(),
12
+ })
13
+ .passthrough();
14
+ const waitForSelectorHookSchema = z
15
+ .object({
16
+ type: z.literal('waitForSelector'),
17
+ selector: z.string().min(1),
18
+ visibility: z.enum(['any', 'visible']).optional(),
19
+ timeoutMs: z.number().finite().optional(),
20
+ })
21
+ .passthrough();
22
+ const waitForIdleHookSchema = z
23
+ .object({
24
+ type: z.literal('waitForIdle'),
25
+ timeoutMs: z.number().finite().optional(),
26
+ frameCount: z.number().finite().optional(),
27
+ })
28
+ .passthrough();
29
+ const waitHookSchema = z
30
+ .object({
31
+ type: z.literal('wait'),
32
+ ms: z.number().finite(),
33
+ })
34
+ .passthrough();
35
+ const scriptHookSchema = z
36
+ .object({
37
+ type: z.literal('script'),
38
+ code: z.string().min(1),
39
+ })
40
+ .passthrough();
41
+ export const screenshotHookSchema = z.discriminatedUnion('type', [
42
+ scrollIntoViewHookSchema,
43
+ waitForSelectorHookSchema,
44
+ waitForIdleHookSchema,
45
+ waitHookSchema,
46
+ scriptHookSchema,
47
+ ]);
48
+ export const createHookRunner = (source) => {
49
+ const blob = new Blob(['"use strict"; export default async (window, document, target) => {\n', source, '\n};'], {
50
+ type: 'text/javascript',
51
+ });
52
+ const blobUrl = URL.createObjectURL(blob);
53
+ let compiledRunnerPromise = null;
54
+ const loadRunner = () => {
55
+ if (!compiledRunnerPromise) {
56
+ compiledRunnerPromise = loadDefaultExportFromUrl(blobUrl)
57
+ .catch((error) => {
58
+ throw error instanceof Error ? error : new Error(String(error));
59
+ })
60
+ .finally(() => {
61
+ URL.revokeObjectURL(blobUrl);
62
+ });
63
+ }
64
+ return compiledRunnerPromise;
65
+ };
66
+ return async (clientWindow, document_, target) => {
67
+ const runner = await loadRunner();
68
+ await runner(clientWindow, document_, target);
69
+ };
70
+ };
71
+ const isPromiseLike = (value) => {
72
+ if (!isRecord(value)) {
73
+ return false;
74
+ }
75
+ return typeof value.then === 'function';
76
+ };
77
+ export async function applyScreenshotPreHooks(command, initialTarget) {
78
+ const hooks = parseScreenshotHooks(command.hooks);
79
+ if (hooks.length === 0) {
80
+ return;
81
+ }
82
+ const runHook = async (hook) => {
83
+ switch (hook.type) {
84
+ case 'scrollIntoView': {
85
+ const target = resolveHookTarget(hook.selector, command.selector, initialTarget.target);
86
+ target.scrollIntoView({
87
+ behavior: hook.behavior ?? 'auto',
88
+ block: hook.block ?? 'center',
89
+ });
90
+ await waitForIdle({ frameCount: 1, timeoutMs: 2000 });
91
+ return;
92
+ }
93
+ case 'waitForSelector': {
94
+ await waitForSelectorHook(hook.selector, {
95
+ visibility: hook.visibility ?? 'any',
96
+ timeoutMs: hook.timeoutMs ?? 10_000,
97
+ });
98
+ return;
99
+ }
100
+ case 'waitForIdle': {
101
+ await waitForIdle({
102
+ frameCount: hook.frameCount ?? 1,
103
+ timeoutMs: hook.timeoutMs ?? 3000,
104
+ });
105
+ return;
106
+ }
107
+ case 'wait': {
108
+ await delay(Math.max(0, hook.ms));
109
+ return;
110
+ }
111
+ case 'script': {
112
+ await runHookScript(hook.code, initialTarget.target);
113
+ return;
114
+ }
115
+ default: {
116
+ /* ignore unsupported hook */
117
+ return;
118
+ }
119
+ }
120
+ };
121
+ let hookChain = Promise.resolve();
122
+ for (const hook of hooks) {
123
+ hookChain = hookChain.then(() => runHook(hook));
124
+ }
125
+ await hookChain;
126
+ }
127
+ function parseScreenshotHooks(candidate) {
128
+ if (!Array.isArray(candidate)) {
129
+ return [];
130
+ }
131
+ const parsed = [];
132
+ for (const hook of candidate) {
133
+ const result = screenshotHookSchema.safeParse(hook);
134
+ if (result.success) {
135
+ parsed.push(result.data);
136
+ }
137
+ }
138
+ return parsed;
139
+ }
140
+ function resolveHookTarget(hookSelector, commandSelector, fallback) {
141
+ const selector = hookSelector ?? commandSelector ?? null;
142
+ if (!selector) {
143
+ return fallback;
144
+ }
145
+ const element = document.querySelector(selector);
146
+ if (!element) {
147
+ throw new Error(`Pre-capture hook target not found for selector "${selector}"`);
148
+ }
149
+ if (!(element instanceof HTMLElement)) {
150
+ throw new TypeError(`Pre-capture hook selector "${selector}" did not resolve to an HTMLElement`);
151
+ }
152
+ return element;
153
+ }
154
+ function waitForSelectorHook(selector, options) {
155
+ const deadline = performance.now() + options.timeoutMs;
156
+ const poll = async () => {
157
+ const match = document.querySelector(selector);
158
+ if (match instanceof HTMLElement) {
159
+ if (options.visibility === 'visible') {
160
+ const rect = match.getBoundingClientRect();
161
+ const style = getComputedStyle(match);
162
+ if (rect.width > 1 && rect.height > 1 && style.visibility !== 'hidden' && style.display !== 'none') {
163
+ return match;
164
+ }
165
+ }
166
+ else {
167
+ return match;
168
+ }
169
+ }
170
+ if (performance.now() > deadline) {
171
+ throw new Error(`Timeout waiting for selector "${selector}" (${options.visibility})`);
172
+ }
173
+ await waitForAnimationFrame();
174
+ return poll();
175
+ };
176
+ return poll();
177
+ }
178
+ async function waitForIdle(options) {
179
+ const deadline = performance.now() + options.timeoutMs;
180
+ const waitFrames = async (remaining) => {
181
+ if (remaining <= 0) {
182
+ return;
183
+ }
184
+ await waitForAnimationFrame();
185
+ if (performance.now() > deadline) {
186
+ console.warn('[SweetLink] waitForIdle timed out before reaching the requested frame count; proceeding with current frame.');
187
+ return;
188
+ }
189
+ await waitFrames(remaining - 1);
190
+ };
191
+ await waitFrames(Math.max(1, options.frameCount));
192
+ }
193
+ function waitForAnimationFrame() {
194
+ return new Promise((resolve) => {
195
+ const browserWindow = getBrowserWindow();
196
+ if (!browserWindow || typeof browserWindow.requestAnimationFrame !== 'function') {
197
+ setTimeout(() => {
198
+ resolve();
199
+ }, 16);
200
+ return;
201
+ }
202
+ browserWindow.requestAnimationFrame(() => {
203
+ resolve();
204
+ });
205
+ });
206
+ }
207
+ export const delay = (ms) => new Promise((resolve) => setTimeout(resolve, clamp(ms, 0, Number.POSITIVE_INFINITY)));
208
+ async function runHookScript(code, target) {
209
+ const normalizedCode = toTrimmedNonEmptyString(code);
210
+ if (!normalizedCode) {
211
+ return;
212
+ }
213
+ const runner = createHookRunner(normalizedCode);
214
+ const result = runner(getBrowserWindow() ?? window, document, target);
215
+ if (isPromiseLike(result)) {
216
+ await result;
217
+ }
218
+ }
219
+ //# sourceMappingURL=hooks.js.map