@serenity-js/protractor 2.33.1 → 3.0.0-rc.11

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 (343) hide show
  1. package/CHANGELOG.md +481 -0
  2. package/lib/adapter/ProtractorFrameworkAdapter.js +5 -0
  3. package/lib/adapter/ProtractorFrameworkAdapter.js.map +1 -1
  4. package/lib/index.d.ts +0 -2
  5. package/lib/index.js +0 -2
  6. package/lib/index.js.map +1 -1
  7. package/lib/screenplay/abilities/{BrowseTheWeb.d.ts → BrowseTheWebWithProtractor.d.ts} +38 -191
  8. package/lib/screenplay/abilities/{BrowseTheWeb.js → BrowseTheWebWithProtractor.js} +129 -251
  9. package/lib/screenplay/abilities/BrowseTheWebWithProtractor.js.map +1 -0
  10. package/lib/screenplay/abilities/index.d.ts +1 -1
  11. package/lib/screenplay/abilities/index.js +1 -1
  12. package/lib/screenplay/abilities/index.js.map +1 -1
  13. package/lib/screenplay/index.d.ts +1 -0
  14. package/lib/screenplay/index.js +1 -0
  15. package/lib/screenplay/index.js.map +1 -1
  16. package/lib/screenplay/interactions/UseAngular.js +2 -2
  17. package/lib/screenplay/interactions/UseAngular.js.map +1 -1
  18. package/lib/screenplay/interactions/index.d.ts +0 -19
  19. package/lib/screenplay/interactions/index.js +0 -19
  20. package/lib/screenplay/interactions/index.js.map +1 -1
  21. package/lib/screenplay/models/ProtractorCookie.d.ts +11 -0
  22. package/lib/screenplay/models/ProtractorCookie.js +39 -0
  23. package/lib/screenplay/models/ProtractorCookie.js.map +1 -0
  24. package/lib/screenplay/models/ProtractorFrame.d.ts +10 -0
  25. package/lib/screenplay/models/ProtractorFrame.js +39 -0
  26. package/lib/screenplay/models/ProtractorFrame.js.map +1 -0
  27. package/lib/screenplay/models/ProtractorModalDialog.d.ts +11 -0
  28. package/lib/screenplay/models/ProtractorModalDialog.js +43 -0
  29. package/lib/screenplay/models/ProtractorModalDialog.js.map +1 -0
  30. package/lib/screenplay/models/ProtractorPage.d.ts +26 -0
  31. package/lib/screenplay/models/ProtractorPage.js +98 -0
  32. package/lib/screenplay/models/ProtractorPage.js.map +1 -0
  33. package/lib/screenplay/models/ProtractorPageElement.d.ts +21 -0
  34. package/lib/screenplay/models/ProtractorPageElement.js +230 -0
  35. package/lib/screenplay/models/ProtractorPageElement.js.map +1 -0
  36. package/lib/screenplay/models/index.d.ts +5 -0
  37. package/lib/screenplay/{questions/lists → models}/index.js +5 -1
  38. package/lib/screenplay/models/index.js.map +1 -0
  39. package/lib/screenplay/models/locators/ProtractorLocator.d.ts +9 -0
  40. package/lib/screenplay/models/locators/ProtractorLocator.js +28 -0
  41. package/lib/screenplay/models/locators/ProtractorLocator.js.map +1 -0
  42. package/lib/screenplay/models/locators/ProtractorNativeElementRoot.d.ts +5 -0
  43. package/lib/screenplay/{interactions/EnterBuilder.js → models/locators/ProtractorNativeElementRoot.js} +1 -1
  44. package/lib/screenplay/models/locators/ProtractorNativeElementRoot.js.map +1 -0
  45. package/lib/screenplay/models/locators/index.d.ts +2 -0
  46. package/lib/{stage/crew → screenplay/models/locators}/index.js +2 -1
  47. package/lib/screenplay/models/locators/index.js.map +1 -0
  48. package/lib/{promiseOf.d.ts → screenplay/promised.d.ts} +1 -1
  49. package/lib/{promiseOf.js → screenplay/promised.js} +4 -4
  50. package/lib/screenplay/promised.js.map +1 -0
  51. package/lib/screenplay/questions/ProtractorParam.d.ts +24 -29
  52. package/lib/screenplay/questions/ProtractorParam.js +26 -33
  53. package/lib/screenplay/questions/ProtractorParam.js.map +1 -1
  54. package/lib/screenplay/questions/index.d.ts +0 -13
  55. package/lib/screenplay/questions/index.js +0 -16
  56. package/lib/screenplay/questions/index.js.map +1 -1
  57. package/lib/screenplay/unpromisedWebElement.d.ts +11 -0
  58. package/lib/screenplay/unpromisedWebElement.js +24 -0
  59. package/lib/screenplay/unpromisedWebElement.js.map +1 -0
  60. package/package.json +19 -20
  61. package/src/adapter/ProtractorFrameworkAdapter.ts +5 -0
  62. package/src/index.ts +0 -2
  63. package/src/screenplay/abilities/{BrowseTheWeb.ts → BrowseTheWebWithProtractor.ts} +148 -263
  64. package/src/screenplay/abilities/index.ts +1 -1
  65. package/src/screenplay/index.ts +1 -0
  66. package/src/screenplay/interactions/UseAngular.ts +3 -3
  67. package/src/screenplay/interactions/index.ts +0 -19
  68. package/src/screenplay/models/ProtractorCookie.ts +41 -0
  69. package/src/screenplay/models/ProtractorFrame.ts +44 -0
  70. package/src/screenplay/models/ProtractorModalDialog.ts +49 -0
  71. package/src/screenplay/models/ProtractorPage.ts +124 -0
  72. package/src/screenplay/models/ProtractorPageElement.ts +285 -0
  73. package/src/screenplay/models/index.ts +6 -0
  74. package/src/screenplay/models/locators/ProtractorLocator.ts +50 -0
  75. package/src/screenplay/models/locators/ProtractorNativeElementRoot.ts +6 -0
  76. package/src/screenplay/models/locators/index.ts +2 -0
  77. package/src/{promiseOf.ts → screenplay/promised.ts} +1 -1
  78. package/src/screenplay/questions/ProtractorParam.ts +29 -38
  79. package/src/screenplay/questions/index.ts +0 -13
  80. package/src/screenplay/unpromisedWebElement.ts +25 -0
  81. package/lib/expectations/ElementFinderExpectation.d.ts +0 -11
  82. package/lib/expectations/ElementFinderExpectation.js +0 -24
  83. package/lib/expectations/ElementFinderExpectation.js.map +0 -1
  84. package/lib/expectations/index.d.ts +0 -6
  85. package/lib/expectations/index.js +0 -19
  86. package/lib/expectations/index.js.map +0 -1
  87. package/lib/expectations/isActive.d.ts +0 -13
  88. package/lib/expectations/isActive.js +0 -19
  89. package/lib/expectations/isActive.js.map +0 -1
  90. package/lib/expectations/isClickable.d.ts +0 -13
  91. package/lib/expectations/isClickable.js +0 -22
  92. package/lib/expectations/isClickable.js.map +0 -1
  93. package/lib/expectations/isEnabled.d.ts +0 -13
  94. package/lib/expectations/isEnabled.js +0 -19
  95. package/lib/expectations/isEnabled.js.map +0 -1
  96. package/lib/expectations/isPresent.d.ts +0 -14
  97. package/lib/expectations/isPresent.js +0 -20
  98. package/lib/expectations/isPresent.js.map +0 -1
  99. package/lib/expectations/isSelected.d.ts +0 -13
  100. package/lib/expectations/isSelected.js +0 -22
  101. package/lib/expectations/isSelected.js.map +0 -1
  102. package/lib/expectations/isVisible.d.ts +0 -13
  103. package/lib/expectations/isVisible.js +0 -25
  104. package/lib/expectations/isVisible.js.map +0 -1
  105. package/lib/promiseOf.js.map +0 -1
  106. package/lib/screenplay/abilities/BrowseTheWeb.js.map +0 -1
  107. package/lib/screenplay/interactions/Accept.d.ts +0 -81
  108. package/lib/screenplay/interactions/Accept.js +0 -95
  109. package/lib/screenplay/interactions/Accept.js.map +0 -1
  110. package/lib/screenplay/interactions/Clear.d.ts +0 -88
  111. package/lib/screenplay/interactions/Clear.js +0 -121
  112. package/lib/screenplay/interactions/Clear.js.map +0 -1
  113. package/lib/screenplay/interactions/Click.d.ts +0 -81
  114. package/lib/screenplay/interactions/Click.js +0 -95
  115. package/lib/screenplay/interactions/Click.js.map +0 -1
  116. package/lib/screenplay/interactions/Close.d.ts +0 -89
  117. package/lib/screenplay/interactions/Close.js +0 -169
  118. package/lib/screenplay/interactions/Close.js.map +0 -1
  119. package/lib/screenplay/interactions/DeleteCookies.d.ts +0 -72
  120. package/lib/screenplay/interactions/DeleteCookies.js +0 -149
  121. package/lib/screenplay/interactions/DeleteCookies.js.map +0 -1
  122. package/lib/screenplay/interactions/Dismiss.d.ts +0 -85
  123. package/lib/screenplay/interactions/Dismiss.js +0 -99
  124. package/lib/screenplay/interactions/Dismiss.js.map +0 -1
  125. package/lib/screenplay/interactions/DoubleClick.d.ts +0 -99
  126. package/lib/screenplay/interactions/DoubleClick.js +0 -121
  127. package/lib/screenplay/interactions/DoubleClick.js.map +0 -1
  128. package/lib/screenplay/interactions/Enter.d.ts +0 -81
  129. package/lib/screenplay/interactions/Enter.js +0 -96
  130. package/lib/screenplay/interactions/Enter.js.map +0 -1
  131. package/lib/screenplay/interactions/EnterBuilder.d.ts +0 -27
  132. package/lib/screenplay/interactions/EnterBuilder.js.map +0 -1
  133. package/lib/screenplay/interactions/ExecuteScript.d.ts +0 -171
  134. package/lib/screenplay/interactions/ExecuteScript.js +0 -291
  135. package/lib/screenplay/interactions/ExecuteScript.js.map +0 -1
  136. package/lib/screenplay/interactions/Hover.d.ts +0 -86
  137. package/lib/screenplay/interactions/Hover.js +0 -103
  138. package/lib/screenplay/interactions/Hover.js.map +0 -1
  139. package/lib/screenplay/interactions/Navigate.d.ts +0 -149
  140. package/lib/screenplay/interactions/Navigate.js +0 -345
  141. package/lib/screenplay/interactions/Navigate.js.map +0 -1
  142. package/lib/screenplay/interactions/Press.d.ts +0 -90
  143. package/lib/screenplay/interactions/Press.js +0 -127
  144. package/lib/screenplay/interactions/Press.js.map +0 -1
  145. package/lib/screenplay/interactions/PressBuilder.d.ts +0 -27
  146. package/lib/screenplay/interactions/PressBuilder.js +0 -3
  147. package/lib/screenplay/interactions/PressBuilder.js.map +0 -1
  148. package/lib/screenplay/interactions/ResizeBrowserWindow.d.ts +0 -69
  149. package/lib/screenplay/interactions/ResizeBrowserWindow.js +0 -144
  150. package/lib/screenplay/interactions/ResizeBrowserWindow.js.map +0 -1
  151. package/lib/screenplay/interactions/RightClick.d.ts +0 -97
  152. package/lib/screenplay/interactions/RightClick.js +0 -113
  153. package/lib/screenplay/interactions/RightClick.js.map +0 -1
  154. package/lib/screenplay/interactions/Scroll.d.ts +0 -83
  155. package/lib/screenplay/interactions/Scroll.js +0 -98
  156. package/lib/screenplay/interactions/Scroll.js.map +0 -1
  157. package/lib/screenplay/interactions/Select.d.ts +0 -212
  158. package/lib/screenplay/interactions/Select.js +0 -342
  159. package/lib/screenplay/interactions/Select.js.map +0 -1
  160. package/lib/screenplay/interactions/SelectBuilder.d.ts +0 -33
  161. package/lib/screenplay/interactions/SelectBuilder.js +0 -3
  162. package/lib/screenplay/interactions/SelectBuilder.js.map +0 -1
  163. package/lib/screenplay/interactions/Switch.d.ts +0 -210
  164. package/lib/screenplay/interactions/Switch.js +0 -345
  165. package/lib/screenplay/interactions/Switch.js.map +0 -1
  166. package/lib/screenplay/interactions/TakeScreenshot.d.ts +0 -67
  167. package/lib/screenplay/interactions/TakeScreenshot.js +0 -86
  168. package/lib/screenplay/interactions/TakeScreenshot.js.map +0 -1
  169. package/lib/screenplay/interactions/Wait.d.ts +0 -147
  170. package/lib/screenplay/interactions/Wait.js +0 -247
  171. package/lib/screenplay/interactions/Wait.js.map +0 -1
  172. package/lib/screenplay/interactions/WaitBuilder.d.ts +0 -33
  173. package/lib/screenplay/interactions/WaitBuilder.js +0 -3
  174. package/lib/screenplay/interactions/WaitBuilder.js.map +0 -1
  175. package/lib/screenplay/questions/Attribute.d.ts +0 -29
  176. package/lib/screenplay/questions/Attribute.js +0 -56
  177. package/lib/screenplay/questions/Attribute.js.map +0 -1
  178. package/lib/screenplay/questions/Browser.d.ts +0 -47
  179. package/lib/screenplay/questions/Browser.js +0 -55
  180. package/lib/screenplay/questions/Browser.js.map +0 -1
  181. package/lib/screenplay/questions/CSSClasses.d.ts +0 -94
  182. package/lib/screenplay/questions/CSSClasses.js +0 -118
  183. package/lib/screenplay/questions/CSSClasses.js.map +0 -1
  184. package/lib/screenplay/questions/Cookie.d.ts +0 -9
  185. package/lib/screenplay/questions/Cookie.js +0 -65
  186. package/lib/screenplay/questions/Cookie.js.map +0 -1
  187. package/lib/screenplay/questions/LastScriptExecution.d.ts +0 -14
  188. package/lib/screenplay/questions/LastScriptExecution.js +0 -22
  189. package/lib/screenplay/questions/LastScriptExecution.js.map +0 -1
  190. package/lib/screenplay/questions/ModalDialog.d.ts +0 -120
  191. package/lib/screenplay/questions/ModalDialog.js +0 -142
  192. package/lib/screenplay/questions/ModalDialog.js.map +0 -1
  193. package/lib/screenplay/questions/Pick.d.ts +0 -72
  194. package/lib/screenplay/questions/Pick.js +0 -254
  195. package/lib/screenplay/questions/Pick.js.map +0 -1
  196. package/lib/screenplay/questions/Selected.d.ts +0 -185
  197. package/lib/screenplay/questions/Selected.js +0 -254
  198. package/lib/screenplay/questions/Selected.js.map +0 -1
  199. package/lib/screenplay/questions/Value.d.ts +0 -47
  200. package/lib/screenplay/questions/Value.js +0 -67
  201. package/lib/screenplay/questions/Value.js.map +0 -1
  202. package/lib/screenplay/questions/Website.d.ts +0 -15
  203. package/lib/screenplay/questions/Website.js +0 -25
  204. package/lib/screenplay/questions/Website.js.map +0 -1
  205. package/lib/screenplay/questions/Window.d.ts +0 -23
  206. package/lib/screenplay/questions/Window.js +0 -28
  207. package/lib/screenplay/questions/Window.js.map +0 -1
  208. package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.d.ts +0 -89
  209. package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.js +0 -138
  210. package/lib/screenplay/questions/lists/ElementArrayFinderListAdapter.js.map +0 -1
  211. package/lib/screenplay/questions/lists/index.d.ts +0 -1
  212. package/lib/screenplay/questions/lists/index.js.map +0 -1
  213. package/lib/screenplay/questions/targets/Target.d.ts +0 -168
  214. package/lib/screenplay/questions/targets/Target.js +0 -190
  215. package/lib/screenplay/questions/targets/Target.js.map +0 -1
  216. package/lib/screenplay/questions/targets/TargetElement.d.ts +0 -50
  217. package/lib/screenplay/questions/targets/TargetElement.js +0 -62
  218. package/lib/screenplay/questions/targets/TargetElement.js.map +0 -1
  219. package/lib/screenplay/questions/targets/TargetElements.d.ts +0 -102
  220. package/lib/screenplay/questions/targets/TargetElements.js +0 -124
  221. package/lib/screenplay/questions/targets/TargetElements.js.map +0 -1
  222. package/lib/screenplay/questions/targets/TargetNestedElement.d.ts +0 -49
  223. package/lib/screenplay/questions/targets/TargetNestedElement.js +0 -61
  224. package/lib/screenplay/questions/targets/TargetNestedElement.js.map +0 -1
  225. package/lib/screenplay/questions/targets/TargetNestedElements.d.ts +0 -101
  226. package/lib/screenplay/questions/targets/TargetNestedElements.js +0 -123
  227. package/lib/screenplay/questions/targets/TargetNestedElements.js.map +0 -1
  228. package/lib/screenplay/questions/targets/builders.d.ts +0 -8
  229. package/lib/screenplay/questions/targets/builders.js +0 -3
  230. package/lib/screenplay/questions/targets/builders.js.map +0 -1
  231. package/lib/screenplay/questions/targets/index.d.ts +0 -5
  232. package/lib/screenplay/questions/targets/index.js +0 -18
  233. package/lib/screenplay/questions/targets/index.js.map +0 -1
  234. package/lib/screenplay/questions/targets/override.d.ts +0 -7
  235. package/lib/screenplay/questions/targets/override.js +0 -21
  236. package/lib/screenplay/questions/targets/override.js.map +0 -1
  237. package/lib/screenplay/questions/text/Text.d.ts +0 -41
  238. package/lib/screenplay/questions/text/Text.js +0 -50
  239. package/lib/screenplay/questions/text/Text.js.map +0 -1
  240. package/lib/screenplay/questions/text/TextOfMultipleElements.d.ts +0 -23
  241. package/lib/screenplay/questions/text/TextOfMultipleElements.js +0 -37
  242. package/lib/screenplay/questions/text/TextOfMultipleElements.js.map +0 -1
  243. package/lib/screenplay/questions/text/TextOfSingleElement.d.ts +0 -23
  244. package/lib/screenplay/questions/text/TextOfSingleElement.js +0 -35
  245. package/lib/screenplay/questions/text/TextOfSingleElement.js.map +0 -1
  246. package/lib/screenplay/questions/text/index.d.ts +0 -1
  247. package/lib/screenplay/questions/text/index.js +0 -14
  248. package/lib/screenplay/questions/text/index.js.map +0 -1
  249. package/lib/screenplay/withAnswerOf.d.ts +0 -8
  250. package/lib/screenplay/withAnswerOf.js +0 -18
  251. package/lib/screenplay/withAnswerOf.js.map +0 -1
  252. package/lib/stage/crew/index.d.ts +0 -1
  253. package/lib/stage/crew/index.js.map +0 -1
  254. package/lib/stage/crew/photographer/Photographer.d.ts +0 -83
  255. package/lib/stage/crew/photographer/Photographer.js +0 -102
  256. package/lib/stage/crew/photographer/Photographer.js.map +0 -1
  257. package/lib/stage/crew/photographer/index.d.ts +0 -2
  258. package/lib/stage/crew/photographer/index.js +0 -15
  259. package/lib/stage/crew/photographer/index.js.map +0 -1
  260. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.d.ts +0 -28
  261. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js +0 -65
  262. package/lib/stage/crew/photographer/strategies/PhotoTakingStrategy.js.map +0 -1
  263. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.d.ts +0 -18
  264. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js +0 -30
  265. package/lib/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.js.map +0 -1
  266. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.d.ts +0 -17
  267. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js +0 -28
  268. package/lib/stage/crew/photographer/strategies/TakePhotosOfFailures.js.map +0 -1
  269. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.d.ts +0 -19
  270. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js +0 -28
  271. package/lib/stage/crew/photographer/strategies/TakePhotosOfInteractions.js.map +0 -1
  272. package/lib/stage/crew/photographer/strategies/index.d.ts +0 -4
  273. package/lib/stage/crew/photographer/strategies/index.js +0 -17
  274. package/lib/stage/crew/photographer/strategies/index.js.map +0 -1
  275. package/lib/stage/index.d.ts +0 -1
  276. package/lib/stage/index.js +0 -14
  277. package/lib/stage/index.js.map +0 -1
  278. package/src/expectations/ElementFinderExpectation.ts +0 -29
  279. package/src/expectations/index.ts +0 -6
  280. package/src/expectations/isActive.ts +0 -24
  281. package/src/expectations/isClickable.ts +0 -20
  282. package/src/expectations/isEnabled.ts +0 -18
  283. package/src/expectations/isPresent.ts +0 -19
  284. package/src/expectations/isSelected.ts +0 -23
  285. package/src/expectations/isVisible.ts +0 -27
  286. package/src/screenplay/interactions/Accept.ts +0 -95
  287. package/src/screenplay/interactions/Clear.ts +0 -130
  288. package/src/screenplay/interactions/Click.ts +0 -96
  289. package/src/screenplay/interactions/Close.ts +0 -184
  290. package/src/screenplay/interactions/DeleteCookies.ts +0 -154
  291. package/src/screenplay/interactions/Dismiss.ts +0 -99
  292. package/src/screenplay/interactions/DoubleClick.ts +0 -124
  293. package/src/screenplay/interactions/Enter.ts +0 -104
  294. package/src/screenplay/interactions/EnterBuilder.ts +0 -29
  295. package/src/screenplay/interactions/ExecuteScript.ts +0 -325
  296. package/src/screenplay/interactions/Hover.ts +0 -106
  297. package/src/screenplay/interactions/Navigate.ts +0 -363
  298. package/src/screenplay/interactions/Press.ts +0 -137
  299. package/src/screenplay/interactions/PressBuilder.ts +0 -29
  300. package/src/screenplay/interactions/ResizeBrowserWindow.ts +0 -148
  301. package/src/screenplay/interactions/RightClick.ts +0 -114
  302. package/src/screenplay/interactions/Scroll.ts +0 -99
  303. package/src/screenplay/interactions/Select.ts +0 -402
  304. package/src/screenplay/interactions/SelectBuilder.ts +0 -35
  305. package/src/screenplay/interactions/Switch.ts +0 -393
  306. package/src/screenplay/interactions/TakeScreenshot.ts +0 -89
  307. package/src/screenplay/interactions/Wait.ts +0 -267
  308. package/src/screenplay/interactions/WaitBuilder.ts +0 -35
  309. package/src/screenplay/questions/Attribute.ts +0 -67
  310. package/src/screenplay/questions/Browser.ts +0 -55
  311. package/src/screenplay/questions/CSSClasses.ts +0 -121
  312. package/src/screenplay/questions/Cookie.ts +0 -70
  313. package/src/screenplay/questions/LastScriptExecution.ts +0 -21
  314. package/src/screenplay/questions/ModalDialog.ts +0 -149
  315. package/src/screenplay/questions/Pick.ts +0 -334
  316. package/src/screenplay/questions/Selected.ts +0 -268
  317. package/src/screenplay/questions/Value.ts +0 -73
  318. package/src/screenplay/questions/Website.ts +0 -27
  319. package/src/screenplay/questions/Window.ts +0 -29
  320. package/src/screenplay/questions/lists/ElementArrayFinderListAdapter.ts +0 -158
  321. package/src/screenplay/questions/lists/index.ts +0 -1
  322. package/src/screenplay/questions/targets/Target.ts +0 -198
  323. package/src/screenplay/questions/targets/TargetElement.ts +0 -70
  324. package/src/screenplay/questions/targets/TargetElements.ts +0 -142
  325. package/src/screenplay/questions/targets/TargetNestedElement.ts +0 -71
  326. package/src/screenplay/questions/targets/TargetNestedElements.ts +0 -142
  327. package/src/screenplay/questions/targets/builders.ts +0 -10
  328. package/src/screenplay/questions/targets/index.ts +0 -5
  329. package/src/screenplay/questions/targets/override.ts +0 -17
  330. package/src/screenplay/questions/text/Text.ts +0 -55
  331. package/src/screenplay/questions/text/TextOfMultipleElements.ts +0 -40
  332. package/src/screenplay/questions/text/TextOfSingleElement.ts +0 -37
  333. package/src/screenplay/questions/text/index.ts +0 -1
  334. package/src/screenplay/withAnswerOf.ts +0 -19
  335. package/src/stage/crew/index.ts +0 -1
  336. package/src/stage/crew/photographer/Photographer.ts +0 -108
  337. package/src/stage/crew/photographer/index.ts +0 -2
  338. package/src/stage/crew/photographer/strategies/PhotoTakingStrategy.ts +0 -102
  339. package/src/stage/crew/photographer/strategies/TakePhotosBeforeAndAfterInteractions.ts +0 -28
  340. package/src/stage/crew/photographer/strategies/TakePhotosOfFailures.ts +0 -26
  341. package/src/stage/crew/photographer/strategies/TakePhotosOfInteractions.ts +0 -26
  342. package/src/stage/crew/photographer/strategies/index.ts +0 -4
  343. package/src/stage/index.ts +0 -1
@@ -0,0 +1,41 @@
1
+ import { Timestamp } from '@serenity-js/core';
2
+ import { Cookie, CookieData, CookieMissingError } from '@serenity-js/web';
3
+ import { ProtractorBrowser } from 'protractor';
4
+ import { ensure, isDefined } from 'tiny-types';
5
+
6
+ import { promised } from '../promised';
7
+
8
+ export class ProtractorCookie extends Cookie {
9
+
10
+ constructor(private readonly browser: ProtractorBrowser, cookieName: string) {
11
+ super(cookieName);
12
+ ensure('browser', browser, isDefined());
13
+ }
14
+
15
+ delete(): Promise<void> {
16
+ return promised(this.browser.manage().deleteCookie(this.cookieName));
17
+ }
18
+
19
+ /**
20
+ * @protected
21
+ */
22
+ protected async read(): Promise<CookieData> {
23
+ const cookie = await this.browser.manage().getCookie(this.cookieName);
24
+
25
+ if (! cookie) {
26
+ throw new CookieMissingError(`Cookie '${ this.cookieName }' not set`);
27
+ }
28
+
29
+ return {
30
+ name: cookie.name,
31
+ value: cookie.value,
32
+ domain: cookie.domain,
33
+ path: cookie.path,
34
+ expiry: cookie.expiry !== undefined
35
+ ? Timestamp.fromTimestampInSeconds(Math.round(cookie.expiry))
36
+ : undefined,
37
+ httpOnly: cookie.httpOnly,
38
+ secure: cookie.secure,
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,44 @@
1
+ import { LogicError } from '@serenity-js/core';
2
+ import { Frame, Locator } from '@serenity-js/web';
3
+ import { ElementFinder, ProtractorBrowser, WebElement } from 'protractor';
4
+
5
+ export class ProtractorFrame extends Frame<ElementFinder> {
6
+ constructor(
7
+ private readonly browser: ProtractorBrowser,
8
+ locator: Locator<ElementFinder>
9
+ ) {
10
+ super(locator);
11
+ }
12
+
13
+ async isPresent(): Promise<boolean> {
14
+ const element: ElementFinder = await this.locator.nativeElement();
15
+
16
+ return element.isPresent();
17
+ }
18
+
19
+ async switchTo(): Promise<{ switchBack(): Promise<void> }> {
20
+ const element: ElementFinder = await this.locator.nativeElement()
21
+
22
+ let webElement: WebElement;
23
+
24
+ try {
25
+ // https://github.com/angular/protractor/issues/1846#issuecomment-82634739;
26
+ webElement = await element.getWebElement();
27
+ } catch (error) {
28
+ throw new LogicError(`Couldn't locate frame ${ this.locator }`, error);
29
+ }
30
+
31
+ try {
32
+ await this.browser.switchTo().frame(webElement);
33
+
34
+ return {
35
+ switchBack: async (): Promise<void> => {
36
+ await this.browser.driver.switchToParentFrame();
37
+ }
38
+ }
39
+ }
40
+ catch (error) {
41
+ throw new LogicError(`Couldn't switch to a frame located ${ this.locator }`, error);
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,49 @@
1
+ import { ModalDialog } from '@serenity-js/web';
2
+ import { ProtractorBrowser } from 'protractor';
3
+ import { error as errors } from 'selenium-webdriver';
4
+
5
+ import { promised } from '../promised';
6
+
7
+ export class ProtractorModalDialog extends ModalDialog {
8
+
9
+ constructor(private readonly browser: ProtractorBrowser) {
10
+ super();
11
+ }
12
+
13
+ accept(): Promise<void> {
14
+ return promised(this.browser.switchTo().alert().accept());
15
+ }
16
+
17
+ dismiss(): Promise<void> {
18
+ return promised(this.browser.switchTo().alert().dismiss());
19
+ }
20
+
21
+ text(): Promise<string> {
22
+ return promised(this.browser.switchTo().alert().getText());
23
+ }
24
+
25
+ async enterValue(value: string | number | (string | number)[]): Promise<void> {
26
+ const text = [].concat(value).join('');
27
+ await promised(this.browser.switchTo().alert().sendKeys(text));
28
+ await promised(this.browser.switchTo().alert().accept());
29
+ }
30
+
31
+ // todo: remove in favour of auto-wait in the above methods
32
+ isPresent(): Promise<boolean> {
33
+ return promised(this.browser.switchTo().alert())
34
+ .then(() => true, error => {
35
+
36
+ // Based on:
37
+ // https://github.com/SeleniumHQ/selenium/blob/941dc9c6b2e2aa4f701c1b72be8de03d4b7e996a/javascript/node/selenium-webdriver/lib/until.js#L107
38
+ return error instanceof Error &&
39
+ ! (
40
+ error.name === errors.NoSuchAlertError.name
41
+ // XXX: Workaround for GeckoDriver error `TypeError: can't convert null
42
+ // to object`. For more details, see
43
+ // https://github.com/SeleniumHQ/selenium/pull/2137
44
+ || (error.name === errors.WebDriverError.name
45
+ && error.message === `can't convert null to object`)
46
+ );
47
+ });
48
+ }
49
+ }
@@ -0,0 +1,124 @@
1
+ import { Page } from '@serenity-js/web';
2
+ import { ProtractorBrowser } from 'protractor';
3
+ import { URL } from 'url';
4
+
5
+ import { promised } from '../promised';
6
+
7
+ export class ProtractorPage extends Page {
8
+ constructor(
9
+ private readonly browser: ProtractorBrowser,
10
+ handle: string
11
+ ) {
12
+ super(handle);
13
+ }
14
+
15
+ title(): Promise<string> {
16
+ return this.switchToAndPerform(async browser => {
17
+ return promised(browser.getTitle());
18
+ });
19
+ }
20
+
21
+ name(): Promise<string> {
22
+ return this.switchToAndPerform(async browser => {
23
+ return promised(browser.executeScript('return window.name'));
24
+ });
25
+ }
26
+
27
+ url(): Promise<URL> {
28
+ return this.switchToAndPerform(async browser => {
29
+ return new URL(await promised(browser.getCurrentUrl()));
30
+ });
31
+ }
32
+
33
+ async viewportSize(): Promise<{ width: number, height: number }> {
34
+ return this.switchToAndPerform(async browser => {
35
+ const calculatedViewportSize = await promised(browser.executeScript(
36
+ `return {
37
+ width: Math.max(document.documentElement.clientWidth, window.innerWidth || 0),
38
+ height: Math.max(document.documentElement.clientHeight, window.innerHeight || 0)
39
+ };`
40
+ )) as { width: number, height: number };
41
+
42
+ if (calculatedViewportSize.width > 0 && calculatedViewportSize.height > 0) {
43
+ return calculatedViewportSize;
44
+ }
45
+
46
+ // Chrome headless hard-codes window.innerWidth and window.innerHeight to 0
47
+ return promised(browser.manage().window().getSize());
48
+ });
49
+ }
50
+
51
+ async setViewportSize(size: { width: number, height: number }): Promise<void> {
52
+ return this.switchToAndPerform(async browser => {
53
+ const desiredWindowSize: { width: number, height: number } = await promised(browser.executeScript(`
54
+ var currentViewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)
55
+ var currentViewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)
56
+
57
+ return {
58
+ width: Math.max(window.outerWidth - currentViewportWidth + ${ size.width }, ${ size.width }),
59
+ height: Math.max(window.outerHeight - currentViewportHeight + ${ size.height }, ${ size.height }),
60
+ };
61
+ `));
62
+
63
+ return promised(browser.manage().window().setSize(desiredWindowSize.width, desiredWindowSize.height));
64
+ });
65
+ }
66
+
67
+ async close(): Promise<void> {
68
+ return this.switchToAndPerform(browser => promised(browser.close()));
69
+ }
70
+
71
+ async closeOthers(): Promise<void> {
72
+ const windowHandles = await this.browser.getAllWindowHandles();
73
+
74
+ for (const handle of windowHandles) {
75
+ if (handle !== this.handle) {
76
+ await this.browser.switchTo().window(handle);
77
+ await this.browser.close();
78
+ }
79
+ }
80
+
81
+ await this.browser.switchTo().window(this.handle);
82
+ }
83
+
84
+ async isPresent(): Promise<boolean> {
85
+ const currentPageHandle = await this.browser.getWindowHandle();
86
+ const desiredPageHandle = this.handle;
87
+
88
+ const isOpen = await this.browser.switchTo().window(desiredPageHandle).then(() => true, _error => false);
89
+
90
+ await this.browser.switchTo().window(currentPageHandle);
91
+
92
+ return isOpen;
93
+ }
94
+
95
+ async switchTo(): Promise<{ switchBack(): Promise<void> }> {
96
+ const originalWindowHandle = await this.browser.getWindowHandle();
97
+
98
+ await this.browser.switchTo().window(this.handle);
99
+
100
+ return {
101
+ switchBack: async (): Promise<void> => {
102
+ await this.browser.switchTo().window(originalWindowHandle);
103
+ }
104
+ }
105
+ }
106
+
107
+ private async switchToAndPerform<T>(action: (browser: ProtractorBrowser) => Promise<T> | T): Promise<T> {
108
+ const originalPageHandle = await this.browser.getWindowHandle();
109
+ const desiredPageHandle = this.handle;
110
+ const shouldSwitch = originalPageHandle !== desiredPageHandle;
111
+
112
+ if (shouldSwitch) {
113
+ await this.browser.switchTo().window(desiredPageHandle);
114
+ }
115
+
116
+ const result = await action(this.browser);
117
+
118
+ if (shouldSwitch) {
119
+ await this.browser.switchTo().window(originalPageHandle);
120
+ }
121
+
122
+ return result;
123
+ }
124
+ }
@@ -0,0 +1,285 @@
1
+ import { PageElement } from '@serenity-js/web';
2
+ import { ElementFinder, protractor } from 'protractor';
3
+ import { WebElement } from 'selenium-webdriver';
4
+
5
+ import { promised } from '../promised';
6
+
7
+ export class ProtractorPageElement
8
+ extends PageElement<ElementFinder>
9
+ {
10
+ of(parent: ProtractorPageElement): PageElement<ElementFinder> {
11
+ return new ProtractorPageElement(this.locator.of(parent.locator));
12
+ }
13
+
14
+ async clearValue(): Promise<void> {
15
+ function removeCharactersFrom(elf: ElementFinder, numberOfCharacters: number): PromiseLike<void> {
16
+ return numberOfCharacters === 0
17
+ ? Promise.resolve(void 0)
18
+ : elf.sendKeys(
19
+ protractor.Key.END,
20
+ ...times(numberOfCharacters, protractor.Key.BACK_SPACE),
21
+ );
22
+ }
23
+
24
+ // eslint-disable-next-line unicorn/consistent-function-scoping
25
+ function times(length: number, key: string) {
26
+ return Array.from({ length }).map(() => key);
27
+ }
28
+
29
+ const currentValue = await this.value();
30
+
31
+ if (currentValue !== null && currentValue !== undefined) {
32
+ const element = await this.nativeElement();
33
+ return removeCharactersFrom(element, currentValue.length);
34
+ }
35
+ }
36
+
37
+ async click(): Promise<void> {
38
+ const element: ElementFinder = await this.nativeElement();
39
+
40
+ return element.click();
41
+ }
42
+
43
+ async doubleClick(): Promise<void> {
44
+ const element: ElementFinder = await this.nativeElement();
45
+ const webElement: WebElement = await element.getWebElement();
46
+
47
+ return promised(
48
+ webElement.getDriver().actions()
49
+ .mouseMove(webElement)
50
+ .doubleClick()
51
+ .perform()
52
+ );
53
+ }
54
+
55
+ async enterValue(value: string | number | Array<string | number>): Promise<void> {
56
+ const element: ElementFinder = await this.nativeElement();
57
+
58
+ return element.sendKeys(
59
+ [].concat(value).join('')
60
+ );
61
+ }
62
+
63
+ async scrollIntoView(): Promise<void> {
64
+ const element: ElementFinder = await this.nativeElement();
65
+ const webElement: WebElement = await element.getWebElement();
66
+
67
+ return promised(
68
+ webElement.getDriver().executeScript('arguments[0].scrollIntoView(true);', webElement)
69
+ );
70
+ }
71
+
72
+ async hoverOver(): Promise<void> {
73
+ const element: ElementFinder = await this.nativeElement();
74
+ const webElement: WebElement = await element.getWebElement();
75
+
76
+ return promised(
77
+ webElement.getDriver().actions()
78
+ .mouseMove(webElement)
79
+ .perform()
80
+ );
81
+ }
82
+
83
+ async rightClick(): Promise<void> {
84
+ const element: ElementFinder = await this.nativeElement();
85
+ const webElement: WebElement = await element.getWebElement();
86
+
87
+ return promised(
88
+ webElement.getDriver().actions()
89
+ .mouseMove(webElement)
90
+ .click(protractor.Button.RIGHT)
91
+ .perform()
92
+ );
93
+ }
94
+
95
+ async attribute(name: string): Promise<string> {
96
+ const element: ElementFinder = await this.nativeElement();
97
+
98
+ return element.getAttribute(name);
99
+ }
100
+
101
+ async text(): Promise<string> {
102
+ const element: ElementFinder = await this.nativeElement();
103
+
104
+ return element.getText();
105
+ }
106
+
107
+ async value(): Promise<string> {
108
+ const element: ElementFinder = await this.nativeElement();
109
+ const webElement: WebElement = await element.getWebElement();
110
+
111
+ return promised(webElement.getDriver().executeScript(
112
+ /* istanbul ignore next */
113
+ function getValue(webElement) {
114
+ return webElement.value;
115
+ },
116
+ webElement,
117
+ ));
118
+ }
119
+
120
+ async isActive(): Promise<boolean> {
121
+ const element: ElementFinder = await this.nativeElement();
122
+ const webElement: WebElement = await element.getWebElement();
123
+
124
+ return webElement.getDriver().switchTo().activeElement().then((active: WebElement) =>
125
+ element.equals(active),
126
+ );
127
+ }
128
+
129
+ async isClickable(): Promise<boolean> {
130
+ return this.isEnabled();
131
+ }
132
+
133
+ async isEnabled(): Promise<boolean> {
134
+ const element: ElementFinder = await this.nativeElement();
135
+
136
+ return element.isEnabled();
137
+ }
138
+
139
+ async isPresent(): Promise<boolean> {
140
+ const element: ElementFinder = await this.nativeElement();
141
+
142
+ return element.isPresent();
143
+ }
144
+
145
+ async isSelected(): Promise<boolean> {
146
+ const element: ElementFinder = await this.nativeElement();
147
+
148
+ return element.isSelected();
149
+ }
150
+
151
+ async isVisible(): Promise<boolean> {
152
+ const element: ElementFinder = await this.nativeElement();
153
+
154
+ if (! await element.isDisplayed()) {
155
+ return false;
156
+ }
157
+
158
+ const webElement: WebElement = await element.getWebElement();
159
+
160
+ // get element at cx/cy and see if the element we found is our element, and therefore it's visible.
161
+ return promised(webElement.getDriver().executeScript(
162
+ `
163
+ var element = arguments[0];
164
+
165
+ if (!element.getBoundingClientRect || !element.scrollIntoView || !element.contains || !element.getClientRects || !document.elementFromPoint) {
166
+ return false
167
+ }
168
+
169
+ // Edge before switching to Chromium
170
+ const isOldEdge = !!window['StyleMedia']
171
+ // returns true for Chrome and Firefox and false for Safari, Edge and IE
172
+ const scrollIntoViewFullSupport = !(window.safari || isOldEdge)
173
+
174
+ // get overlapping element
175
+ function getOverlappingElement (elem, context) {
176
+ context = context || document
177
+ const elemDimension = elem.getBoundingClientRect()
178
+ const x = elemDimension.left + (elem.clientWidth / 2)
179
+ const y = elemDimension.top + (elem.clientHeight / 2)
180
+ return context.elementFromPoint(x, y)
181
+ }
182
+
183
+ // get overlapping element rects (currently only the first)
184
+ // applicable if element's text is multiline.
185
+ function getOverlappingRects (elem, context) {
186
+ context = context || document
187
+ const elems = []
188
+
189
+ const rects = elem.getClientRects()
190
+ // webdriver clicks on center of the first element's rect (line of text), it might change in future
191
+ const rect = rects[0]
192
+ const x = rect.left + (rect.width / 2)
193
+ const y = rect.top + (rect.height / 2)
194
+ elems.push(context.elementFromPoint(x, y))
195
+
196
+ return elems
197
+ }
198
+
199
+ // get overlapping elements
200
+ function getOverlappingElements (elem, context) {
201
+ return [getOverlappingElement(elem, context)].concat(getOverlappingRects(elem, context))
202
+ }
203
+
204
+ // is a node a descendant of a given node
205
+ function nodeContains (elem, otherNode) {
206
+ // Edge doesn't support neither Shadow Dom nor contains if ShadowRoot polyfill is used
207
+ if (isOldEdge) {
208
+ let tmpElement = otherNode
209
+ while (tmpElement) {
210
+ if (tmpElement === elem) {
211
+ return true
212
+ }
213
+
214
+ tmpElement = tmpElement.parentNode
215
+ // DocumentFragment / ShadowRoot polyfill like ShadyRoot
216
+ if (tmpElement && tmpElement.nodeType === 11 && tmpElement.host) {
217
+ tmpElement = tmpElement.host
218
+ }
219
+ }
220
+ return false
221
+ }
222
+
223
+ return elem.contains(otherNode)
224
+ }
225
+
226
+ // is one of overlapping elements the \`elem\` or one of its child
227
+ function isOverlappingElementMatch (elementsFromPoint, elem) {
228
+ if (elementsFromPoint.some(function (elementFromPoint) {
229
+ return elementFromPoint === elem || nodeContains(elem, elementFromPoint)
230
+ })) {
231
+ return true
232
+ }
233
+
234
+ // shadow root
235
+ // filter unique elements with shadowRoot
236
+ // @ts-ignore
237
+ let elemsWithShadowRoot = [].concat(elementsFromPoint)
238
+ elemsWithShadowRoot = elemsWithShadowRoot.filter(function (x) {
239
+ return x && x.shadowRoot && x.shadowRoot.elementFromPoint
240
+ })
241
+
242
+ // getOverlappingElements of every element with shadowRoot
243
+ let shadowElementsFromPoint = []
244
+ for (let i = 0; i < elemsWithShadowRoot.length; ++i) {
245
+ let shadowElement = elemsWithShadowRoot[i]
246
+ shadowElementsFromPoint = shadowElementsFromPoint.concat(
247
+ getOverlappingElements(elem, shadowElement.shadowRoot)
248
+ )
249
+ }
250
+ // remove duplicates and parents
251
+ // @ts-ignore
252
+ shadowElementsFromPoint = [].concat(shadowElementsFromPoint)
253
+ shadowElementsFromPoint = shadowElementsFromPoint.filter(function (x) {
254
+ return !elementsFromPoint.includes(x)
255
+ })
256
+
257
+ if (shadowElementsFromPoint.length === 0) {
258
+ return false
259
+ }
260
+
261
+ return isOverlappingElementMatch(shadowElementsFromPoint, elem)
262
+ }
263
+
264
+ function isElementInViewport (elem) {
265
+ if (!elem.getBoundingClientRect) {
266
+ return false
267
+ }
268
+
269
+ const rect = elem.getBoundingClientRect()
270
+
271
+ const windowHeight = (window.innerHeight || document.documentElement.clientHeight)
272
+ const windowWidth = (window.innerWidth || document.documentElement.clientWidth)
273
+
274
+ const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) > 0)
275
+ const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) > 0)
276
+
277
+ return (vertInView && horInView)
278
+ }
279
+
280
+ return isElementInViewport(element) && isOverlappingElementMatch(getOverlappingElements(element), element);
281
+ `,
282
+ webElement,
283
+ ));
284
+ }
285
+ }
@@ -0,0 +1,6 @@
1
+ export * from './ProtractorCookie';
2
+ export * from './ProtractorFrame';
3
+ export * from './ProtractorModalDialog';
4
+ export * from './ProtractorPage';
5
+ export * from './ProtractorPageElement';
6
+
@@ -0,0 +1,50 @@
1
+ import { Locator, PageElement, Selector } from '@serenity-js/web';
2
+ import { ElementFinder, Locator as ProtractorNativeLocator, ProtractorBrowser } from 'protractor';
3
+
4
+ import { unpromisedWebElement } from '../../unpromisedWebElement';
5
+ import { ProtractorPageElement } from '../ProtractorPageElement';
6
+ import { ProtractorNativeElementRoot } from './ProtractorNativeElementRoot';
7
+
8
+ export class ProtractorLocator<Selector_Type extends Selector> extends Locator<ElementFinder, ProtractorNativeElementRoot, Selector_Type> {
9
+
10
+ static createRootLocator<ST extends Selector>(browser: ProtractorBrowser, selector: ST, protractorBy: ProtractorNativeLocator): ProtractorLocator<ST> {
11
+ const parentRoot: ProtractorNativeElementRoot = {
12
+ element: browser.element.bind(browser),
13
+ all: browser.element.all.bind(browser),
14
+ }
15
+
16
+ return new ProtractorLocator(
17
+ () => parentRoot,
18
+ selector,
19
+ (root: ProtractorNativeElementRoot) => unpromisedWebElement(root.element(protractorBy)),
20
+ async (root: ProtractorNativeElementRoot) => root.all(protractorBy)
21
+ );
22
+ }
23
+
24
+ of(parent: ProtractorLocator<unknown>): Locator<ElementFinder, ProtractorNativeElementRoot, Selector_Type> {
25
+ return new ProtractorLocator(
26
+ () => parent.nativeElement(),
27
+ this.selector,
28
+ (parentRoot: ProtractorNativeElementRoot) => this.locateElement(parentRoot),
29
+ (parentRoot: ProtractorNativeElementRoot) => this.locateAllElements(parentRoot),
30
+ );
31
+ }
32
+
33
+ element(): PageElement<ElementFinder> {
34
+ return new ProtractorPageElement(this);
35
+ }
36
+
37
+ async allElements(): Promise<Array<PageElement<ElementFinder>>> {
38
+ const parentRoot = await this.parentRoot()
39
+ const elements = await this.locateAllElements(parentRoot);
40
+
41
+ return Promise.all(elements.map(childElement =>
42
+ new ProtractorPageElement(new ProtractorLocator(
43
+ this.parentRoot,
44
+ this.selector,
45
+ () => unpromisedWebElement(childElement),
46
+ () => [ unpromisedWebElement(childElement) ],
47
+ ))
48
+ ));
49
+ }
50
+ }
@@ -0,0 +1,6 @@
1
+ import { ElementArrayFinder, ElementFinder, Locator } from 'protractor';
2
+
3
+ export interface ProtractorNativeElementRoot {
4
+ element(selector: Locator): ElementFinder;
5
+ all(selector: Locator): ElementArrayFinder;
6
+ }
@@ -0,0 +1,2 @@
1
+ export * from './ProtractorLocator';
2
+ export * from './ProtractorNativeElementRoot';
@@ -7,7 +7,7 @@
7
7
  * @param promiseLike
8
8
  * @returns {Promise<T>}
9
9
  */
10
- export function promiseOf<T>(promiseLike: PromiseLike<T>): Promise<T> {
10
+ export function promised<T>(promiseLike: PromiseLike<T>): Promise<T> {
11
11
  return new Promise((resolve, reject) => {
12
12
  promiseLike.then(resolve, reject);
13
13
  });