@wdio/image-comparison-core 1.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 (416) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/LICENSE +21 -0
  3. package/README.md +12 -0
  4. package/assets/ios/ipadair4th.ipadair5th-bottom.png +0 -0
  5. package/assets/ios/ipadair4th.ipadair5th-top.png +0 -0
  6. package/assets/ios/ipadmini6th-bottom.png +0 -0
  7. package/assets/ios/ipadmini6th-top.png +0 -0
  8. package/assets/ios/ipadpro11-bottom.png +0 -0
  9. package/assets/ios/ipadpro11-top.png +0 -0
  10. package/assets/ios/ipadpro129-bottom.png +0 -0
  11. package/assets/ios/ipadpro129-top.png +0 -0
  12. package/assets/ios/iphone11promax-bottom.png +0 -0
  13. package/assets/ios/iphone11promax-top.png +0 -0
  14. package/assets/ios/iphone12.iphone12pro-top.png +0 -0
  15. package/assets/ios/iphone12.iphone12pro.iphone13.iphone13pro.iphone14-bottom.png +0 -0
  16. package/assets/ios/iphone12mini-top.png +0 -0
  17. package/assets/ios/iphone12mini.iphone13mini-bottom.png +0 -0
  18. package/assets/ios/iphone12promax-top.png +0 -0
  19. package/assets/ios/iphone12promax.iphone13promax.iphone14plus-bottom.png +0 -0
  20. package/assets/ios/iphone13.iphone13pro.iphone14-top.png +0 -0
  21. package/assets/ios/iphone13mini-top.png +0 -0
  22. package/assets/ios/iphone13promax.iphone14plus-top.png +0 -0
  23. package/assets/ios/iphone14pro-bottom.png +0 -0
  24. package/assets/ios/iphone14pro-top.png +0 -0
  25. package/assets/ios/iphone14promax-bottom.png +0 -0
  26. package/assets/ios/iphone14promax-top.png +0 -0
  27. package/assets/ios/iphone15-bottom.png +0 -0
  28. package/assets/ios/iphone15-top.png +0 -0
  29. package/assets/ios/iphonex.iphonexs.iphone11pro-bottom.png +0 -0
  30. package/assets/ios/iphonex.iphonexs.iphone11pro-top.png +0 -0
  31. package/assets/ios/iphonexr.iphone11-bottom.png +0 -0
  32. package/assets/ios/iphonexr.iphone11-top.png +0 -0
  33. package/assets/ios/iphonexsmax-bottom.png +0 -0
  34. package/assets/ios/iphonexsmax-top.png +0 -0
  35. package/dist/base.d.ts +18 -0
  36. package/dist/base.d.ts.map +1 -0
  37. package/dist/base.interfaces.d.ts +200 -0
  38. package/dist/base.interfaces.d.ts.map +1 -0
  39. package/dist/base.interfaces.js +1 -0
  40. package/dist/base.js +58 -0
  41. package/dist/base.test.d.ts +2 -0
  42. package/dist/base.test.d.ts.map +1 -0
  43. package/dist/base.test.js +45 -0
  44. package/dist/clientSideScripts/checkMetaTag.d.ts +2 -0
  45. package/dist/clientSideScripts/checkMetaTag.d.ts.map +1 -0
  46. package/dist/clientSideScripts/checkMetaTag.js +9 -0
  47. package/dist/clientSideScripts/checkMetaTag.test.d.ts +2 -0
  48. package/dist/clientSideScripts/checkMetaTag.test.d.ts.map +1 -0
  49. package/dist/clientSideScripts/checkMetaTag.test.js +25 -0
  50. package/dist/clientSideScripts/customCss.interfaces.d.ts +8 -0
  51. package/dist/clientSideScripts/customCss.interfaces.d.ts.map +1 -0
  52. package/dist/clientSideScripts/customCss.interfaces.js +1 -0
  53. package/dist/clientSideScripts/drawTabbableOnCanvas.d.ts +8 -0
  54. package/dist/clientSideScripts/drawTabbableOnCanvas.d.ts.map +1 -0
  55. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.d.ts +4 -0
  56. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.d.ts.map +1 -0
  57. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.js +1 -0
  58. package/dist/clientSideScripts/drawTabbableOnCanvas.js +275 -0
  59. package/dist/clientSideScripts/drawTabbableOnCanvas.test.d.ts +2 -0
  60. package/dist/clientSideScripts/drawTabbableOnCanvas.test.d.ts.map +1 -0
  61. package/dist/clientSideScripts/drawTabbableOnCanvas.test.js +251 -0
  62. package/dist/clientSideScripts/elementPosition.interfaces.d.ts +3 -0
  63. package/dist/clientSideScripts/elementPosition.interfaces.d.ts.map +1 -0
  64. package/dist/clientSideScripts/elementPosition.interfaces.js +1 -0
  65. package/dist/clientSideScripts/getBoundingClientRect.d.ts +6 -0
  66. package/dist/clientSideScripts/getBoundingClientRect.d.ts.map +1 -0
  67. package/dist/clientSideScripts/getBoundingClientRect.js +12 -0
  68. package/dist/clientSideScripts/getBoundingClientRect.test.d.ts +2 -0
  69. package/dist/clientSideScripts/getBoundingClientRect.test.d.ts.map +1 -0
  70. package/dist/clientSideScripts/getBoundingClientRect.test.js +28 -0
  71. package/dist/clientSideScripts/getDocumentScrollHeight.d.ts +5 -0
  72. package/dist/clientSideScripts/getDocumentScrollHeight.d.ts.map +1 -0
  73. package/dist/clientSideScripts/getDocumentScrollHeight.js +48 -0
  74. package/dist/clientSideScripts/getDocumentScrollHeight.test.d.ts +2 -0
  75. package/dist/clientSideScripts/getDocumentScrollHeight.test.d.ts.map +1 -0
  76. package/dist/clientSideScripts/getDocumentScrollHeight.test.js +30 -0
  77. package/dist/clientSideScripts/getElementPositionTopDom.d.ts +6 -0
  78. package/dist/clientSideScripts/getElementPositionTopDom.d.ts.map +1 -0
  79. package/dist/clientSideScripts/getElementPositionTopDom.js +11 -0
  80. package/dist/clientSideScripts/getElementPositionTopDom.test.d.ts +2 -0
  81. package/dist/clientSideScripts/getElementPositionTopDom.test.d.ts.map +1 -0
  82. package/dist/clientSideScripts/getElementPositionTopDom.test.js +11 -0
  83. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.d.ts +14 -0
  84. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.d.ts.map +1 -0
  85. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.js +19 -0
  86. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.d.ts +2 -0
  87. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.d.ts.map +1 -0
  88. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.js +52 -0
  89. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.d.ts +6 -0
  90. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.d.ts.map +1 -0
  91. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.js +17 -0
  92. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.d.ts +2 -0
  93. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.d.ts.map +1 -0
  94. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.js +47 -0
  95. package/dist/clientSideScripts/getScreenDimensions.d.ts +6 -0
  96. package/dist/clientSideScripts/getScreenDimensions.d.ts.map +1 -0
  97. package/dist/clientSideScripts/getScreenDimensions.js +104 -0
  98. package/dist/clientSideScripts/getScreenDimensions.test.d.ts +2 -0
  99. package/dist/clientSideScripts/getScreenDimensions.test.d.ts.map +1 -0
  100. package/dist/clientSideScripts/getScreenDimensions.test.js +161 -0
  101. package/dist/clientSideScripts/hideRemoveElements.d.ts +8 -0
  102. package/dist/clientSideScripts/hideRemoveElements.d.ts.map +1 -0
  103. package/dist/clientSideScripts/hideRemoveElements.js +60 -0
  104. package/dist/clientSideScripts/hideRemoveElements.test.d.ts +2 -0
  105. package/dist/clientSideScripts/hideRemoveElements.test.d.ts.map +1 -0
  106. package/dist/clientSideScripts/hideRemoveElements.test.js +199 -0
  107. package/dist/clientSideScripts/hideScrollbars.d.ts +9 -0
  108. package/dist/clientSideScripts/hideScrollbars.d.ts.map +1 -0
  109. package/dist/clientSideScripts/hideScrollbars.js +15 -0
  110. package/dist/clientSideScripts/hideScrollbars.test.d.ts +2 -0
  111. package/dist/clientSideScripts/hideScrollbars.test.d.ts.map +1 -0
  112. package/dist/clientSideScripts/hideScrollbars.test.js +12 -0
  113. package/dist/clientSideScripts/injectWebviewOverlay.d.ts +5 -0
  114. package/dist/clientSideScripts/injectWebviewOverlay.d.ts.map +1 -0
  115. package/dist/clientSideScripts/injectWebviewOverlay.js +35 -0
  116. package/dist/clientSideScripts/injectWebviewOverlay.test.d.ts +2 -0
  117. package/dist/clientSideScripts/injectWebviewOverlay.test.d.ts.map +1 -0
  118. package/dist/clientSideScripts/injectWebviewOverlay.test.js +74 -0
  119. package/dist/clientSideScripts/removeElementFromDom.d.ts +5 -0
  120. package/dist/clientSideScripts/removeElementFromDom.d.ts.map +1 -0
  121. package/dist/clientSideScripts/removeElementFromDom.js +9 -0
  122. package/dist/clientSideScripts/removeElementFromDom.test.d.ts +2 -0
  123. package/dist/clientSideScripts/removeElementFromDom.test.d.ts.map +1 -0
  124. package/dist/clientSideScripts/removeElementFromDom.test.js +43 -0
  125. package/dist/clientSideScripts/screenDimensions.interfaces.d.ts +96 -0
  126. package/dist/clientSideScripts/screenDimensions.interfaces.d.ts.map +1 -0
  127. package/dist/clientSideScripts/screenDimensions.interfaces.js +1 -0
  128. package/dist/clientSideScripts/scrollElementIntoView.d.ts +5 -0
  129. package/dist/clientSideScripts/scrollElementIntoView.d.ts.map +1 -0
  130. package/dist/clientSideScripts/scrollElementIntoView.js +31 -0
  131. package/dist/clientSideScripts/scrollElementIntoView.test.d.ts +2 -0
  132. package/dist/clientSideScripts/scrollElementIntoView.test.d.ts.map +1 -0
  133. package/dist/clientSideScripts/scrollElementIntoView.test.js +79 -0
  134. package/dist/clientSideScripts/scrollToPosition.d.ts +5 -0
  135. package/dist/clientSideScripts/scrollToPosition.d.ts.map +1 -0
  136. package/dist/clientSideScripts/scrollToPosition.js +25 -0
  137. package/dist/clientSideScripts/scrollToPosition.test.d.ts +2 -0
  138. package/dist/clientSideScripts/scrollToPosition.test.d.ts.map +1 -0
  139. package/dist/clientSideScripts/scrollToPosition.test.js +72 -0
  140. package/dist/clientSideScripts/setCustomCss.d.ts +6 -0
  141. package/dist/clientSideScripts/setCustomCss.d.ts.map +1 -0
  142. package/dist/clientSideScripts/setCustomCss.js +36 -0
  143. package/dist/clientSideScripts/setCustomCss.test.d.ts +2 -0
  144. package/dist/clientSideScripts/setCustomCss.test.d.ts.map +1 -0
  145. package/dist/clientSideScripts/setCustomCss.test.js +68 -0
  146. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.d.ts +11 -0
  147. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.d.ts.map +1 -0
  148. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.js +1 -0
  149. package/dist/clientSideScripts/toggleTextTransparency.d.ts +5 -0
  150. package/dist/clientSideScripts/toggleTextTransparency.d.ts.map +1 -0
  151. package/dist/clientSideScripts/toggleTextTransparency.js +16 -0
  152. package/dist/clientSideScripts/toggleTextTransparency.test.d.ts +2 -0
  153. package/dist/clientSideScripts/toggleTextTransparency.test.d.ts.map +1 -0
  154. package/dist/clientSideScripts/toggleTextTransparency.test.js +35 -0
  155. package/dist/clientSideScripts/waitForFonts.d.ts +8 -0
  156. package/dist/clientSideScripts/waitForFonts.d.ts.map +1 -0
  157. package/dist/clientSideScripts/waitForFonts.js +20 -0
  158. package/dist/clientSideScripts/waitForFonts.test.d.ts +2 -0
  159. package/dist/clientSideScripts/waitForFonts.test.d.ts.map +1 -0
  160. package/dist/clientSideScripts/waitForFonts.test.js +37 -0
  161. package/dist/commands/check.interfaces.d.ts +35 -0
  162. package/dist/commands/check.interfaces.d.ts.map +1 -0
  163. package/dist/commands/check.interfaces.js +1 -0
  164. package/dist/commands/checkAppElement.d.ts +7 -0
  165. package/dist/commands/checkAppElement.d.ts.map +1 -0
  166. package/dist/commands/checkAppElement.js +44 -0
  167. package/dist/commands/checkAppElement.test.d.ts +2 -0
  168. package/dist/commands/checkAppElement.test.d.ts.map +1 -0
  169. package/dist/commands/checkAppElement.test.js +241 -0
  170. package/dist/commands/checkAppScreen.d.ts +7 -0
  171. package/dist/commands/checkAppScreen.d.ts.map +1 -0
  172. package/dist/commands/checkAppScreen.js +73 -0
  173. package/dist/commands/checkAppScreen.test.d.ts +2 -0
  174. package/dist/commands/checkAppScreen.test.d.ts.map +1 -0
  175. package/dist/commands/checkAppScreen.test.js +295 -0
  176. package/dist/commands/checkElement.d.ts +7 -0
  177. package/dist/commands/checkElement.d.ts.map +1 -0
  178. package/dist/commands/checkElement.js +10 -0
  179. package/dist/commands/checkElement.test.d.ts +2 -0
  180. package/dist/commands/checkElement.test.d.ts.map +1 -0
  181. package/dist/commands/checkElement.test.js +66 -0
  182. package/dist/commands/checkFullPageScreen.d.ts +7 -0
  183. package/dist/commands/checkFullPageScreen.d.ts.map +1 -0
  184. package/dist/commands/checkFullPageScreen.js +56 -0
  185. package/dist/commands/checkFullPageScreen.test.d.ts +2 -0
  186. package/dist/commands/checkFullPageScreen.test.d.ts.map +1 -0
  187. package/dist/commands/checkFullPageScreen.test.js +259 -0
  188. package/dist/commands/checkScreen.d.ts +7 -0
  189. package/dist/commands/checkScreen.d.ts.map +1 -0
  190. package/dist/commands/checkScreen.js +10 -0
  191. package/dist/commands/checkScreen.test.d.ts +2 -0
  192. package/dist/commands/checkScreen.test.d.ts.map +1 -0
  193. package/dist/commands/checkScreen.test.js +62 -0
  194. package/dist/commands/checkTabbablePage.d.ts +7 -0
  195. package/dist/commands/checkTabbablePage.d.ts.map +1 -0
  196. package/dist/commands/checkTabbablePage.js +28 -0
  197. package/dist/commands/checkTabbablePage.test.d.ts +2 -0
  198. package/dist/commands/checkTabbablePage.test.d.ts.map +1 -0
  199. package/dist/commands/checkTabbablePage.test.js +200 -0
  200. package/dist/commands/checkWebElement.d.ts +7 -0
  201. package/dist/commands/checkWebElement.d.ts.map +1 -0
  202. package/dist/commands/checkWebElement.js +52 -0
  203. package/dist/commands/checkWebElement.test.d.ts +2 -0
  204. package/dist/commands/checkWebElement.test.d.ts.map +1 -0
  205. package/dist/commands/checkWebElement.test.js +278 -0
  206. package/dist/commands/checkWebScreen.d.ts +7 -0
  207. package/dist/commands/checkWebScreen.d.ts.map +1 -0
  208. package/dist/commands/checkWebScreen.js +50 -0
  209. package/dist/commands/checkWebScreen.test.d.ts +2 -0
  210. package/dist/commands/checkWebScreen.test.d.ts.map +1 -0
  211. package/dist/commands/checkWebScreen.test.js +227 -0
  212. package/dist/commands/element.interfaces.d.ts +27 -0
  213. package/dist/commands/element.interfaces.d.ts.map +1 -0
  214. package/dist/commands/element.interfaces.js +1 -0
  215. package/dist/commands/fullPage.interfaces.d.ts +38 -0
  216. package/dist/commands/fullPage.interfaces.d.ts.map +1 -0
  217. package/dist/commands/fullPage.interfaces.js +1 -0
  218. package/dist/commands/save.interfaces.d.ts +27 -0
  219. package/dist/commands/save.interfaces.d.ts.map +1 -0
  220. package/dist/commands/save.interfaces.js +1 -0
  221. package/dist/commands/saveAppElement.d.ts +7 -0
  222. package/dist/commands/saveAppElement.d.ts.map +1 -0
  223. package/dist/commands/saveAppElement.js +30 -0
  224. package/dist/commands/saveAppElement.test.d.ts +2 -0
  225. package/dist/commands/saveAppElement.test.d.ts.map +1 -0
  226. package/dist/commands/saveAppElement.test.js +199 -0
  227. package/dist/commands/saveAppScreen.d.ts +7 -0
  228. package/dist/commands/saveAppScreen.d.ts.map +1 -0
  229. package/dist/commands/saveAppScreen.js +43 -0
  230. package/dist/commands/saveAppScreen.test.d.ts +2 -0
  231. package/dist/commands/saveAppScreen.test.d.ts.map +1 -0
  232. package/dist/commands/saveAppScreen.test.js +221 -0
  233. package/dist/commands/saveElement.d.ts +7 -0
  234. package/dist/commands/saveElement.d.ts.map +1 -0
  235. package/dist/commands/saveElement.js +10 -0
  236. package/dist/commands/saveElement.test.d.ts +2 -0
  237. package/dist/commands/saveElement.test.d.ts.map +1 -0
  238. package/dist/commands/saveElement.test.js +62 -0
  239. package/dist/commands/saveFullPageScreen.d.ts +7 -0
  240. package/dist/commands/saveFullPageScreen.d.ts.map +1 -0
  241. package/dist/commands/saveFullPageScreen.js +60 -0
  242. package/dist/commands/saveFullPageScreen.test.d.ts +2 -0
  243. package/dist/commands/saveFullPageScreen.test.d.ts.map +1 -0
  244. package/dist/commands/saveFullPageScreen.test.js +293 -0
  245. package/dist/commands/saveScreen.d.ts +7 -0
  246. package/dist/commands/saveScreen.d.ts.map +1 -0
  247. package/dist/commands/saveScreen.js +10 -0
  248. package/dist/commands/saveScreen.test.d.ts +2 -0
  249. package/dist/commands/saveScreen.test.d.ts.map +1 -0
  250. package/dist/commands/saveScreen.test.js +47 -0
  251. package/dist/commands/saveTabbablePage.d.ts +7 -0
  252. package/dist/commands/saveTabbablePage.d.ts.map +1 -0
  253. package/dist/commands/saveTabbablePage.js +20 -0
  254. package/dist/commands/saveTabbablePage.test.d.ts +2 -0
  255. package/dist/commands/saveTabbablePage.test.d.ts.map +1 -0
  256. package/dist/commands/saveTabbablePage.test.js +74 -0
  257. package/dist/commands/saveWebElement.d.ts +7 -0
  258. package/dist/commands/saveWebElement.d.ts.map +1 -0
  259. package/dist/commands/saveWebElement.js +53 -0
  260. package/dist/commands/saveWebElement.test.d.ts +2 -0
  261. package/dist/commands/saveWebElement.test.d.ts.map +1 -0
  262. package/dist/commands/saveWebElement.test.js +253 -0
  263. package/dist/commands/saveWebScreen.d.ts +7 -0
  264. package/dist/commands/saveWebScreen.d.ts.map +1 -0
  265. package/dist/commands/saveWebScreen.js +48 -0
  266. package/dist/commands/saveWebScreen.test.d.ts +2 -0
  267. package/dist/commands/saveWebScreen.test.d.ts.map +1 -0
  268. package/dist/commands/saveWebScreen.test.js +222 -0
  269. package/dist/commands/screen.interfaces.d.ts +16 -0
  270. package/dist/commands/screen.interfaces.d.ts.map +1 -0
  271. package/dist/commands/screen.interfaces.js +1 -0
  272. package/dist/commands/tabbable.interfaces.d.ts +29 -0
  273. package/dist/commands/tabbable.interfaces.d.ts.map +1 -0
  274. package/dist/commands/tabbable.interfaces.js +1 -0
  275. package/dist/helpers/afterScreenshot.d.ts +7 -0
  276. package/dist/helpers/afterScreenshot.d.ts.map +1 -0
  277. package/dist/helpers/afterScreenshot.interfaces.d.ts +46 -0
  278. package/dist/helpers/afterScreenshot.interfaces.d.ts.map +1 -0
  279. package/dist/helpers/afterScreenshot.interfaces.js +1 -0
  280. package/dist/helpers/afterScreenshot.js +55 -0
  281. package/dist/helpers/afterScreenshot.test.d.ts +2 -0
  282. package/dist/helpers/afterScreenshot.test.d.ts.map +1 -0
  283. package/dist/helpers/afterScreenshot.test.js +241 -0
  284. package/dist/helpers/beforeScreenshot.d.ts +6 -0
  285. package/dist/helpers/beforeScreenshot.d.ts.map +1 -0
  286. package/dist/helpers/beforeScreenshot.interfaces.d.ts +15 -0
  287. package/dist/helpers/beforeScreenshot.interfaces.d.ts.map +1 -0
  288. package/dist/helpers/beforeScreenshot.interfaces.js +1 -0
  289. package/dist/helpers/beforeScreenshot.js +79 -0
  290. package/dist/helpers/beforeScreenshot.test.d.ts +2 -0
  291. package/dist/helpers/beforeScreenshot.test.d.ts.map +1 -0
  292. package/dist/helpers/beforeScreenshot.test.js +261 -0
  293. package/dist/helpers/compare.interfaces.d.ts +16 -0
  294. package/dist/helpers/compare.interfaces.d.ts.map +1 -0
  295. package/dist/helpers/compare.interfaces.js +1 -0
  296. package/dist/helpers/constants.d.ts +108 -0
  297. package/dist/helpers/constants.d.ts.map +1 -0
  298. package/dist/helpers/constants.interfaces.d.ts +30 -0
  299. package/dist/helpers/constants.interfaces.d.ts.map +1 -0
  300. package/dist/helpers/constants.interfaces.js +11 -0
  301. package/dist/helpers/constants.js +436 -0
  302. package/dist/helpers/options.d.ts +64 -0
  303. package/dist/helpers/options.d.ts.map +1 -0
  304. package/dist/helpers/options.interfaces.d.ts +363 -0
  305. package/dist/helpers/options.interfaces.d.ts.map +1 -0
  306. package/dist/helpers/options.interfaces.js +1 -0
  307. package/dist/helpers/options.js +184 -0
  308. package/dist/helpers/options.test.d.ts +2 -0
  309. package/dist/helpers/options.test.d.ts.map +1 -0
  310. package/dist/helpers/options.test.js +428 -0
  311. package/dist/helpers/utils.d.ts +134 -0
  312. package/dist/helpers/utils.d.ts.map +1 -0
  313. package/dist/helpers/utils.interfaces.d.ts +254 -0
  314. package/dist/helpers/utils.interfaces.d.ts.map +1 -0
  315. package/dist/helpers/utils.interfaces.js +1 -0
  316. package/dist/helpers/utils.js +566 -0
  317. package/dist/helpers/utils.test.d.ts +2 -0
  318. package/dist/helpers/utils.test.d.ts.map +1 -0
  319. package/dist/helpers/utils.test.js +900 -0
  320. package/dist/index.d.ts +26 -0
  321. package/dist/index.d.ts.map +1 -0
  322. package/dist/index.js +18 -0
  323. package/dist/methods/compareReport.interfaces.d.ts +109 -0
  324. package/dist/methods/compareReport.interfaces.d.ts.map +1 -0
  325. package/dist/methods/compareReport.interfaces.js +1 -0
  326. package/dist/methods/createCompareReport.d.ts +7 -0
  327. package/dist/methods/createCompareReport.d.ts.map +1 -0
  328. package/dist/methods/createCompareReport.js +61 -0
  329. package/dist/methods/createCompareReport.test.d.ts +2 -0
  330. package/dist/methods/createCompareReport.test.d.ts.map +1 -0
  331. package/dist/methods/createCompareReport.test.js +236 -0
  332. package/dist/methods/elementPosition.d.ts +18 -0
  333. package/dist/methods/elementPosition.d.ts.map +1 -0
  334. package/dist/methods/elementPosition.interfaces.d.ts +14 -0
  335. package/dist/methods/elementPosition.interfaces.d.ts.map +1 -0
  336. package/dist/methods/elementPosition.interfaces.js +1 -0
  337. package/dist/methods/elementPosition.js +34 -0
  338. package/dist/methods/images.d.ts +69 -0
  339. package/dist/methods/images.d.ts.map +1 -0
  340. package/dist/methods/images.executeImageCompare.test.d.ts +2 -0
  341. package/dist/methods/images.executeImageCompare.test.d.ts.map +1 -0
  342. package/dist/methods/images.executeImageCompare.test.js +770 -0
  343. package/dist/methods/images.interfaces.d.ts +214 -0
  344. package/dist/methods/images.interfaces.d.ts.map +1 -0
  345. package/dist/methods/images.interfaces.js +1 -0
  346. package/dist/methods/images.js +428 -0
  347. package/dist/methods/images.test.d.ts +2 -0
  348. package/dist/methods/images.test.d.ts.map +1 -0
  349. package/dist/methods/images.test.js +1465 -0
  350. package/dist/methods/instanceData.d.ts +6 -0
  351. package/dist/methods/instanceData.d.ts.map +1 -0
  352. package/dist/methods/instanceData.interfaces.d.ts +57 -0
  353. package/dist/methods/instanceData.interfaces.d.ts.map +1 -0
  354. package/dist/methods/instanceData.interfaces.js +1 -0
  355. package/dist/methods/instanceData.js +42 -0
  356. package/dist/methods/instanceData.test.d.ts +2 -0
  357. package/dist/methods/instanceData.test.d.ts.map +1 -0
  358. package/dist/methods/instanceData.test.js +224 -0
  359. package/dist/methods/processDiffPixels.d.ts +59 -0
  360. package/dist/methods/processDiffPixels.d.ts.map +1 -0
  361. package/dist/methods/processDiffPixels.js +242 -0
  362. package/dist/methods/processDiffPixels.test.d.ts +2 -0
  363. package/dist/methods/processDiffPixels.test.d.ts.map +1 -0
  364. package/dist/methods/processDiffPixels.test.js +122 -0
  365. package/dist/methods/rectangles.d.ts +51 -0
  366. package/dist/methods/rectangles.d.ts.map +1 -0
  367. package/dist/methods/rectangles.interfaces.d.ts +146 -0
  368. package/dist/methods/rectangles.interfaces.d.ts.map +1 -0
  369. package/dist/methods/rectangles.interfaces.js +1 -0
  370. package/dist/methods/rectangles.js +266 -0
  371. package/dist/methods/rectangles.test.d.ts +2 -0
  372. package/dist/methods/rectangles.test.d.ts.map +1 -0
  373. package/dist/methods/rectangles.test.js +853 -0
  374. package/dist/methods/screenshots.d.ts +37 -0
  375. package/dist/methods/screenshots.d.ts.map +1 -0
  376. package/dist/methods/screenshots.interfaces.d.ts +203 -0
  377. package/dist/methods/screenshots.interfaces.d.ts.map +1 -0
  378. package/dist/methods/screenshots.interfaces.js +1 -0
  379. package/dist/methods/screenshots.js +394 -0
  380. package/dist/methods/screenshots.test.d.ts +2 -0
  381. package/dist/methods/screenshots.test.d.ts.map +1 -0
  382. package/dist/methods/screenshots.test.js +656 -0
  383. package/dist/methods/takeElementScreenshots.d.ts +3 -0
  384. package/dist/methods/takeElementScreenshots.d.ts.map +1 -0
  385. package/dist/methods/takeElementScreenshots.js +104 -0
  386. package/dist/methods/takeElementScreenshots.test.d.ts +2 -0
  387. package/dist/methods/takeElementScreenshots.test.d.ts.map +1 -0
  388. package/dist/methods/takeElementScreenshots.test.js +314 -0
  389. package/dist/methods/takeFullPageScreenshots.d.ts +3 -0
  390. package/dist/methods/takeFullPageScreenshots.d.ts.map +1 -0
  391. package/dist/methods/takeFullPageScreenshots.js +56 -0
  392. package/dist/methods/takeFullPageScreenshots.test.d.ts +2 -0
  393. package/dist/methods/takeFullPageScreenshots.test.d.ts.map +1 -0
  394. package/dist/methods/takeFullPageScreenshots.test.js +72 -0
  395. package/dist/methods/takeWebScreenshots.d.ts +3 -0
  396. package/dist/methods/takeWebScreenshots.d.ts.map +1 -0
  397. package/dist/methods/takeWebScreenshots.js +41 -0
  398. package/dist/methods/takeWebScreenshots.test.d.ts +2 -0
  399. package/dist/methods/takeWebScreenshots.test.d.ts.map +1 -0
  400. package/dist/methods/takeWebScreenshots.test.js +149 -0
  401. package/dist/mocks/image.d.ts +4 -0
  402. package/dist/mocks/image.d.ts.map +1 -0
  403. package/dist/mocks/image.js +3 -0
  404. package/dist/mocks/mocks.d.ts +745 -0
  405. package/dist/mocks/mocks.d.ts.map +1 -0
  406. package/dist/mocks/mocks.js +392 -0
  407. package/dist/resemble/compare.interfaces.d.ts +136 -0
  408. package/dist/resemble/compare.interfaces.d.ts.map +1 -0
  409. package/dist/resemble/compare.interfaces.js +1 -0
  410. package/dist/resemble/compareImages.d.ts +3 -0
  411. package/dist/resemble/compareImages.d.ts.map +1 -0
  412. package/dist/resemble/compareImages.js +21 -0
  413. package/dist/resemble/resemble.jimp.cjs +981 -0
  414. package/dist/resemble/resemble.jimp.d.cts +46 -0
  415. package/dist/resemble/resemble.jimp.d.cts.map +1 -0
  416. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDocumentScrollHeight.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getDocumentScrollHeight.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect } from 'vitest';
3
+ import getDocumentScrollHeight from './getDocumentScrollHeight.js';
4
+ import { CONFIGURABLE } from '../mocks/mocks.js';
5
+ describe('getDocumentScrollHeight', () => {
6
+ it('should return the bodyScrollHeight', () => {
7
+ Object.defineProperty(document.documentElement, 'clientHeight', { value: 500, ...CONFIGURABLE });
8
+ Object.defineProperty(window, 'innerHeight', { value: 500, ...CONFIGURABLE });
9
+ Object.defineProperty(document.documentElement, 'scrollHeight', { value: 500, ...CONFIGURABLE });
10
+ Object.defineProperty(document.body, 'scrollHeight', { value: 1500, ...CONFIGURABLE });
11
+ expect(getDocumentScrollHeight()).toEqual(1500);
12
+ });
13
+ it('should return the scrollHeight', () => {
14
+ Object.defineProperty(document.documentElement, 'clientHeight', { value: 500, ...CONFIGURABLE });
15
+ Object.defineProperty(window, 'innerHeight', { value: 500, ...CONFIGURABLE });
16
+ Object.defineProperty(document.documentElement, 'scrollHeight', { value: 2250, ...CONFIGURABLE });
17
+ Object.defineProperty(document.body, 'scrollHeight', { value: 1500, ...CONFIGURABLE });
18
+ expect(getDocumentScrollHeight()).toEqual(2250);
19
+ });
20
+ it('should return the height of the largest node', () => {
21
+ Object.defineProperty(document.documentElement, 'clientHeight', { value: 1500, ...CONFIGURABLE });
22
+ Object.defineProperty(window, 'innerHeight', { value: 1500, ...CONFIGURABLE });
23
+ Object.defineProperty(document.documentElement, 'scrollHeight', { value: 1500, ...CONFIGURABLE });
24
+ Object.defineProperty(document.body, 'scrollHeight', { value: 1500, ...CONFIGURABLE });
25
+ document.body.innerHTML =
26
+ '<div>' + ' <span style="height: 200px;width: 50px"/>' + ' <div style="height: 500px;width: 50px" />' + '</div>';
27
+ // Some lines and the outcome can't be tested because we can't mock `scrollHeight` and `clientHeight`
28
+ getDocumentScrollHeight();
29
+ });
30
+ });
@@ -0,0 +1,6 @@
1
+ import type { ElementPosition } from './elementPosition.interfaces.js';
2
+ /**
3
+ * Get the position of the element to the top of the DOM
4
+ */
5
+ export default function getElementPositionTopDom(element: HTMLElement): ElementPosition;
6
+ //# sourceMappingURL=getElementPositionTopDom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getElementPositionTopDom.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getElementPositionTopDom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEtE;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAOtF"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Get the position of the element to the top of the DOM
3
+ */
4
+ export default function getElementPositionTopDom(element) {
5
+ return {
6
+ height: element.offsetHeight,
7
+ width: element.offsetWidth,
8
+ x: element.offsetLeft,
9
+ y: element.offsetTop,
10
+ };
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getElementPositionTopDom.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getElementPositionTopDom.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getElementPositionTopDom.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it } from 'vitest';
3
+ import getElementPositionTopDom from './getElementPositionTopDom.js';
4
+ describe('getElementPositionTopDom', () => {
5
+ it('should get the element position to the top of the Dom', () => {
6
+ document.body.innerHTML = '<div>' + ' <span id="username">Hello</span>' + '</div>';
7
+ getElementPositionTopDom(document.querySelector('#username'));
8
+ // I can't mock the offsetHeight, offsetWidth, offsetLeft, offsetTop with Jest, so there is no verification here, sorry :(
9
+ // If you know a way, please add it here ;-)
10
+ });
11
+ });
@@ -0,0 +1,14 @@
1
+ import type { ElementPosition } from './elementPosition.interfaces.js';
2
+ /**
3
+ * Get the element position to the top of the screen of the device, not the top of the webview
4
+ * This method is used for Android native and iOS screenshots
5
+ */
6
+ export declare function getElementPositionTopScreenNativeMobile(element: HTMLElement, { isLandscape, safeArea, screenHeight, screenWidth, sideBarWidth, statusBarAddressBarHeight, }: {
7
+ isLandscape: boolean;
8
+ safeArea: number;
9
+ screenHeight: number;
10
+ screenWidth: number;
11
+ sideBarWidth: number;
12
+ statusBarAddressBarHeight: number;
13
+ }): ElementPosition;
14
+ //# sourceMappingURL=getElementPositionTopScreenNativeMobile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getElementPositionTopScreenNativeMobile.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getElementPositionTopScreenNativeMobile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEtE;;;GAGG;AACH,wBAAgB,uCAAuC,CACnD,OAAO,EAAE,WAAW,EACpB,EACI,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,yBAAyB,GAC5B,EAAE;IACC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB,EAAE,MAAM,CAAC;CACrC,GACF,eAAe,CAgBjB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Get the element position to the top of the screen of the device, not the top of the webview
3
+ * This method is used for Android native and iOS screenshots
4
+ */
5
+ export function getElementPositionTopScreenNativeMobile(element, { isLandscape, safeArea, screenHeight, screenWidth, sideBarWidth, statusBarAddressBarHeight, }) {
6
+ // Get some heights and widths
7
+ const { innerHeight } = window;
8
+ // Determine element position
9
+ const elementPosition = element.getBoundingClientRect();
10
+ const y = (screenHeight === innerHeight || screenWidth === innerHeight)
11
+ ? elementPosition.top
12
+ : statusBarAddressBarHeight + elementPosition.top;
13
+ return {
14
+ height: elementPosition.height,
15
+ width: elementPosition.width,
16
+ x: elementPosition.left + (isLandscape ? safeArea : 0) + sideBarWidth,
17
+ y: y,
18
+ };
19
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getElementPositionTopScreenNativeMobile.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getElementPositionTopScreenNativeMobile.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getElementPositionTopScreenNativeMobile.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
3
+ import { IOS_DEVICES, CONFIGURABLE } from '../mocks/mocks.js';
4
+ import { getElementPositionTopScreenNativeMobile } from './getElementPositionTopScreenNativeMobile.js';
5
+ describe('getElementPositionTopScreenNativeMobile', () => {
6
+ beforeEach(() => {
7
+ Element.prototype.getBoundingClientRect = vi.fn(() => {
8
+ return {
9
+ width: 120,
10
+ height: 120,
11
+ top: 10,
12
+ left: 100,
13
+ bottom: 5,
14
+ right: 12,
15
+ };
16
+ });
17
+ document.body.innerHTML = '<div>' + ' <span id="username">Hello</span>' + '</div>';
18
+ });
19
+ it('should get the element position to the top of the screen for a mobile browser', () => {
20
+ Object.defineProperty(window, 'innerHeight', { value: IOS_DEVICES.IPHONE.innerHeight, ...CONFIGURABLE });
21
+ expect(getElementPositionTopScreenNativeMobile(document.querySelector('#username'), {
22
+ isLandscape: false,
23
+ safeArea: 0,
24
+ screenHeight: IOS_DEVICES.IPHONE.height,
25
+ screenWidth: IOS_DEVICES.IPHONE.width,
26
+ sideBarWidth: IOS_DEVICES.IPHONE.sideBar,
27
+ statusBarAddressBarHeight: 94,
28
+ })).toMatchSnapshot();
29
+ });
30
+ it('should get the element position to the top of the screen for an app in portrait mode', () => {
31
+ Object.defineProperty(window, 'innerHeight', { value: IOS_DEVICES.IPHONE.height, ...CONFIGURABLE });
32
+ expect(getElementPositionTopScreenNativeMobile(document.querySelector('#username'), {
33
+ isLandscape: false,
34
+ safeArea: 0,
35
+ screenHeight: IOS_DEVICES.IPHONE.height,
36
+ screenWidth: IOS_DEVICES.IPHONE.width,
37
+ sideBarWidth: IOS_DEVICES.IPHONE.sideBar,
38
+ statusBarAddressBarHeight: 94,
39
+ })).toMatchSnapshot();
40
+ });
41
+ it('should get the element position to the top of the screen for an app in landscape mode', () => {
42
+ Object.defineProperty(window, 'innerHeight', { value: IOS_DEVICES.IPHONE.width, ...CONFIGURABLE });
43
+ expect(getElementPositionTopScreenNativeMobile(document.querySelector('#username'), {
44
+ isLandscape: true,
45
+ safeArea: 44,
46
+ screenHeight: IOS_DEVICES.IPHONE.innerHeight,
47
+ screenWidth: IOS_DEVICES.IPHONE.width,
48
+ sideBarWidth: IOS_DEVICES.IPHONE.sideBar,
49
+ statusBarAddressBarHeight: 94,
50
+ })).toMatchSnapshot();
51
+ });
52
+ });
@@ -0,0 +1,6 @@
1
+ import type { RectanglesOutput } from '../methods/rectangles.interfaces.js';
2
+ /**
3
+ * Get the click and dimensions of the mobile webview and remove the overlay
4
+ */
5
+ export declare function getMobileWebviewClickAndDimensions(overlaySelector: string): RectanglesOutput;
6
+ //# sourceMappingURL=getMobileWebviewClickAndDimensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMobileWebviewClickAndDimensions.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getMobileWebviewClickAndDimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAE3E;;GAEG;AACH,wBAAgB,kCAAkC,CAAC,eAAe,EAAE,MAAM,GAAE,gBAAgB,CAe3F"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Get the click and dimensions of the mobile webview and remove the overlay
3
+ */
4
+ export function getMobileWebviewClickAndDimensions(overlaySelector) {
5
+ const overlay = document.querySelector(overlaySelector);
6
+ const defaultValue = { y: 0, x: 0, width: 0, height: 0 };
7
+ if (!overlay || !overlay.dataset.icsWebviewData) {
8
+ return defaultValue;
9
+ }
10
+ overlay.remove();
11
+ try {
12
+ return JSON.parse(overlay.dataset.icsWebviewData);
13
+ }
14
+ catch {
15
+ return defaultValue;
16
+ }
17
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getMobileWebviewClickAndDimensions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMobileWebviewClickAndDimensions.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getMobileWebviewClickAndDimensions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { JSDOM } from 'jsdom';
3
+ import { getMobileWebviewClickAndDimensions } from './getMobileWebviewClickAndDimensions.js';
4
+ describe('getMobileWebviewClickAndDimensions', () => {
5
+ const selector = '[data-test="ics-overlay"]';
6
+ beforeEach(() => {
7
+ const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>');
8
+ global.document = dom.window.document;
9
+ global.window = dom.window;
10
+ });
11
+ it('should return default values when overlay is not found', () => {
12
+ expect(getMobileWebviewClickAndDimensions(selector)).toEqual({
13
+ x: 0,
14
+ y: 0,
15
+ width: 0,
16
+ height: 0,
17
+ });
18
+ });
19
+ it('should return default values when data attribute is missing', () => {
20
+ const el = document.createElement('div');
21
+ el.setAttribute('data-test', 'ics-overlay');
22
+ document.body.appendChild(el);
23
+ expect(getMobileWebviewClickAndDimensions(selector)).toEqual({
24
+ x: 0,
25
+ y: 0,
26
+ width: 0,
27
+ height: 0,
28
+ });
29
+ });
30
+ it('should return parsed data from data attribute and remove element', () => {
31
+ const el = document.createElement('div');
32
+ el.setAttribute('data-test', 'ics-overlay');
33
+ el.dataset.icsWebviewData = JSON.stringify({ x: 10, y: 20, width: 100, height: 200 });
34
+ document.body.appendChild(el);
35
+ const result = getMobileWebviewClickAndDimensions(selector);
36
+ expect(result).toEqual({ x: 10, y: 20, width: 100, height: 200 });
37
+ expect(document.querySelector(selector)).toBeNull();
38
+ });
39
+ it('should return default values if JSON parsing fails', () => {
40
+ const el = document.createElement('div');
41
+ el.setAttribute('data-test', 'ics-overlay');
42
+ el.dataset.icsWebviewData = '{not:valid:json';
43
+ document.body.appendChild(el);
44
+ const result = getMobileWebviewClickAndDimensions(selector);
45
+ expect(result).toEqual({ x: 0, y: 0, width: 0, height: 0 });
46
+ });
47
+ });
@@ -0,0 +1,6 @@
1
+ import type { ScreenDimensions } from './screenDimensions.interfaces.js';
2
+ /**
3
+ * Get all the screen dimensions
4
+ */
5
+ export default function getScreenDimensions(isMobile: boolean): ScreenDimensions;
6
+ //# sourceMappingURL=getScreenDimensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getScreenDimensions.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getScreenDimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAExE;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAwG/E"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Get all the screen dimensions
3
+ */
4
+ export default function getScreenDimensions(isMobile) {
5
+ // We need to determine if the screen is emulated, because that would return different values
6
+ const width = window.innerWidth;
7
+ const height = window.innerHeight;
8
+ const dpr = window.devicePixelRatio || 1;
9
+ const minEdge = Math.min(width, height);
10
+ const maxEdge = Math.max(width, height);
11
+ const isLikelyEmulated = !isMobile && // Only check for emulated on desktop
12
+ dpr >= 2 && // High-DPI signal
13
+ minEdge <= 800 && // Catch phones/tablets in portrait/landscape
14
+ maxEdge <= 1280 && // Conservative max for emulated tablet sizes
15
+ width > 0 && height > 0; // Sanity check
16
+ // Other checks
17
+ const body = document.body;
18
+ const html = document.documentElement;
19
+ const bodyDimensions = {
20
+ // On mobile & desktop: Total scrollable height of the body element, including content not visible on screen
21
+ scrollHeight: !body ? 0 : body.scrollHeight,
22
+ // On mobile & desktop: Height of body element including padding but not margin
23
+ offsetHeight: !body ? 0 : body.offsetHeight,
24
+ };
25
+ const htmlDimensions = {
26
+ /** On mobile & desktop: Viewport height excluding scrollbars */
27
+ clientHeight: !html ? 0 : html.clientHeight,
28
+ /** On mobile & desktop: Viewport width excluding scrollbars */
29
+ clientWidth: !html ? 0 : html.clientWidth,
30
+ /** On mobile & desktop: Total scrollable height including overflow */
31
+ scrollHeight: !html ? 0 : html.scrollHeight,
32
+ /** On mobile & desktop: Total scrollable width including overflow */
33
+ scrollWidth: !html ? 0 : html.scrollWidth,
34
+ /** On mobile & desktop: Height including padding and border */
35
+ offsetHeight: !html ? 0 : html.offsetHeight,
36
+ };
37
+ const windowDimensions = {
38
+ /**
39
+ * Mobile: Viewport width (changes with zoom)
40
+ * Desktop: Viewport width including scrollbars
41
+ */
42
+ innerWidth: window.innerWidth,
43
+ /**
44
+ * Mobile: Viewport height (changes with zoom)
45
+ * Desktop: Viewport height including scrollbars
46
+ */
47
+ innerHeight: window.innerHeight,
48
+ /**
49
+ * Mobile: True if device is in landscape orientation
50
+ * Desktop: Based on viewport aspect ratio
51
+ */
52
+ isLandscape: window.matchMedia('(orientation: landscape)').matches,
53
+ /**
54
+ * Mobile: Full browser height including UI elements
55
+ * Desktop: Browser window height including toolbars/status bar
56
+ * Emulated: It will be the same as window.innerHeight
57
+ */
58
+ outerHeight: isLikelyEmulated && window.outerHeight > 0 ?
59
+ window.innerHeight :
60
+ window.outerHeight === 0 ?
61
+ htmlDimensions.clientHeight :
62
+ window.outerHeight,
63
+ /**
64
+ * Mobile: Full browser width
65
+ * Desktop: Browser window width
66
+ * Emulated: It will be the same as window.innerWidth
67
+ */
68
+ outerWidth: isLikelyEmulated && window.outerWidth > 0 ?
69
+ window.innerWidth :
70
+ window.outerWidth === 0 ?
71
+ htmlDimensions.clientWidth :
72
+ window.outerWidth,
73
+ /**
74
+ * Mobile: Physical pixel ratio (typically >1 for high DPI)
75
+ * Desktop: Usually 1, or 2 for high DPI displays
76
+ */
77
+ devicePixelRatio: dpr,
78
+ /**
79
+ * Mobile: Always false
80
+ * Desktop: Always false
81
+ * Emulated: Always true
82
+ */
83
+ isEmulated: isLikelyEmulated,
84
+ /**
85
+ * Mobile: Physical screen width in CSS pixels
86
+ * Desktop: Monitor width in pixels
87
+ * Emulated: It will be the same as window.innerWidth
88
+ */
89
+ screenWidth: isLikelyEmulated ? window.innerWidth : window.screen.width,
90
+ /**
91
+ * Mobile: Physical screen height in CSS pixels
92
+ * Desktop: Monitor height in pixels
93
+ * Emulated: It will be the same as window.innerHeight
94
+ */
95
+ screenHeight: isLikelyEmulated ? window.innerHeight : window.screen.height,
96
+ };
97
+ return {
98
+ dimensions: {
99
+ body: bodyDimensions,
100
+ html: htmlDimensions,
101
+ window: windowDimensions,
102
+ },
103
+ };
104
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getScreenDimensions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getScreenDimensions.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/getScreenDimensions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,161 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect, vi } from 'vitest';
3
+ import { CONFIGURABLE } from '../mocks/mocks.js';
4
+ import getScreenDimensions from './getScreenDimensions.js';
5
+ describe('getScreenDimensions', () => {
6
+ it('should get the needed screen dimensions for a real device', () => {
7
+ Object.defineProperty(window, 'matchMedia', {
8
+ value: vi.fn().mockImplementation(() => ({
9
+ matches: true,
10
+ })),
11
+ ...CONFIGURABLE,
12
+ });
13
+ expect(getScreenDimensions(true)).toMatchSnapshot();
14
+ });
15
+ it('should get the needed screen dimensions', () => {
16
+ Object.defineProperty(window, 'matchMedia', {
17
+ value: vi.fn().mockImplementation(() => ({
18
+ matches: true,
19
+ })),
20
+ ...CONFIGURABLE,
21
+ });
22
+ expect(getScreenDimensions(false)).toMatchSnapshot();
23
+ });
24
+ it('should get the needed screen dimensions if the outerHeight and outerWidth are set to 0', () => {
25
+ Object.defineProperty(window, 'outerHeight', { value: 0 });
26
+ Object.defineProperty(window, 'outerWidth', { value: 0 });
27
+ Object.defineProperty(document.documentElement, 'clientHeight', { value: 1234 });
28
+ Object.defineProperty(document.documentElement, 'clientWidth', { value: 4321 });
29
+ Object.defineProperty(window, 'matchMedia', {
30
+ value: vi.fn().mockImplementation(() => ({
31
+ matches: false,
32
+ })),
33
+ ...CONFIGURABLE,
34
+ });
35
+ expect(getScreenDimensions(false)).toMatchSnapshot();
36
+ });
37
+ it('should return zeroed dimensions if the document attributes are null', () => {
38
+ Object.defineProperty(document, 'body', { value: null });
39
+ Object.defineProperty(document, 'documentElement', { value: null });
40
+ Object.defineProperty(window, 'matchMedia', {
41
+ value: vi.fn().mockImplementation(() => ({
42
+ matches: false,
43
+ })),
44
+ ...CONFIGURABLE,
45
+ });
46
+ expect(getScreenDimensions(false)).toMatchSnapshot();
47
+ });
48
+ it('should detect mobile emulation and return emulated dimensions', () => {
49
+ const mockScreen = {
50
+ width: 375,
51
+ height: 667
52
+ };
53
+ const originalScreen = window.screen;
54
+ Object.defineProperty(window, 'screen', {
55
+ value: mockScreen,
56
+ configurable: true,
57
+ writable: true
58
+ });
59
+ Object.defineProperty(window, 'devicePixelRatio', { value: 3, configurable: true });
60
+ Object.defineProperty(window, 'innerWidth', { value: 375, configurable: true });
61
+ Object.defineProperty(window, 'innerHeight', { value: 667, configurable: true });
62
+ Object.defineProperty(window, 'outerWidth', { value: 375, configurable: true });
63
+ Object.defineProperty(window, 'outerHeight', { value: 667, configurable: true });
64
+ Object.defineProperty(window, 'matchMedia', {
65
+ value: vi.fn().mockImplementation(() => ({
66
+ matches: false,
67
+ })),
68
+ ...CONFIGURABLE,
69
+ });
70
+ const dimensions = getScreenDimensions(false);
71
+ Object.defineProperty(window, 'screen', {
72
+ value: originalScreen,
73
+ configurable: true,
74
+ writable: true
75
+ });
76
+ expect(dimensions.dimensions.window.screenWidth).toBe(375);
77
+ expect(dimensions.dimensions.window.screenHeight).toBe(667);
78
+ expect(dimensions.dimensions.window.outerWidth).toBe(375);
79
+ expect(dimensions.dimensions.window.outerHeight).toBe(667);
80
+ expect(dimensions.dimensions.window.devicePixelRatio).toBe(3);
81
+ });
82
+ it('should handle desktop (non-emulated) dimensions correctly', () => {
83
+ const mockScreen = {
84
+ width: 1920,
85
+ height: 1080
86
+ };
87
+ const originalScreen = window.screen;
88
+ Object.defineProperty(window, 'screen', {
89
+ value: mockScreen,
90
+ configurable: true,
91
+ writable: true
92
+ });
93
+ Object.defineProperty(window, 'devicePixelRatio', { value: 1, configurable: true });
94
+ Object.defineProperty(window, 'innerWidth', { value: 1440, configurable: true });
95
+ Object.defineProperty(window, 'innerHeight', { value: 900, configurable: true });
96
+ Object.defineProperty(window, 'outerWidth', { value: 1440, configurable: true });
97
+ Object.defineProperty(window, 'outerHeight', { value: 900, configurable: true });
98
+ Object.defineProperty(window, 'matchMedia', {
99
+ value: vi.fn().mockImplementation(() => ({
100
+ matches: true,
101
+ })),
102
+ ...CONFIGURABLE,
103
+ });
104
+ const dimensions = getScreenDimensions(false);
105
+ Object.defineProperty(window, 'screen', {
106
+ value: originalScreen,
107
+ configurable: true,
108
+ writable: true
109
+ });
110
+ expect(dimensions.dimensions.window.screenWidth).toBe(1920);
111
+ expect(dimensions.dimensions.window.screenHeight).toBe(1080);
112
+ expect(dimensions.dimensions.window.outerWidth).toBe(1440);
113
+ expect(dimensions.dimensions.window.outerHeight).toBe(900);
114
+ expect(dimensions.dimensions.window.devicePixelRatio).toBe(1);
115
+ });
116
+ it('should handle high DPI desktop displays', () => {
117
+ const mockScreen = {
118
+ width: 2880,
119
+ height: 1800
120
+ };
121
+ const originalScreen = window.screen;
122
+ Object.defineProperty(window, 'screen', {
123
+ value: mockScreen,
124
+ configurable: true,
125
+ writable: true
126
+ });
127
+ Object.defineProperty(window, 'devicePixelRatio', { value: 2, configurable: true });
128
+ Object.defineProperty(window, 'innerWidth', { value: 1440, configurable: true });
129
+ Object.defineProperty(window, 'innerHeight', { value: 900, configurable: true });
130
+ Object.defineProperty(window, 'outerWidth', { value: 1440, configurable: true });
131
+ Object.defineProperty(window, 'outerHeight', { value: 900, configurable: true });
132
+ Object.defineProperty(window, 'matchMedia', {
133
+ value: vi.fn().mockImplementation(() => ({
134
+ matches: true,
135
+ })),
136
+ ...CONFIGURABLE,
137
+ });
138
+ const dimensions = getScreenDimensions(false);
139
+ Object.defineProperty(window, 'screen', {
140
+ value: originalScreen,
141
+ configurable: true,
142
+ writable: true
143
+ });
144
+ expect(dimensions.dimensions.window.devicePixelRatio).toBe(2);
145
+ expect(dimensions.dimensions.window.screenWidth).toBe(2880);
146
+ expect(dimensions.dimensions.window.screenHeight).toBe(1800);
147
+ });
148
+ it('should handle zero devicePixelRatio', () => {
149
+ Object.defineProperty(window, 'devicePixelRatio', { value: 0, configurable: true });
150
+ Object.defineProperty(window, 'innerWidth', { value: 1920, configurable: true });
151
+ Object.defineProperty(window, 'innerHeight', { value: 1080, configurable: true });
152
+ Object.defineProperty(window, 'matchMedia', {
153
+ value: vi.fn().mockImplementation(() => ({
154
+ matches: true,
155
+ })),
156
+ ...CONFIGURABLE,
157
+ });
158
+ const dimensions = getScreenDimensions(false);
159
+ expect(dimensions.dimensions.window.devicePixelRatio).toBe(1);
160
+ });
161
+ });
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Hide or remove elements on the page
3
+ */
4
+ export default function hideRemoveElements(hideRemoveElements: {
5
+ hide: (HTMLElement | HTMLElement[])[];
6
+ remove: (HTMLElement | HTMLElement[])[];
7
+ }, hideRemove: boolean): void;
8
+ //# sourceMappingURL=hideRemoveElements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hideRemoveElements.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/hideRemoveElements.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACtC,kBAAkB,EAAE;IAChB,IAAI,EAAE,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,EAAE,CAAC;IACtC,MAAM,EAAE,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,EAAE,CAAC;CAC3C,EACD,UAAU,EAAE,OAAO,QAgEtB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Hide or remove elements on the page
3
+ */
4
+ export default function hideRemoveElements(hideRemoveElements, hideRemove) {
5
+ const visitedSelectors = {};
6
+ hideRemoveElements.hide.forEach((element) => {
7
+ if (Array.isArray(element)) {
8
+ return element.forEach((singleElement) => hideRemoveEl(singleElement, 'visibility', hideRemove));
9
+ }
10
+ hideRemoveEl(element, 'visibility', hideRemove);
11
+ });
12
+ hideRemoveElements.remove.forEach((element) => {
13
+ if (Array.isArray(element)) {
14
+ return element.forEach((singleElement) => hideRemoveEl(singleElement, 'display', hideRemove));
15
+ }
16
+ hideRemoveEl(element, 'display', hideRemove);
17
+ });
18
+ function hideRemoveEl(el, prop, hideRemove) {
19
+ // @ts-ignore
20
+ if (el.style) {
21
+ // Here we get the HTMLElement
22
+ // @ts-ignore
23
+ setPropertyToElement(el, prop, hideRemove);
24
+ }
25
+ else {
26
+ // Here we have the WebElement, with the web element we can have 2 types of selectors
27
+ // css and xpath, transform them into HTML
28
+ // This is an anti pattern, but I don't know how to do this better with XPATH selection
29
+ try {
30
+ // @ts-ignore
31
+ const selector = el.selector;
32
+ if (!visitedSelectors[selector]) {
33
+ visitedSelectors[selector] = true;
34
+ const elems = document.querySelectorAll(selector);
35
+ elems.forEach((singleEl) => setPropertyToElement(singleEl, prop, hideRemove));
36
+ }
37
+ }
38
+ catch (_e) {
39
+ // 99.99% sure that we have XPATH here
40
+ // @ts-ignore
41
+ return getElementsByXpath(el.selector).forEach((singleEl) => setPropertyToElement(singleEl, prop, hideRemove));
42
+ }
43
+ }
44
+ }
45
+ function setPropertyToElement(el, prop, hideRemove) {
46
+ const value = prop === 'visibility' ? 'hidden' : 'none';
47
+ // @ts-ignore
48
+ el.style[prop] = hideRemove ? value : '';
49
+ hideRemove ? el.style.setProperty(prop, value, 'important') : el.style.removeProperty(prop);
50
+ }
51
+ // Stupid TypeScript =)
52
+ function getElementsByXpath(xpathToExecute) {
53
+ const result = [];
54
+ const nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
55
+ for (let i = 0; i < nodesSnapshot.snapshotLength; i++) {
56
+ result.push(nodesSnapshot.snapshotItem(i));
57
+ }
58
+ return result;
59
+ }
60
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hideRemoveElements.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hideRemoveElements.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/hideRemoveElements.test.ts"],"names":[],"mappings":""}