testplane 9.0.0-rc.3 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. package/README.md +1 -1
  2. package/build/package.json +41 -25
  3. package/build/src/base-testplane.d.ts +6 -2
  4. package/build/src/base-testplane.js +19 -5
  5. package/build/src/base-testplane.js.map +1 -1
  6. package/build/src/browser/browser.d.ts +8 -0
  7. package/build/src/browser/browser.js +16 -5
  8. package/build/src/browser/browser.js.map +1 -1
  9. package/build/src/browser/calibrator.d.ts +5 -4
  10. package/build/src/browser/calibrator.js +96 -47
  11. package/build/src/browser/calibrator.js.map +1 -1
  12. package/build/src/browser/camera/index.d.ts +16 -19
  13. package/build/src/browser/camera/index.js +72 -25
  14. package/build/src/browser/camera/index.js.map +1 -1
  15. package/build/src/browser/camera/utils.d.ts +15 -2
  16. package/build/src/browser/camera/utils.js +58 -5
  17. package/build/src/browser/camera/utils.js.map +1 -1
  18. package/build/src/browser/cdp/connection.d.ts +15 -0
  19. package/build/src/browser/cdp/connection.js +145 -0
  20. package/build/src/browser/cdp/connection.js.map +1 -0
  21. package/build/src/browser/cdp/constants.d.ts +6 -0
  22. package/build/src/browser/cdp/constants.js +10 -0
  23. package/build/src/browser/cdp/constants.js.map +1 -0
  24. package/build/src/browser/cdp/debug.d.ts +2 -0
  25. package/build/src/browser/cdp/debug.js +9 -0
  26. package/build/src/browser/cdp/debug.js.map +1 -0
  27. package/build/src/browser/cdp/domains/css.d.ts +54 -0
  28. package/build/src/browser/cdp/domains/css.js +39 -0
  29. package/build/src/browser/cdp/domains/css.js.map +1 -0
  30. package/build/src/browser/cdp/domains/debugger.d.ts +65 -0
  31. package/build/src/browser/cdp/domains/debugger.js +31 -0
  32. package/build/src/browser/cdp/domains/debugger.js.map +1 -0
  33. package/build/src/browser/cdp/domains/dom.d.ts +24 -0
  34. package/build/src/browser/cdp/domains/dom.js +23 -0
  35. package/build/src/browser/cdp/domains/dom.js.map +1 -0
  36. package/build/src/browser/cdp/domains/fetch.d.ts +163 -0
  37. package/build/src/browser/cdp/domains/fetch.js +51 -0
  38. package/build/src/browser/cdp/domains/fetch.js.map +1 -0
  39. package/build/src/browser/cdp/domains/network.d.ts +290 -0
  40. package/build/src/browser/cdp/domains/network.js +75 -0
  41. package/build/src/browser/cdp/domains/network.js.map +1 -0
  42. package/build/src/browser/cdp/domains/page.d.ts +378 -0
  43. package/build/src/browser/cdp/domains/page.js +114 -0
  44. package/build/src/browser/cdp/domains/page.js.map +1 -0
  45. package/build/src/browser/cdp/domains/profiler.d.ts +60 -0
  46. package/build/src/browser/cdp/domains/profiler.js +39 -0
  47. package/build/src/browser/cdp/domains/profiler.js.map +1 -0
  48. package/build/src/browser/cdp/domains/runtime.d.ts +57 -0
  49. package/build/src/browser/cdp/domains/runtime.js +34 -0
  50. package/build/src/browser/cdp/domains/runtime.js.map +1 -0
  51. package/build/src/browser/cdp/domains/target.d.ts +77 -0
  52. package/build/src/browser/cdp/domains/target.js +53 -0
  53. package/build/src/browser/cdp/domains/target.js.map +1 -0
  54. package/build/src/browser/cdp/emitter.d.ts +10 -0
  55. package/build/src/browser/cdp/emitter.js +61 -0
  56. package/build/src/browser/cdp/emitter.js.map +1 -0
  57. package/build/src/browser/cdp/error.d.ts +17 -0
  58. package/build/src/browser/cdp/error.js +38 -0
  59. package/build/src/browser/cdp/error.js.map +1 -0
  60. package/build/src/browser/cdp/index.d.ts +29 -0
  61. package/build/src/browser/cdp/index.js +80 -0
  62. package/build/src/browser/cdp/index.js.map +1 -0
  63. package/build/src/browser/cdp/selectivity/constants.d.ts +3 -0
  64. package/build/src/browser/cdp/selectivity/constants.js +7 -0
  65. package/build/src/browser/cdp/selectivity/constants.js.map +1 -0
  66. package/build/src/browser/cdp/selectivity/css-selectivity.d.ts +24 -0
  67. package/build/src/browser/cdp/selectivity/css-selectivity.js +261 -0
  68. package/build/src/browser/cdp/selectivity/css-selectivity.js.map +1 -0
  69. package/build/src/browser/cdp/selectivity/debug.d.ts +2 -0
  70. package/build/src/browser/cdp/selectivity/debug.js +9 -0
  71. package/build/src/browser/cdp/selectivity/debug.js.map +1 -0
  72. package/build/src/browser/cdp/selectivity/fs-cache.d.ts +12 -0
  73. package/build/src/browser/cdp/selectivity/fs-cache.js +122 -0
  74. package/build/src/browser/cdp/selectivity/fs-cache.js.map +1 -0
  75. package/build/src/browser/cdp/selectivity/hash-provider.d.ts +7 -0
  76. package/build/src/browser/cdp/selectivity/hash-provider.js +86 -0
  77. package/build/src/browser/cdp/selectivity/hash-provider.js.map +1 -0
  78. package/build/src/browser/cdp/selectivity/hash-reader.d.ts +16 -0
  79. package/build/src/browser/cdp/selectivity/hash-reader.js +83 -0
  80. package/build/src/browser/cdp/selectivity/hash-reader.js.map +1 -0
  81. package/build/src/browser/cdp/selectivity/hash-writer.d.ts +18 -0
  82. package/build/src/browser/cdp/selectivity/hash-writer.js +80 -0
  83. package/build/src/browser/cdp/selectivity/hash-writer.js.map +1 -0
  84. package/build/src/browser/cdp/selectivity/index.d.ts +15 -0
  85. package/build/src/browser/cdp/selectivity/index.js +220 -0
  86. package/build/src/browser/cdp/selectivity/index.js.map +1 -0
  87. package/build/src/browser/cdp/selectivity/js-selectivity.d.ts +23 -0
  88. package/build/src/browser/cdp/selectivity/js-selectivity.js +242 -0
  89. package/build/src/browser/cdp/selectivity/js-selectivity.js.map +1 -0
  90. package/build/src/browser/cdp/selectivity/json-utils.d.ts +15 -0
  91. package/build/src/browser/cdp/selectivity/json-utils.js +135 -0
  92. package/build/src/browser/cdp/selectivity/json-utils.js.map +1 -0
  93. package/build/src/browser/cdp/selectivity/merge-dumps/index.d.ts +2 -0
  94. package/build/src/browser/cdp/selectivity/merge-dumps/index.js +28 -0
  95. package/build/src/browser/cdp/selectivity/merge-dumps/index.js.map +1 -0
  96. package/build/src/browser/cdp/selectivity/merge-dumps/merge-hashes.d.ts +2 -0
  97. package/build/src/browser/cdp/selectivity/merge-dumps/merge-hashes.js +39 -0
  98. package/build/src/browser/cdp/selectivity/merge-dumps/merge-hashes.js.map +1 -0
  99. package/build/src/browser/cdp/selectivity/merge-dumps/merge-tests.d.ts +2 -0
  100. package/build/src/browser/cdp/selectivity/merge-dumps/merge-tests.js +129 -0
  101. package/build/src/browser/cdp/selectivity/merge-dumps/merge-tests.js.map +1 -0
  102. package/build/src/browser/cdp/selectivity/modes.d.ts +4 -0
  103. package/build/src/browser/cdp/selectivity/modes.js +11 -0
  104. package/build/src/browser/cdp/selectivity/modes.js.map +1 -0
  105. package/build/src/browser/cdp/selectivity/runner.d.ts +24 -0
  106. package/build/src/browser/cdp/selectivity/runner.js +234 -0
  107. package/build/src/browser/cdp/selectivity/runner.js.map +1 -0
  108. package/build/src/browser/cdp/selectivity/test-dependencies-reader.d.ts +10 -0
  109. package/build/src/browser/cdp/selectivity/test-dependencies-reader.js +41 -0
  110. package/build/src/browser/cdp/selectivity/test-dependencies-reader.js.map +1 -0
  111. package/build/src/browser/cdp/selectivity/test-dependencies-writer.d.ts +11 -0
  112. package/build/src/browser/cdp/selectivity/test-dependencies-writer.js +69 -0
  113. package/build/src/browser/cdp/selectivity/test-dependencies-writer.js.map +1 -0
  114. package/build/src/browser/cdp/selectivity/testplane-selectivity.d.ts +7 -0
  115. package/build/src/browser/cdp/selectivity/testplane-selectivity.js +127 -0
  116. package/build/src/browser/cdp/selectivity/testplane-selectivity.js.map +1 -0
  117. package/build/src/browser/cdp/selectivity/types.d.ts +26 -0
  118. package/build/src/browser/cdp/selectivity/types.js +10 -0
  119. package/build/src/browser/cdp/selectivity/types.js.map +1 -0
  120. package/build/src/browser/cdp/selectivity/used-dumps-tracker.d.ts +7 -0
  121. package/build/src/browser/cdp/selectivity/used-dumps-tracker.js +25 -0
  122. package/build/src/browser/cdp/selectivity/used-dumps-tracker.js.map +1 -0
  123. package/build/src/browser/cdp/selectivity/utils.d.ts +57 -0
  124. package/build/src/browser/cdp/selectivity/utils.js +382 -0
  125. package/build/src/browser/cdp/selectivity/utils.js.map +1 -0
  126. package/build/src/browser/cdp/types.d.ts +417 -0
  127. package/build/src/browser/cdp/types.js.map +1 -0
  128. package/build/src/browser/cdp/utils.d.ts +1 -0
  129. package/build/src/browser/cdp/utils.js +18 -0
  130. package/build/src/browser/cdp/utils.js.map +1 -0
  131. package/build/src/browser/cdp/ws-endpoint.d.ts +2 -0
  132. package/build/src/browser/cdp/ws-endpoint.js +70 -0
  133. package/build/src/browser/cdp/ws-endpoint.js.map +1 -0
  134. package/build/src/browser/client-bridge/error.d.ts +1 -1
  135. package/build/src/browser/client-bridge/error.js +2 -2
  136. package/build/src/browser/client-bridge/error.js.map +1 -1
  137. package/build/src/browser/client-bridge/index.d.ts +17 -7
  138. package/build/src/browser/client-bridge/index.js +65 -14
  139. package/build/src/browser/client-bridge/index.js.map +1 -1
  140. package/build/src/browser/client-scripts/browser-utils/build/bundle.compat.js +18 -0
  141. package/build/src/browser/client-scripts/browser-utils/build/bundle.native.js +10 -0
  142. package/build/src/browser/client-scripts/browser-utils/tsc-out/client-scripts/browser-utils/implementation.js +38 -0
  143. package/build/src/browser/client-scripts/browser-utils/tsc-out/client-scripts/browser-utils/inject.js +31 -0
  144. package/build/src/browser/client-scripts/browser-utils/tsc-out/client-scripts/shared/lib.compat.js +57 -0
  145. package/build/src/browser/client-scripts/browser-utils/tsc-out/client-scripts/shared/lib.native.js +53 -0
  146. package/build/src/browser/client-scripts/browser-utils/tsc-out/client-scripts/shared/logger.js +42 -0
  147. package/build/src/browser/client-scripts/browser-utils/tsc-out/client-scripts/shared/polyfills/getComputedStyle.js +132 -0
  148. package/build/src/browser/client-scripts/browser-utils/tsc-out/client-scripts/shared/polyfills/matchMedia.js +82 -0
  149. package/build/src/browser/client-scripts/{xpath.js → browser-utils/tsc-out/client-scripts/shared/xpath.js} +9 -13
  150. package/build/src/browser/client-scripts/browser-utils/tsc-out/isomorphic/assign.js +21 -0
  151. package/build/src/browser/client-scripts/browser-utils/tsc-out/isomorphic/geometry.js +220 -0
  152. package/build/src/browser/client-scripts/browser-utils/tsc-out/isomorphic/index.js +19 -0
  153. package/build/src/browser/client-scripts/browser-utils/tsc-out/isomorphic/types.js +18 -0
  154. package/build/src/browser/client-scripts/build.js +50 -13
  155. package/build/src/browser/client-scripts/calibrate.js +13 -1
  156. package/build/src/browser/client-scripts/rrweb-record.min.js +32 -32
  157. package/build/src/browser/client-scripts/screen-shooter/build/bundle.compat.js +38 -0
  158. package/build/src/browser/client-scripts/screen-shooter/build/bundle.native.js +38 -0
  159. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/errors/outside-of-viewport.js +32 -0
  160. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/implementation.js +406 -0
  161. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/inject.js +31 -0
  162. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/operations.js +633 -0
  163. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/types.js +2 -0
  164. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/clip-rect.js +103 -0
  165. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/descriptions.js +19 -0
  166. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/dom.js +99 -0
  167. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/element-rect.js +183 -0
  168. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/pseudo-element-rect.js +205 -0
  169. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/scroll.js +155 -0
  170. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/trusted-types.js +14 -0
  171. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/user-agent.js +10 -0
  172. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/utils/z-index.js +144 -0
  173. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/shared/lib.compat.js +57 -0
  174. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/shared/lib.native.js +53 -0
  175. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/shared/logger.js +42 -0
  176. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/shared/polyfills/getComputedStyle.js +132 -0
  177. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/shared/polyfills/matchMedia.js +82 -0
  178. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/shared/xpath.js +27 -0
  179. package/build/src/browser/client-scripts/screen-shooter/tsc-out/isomorphic/assign.js +21 -0
  180. package/build/src/browser/client-scripts/screen-shooter/tsc-out/isomorphic/geometry.js +220 -0
  181. package/build/src/browser/client-scripts/screen-shooter/tsc-out/isomorphic/index.js +19 -0
  182. package/build/src/browser/client-scripts/screen-shooter/tsc-out/isomorphic/types.js +18 -0
  183. package/build/src/browser/commands/assert-view/errors/image-diff-error.d.ts +1 -0
  184. package/build/src/browser/commands/assert-view/index.js +79 -31
  185. package/build/src/browser/commands/assert-view/index.js.map +1 -1
  186. package/build/src/browser/commands/getPuppeteer.js +1 -1
  187. package/build/src/browser/commands/getPuppeteer.js.map +1 -1
  188. package/build/src/browser/commands/getState.d.ts +5 -0
  189. package/build/src/browser/commands/getState.js +41 -0
  190. package/build/src/browser/commands/getState.js.map +1 -0
  191. package/build/src/browser/commands/index.js +5 -0
  192. package/build/src/browser/commands/index.js.map +1 -1
  193. package/build/src/browser/commands/moveCursorTo.d.ts +1 -1
  194. package/build/src/browser/commands/openAndWait.js +47 -5
  195. package/build/src/browser/commands/openAndWait.js.map +1 -1
  196. package/build/src/browser/commands/restoreState/index.d.ts +9 -0
  197. package/build/src/browser/commands/restoreState/index.js +112 -0
  198. package/build/src/browser/commands/restoreState/index.js.map +1 -0
  199. package/build/src/browser/commands/restoreState/restoreStorage.d.ts +1 -0
  200. package/build/src/browser/commands/restoreState/restoreStorage.js +12 -0
  201. package/build/src/browser/commands/restoreState/restoreStorage.js.map +1 -0
  202. package/build/src/browser/commands/saveState/dumpStorage.d.ts +5 -0
  203. package/build/src/browser/commands/saveState/dumpStorage.js +29 -0
  204. package/build/src/browser/commands/saveState/dumpStorage.js.map +1 -0
  205. package/build/src/browser/commands/saveState/index.d.ts +13 -0
  206. package/build/src/browser/commands/saveState/index.js +156 -0
  207. package/build/src/browser/commands/saveState/index.js.map +1 -0
  208. package/build/src/browser/commands/switchToRepl.js +64 -11
  209. package/build/src/browser/commands/switchToRepl.js.map +1 -1
  210. package/build/src/browser/commands/unstable_getCdp.d.ts +3 -0
  211. package/build/src/browser/commands/unstable_getCdp.js +9 -0
  212. package/build/src/browser/commands/unstable_getCdp.js.map +1 -0
  213. package/build/src/browser/commands/waitForStaticToLoad.d.ts +13 -0
  214. package/build/src/browser/commands/waitForStaticToLoad.js +169 -0
  215. package/build/src/browser/commands/waitForStaticToLoad.js.map +1 -0
  216. package/build/src/browser/existing-browser.d.ts +27 -35
  217. package/build/src/browser/existing-browser.js +141 -98
  218. package/build/src/browser/existing-browser.js.map +1 -1
  219. package/build/src/browser/history/async-local-storage.d.ts +5 -0
  220. package/build/src/browser/history/async-local-storage.js +14 -0
  221. package/build/src/browser/history/async-local-storage.js.map +1 -0
  222. package/build/src/browser/history/callstack.d.ts +0 -4
  223. package/build/src/browser/history/callstack.js +0 -8
  224. package/build/src/browser/history/callstack.js.map +1 -1
  225. package/build/src/browser/history/index.d.ts +19 -6
  226. package/build/src/browser/history/index.js +85 -47
  227. package/build/src/browser/history/index.js.map +1 -1
  228. package/build/src/browser/history/rrweb.d.ts +3 -1
  229. package/build/src/browser/history/rrweb.js +163 -57
  230. package/build/src/browser/history/rrweb.js.map +1 -1
  231. package/build/src/browser/isomorphic/assign.d.ts +2 -0
  232. package/build/src/browser/isomorphic/assign.js +18 -0
  233. package/build/src/browser/isomorphic/assign.js.map +1 -0
  234. package/build/src/browser/isomorphic/geometry.d.ts +85 -0
  235. package/build/src/browser/isomorphic/geometry.js +198 -0
  236. package/build/src/browser/isomorphic/geometry.js.map +1 -0
  237. package/build/src/browser/isomorphic/index.d.ts +3 -0
  238. package/build/src/browser/isomorphic/index.js +20 -0
  239. package/build/src/browser/isomorphic/index.js.map +1 -0
  240. package/build/src/browser/isomorphic/tsconfig.tsbuildinfo +1 -0
  241. package/build/src/browser/isomorphic/types.d.ts +15 -0
  242. package/build/src/browser/isomorphic/types.js +19 -0
  243. package/build/src/browser/isomorphic/types.js.map +1 -0
  244. package/build/src/browser/new-browser.d.ts +2 -1
  245. package/build/src/browser/new-browser.js +12 -12
  246. package/build/src/browser/new-browser.js.map +1 -1
  247. package/build/src/browser/screen-shooter/composite-image/debug-utils.d.ts +37 -0
  248. package/build/src/browser/screen-shooter/composite-image/debug-utils.js +127 -0
  249. package/build/src/browser/screen-shooter/composite-image/debug-utils.js.map +1 -0
  250. package/build/src/browser/screen-shooter/composite-image/index.d.ts +65 -14
  251. package/build/src/browser/screen-shooter/composite-image/index.js +488 -122
  252. package/build/src/browser/screen-shooter/composite-image/index.js.map +1 -1
  253. package/build/src/browser/screen-shooter/constants.d.ts +1 -0
  254. package/build/src/browser/screen-shooter/constants.js +5 -0
  255. package/build/src/browser/screen-shooter/constants.js.map +1 -0
  256. package/build/src/browser/screen-shooter/debug.d.ts +3 -0
  257. package/build/src/browser/screen-shooter/debug.js +25 -0
  258. package/build/src/browser/screen-shooter/debug.js.map +1 -0
  259. package/build/src/browser/screen-shooter/elements-screen-shooter.d.ts +43 -0
  260. package/build/src/browser/screen-shooter/elements-screen-shooter.js +466 -0
  261. package/build/src/browser/screen-shooter/elements-screen-shooter.js.map +1 -0
  262. package/build/src/browser/screen-shooter/errors/horizontal-overflow-error.d.ts +1 -0
  263. package/build/src/browser/screen-shooter/errors/horizontal-overflow-error.js +16 -12
  264. package/build/src/browser/screen-shooter/errors/horizontal-overflow-error.js.map +1 -1
  265. package/build/src/browser/screen-shooter/errors/vertical-overflow-error.d.ts +1 -0
  266. package/build/src/browser/screen-shooter/errors/vertical-overflow-error.js +12 -8
  267. package/build/src/browser/screen-shooter/errors/vertical-overflow-error.js.map +1 -1
  268. package/build/src/browser/screen-shooter/full-page-screen-shooter.d.ts +44 -0
  269. package/build/src/browser/screen-shooter/full-page-screen-shooter.js +160 -0
  270. package/build/src/browser/screen-shooter/full-page-screen-shooter.js.map +1 -0
  271. package/build/src/browser/screen-shooter/operations/animations.d.ts +7 -0
  272. package/build/src/browser/screen-shooter/operations/animations.js +25 -0
  273. package/build/src/browser/screen-shooter/operations/animations.js.map +1 -0
  274. package/build/src/browser/screen-shooter/operations/iframe.d.ts +1 -0
  275. package/build/src/browser/screen-shooter/operations/iframe.js +27 -0
  276. package/build/src/browser/screen-shooter/operations/iframe.js.map +1 -0
  277. package/build/src/browser/screen-shooter/operations/index.d.ts +5 -0
  278. package/build/src/browser/screen-shooter/operations/index.js +16 -0
  279. package/build/src/browser/screen-shooter/operations/index.js.map +1 -0
  280. package/build/src/browser/screen-shooter/operations/pointer-events.d.ts +11 -0
  281. package/build/src/browser/screen-shooter/operations/pointer-events.js +45 -0
  282. package/build/src/browser/screen-shooter/operations/pointer-events.js.map +1 -0
  283. package/build/src/browser/screen-shooter/operations/scrolls.d.ts +5 -0
  284. package/build/src/browser/screen-shooter/operations/scrolls.js +8 -0
  285. package/build/src/browser/screen-shooter/operations/scrolls.js.map +1 -0
  286. package/build/src/browser/screen-shooter/operations/wait-for-selectors-to-settle.d.ts +2 -0
  287. package/build/src/browser/screen-shooter/operations/wait-for-selectors-to-settle.js +133 -0
  288. package/build/src/browser/screen-shooter/operations/wait-for-selectors-to-settle.js.map +1 -0
  289. package/build/src/browser/screen-shooter/validation/index.d.ts +2 -2
  290. package/build/src/browser/screen-shooter/validation/index.js +31 -5
  291. package/build/src/browser/screen-shooter/validation/index.js.map +1 -1
  292. package/build/src/browser/screen-shooter/viewport-screen-shooter.d.ts +44 -0
  293. package/build/src/browser/screen-shooter/viewport-screen-shooter.js +89 -0
  294. package/build/src/browser/screen-shooter/viewport-screen-shooter.js.map +1 -0
  295. package/build/src/browser/stacktrace/utils.js +13 -3
  296. package/build/src/browser/stacktrace/utils.js.map +1 -1
  297. package/build/src/browser/standalone/attachToBrowser.d.ts +2 -0
  298. package/build/src/browser/standalone/attachToBrowser.js +63 -0
  299. package/build/src/browser/standalone/attachToBrowser.js.map +1 -0
  300. package/build/src/browser/standalone/index.d.ts +2 -0
  301. package/build/src/browser/standalone/index.js +8 -0
  302. package/build/src/browser/standalone/index.js.map +1 -0
  303. package/build/src/browser/standalone/launchBrowser.d.ts +4 -0
  304. package/build/src/browser/{standalone.js → standalone/launchBrowser.js} +24 -10
  305. package/build/src/browser/standalone/launchBrowser.js.map +1 -0
  306. package/build/src/browser/standalone/types.d.ts +5 -0
  307. package/build/src/browser/standalone/types.js +3 -0
  308. package/build/src/browser/standalone/types.js.map +1 -0
  309. package/build/src/browser/types.d.ts +30 -4
  310. package/build/src/browser/types.js.map +1 -1
  311. package/build/src/browser/wsdriver/compression.d.ts +5 -0
  312. package/build/src/browser/wsdriver/compression.js +79 -0
  313. package/build/src/browser/wsdriver/compression.js.map +1 -0
  314. package/build/src/browser/wsdriver/constants.d.ts +11 -0
  315. package/build/src/browser/wsdriver/constants.js +15 -0
  316. package/build/src/browser/wsdriver/constants.js.map +1 -0
  317. package/build/src/browser/wsdriver/debug.d.ts +2 -0
  318. package/build/src/browser/wsdriver/debug.js +9 -0
  319. package/build/src/browser/wsdriver/debug.js.map +1 -0
  320. package/build/src/browser/wsdriver/error.d.ts +18 -0
  321. package/build/src/browser/wsdriver/error.js +36 -0
  322. package/build/src/browser/wsdriver/error.js.map +1 -0
  323. package/build/src/browser/wsdriver/index.d.ts +23 -0
  324. package/build/src/browser/wsdriver/index.js +261 -0
  325. package/build/src/browser/wsdriver/index.js.map +1 -0
  326. package/build/src/browser/wsdriver/request.d.ts +10 -0
  327. package/build/src/browser/wsdriver/request.js +58 -0
  328. package/build/src/browser/wsdriver/request.js.map +1 -0
  329. package/build/src/browser/wsdriver/response.d.ts +3 -0
  330. package/build/src/browser/wsdriver/response.js +111 -0
  331. package/build/src/browser/wsdriver/response.js.map +1 -0
  332. package/build/src/browser/wsdriver/types.d.ts +71 -0
  333. package/build/src/browser/wsdriver/types.js +27 -0
  334. package/build/src/browser/wsdriver/types.js.map +1 -0
  335. package/build/src/browser-installer/chrome/index.d.ts +1 -0
  336. package/build/src/browser-installer/chrome/index.js +13 -3
  337. package/build/src/browser-installer/chrome/index.js.map +1 -1
  338. package/build/src/browser-installer/edge/index.d.ts +1 -0
  339. package/build/src/browser-installer/edge/index.js +8 -3
  340. package/build/src/browser-installer/edge/index.js.map +1 -1
  341. package/build/src/browser-installer/firefox/index.d.ts +1 -0
  342. package/build/src/browser-installer/firefox/index.js +8 -3
  343. package/build/src/browser-installer/firefox/index.js.map +1 -1
  344. package/build/src/browser-installer/safari/index.d.ts +1 -0
  345. package/build/src/browser-installer/safari/index.js +8 -3
  346. package/build/src/browser-installer/safari/index.js.map +1 -1
  347. package/build/src/browser-pool/basic-pool.js +3 -1
  348. package/build/src/browser-pool/basic-pool.js.map +1 -1
  349. package/build/src/browser-pool/cancelled-error.js +7 -1
  350. package/build/src/browser-pool/cancelled-error.js.map +1 -1
  351. package/build/src/browser-pool/limited-pool.d.ts +1 -1
  352. package/build/src/browser-pool/limited-pool.js +3 -3
  353. package/build/src/browser-pool/limited-pool.js.map +1 -1
  354. package/build/src/browser-pool/per-browser-limited-pool.d.ts +1 -1
  355. package/build/src/browser-pool/per-browser-limited-pool.js +3 -2
  356. package/build/src/browser-pool/per-browser-limited-pool.js.map +1 -1
  357. package/build/src/browser-pool/types.d.ts +1 -1
  358. package/build/src/browser-pool/webdriver-pool.d.ts +1 -0
  359. package/build/src/browser-pool/webdriver-pool.js +2 -0
  360. package/build/src/browser-pool/webdriver-pool.js.map +1 -1
  361. package/build/src/bundle/cjs/index.js +207 -108
  362. package/build/src/cli/commands/list-tests/index.js +2 -1
  363. package/build/src/cli/commands/list-tests/index.js.map +1 -1
  364. package/build/src/cli/commands/selectivity-merge-dumps/index.d.ts +2 -0
  365. package/build/src/cli/commands/selectivity-merge-dumps/index.js +50 -0
  366. package/build/src/cli/commands/selectivity-merge-dumps/index.js.map +1 -0
  367. package/build/src/cli/constants.d.ts +1 -0
  368. package/build/src/cli/constants.js +1 -0
  369. package/build/src/cli/constants.js.map +1 -1
  370. package/build/src/cli/index.js +29 -8
  371. package/build/src/cli/index.js.map +1 -1
  372. package/build/src/config/browser-options.js +51 -6
  373. package/build/src/config/browser-options.js.map +1 -1
  374. package/build/src/config/defaults.d.ts +27 -2
  375. package/build/src/config/defaults.js +30 -5
  376. package/build/src/config/defaults.js.map +1 -1
  377. package/build/src/config/index.d.ts +10 -6
  378. package/build/src/config/index.js +67 -42
  379. package/build/src/config/index.js.map +1 -1
  380. package/build/src/config/options.js +3 -2
  381. package/build/src/config/options.js.map +1 -1
  382. package/build/src/config/types.d.ts +133 -11
  383. package/build/src/config/types.js +15 -5
  384. package/build/src/config/types.js.map +1 -1
  385. package/build/src/config/utils.d.ts +4 -1
  386. package/build/src/config/utils.js +20 -2
  387. package/build/src/config/utils.js.map +1 -1
  388. package/build/src/constants/config.d.ts +1 -1
  389. package/build/src/constants/config.js +2 -2
  390. package/build/src/constants/config.js.map +1 -1
  391. package/build/src/constants/png.d.ts +14 -0
  392. package/build/src/constants/png.js +17 -0
  393. package/build/src/constants/png.js.map +1 -0
  394. package/build/src/constants/process-messages.d.ts +1 -0
  395. package/build/src/constants/process-messages.js +2 -1
  396. package/build/src/constants/process-messages.js.map +1 -1
  397. package/build/src/constants/repl.d.ts +2 -0
  398. package/build/src/constants/repl.js +6 -0
  399. package/build/src/constants/repl.js.map +1 -0
  400. package/build/src/dev-server/index.d.ts +1 -1
  401. package/build/src/dev-server/index.js +1 -1
  402. package/build/src/dev-server/index.js.map +1 -1
  403. package/build/src/error-snippets/constants.d.ts +2 -1
  404. package/build/src/error-snippets/constants.js +3 -2
  405. package/build/src/error-snippets/constants.js.map +1 -1
  406. package/build/src/error-snippets/source-maps.d.ts +3 -3
  407. package/build/src/error-snippets/source-maps.js +10 -8
  408. package/build/src/error-snippets/source-maps.js.map +1 -1
  409. package/build/src/error-snippets/utils.js +2 -2
  410. package/build/src/error-snippets/utils.js.map +1 -1
  411. package/build/src/errors/unhandled-rejection-error.d.ts +9 -0
  412. package/build/src/errors/unhandled-rejection-error.js +24 -0
  413. package/build/src/errors/unhandled-rejection-error.js.map +1 -0
  414. package/build/src/events/index.d.ts +12 -0
  415. package/build/src/events/index.js +3 -0
  416. package/build/src/events/index.js.map +1 -1
  417. package/build/src/globalFilesToRemove.d.ts +4 -0
  418. package/build/src/globalFilesToRemove.js +24 -0
  419. package/build/src/globalFilesToRemove.js.map +1 -0
  420. package/build/src/globals.d.ts +7 -0
  421. package/build/src/globals.js +10 -0
  422. package/build/src/globals.js.map +1 -0
  423. package/build/src/image.d.ts +26 -9
  424. package/build/src/image.js +201 -97
  425. package/build/src/image.js.map +1 -1
  426. package/build/src/index.d.ts +6 -14
  427. package/build/src/index.js +5 -1
  428. package/build/src/index.js.map +1 -1
  429. package/build/src/reporters/flat.js +7 -5
  430. package/build/src/reporters/flat.js.map +1 -1
  431. package/build/src/reporters/informers/console.d.ts +3 -3
  432. package/build/src/reporters/informers/console.js +6 -6
  433. package/build/src/reporters/informers/console.js.map +1 -1
  434. package/build/src/reporters/informers/file.d.ts +3 -3
  435. package/build/src/reporters/informers/file.js +13 -6
  436. package/build/src/reporters/informers/file.js.map +1 -1
  437. package/build/src/reporters/plain.js +4 -2
  438. package/build/src/reporters/plain.js.map +1 -1
  439. package/build/src/reporters/utils/helpers.js +10 -1
  440. package/build/src/reporters/utils/helpers.js.map +1 -1
  441. package/build/src/runner/browser-env/vite/browser-modules/driver.js +28 -8
  442. package/build/src/runner/browser-env/vite/browser-modules/driver.js.map +1 -1
  443. package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
  444. package/build/src/runner/browser-env/vite/browser-modules/types.d.ts +1 -1
  445. package/build/src/runner/browser-env/vite/plugins/generate-index-html.js +4 -6
  446. package/build/src/runner/browser-env/vite/plugins/generate-index-html.js.map +1 -1
  447. package/build/src/runner/browser-env/vite/server.d.ts +1 -0
  448. package/build/src/runner/browser-env/vite/server.js +26 -0
  449. package/build/src/runner/browser-env/vite/server.js.map +1 -1
  450. package/build/src/runner/browser-env/vite/utils.d.ts +0 -5
  451. package/build/src/runner/browser-env/vite/utils.js +15 -9
  452. package/build/src/runner/browser-env/vite/utils.js.map +1 -1
  453. package/build/src/runner/browser-runner.d.ts +1 -1
  454. package/build/src/runner/browser-runner.js +2 -2
  455. package/build/src/runner/browser-runner.js.map +1 -1
  456. package/build/src/runner/index.d.ts +6 -3
  457. package/build/src/runner/index.js +20 -8
  458. package/build/src/runner/index.js.map +1 -1
  459. package/build/src/runner/suite-monitor.d.ts +1 -1
  460. package/build/src/runner/test-runner/insistant-test-runner.d.ts +1 -0
  461. package/build/src/runner/test-runner/regular-test-runner.d.ts +3 -1
  462. package/build/src/runner/test-runner/regular-test-runner.js +30 -3
  463. package/build/src/runner/test-runner/regular-test-runner.js.map +1 -1
  464. package/build/src/runner/tests-tracker.d.ts +25 -0
  465. package/build/src/runner/tests-tracker.js +121 -0
  466. package/build/src/runner/tests-tracker.js.map +1 -0
  467. package/build/src/runner/types.d.ts +1 -1
  468. package/build/src/signal-handler.d.ts +2 -2
  469. package/build/src/signal-handler.js +24 -11
  470. package/build/src/signal-handler.js.map +1 -1
  471. package/build/src/test-reader/index.js +12 -8
  472. package/build/src/test-reader/index.js.map +1 -1
  473. package/build/src/test-reader/mocha-reader/index.d.ts +2 -1
  474. package/build/src/test-reader/mocha-reader/index.js +47 -2
  475. package/build/src/test-reader/mocha-reader/index.js.map +1 -1
  476. package/build/src/test-reader/mocha-reader/mocha-event-bus.d.ts +1 -1
  477. package/build/src/test-reader/mocha-reader/tree-builder-decorator.js +4 -4
  478. package/build/src/test-reader/mocha-reader/tree-builder-decorator.js.map +1 -1
  479. package/build/src/test-reader/test-object/suite.d.ts +9 -3
  480. package/build/src/test-reader/test-object/suite.js +19 -1
  481. package/build/src/test-reader/test-object/suite.js.map +1 -1
  482. package/build/src/test-reader/test-object/test.d.ts +7 -2
  483. package/build/src/test-reader/test-object/test.js +20 -1
  484. package/build/src/test-reader/test-object/test.js.map +1 -1
  485. package/build/src/test-reader/test-object/types.d.ts +11 -2
  486. package/build/src/test-reader/test-parser.d.ts +3 -1
  487. package/build/src/test-reader/test-parser.js +22 -6
  488. package/build/src/test-reader/test-parser.js.map +1 -1
  489. package/build/src/testplane.d.ts +22 -10
  490. package/build/src/testplane.js +115 -18
  491. package/build/src/testplane.js.map +1 -1
  492. package/build/src/types/globals.d.ts +16 -0
  493. package/build/src/types/globals.js +3 -0
  494. package/build/src/types/globals.js.map +1 -0
  495. package/build/src/types/index.d.ts +44 -7
  496. package/build/src/unstable.d.ts +2 -2
  497. package/build/src/unstable.js +2 -1
  498. package/build/src/unstable.js.map +1 -1
  499. package/build/src/utils/cli.d.ts +2 -0
  500. package/build/src/utils/cli.js +29 -2
  501. package/build/src/utils/cli.js.map +1 -1
  502. package/build/src/utils/config.d.ts +1 -0
  503. package/build/src/utils/config.js +6 -1
  504. package/build/src/utils/config.js.map +1 -1
  505. package/build/src/utils/crypto.d.ts +1 -0
  506. package/build/src/utils/crypto.js +2 -1
  507. package/build/src/utils/crypto.js.map +1 -1
  508. package/build/src/utils/eight-bit-rgba-to-png.d.ts +3 -0
  509. package/build/src/utils/eight-bit-rgba-to-png.js +61 -0
  510. package/build/src/utils/eight-bit-rgba-to-png.js.map +1 -0
  511. package/build/src/utils/ipc.d.ts +1 -1
  512. package/build/src/utils/ipc.js +15 -1
  513. package/build/src/utils/ipc.js.map +1 -1
  514. package/build/src/utils/logger.d.ts +9 -0
  515. package/build/src/utils/logger.js +27 -3
  516. package/build/src/utils/logger.js.map +1 -1
  517. package/build/src/utils/preload-utils.d.ts +1 -0
  518. package/build/src/utils/preload-utils.js +4 -4
  519. package/build/src/utils/preload-utils.js.map +1 -1
  520. package/build/src/utils/processor.js +15 -6
  521. package/build/src/utils/processor.js.map +1 -1
  522. package/build/src/utils/repl-instrumentation/index.d.ts +1 -0
  523. package/build/src/utils/repl-instrumentation/index.js +46 -0
  524. package/build/src/utils/repl-instrumentation/index.js.map +1 -0
  525. package/build/src/utils/repl-instrumentation/typescript.d.ts +7 -0
  526. package/build/src/utils/repl-instrumentation/typescript.js +307 -0
  527. package/build/src/utils/repl-instrumentation/typescript.js.map +1 -0
  528. package/build/src/utils/repl-module-hooks.d.ts +1 -0
  529. package/build/src/utils/repl-module-hooks.js +111 -0
  530. package/build/src/utils/repl-module-hooks.js.map +1 -0
  531. package/build/src/utils/typescript.d.ts +3 -0
  532. package/build/src/utils/typescript.js +142 -36
  533. package/build/src/utils/typescript.js.map +1 -1
  534. package/build/src/utils/worker-error-serialization.d.ts +13 -0
  535. package/build/src/utils/worker-error-serialization.js +125 -0
  536. package/build/src/utils/worker-error-serialization.js.map +1 -0
  537. package/build/src/utils/workers-registry.d.ts +2 -2
  538. package/build/src/utils/workers-registry.js +53 -3
  539. package/build/src/utils/workers-registry.js.map +1 -1
  540. package/build/src/vendors/expect-webdriverio/matchers-overrides.d.ts +49 -0
  541. package/build/src/vendors/expect-webdriverio/matchers-overrides.js +3 -0
  542. package/build/src/vendors/expect-webdriverio/matchers-overrides.js.map +1 -0
  543. package/build/src/worker/browser-env/runner/test-runner/index.js +16 -0
  544. package/build/src/worker/browser-env/runner/test-runner/index.js.map +1 -1
  545. package/build/src/worker/runner/browser-pool.js +5 -2
  546. package/build/src/worker/runner/browser-pool.js.map +1 -1
  547. package/build/src/worker/runner/index.d.ts +1 -0
  548. package/build/src/worker/runner/index.js +27 -6
  549. package/build/src/worker/runner/index.js.map +1 -1
  550. package/build/src/worker/runner/sequence-test-parser.js +5 -7
  551. package/build/src/worker/runner/sequence-test-parser.js.map +1 -1
  552. package/build/src/worker/runner/test-runner/capture-fail-screenshot.d.ts +10 -0
  553. package/build/src/worker/runner/test-runner/capture-fail-screenshot.js +68 -0
  554. package/build/src/worker/runner/test-runner/capture-fail-screenshot.js.map +1 -0
  555. package/build/src/worker/runner/test-runner/execution-thread.d.ts +2 -4
  556. package/build/src/worker/runner/test-runner/execution-thread.js +11 -18
  557. package/build/src/worker/runner/test-runner/execution-thread.js.map +1 -1
  558. package/build/src/worker/runner/test-runner/index.d.ts +3 -2
  559. package/build/src/worker/runner/test-runner/index.js +72 -12
  560. package/build/src/worker/runner/test-runner/index.js.map +1 -1
  561. package/build/src/worker/runner/test-runner/types.d.ts +1 -2
  562. package/build/src/worker/testplane-facade.js +5 -3
  563. package/build/src/worker/testplane-facade.js.map +1 -1
  564. package/build/src/worker/testplane.d.ts +2 -0
  565. package/build/src/worker/testplane.js +4 -1
  566. package/build/src/worker/testplane.js.map +1 -1
  567. package/build/src/ws-connection/constants.d.ts +13 -0
  568. package/build/src/ws-connection/constants.js +17 -0
  569. package/build/src/ws-connection/constants.js.map +1 -0
  570. package/build/src/ws-connection/error.d.ts +52 -0
  571. package/build/src/ws-connection/error.js +84 -0
  572. package/build/src/ws-connection/error.js.map +1 -0
  573. package/build/src/ws-connection/index.d.ts +83 -0
  574. package/build/src/ws-connection/index.js +397 -0
  575. package/build/src/ws-connection/index.js.map +1 -0
  576. package/build/src/ws-connection/utils.d.ts +6 -0
  577. package/build/src/ws-connection/utils.js +9 -0
  578. package/build/src/ws-connection/utils.js.map +1 -0
  579. package/package.json +41 -25
  580. package/build/src/browser/client-bridge/client-bridge.d.ts +0 -12
  581. package/build/src/browser/client-bridge/client-bridge.js +0 -45
  582. package/build/src/browser/client-bridge/client-bridge.js.map +0 -1
  583. package/build/src/browser/client-scripts/bundle.compat.js +0 -23
  584. package/build/src/browser/client-scripts/bundle.native.js +0 -15
  585. package/build/src/browser/client-scripts/ignore-areas.js +0 -7
  586. package/build/src/browser/client-scripts/index.js +0 -850
  587. package/build/src/browser/client-scripts/lib.compat.js +0 -28
  588. package/build/src/browser/client-scripts/lib.native.js +0 -28
  589. package/build/src/browser/client-scripts/rect.js +0 -251
  590. package/build/src/browser/client-scripts/util.js +0 -319
  591. package/build/src/browser/screen-shooter/index.d.ts +0 -22
  592. package/build/src/browser/screen-shooter/index.js +0 -117
  593. package/build/src/browser/screen-shooter/index.js.map +0 -1
  594. package/build/src/browser/screen-shooter/types.d.ts +0 -14
  595. package/build/src/browser/screen-shooter/types.js.map +0 -1
  596. package/build/src/browser/screen-shooter/utils.d.ts +0 -18
  597. package/build/src/browser/screen-shooter/utils.js +0 -198
  598. package/build/src/browser/screen-shooter/utils.js.map +0 -1
  599. package/build/src/browser/standalone.d.ts +0 -6
  600. package/build/src/browser/standalone.js.map +0 -1
  601. package/build/src/runner/browser-env/index.d.ts +0 -12
  602. package/build/src/runner/browser-env/index.js +0 -39
  603. package/build/src/runner/browser-env/index.js.map +0 -1
  604. package/build/src/worker/runner/test-runner/one-time-screenshooter.d.ts +0 -35
  605. package/build/src/worker/runner/test-runner/one-time-screenshooter.js +0 -86
  606. package/build/src/worker/runner/test-runner/one-time-screenshooter.js.map +0 -1
  607. /package/build/src/browser/{screen-shooter → cdp}/types.js +0 -0
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ exports.__esModule = true;
14
+ exports.captureAnchorBaseline = exports.cleanupScrolls = exports.cleanupPointerEvents = exports.disablePointerEvents = exports.cleanupFrameAnimations = exports.disableFrameAnimations = exports.prepareViewportScreenshot = exports.scrollFullPage = exports.prepareFullPageScreenshot = exports.getCaptureState = exports.scrollTo = exports.scrollBy = exports.prepareElementsScreenshot = void 0;
15
+ var _isomorphic_1 = require("@isomorphic");
16
+ var logger_1 = require("../shared/logger");
17
+ var operations_1 = require("./operations");
18
+ var descriptions_1 = require("./utils/descriptions");
19
+ var dom_1 = require("./utils/dom");
20
+ var scroll_1 = require("./utils/scroll");
21
+ var MIN_ANCHOR_SAMPLE_SIZE = 3;
22
+ var MAX_ANCHOR_TRACKED_ELEMENTS = 500;
23
+ /** Tolerance in CSS pixels for binning observed viewport shift deltas */
24
+ var ANCHOR_SHIFT_TOLERANCE_CSS = 1.5;
25
+ function sampleRandom(items, maxCount) {
26
+ if (items.length <= maxCount)
27
+ return items.slice();
28
+ var arr = items.slice();
29
+ for (var i = 0; i < maxCount; i++) {
30
+ var j = i + Math.floor(Math.random() * (arr.length - i));
31
+ var tmp = arr[i];
32
+ arr[i] = arr[j];
33
+ arr[j] = tmp;
34
+ }
35
+ return arr.slice(0, maxCount);
36
+ }
37
+ /** Finds the densest tolerance-wide window and returns its median value. */
38
+ function computeShiftMode(deltas, tolerance) {
39
+ if (deltas.length === 0) {
40
+ return null;
41
+ }
42
+ var sortedDeltas = deltas.slice().sort(function (a, b) { return a - b; });
43
+ var bestWindowStartIndex = 0;
44
+ var bestWindowEndIndex = 0;
45
+ for (var startIndex = 0, endIndex = 0; startIndex < sortedDeltas.length; startIndex++) {
46
+ while (endIndex + 1 < sortedDeltas.length &&
47
+ sortedDeltas[endIndex + 1] - sortedDeltas[startIndex] <= tolerance) {
48
+ endIndex++;
49
+ }
50
+ var currentWindowSize = endIndex - startIndex + 1;
51
+ var bestWindowSize = bestWindowEndIndex - bestWindowStartIndex + 1;
52
+ var shouldPreferCurrentWindow = currentWindowSize > bestWindowSize;
53
+ if (shouldPreferCurrentWindow) {
54
+ bestWindowStartIndex = startIndex;
55
+ bestWindowEndIndex = endIndex;
56
+ }
57
+ }
58
+ var dominantValues = sortedDeltas.slice(bestWindowStartIndex, bestWindowEndIndex + 1);
59
+ var middleIndex = Math.floor(dominantValues.length / 2);
60
+ if (dominantValues.length % 2 === 1) {
61
+ return dominantValues[middleIndex];
62
+ }
63
+ return (dominantValues[middleIndex - 1] + dominantValues[middleIndex]) / 2;
64
+ }
65
+ /** This function is useful to understand what actually is going on when capture area unexpectedly changes size/top position.
66
+ * It returns the actual shift of the capture area compared to the baseline.
67
+ * This shift can then be compared to the shift of the whole capture area to compute correction delta. */
68
+ function computeActualShift() {
69
+ var trackedElementsData = (0, dom_1.getScreenshooterNamespaceData)().trackedElementsData;
70
+ if (!trackedElementsData || trackedElementsData.length === 0) {
71
+ return null;
72
+ }
73
+ var verticalDeltas = [];
74
+ for (var _i = 0, trackedElementsData_1 = trackedElementsData; _i < trackedElementsData_1.length; _i++) {
75
+ var trackedElementData = trackedElementsData_1[_i];
76
+ if (!trackedElementData.element.isConnected) {
77
+ continue;
78
+ }
79
+ var currentRect = trackedElementData.element.getBoundingClientRect();
80
+ var baselineRect = trackedElementData.rect;
81
+ if (currentRect.width <= 0 || currentRect.height <= 0) {
82
+ continue;
83
+ }
84
+ if (Math.abs(currentRect.width - baselineRect.width) > 1 ||
85
+ Math.abs(currentRect.height - baselineRect.height) > 1) {
86
+ continue;
87
+ }
88
+ verticalDeltas.push(currentRect.top - baselineRect.top);
89
+ }
90
+ if (verticalDeltas.length < MIN_ANCHOR_SAMPLE_SIZE) {
91
+ return null;
92
+ }
93
+ var shiftCss = computeShiftMode(verticalDeltas, ANCHOR_SHIFT_TOLERANCE_CSS);
94
+ return shiftCss === null ? null : shiftCss;
95
+ }
96
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
+ function safeCall(callback) {
98
+ var args = [];
99
+ for (var _i = 1; _i < arguments.length; _i++) {
100
+ args[_i - 1] = arguments[_i];
101
+ }
102
+ try {
103
+ return callback.apply(void 0, args);
104
+ }
105
+ catch (e) {
106
+ if (e instanceof Error) {
107
+ return {
108
+ errorCode: _isomorphic_1.BrowserSideErrorCode.JS,
109
+ message: e.stack || e.message
110
+ };
111
+ }
112
+ return {
113
+ errorCode: _isomorphic_1.BrowserSideErrorCode.JS,
114
+ message: "Unknown error: " + String(e)
115
+ };
116
+ }
117
+ }
118
+ function prepareElementsScreenshot(selectorsToCapture, opts) {
119
+ return safeCall(prepareElementsScreenshotUnsafe, selectorsToCapture, opts);
120
+ }
121
+ exports.prepareElementsScreenshot = prepareElementsScreenshot;
122
+ function scrollBy(selectorsToCapture, scrollDelta, selectorToScroll, debug) {
123
+ return safeCall(function () {
124
+ var logger = (0, logger_1.createDebugLogger)({ debug: debug }, "scrollBy");
125
+ var pixelRatio = (0, operations_1.computePixelRatio)();
126
+ var scrollTarget = selectorToScroll ? document.querySelector(selectorToScroll) : null;
127
+ var scrollElement = scrollTarget !== null && scrollTarget !== void 0 ? scrollTarget : (0, scroll_1.getCommonScrollParent)(selectorsToCapture);
128
+ var readableAutoScrollElementDescr = (0, descriptions_1.getReadableElementDescriptor)(scrollElement);
129
+ var readableSelectorToScrollDescr = selectorToScroll
130
+ ? scrollTarget
131
+ ? "".concat(selectorToScroll, " (").concat(readableAutoScrollElementDescr, ")")
132
+ : "".concat(selectorToScroll, " (not found, auto-detected ").concat(readableAutoScrollElementDescr, ")")
133
+ : "auto-detected ".concat(readableAutoScrollElementDescr);
134
+ var scrollHeightCss = (0, _isomorphic_1.fromDeviceToCssNumber)(scrollDelta, pixelRatio);
135
+ (0, scroll_1.scrollElementBy)(scrollElement, scrollHeightCss);
136
+ return {
137
+ readableSelectorToScrollDescr: readableSelectorToScrollDescr,
138
+ debugLog: logger()
139
+ };
140
+ });
141
+ }
142
+ exports.scrollBy = scrollBy;
143
+ function scrollTo(selectorsToCapture, scrollOffset, selectorToScroll, debug) {
144
+ return safeCall(function () {
145
+ var logger = (0, logger_1.createDebugLogger)({ debug: debug }, "scrollTo");
146
+ logger("Asked to scroll to with params: selectorsToCapture:", selectorsToCapture, "scrollOffset:", scrollOffset, "selectorToScroll:", selectorToScroll);
147
+ var pixelRatio = (0, operations_1.computePixelRatio)();
148
+ var scrollTarget = selectorToScroll ? document.querySelector(selectorToScroll) : null;
149
+ var scrollElement = scrollTarget !== null && scrollTarget !== void 0 ? scrollTarget : (0, scroll_1.getCommonScrollParent)(selectorsToCapture);
150
+ var readableAutoScrollElementDescr = (0, descriptions_1.getReadableElementDescriptor)(scrollElement);
151
+ var readableSelectorToScrollDescr = selectorToScroll
152
+ ? scrollTarget
153
+ ? "".concat(selectorToScroll, " (").concat(readableAutoScrollElementDescr, ")")
154
+ : "".concat(selectorToScroll, " (not found, auto-detected ").concat(readableAutoScrollElementDescr, ")")
155
+ : "auto-detected ".concat(readableAutoScrollElementDescr);
156
+ var scrollOffsetCss = (0, _isomorphic_1.fromDeviceToCssNumber)(scrollOffset, pixelRatio);
157
+ (0, scroll_1.scrollElementToOffset)(scrollElement, scrollOffsetCss);
158
+ return {
159
+ readableSelectorToScrollDescr: readableSelectorToScrollDescr,
160
+ debugLog: logger()
161
+ };
162
+ });
163
+ }
164
+ exports.scrollTo = scrollTo;
165
+ /** Returns current state: positions of elements to capture, ignore areas, safe area, scroll offset */
166
+ function getCaptureState(selectorsToCapture, selectorsToIgnore, selectorToScroll, debug) {
167
+ return safeCall(function () {
168
+ var logger = (0, logger_1.createDebugLogger)({ debug: debug }, "getCaptureState");
169
+ var pixelRatio = (0, operations_1.computePixelRatio)();
170
+ var scrollTarget = selectorToScroll ? document.querySelector(selectorToScroll) : null;
171
+ var scrollElement = scrollTarget !== null && scrollTarget !== void 0 ? scrollTarget : (0, scroll_1.getCommonScrollParent)(selectorsToCapture);
172
+ var readableAutoScrollElementDescr = (0, descriptions_1.getReadableElementDescriptor)(scrollElement);
173
+ var readableSelectorToScrollDescr = selectorToScroll
174
+ ? scrollTarget
175
+ ? "".concat(selectorToScroll, " (").concat(readableAutoScrollElementDescr, ")")
176
+ : "".concat(selectorToScroll, " (not found, auto-detected ").concat(readableAutoScrollElementDescr, ")")
177
+ : "auto-detected ".concat(readableAutoScrollElementDescr);
178
+ var ignoreAreas = (0, operations_1.computeIgnoreAreas)(selectorsToIgnore);
179
+ var safeArea = (0, operations_1.computeSafeArea)(selectorsToCapture, scrollElement, logger);
180
+ var captureSpecsAfterCss = (0, operations_1.computeCaptureSpecs)(selectorsToCapture, logger);
181
+ var captureSpecs = captureSpecsAfterCss.map(function (spec) { return ({
182
+ full: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(spec.full), pixelRatio),
183
+ clip: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(spec.clip), pixelRatio),
184
+ visible: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(spec.visible), pixelRatio)
185
+ }); });
186
+ var scrollOffset = (0, operations_1.computeScrollOffset)(scrollElement);
187
+ var viewportOffset = (0, operations_1.computeViewportOffset)();
188
+ var anchorShift = computeActualShift();
189
+ var anchorShiftDevice = anchorShift === null ? null : (0, _isomorphic_1.fromCssToDeviceNumber)(anchorShift, pixelRatio);
190
+ logger("scrollOffset:", scrollOffset);
191
+ return {
192
+ captureSpecs: captureSpecs,
193
+ ignoreAreas: ignoreAreas.map(function (area) { return (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(area), pixelRatio); }),
194
+ safeArea: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(safeArea), pixelRatio),
195
+ scrollOffset: (0, _isomorphic_1.fromCssToDeviceNumber)(scrollOffset, pixelRatio),
196
+ viewportOffset: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.floorCoords)(viewportOffset), pixelRatio),
197
+ anchorShift: anchorShiftDevice,
198
+ readableSelectorToScrollDescr: readableSelectorToScrollDescr,
199
+ debugLog: logger()
200
+ };
201
+ });
202
+ }
203
+ exports.getCaptureState = getCaptureState;
204
+ function prepareFullPageScreenshot(opts) {
205
+ if (opts === void 0) { opts = {}; }
206
+ return safeCall(function () {
207
+ (0, operations_1.prepareFullPageScrollCleanup)();
208
+ var pixelRatio = (0, operations_1.computePixelRatio)(opts.usePixelRatio);
209
+ window.scrollTo(0, 0);
210
+ var documentSize = (0, operations_1.computeDocumentSize)();
211
+ var viewportSize = (0, operations_1.computeViewportSize)();
212
+ var viewportOffset = (0, operations_1.computeViewportOffset)();
213
+ var safeArea = (0, operations_1.computeSafeArea)(["body"], document.documentElement);
214
+ if (opts.disableAnimation) {
215
+ (0, operations_1.disableAnimations)();
216
+ }
217
+ var pointerEventsDisabled = false;
218
+ if (opts.disableHover === _isomorphic_1.DisableHoverMode.Always) {
219
+ (0, operations_1.disablePointerEvents)();
220
+ pointerEventsDisabled = true;
221
+ }
222
+ else if (opts.disableHover === _isomorphic_1.DisableHoverMode.WhenScrollingNeeded) {
223
+ var needsScrolling = documentSize.height > viewportSize.height;
224
+ if (needsScrolling) {
225
+ (0, operations_1.disablePointerEvents)();
226
+ pointerEventsDisabled = true;
227
+ }
228
+ }
229
+ var elementPositionsProbe = (0, operations_1.computeElementPositionsProbe)().map(function (rect) {
230
+ return rect ? __assign(__assign({}, (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(rect), pixelRatio)), { elementDescr: rect.elementDescr }) : null;
231
+ });
232
+ return {
233
+ documentSize: (0, _isomorphic_1.ceilCoords)((0, _isomorphic_1.fromCssToDevice)(documentSize, pixelRatio)),
234
+ viewportSize: (0, _isomorphic_1.fromCssToDevice)(viewportSize, pixelRatio),
235
+ viewportOffset: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.floorCoords)(viewportOffset), pixelRatio),
236
+ safeArea: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(safeArea), pixelRatio),
237
+ elementPositionsProbe: elementPositionsProbe,
238
+ pixelRatio: pixelRatio,
239
+ pointerEventsDisabled: pointerEventsDisabled
240
+ };
241
+ });
242
+ }
243
+ exports.prepareFullPageScreenshot = prepareFullPageScreenshot;
244
+ function scrollFullPage(scrollHeight, opts) {
245
+ if (opts === void 0) { opts = {}; }
246
+ return safeCall(function () {
247
+ var pixelRatio = (0, operations_1.computePixelRatio)(opts.usePixelRatio);
248
+ var scrollHeightCss = ((0, _isomorphic_1.fromDeviceToCssNumber)(scrollHeight, pixelRatio) -
249
+ 1);
250
+ (0, scroll_1.scrollElementBy)(document.documentElement, scrollHeightCss);
251
+ var viewportOffset = (0, operations_1.computeViewportOffset)();
252
+ var elementPositionsProbe = (0, operations_1.computeElementPositionsProbe)().map(function (rect) {
253
+ return rect ? __assign(__assign({}, (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(rect), pixelRatio)), { elementDescr: rect.elementDescr }) : null;
254
+ });
255
+ return {
256
+ viewportOffset: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.floorCoords)(viewportOffset), pixelRatio),
257
+ elementPositionsProbe: elementPositionsProbe
258
+ };
259
+ });
260
+ }
261
+ exports.scrollFullPage = scrollFullPage;
262
+ function prepareViewportScreenshot(opts) {
263
+ if (opts === void 0) { opts = {}; }
264
+ return safeCall(function () {
265
+ var pixelRatio = (0, operations_1.computePixelRatio)(opts.usePixelRatio);
266
+ var viewportSize = (0, operations_1.computeViewportSize)();
267
+ var viewportOffset = (0, operations_1.computeViewportOffset)();
268
+ var documentSize = (0, operations_1.computeDocumentSize)();
269
+ var canHaveCaret = (0, operations_1.computeCanHaveCaret)();
270
+ if (opts.disableAnimation) {
271
+ (0, operations_1.disableAnimations)();
272
+ }
273
+ var pointerEventsDisabled = false;
274
+ if (opts.disableHover === _isomorphic_1.DisableHoverMode.Always) {
275
+ (0, operations_1.disablePointerEvents)();
276
+ pointerEventsDisabled = true;
277
+ }
278
+ return {
279
+ viewportSize: (0, _isomorphic_1.fromCssToDevice)(viewportSize, pixelRatio),
280
+ viewportOffset: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.floorCoords)(viewportOffset), pixelRatio),
281
+ documentSize: (0, _isomorphic_1.ceilCoords)((0, _isomorphic_1.fromCssToDevice)(documentSize, pixelRatio)),
282
+ canHaveCaret: canHaveCaret,
283
+ pixelRatio: pixelRatio,
284
+ pointerEventsDisabled: pointerEventsDisabled
285
+ };
286
+ });
287
+ }
288
+ exports.prepareViewportScreenshot = prepareViewportScreenshot;
289
+ function disableFrameAnimations() {
290
+ return safeCall(operations_1.disableAnimations);
291
+ }
292
+ exports.disableFrameAnimations = disableFrameAnimations;
293
+ function cleanupFrameAnimations() {
294
+ if (window.__cleanupAnimation) {
295
+ window.__cleanupAnimation();
296
+ }
297
+ }
298
+ exports.cleanupFrameAnimations = cleanupFrameAnimations;
299
+ function disablePointerEvents() {
300
+ return safeCall(operations_1.disablePointerEvents);
301
+ }
302
+ exports.disablePointerEvents = disablePointerEvents;
303
+ function cleanupPointerEvents() {
304
+ var screenshooterNamespaceData = (0, dom_1.getScreenshooterNamespaceData)();
305
+ if (screenshooterNamespaceData.cleanupPointerEventsCb) {
306
+ screenshooterNamespaceData.cleanupPointerEventsCb();
307
+ }
308
+ }
309
+ exports.cleanupPointerEvents = cleanupPointerEvents;
310
+ function cleanupScrolls() {
311
+ (0, dom_1.getScreenshooterNamespaceData)().trackedElementsData = [];
312
+ (0, operations_1.cleanupSavedScrolls)();
313
+ }
314
+ exports.cleanupScrolls = cleanupScrolls;
315
+ /**
316
+ * Records up to 500 random non-degenerate descendants of the capture elements as anchor baselines.
317
+ * Must be called once before the best-effort capture pass; getCaptureState will then return anchorShift.
318
+ */
319
+ function captureAnchorBaseline(selectorsToCapture) {
320
+ return safeCall(function () {
321
+ var captureSpecs = (0, operations_1.computeCaptureSpecs)(selectorsToCapture);
322
+ var captureArea = captureSpecs.length > 0 ? (0, _isomorphic_1.getCoveringRect)(captureSpecs.map(function (spec) { return spec.full; })) : null;
323
+ var allDescendants = [];
324
+ for (var si = 0; si < selectorsToCapture.length; si++) {
325
+ var el = document.querySelector(selectorsToCapture[si]);
326
+ if (!el)
327
+ continue;
328
+ allDescendants.push(el);
329
+ var nodes = el.querySelectorAll("*");
330
+ for (var ni = 0; ni < nodes.length; ni++)
331
+ allDescendants.push(nodes[ni]);
332
+ }
333
+ var nonDegenerate = allDescendants.filter(function (el) {
334
+ var r = el.getBoundingClientRect();
335
+ if (r.width <= 0 || r.height <= 0) {
336
+ return false;
337
+ }
338
+ if (!captureArea) {
339
+ return true;
340
+ }
341
+ var rect = (0, _isomorphic_1.fromBcrToRect)(r);
342
+ return Boolean((0, _isomorphic_1.getIntersection)(captureArea, rect));
343
+ });
344
+ var sampled = sampleRandom(nonDegenerate, MAX_ANCHOR_TRACKED_ELEMENTS);
345
+ (0, dom_1.getScreenshooterNamespaceData)().trackedElementsData = sampled.map(function (el) {
346
+ var r = el.getBoundingClientRect();
347
+ return {
348
+ element: el,
349
+ rect: (0, _isomorphic_1.fromBcrToRect)(r)
350
+ };
351
+ });
352
+ });
353
+ }
354
+ exports.captureAnchorBaseline = captureAnchorBaseline;
355
+ function prepareElementsScreenshotUnsafe(selectorsToCapture, opts) {
356
+ var logger = (0, logger_1.createDebugLogger)(opts, "prepareElementsScreenshot");
357
+ (0, operations_1.saveScrollPositions)(selectorsToCapture, opts.selectorToScroll);
358
+ var readableSelectorToScrollDescr = (0, operations_1.scrollToCaptureAreaIfNeeded)(selectorsToCapture, opts.captureElementFromTop, opts.allowViewportOverflow, opts.selectorToScroll, logger).readableSelectorToScrollDescr;
359
+ if (opts.disableAnimation) {
360
+ (0, operations_1.disableAnimations)();
361
+ }
362
+ var pixelRatio = (0, operations_1.computePixelRatio)(opts.usePixelRatio);
363
+ var scrollTarget = opts.selectorToScroll ? document.querySelector(opts.selectorToScroll) : null;
364
+ var scrollElement = scrollTarget !== null && scrollTarget !== void 0 ? scrollTarget : (0, scroll_1.getCommonScrollParent)(selectorsToCapture);
365
+ var ignoreAreas = (0, operations_1.computeIgnoreAreas)(opts.ignoreSelectors);
366
+ var captureSpecs = (0, operations_1.computeCaptureSpecs)(selectorsToCapture, logger);
367
+ var viewportSize = (0, operations_1.computeViewportSize)();
368
+ var viewportOffset = (0, operations_1.computeViewportOffset)();
369
+ var safeArea = (0, operations_1.computeSafeArea)(selectorsToCapture, scrollElement, logger);
370
+ var scrollOffset = (0, operations_1.computeScrollOffset)(scrollElement);
371
+ var documentSize = (0, operations_1.computeDocumentSize)();
372
+ var canHaveCaret = (0, operations_1.computeCanHaveCaret)();
373
+ var pointerEventsDisabled = false;
374
+ if (opts.disableHover === _isomorphic_1.DisableHoverMode.Always) {
375
+ (0, operations_1.disablePointerEvents)();
376
+ pointerEventsDisabled = true;
377
+ }
378
+ else if (opts.disableHover === _isomorphic_1.DisableHoverMode.WhenScrollingNeeded && opts.compositeImage) {
379
+ var captureArea = (0, _isomorphic_1.getCoveringRect)(captureSpecs.map(function (s) { return s.full; }));
380
+ var needsScrolling = (0, _isomorphic_1.getBottom)(captureArea) > (0, _isomorphic_1.getBottom)(safeArea);
381
+ if (needsScrolling) {
382
+ logger("adding stylesheet with pointer-events: none on all elements (composite capture needs scrolling). captureArea:", captureArea, "safeArea:", safeArea);
383
+ (0, operations_1.disablePointerEvents)();
384
+ pointerEventsDisabled = true;
385
+ }
386
+ }
387
+ logger("scrollOffset:", scrollOffset);
388
+ return {
389
+ ignoreAreas: ignoreAreas.map(function (area) { return (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(area), pixelRatio); }),
390
+ captureSpecs: captureSpecs.map(function (s) { return ({
391
+ full: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(s.full), pixelRatio),
392
+ clip: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(s.clip), pixelRatio),
393
+ visible: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(s.visible), pixelRatio)
394
+ }); }),
395
+ viewportSize: (0, _isomorphic_1.fromCssToDevice)(viewportSize, pixelRatio),
396
+ viewportOffset: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.floorCoords)(viewportOffset), pixelRatio),
397
+ safeArea: (0, _isomorphic_1.fromCssToDevice)((0, _isomorphic_1.roundCoords)(safeArea), pixelRatio),
398
+ documentSize: (0, _isomorphic_1.ceilCoords)((0, _isomorphic_1.fromCssToDevice)(documentSize, pixelRatio)),
399
+ canHaveCaret: canHaveCaret,
400
+ pixelRatio: pixelRatio,
401
+ pointerEventsDisabled: pointerEventsDisabled,
402
+ debugLog: logger(),
403
+ readableSelectorToScrollDescr: readableSelectorToScrollDescr,
404
+ scrollOffset: (0, _isomorphic_1.fromCssToDeviceNumber)(scrollOffset, pixelRatio)
405
+ };
406
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ exports.__esModule = true;
26
+ var implementation = __importStar(require("./implementation"));
27
+ var globalObj = typeof window === "undefined" ? globalThis : window;
28
+ if (!globalObj.__geminiCore) {
29
+ globalObj.__geminiCore = {};
30
+ }
31
+ globalObj.__geminiCore[__geminiNamespace] = implementation;