@serenity-js/core 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 (210) hide show
  1. package/CHANGELOG.md +476 -0
  2. package/lib/index.d.ts +2 -1
  3. package/lib/index.js +6 -1
  4. package/lib/index.js.map +1 -1
  5. package/lib/io/ErrorSerialiser.js +4 -1
  6. package/lib/io/ErrorSerialiser.js.map +1 -1
  7. package/lib/io/ErrorStackParser.d.ts +2 -2
  8. package/lib/io/ErrorStackParser.js.map +1 -1
  9. package/lib/io/asyncMap.d.ts +8 -0
  10. package/lib/io/asyncMap.js +18 -0
  11. package/lib/io/asyncMap.js.map +1 -0
  12. package/lib/io/format.d.ts +39 -0
  13. package/lib/io/format.js +51 -0
  14. package/lib/io/format.js.map +1 -0
  15. package/lib/io/formatted.d.ts +5 -1
  16. package/lib/io/formatted.js +6 -13
  17. package/lib/io/formatted.js.map +1 -1
  18. package/lib/io/index.d.ts +2 -1
  19. package/lib/io/index.js +2 -1
  20. package/lib/io/index.js.map +1 -1
  21. package/lib/io/inspected.d.ts +9 -1
  22. package/lib/io/inspected.js +52 -15
  23. package/lib/io/inspected.js.map +1 -1
  24. package/lib/model/Timestamp.d.ts +4 -2
  25. package/lib/model/Timestamp.js +8 -2
  26. package/lib/model/Timestamp.js.map +1 -1
  27. package/lib/screenplay/Optional.d.ts +29 -0
  28. package/lib/{io/collections/reducible.js → screenplay/Optional.js} +1 -1
  29. package/lib/screenplay/Optional.js.map +1 -0
  30. package/lib/screenplay/Question.d.ts +41 -82
  31. package/lib/screenplay/Question.js +132 -100
  32. package/lib/screenplay/Question.js.map +1 -1
  33. package/lib/screenplay/actor/Actor.js +2 -2
  34. package/lib/screenplay/actor/Actor.js.map +1 -1
  35. package/lib/screenplay/index.d.ts +1 -1
  36. package/lib/screenplay/index.js +1 -1
  37. package/lib/screenplay/index.js.map +1 -1
  38. package/lib/screenplay/interactions/index.d.ts +0 -1
  39. package/lib/screenplay/interactions/index.js +0 -1
  40. package/lib/screenplay/interactions/index.js.map +1 -1
  41. package/lib/screenplay/questions/Check.d.ts +3 -3
  42. package/lib/screenplay/questions/Check.js +5 -7
  43. package/lib/screenplay/questions/Check.js.map +1 -1
  44. package/lib/screenplay/questions/Expectation.d.ts +15 -10
  45. package/lib/screenplay/questions/Expectation.js +28 -37
  46. package/lib/screenplay/questions/Expectation.js.map +1 -1
  47. package/lib/screenplay/questions/List.d.ts +22 -192
  48. package/lib/screenplay/questions/List.js +160 -208
  49. package/lib/screenplay/questions/List.js.map +1 -1
  50. package/lib/screenplay/questions/Note.d.ts +10 -0
  51. package/lib/screenplay/questions/Note.js +17 -1
  52. package/lib/screenplay/questions/Note.js.map +1 -1
  53. package/lib/screenplay/questions/index.d.ts +0 -3
  54. package/lib/screenplay/questions/index.js +0 -5
  55. package/lib/screenplay/questions/index.js.map +1 -1
  56. package/lib/stage/index.d.ts +0 -2
  57. package/lib/stage/index.js +0 -2
  58. package/lib/stage/index.js.map +1 -1
  59. package/package.json +7 -6
  60. package/src/index.ts +2 -1
  61. package/src/io/ErrorSerialiser.ts +5 -1
  62. package/src/io/ErrorStackParser.ts +2 -1
  63. package/src/io/asyncMap.ts +18 -0
  64. package/src/io/format.ts +49 -0
  65. package/src/io/formatted.ts +7 -15
  66. package/src/io/index.ts +2 -1
  67. package/src/io/inspected.ts +68 -15
  68. package/src/model/Timestamp.ts +10 -2
  69. package/src/screenplay/Optional.ts +30 -0
  70. package/src/screenplay/Question.ts +206 -124
  71. package/src/screenplay/actor/Actor.ts +2 -2
  72. package/src/screenplay/index.ts +1 -1
  73. package/src/screenplay/interactions/index.ts +0 -1
  74. package/src/screenplay/questions/Check.ts +10 -15
  75. package/src/screenplay/questions/Expectation.ts +47 -55
  76. package/src/screenplay/questions/List.ts +224 -233
  77. package/src/screenplay/questions/Note.ts +21 -1
  78. package/src/screenplay/questions/index.ts +0 -3
  79. package/src/stage/index.ts +0 -2
  80. package/lib/io/collections/index.d.ts +0 -2
  81. package/lib/io/collections/index.js +0 -15
  82. package/lib/io/collections/index.js.map +0 -1
  83. package/lib/io/collections/mappable.d.ts +0 -52
  84. package/lib/io/collections/mappable.js +0 -28
  85. package/lib/io/collections/mappable.js.map +0 -1
  86. package/lib/io/collections/reducible.d.ts +0 -16
  87. package/lib/io/collections/reducible.js.map +0 -1
  88. package/lib/screenplay/interactions/See.d.ts +0 -31
  89. package/lib/screenplay/interactions/See.js +0 -43
  90. package/lib/screenplay/interactions/See.js.map +0 -1
  91. package/lib/screenplay/questions/Property.d.ts +0 -91
  92. package/lib/screenplay/questions/Property.js +0 -99
  93. package/lib/screenplay/questions/Property.js.map +0 -1
  94. package/lib/screenplay/questions/Transform.d.ts +0 -31
  95. package/lib/screenplay/questions/Transform.js +0 -46
  96. package/lib/screenplay/questions/Transform.js.map +0 -1
  97. package/lib/screenplay/questions/lists/ArrayListAdapter.d.ts +0 -88
  98. package/lib/screenplay/questions/lists/ArrayListAdapter.js +0 -152
  99. package/lib/screenplay/questions/lists/ArrayListAdapter.js.map +0 -1
  100. package/lib/screenplay/questions/lists/ListAdapter.d.ts +0 -20
  101. package/lib/screenplay/questions/lists/ListAdapter.js +0 -3
  102. package/lib/screenplay/questions/lists/ListAdapter.js.map +0 -1
  103. package/lib/screenplay/questions/lists/index.d.ts +0 -2
  104. package/lib/screenplay/questions/lists/index.js +0 -15
  105. package/lib/screenplay/questions/lists/index.js.map +0 -1
  106. package/lib/screenplay/questions/mappings/AnswerMappingFunction.d.ts +0 -11
  107. package/lib/screenplay/questions/mappings/AnswerMappingFunction.js +0 -3
  108. package/lib/screenplay/questions/mappings/AnswerMappingFunction.js.map +0 -1
  109. package/lib/screenplay/questions/mappings/index.d.ts +0 -2
  110. package/lib/screenplay/questions/mappings/index.js +0 -15
  111. package/lib/screenplay/questions/mappings/index.js.map +0 -1
  112. package/lib/screenplay/questions/mappings/string/append.d.ts +0 -14
  113. package/lib/screenplay/questions/mappings/string/append.js +0 -25
  114. package/lib/screenplay/questions/mappings/string/append.js.map +0 -1
  115. package/lib/screenplay/questions/mappings/string/index.d.ts +0 -11
  116. package/lib/screenplay/questions/mappings/string/index.js +0 -24
  117. package/lib/screenplay/questions/mappings/string/index.js.map +0 -1
  118. package/lib/screenplay/questions/mappings/string/normalize.d.ts +0 -20
  119. package/lib/screenplay/questions/mappings/string/normalize.js +0 -30
  120. package/lib/screenplay/questions/mappings/string/normalize.js.map +0 -1
  121. package/lib/screenplay/questions/mappings/string/replace.d.ts +0 -17
  122. package/lib/screenplay/questions/mappings/string/replace.js +0 -30
  123. package/lib/screenplay/questions/mappings/string/replace.js.map +0 -1
  124. package/lib/screenplay/questions/mappings/string/slice.d.ts +0 -28
  125. package/lib/screenplay/questions/mappings/string/slice.js +0 -47
  126. package/lib/screenplay/questions/mappings/string/slice.js.map +0 -1
  127. package/lib/screenplay/questions/mappings/string/split.d.ts +0 -19
  128. package/lib/screenplay/questions/mappings/string/split.js +0 -36
  129. package/lib/screenplay/questions/mappings/string/split.js.map +0 -1
  130. package/lib/screenplay/questions/mappings/string/toLocaleLowerCase.d.ts +0 -17
  131. package/lib/screenplay/questions/mappings/string/toLocaleLowerCase.js +0 -28
  132. package/lib/screenplay/questions/mappings/string/toLocaleLowerCase.js.map +0 -1
  133. package/lib/screenplay/questions/mappings/string/toLocaleUpperCase.d.ts +0 -17
  134. package/lib/screenplay/questions/mappings/string/toLocaleUpperCase.js +0 -29
  135. package/lib/screenplay/questions/mappings/string/toLocaleUpperCase.js.map +0 -1
  136. package/lib/screenplay/questions/mappings/string/toLowerCase.d.ts +0 -10
  137. package/lib/screenplay/questions/mappings/string/toLowerCase.js +0 -19
  138. package/lib/screenplay/questions/mappings/string/toLowerCase.js.map +0 -1
  139. package/lib/screenplay/questions/mappings/string/toNumber.d.ts +0 -10
  140. package/lib/screenplay/questions/mappings/string/toNumber.js +0 -18
  141. package/lib/screenplay/questions/mappings/string/toNumber.js.map +0 -1
  142. package/lib/screenplay/questions/mappings/string/toUpperCase.d.ts +0 -10
  143. package/lib/screenplay/questions/mappings/string/toUpperCase.js +0 -19
  144. package/lib/screenplay/questions/mappings/string/toUpperCase.js.map +0 -1
  145. package/lib/screenplay/questions/mappings/string/trim.d.ts +0 -12
  146. package/lib/screenplay/questions/mappings/string/trim.js +0 -21
  147. package/lib/screenplay/questions/mappings/string/trim.js.map +0 -1
  148. package/lib/screenplay/questions/proxies/PropertyPathKey.d.ts +0 -4
  149. package/lib/screenplay/questions/proxies/PropertyPathKey.js +0 -3
  150. package/lib/screenplay/questions/proxies/PropertyPathKey.js.map +0 -1
  151. package/lib/screenplay/questions/proxies/createMetaQuestionProxy.d.ts +0 -14
  152. package/lib/screenplay/questions/proxies/createMetaQuestionProxy.js +0 -35
  153. package/lib/screenplay/questions/proxies/createMetaQuestionProxy.js.map +0 -1
  154. package/lib/screenplay/questions/proxies/createQuestionProxy.d.ts +0 -13
  155. package/lib/screenplay/questions/proxies/createQuestionProxy.js +0 -34
  156. package/lib/screenplay/questions/proxies/createQuestionProxy.js.map +0 -1
  157. package/lib/screenplay/questions/proxies/describePath.d.ts +0 -5
  158. package/lib/screenplay/questions/proxies/describePath.js +0 -19
  159. package/lib/screenplay/questions/proxies/describePath.js.map +0 -1
  160. package/lib/screenplay/questions/proxies/index.d.ts +0 -2
  161. package/lib/screenplay/questions/proxies/index.js +0 -15
  162. package/lib/screenplay/questions/proxies/index.js.map +0 -1
  163. package/lib/screenplay/questions/proxies/key.d.ts +0 -8
  164. package/lib/screenplay/questions/proxies/key.js +0 -16
  165. package/lib/screenplay/questions/proxies/key.js.map +0 -1
  166. package/lib/screenplay/tasks/Loop.d.ts +0 -198
  167. package/lib/screenplay/tasks/Loop.js +0 -222
  168. package/lib/screenplay/tasks/Loop.js.map +0 -1
  169. package/lib/screenplay/tasks/index.d.ts +0 -1
  170. package/lib/screenplay/tasks/index.js +0 -14
  171. package/lib/screenplay/tasks/index.js.map +0 -1
  172. package/lib/stage/DressingRoom.d.ts +0 -37
  173. package/lib/stage/DressingRoom.js +0 -53
  174. package/lib/stage/DressingRoom.js.map +0 -1
  175. package/lib/stage/WithStage.d.ts +0 -51
  176. package/lib/stage/WithStage.js +0 -3
  177. package/lib/stage/WithStage.js.map +0 -1
  178. package/src/io/collections/index.ts +0 -2
  179. package/src/io/collections/mappable.ts +0 -60
  180. package/src/io/collections/reducible.ts +0 -16
  181. package/src/screenplay/interactions/See.ts +0 -45
  182. package/src/screenplay/questions/Property.ts +0 -98
  183. package/src/screenplay/questions/Transform.ts +0 -51
  184. package/src/screenplay/questions/lists/ArrayListAdapter.ts +0 -186
  185. package/src/screenplay/questions/lists/ListAdapter.ts +0 -33
  186. package/src/screenplay/questions/lists/index.ts +0 -2
  187. package/src/screenplay/questions/mappings/AnswerMappingFunction.ts +0 -13
  188. package/src/screenplay/questions/mappings/index.ts +0 -2
  189. package/src/screenplay/questions/mappings/string/append.ts +0 -28
  190. package/src/screenplay/questions/mappings/string/index.ts +0 -11
  191. package/src/screenplay/questions/mappings/string/normalize.ts +0 -33
  192. package/src/screenplay/questions/mappings/string/replace.ts +0 -34
  193. package/src/screenplay/questions/mappings/string/slice.ts +0 -53
  194. package/src/screenplay/questions/mappings/string/split.ts +0 -38
  195. package/src/screenplay/questions/mappings/string/toLocaleLowerCase.ts +0 -31
  196. package/src/screenplay/questions/mappings/string/toLocaleUpperCase.ts +0 -30
  197. package/src/screenplay/questions/mappings/string/toLowerCase.ts +0 -20
  198. package/src/screenplay/questions/mappings/string/toNumber.ts +0 -19
  199. package/src/screenplay/questions/mappings/string/toUpperCase.ts +0 -20
  200. package/src/screenplay/questions/mappings/string/trim.ts +0 -22
  201. package/src/screenplay/questions/proxies/PropertyPathKey.ts +0 -4
  202. package/src/screenplay/questions/proxies/createMetaQuestionProxy.ts +0 -51
  203. package/src/screenplay/questions/proxies/createQuestionProxy.ts +0 -49
  204. package/src/screenplay/questions/proxies/describePath.ts +0 -23
  205. package/src/screenplay/questions/proxies/index.ts +0 -2
  206. package/src/screenplay/questions/proxies/key.ts +0 -14
  207. package/src/screenplay/tasks/Loop.ts +0 -240
  208. package/src/screenplay/tasks/index.ts +0 -1
  209. package/src/stage/DressingRoom.ts +0 -53
  210. package/src/stage/WithStage.ts +0 -52
package/CHANGELOG.md CHANGED
@@ -3,6 +3,482 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.0.0-rc.11](https://github.com/serenity-js/serenity-js/compare/v2.33.1...v3.0.0-rc.11) (2022-02-13)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **core:** updated dependency on error-stack-parser ([ea50285](https://github.com/serenity-js/serenity-js/commit/ea502855da40c2f95c893c75061ef6dcf12f669d))
12
+
13
+
14
+
15
+ # [3.0.0-rc.10](https://github.com/serenity-js/serenity-js/compare/v2.33.0...v3.0.0-rc.10) (2022-02-03)
16
+
17
+
18
+
19
+ # [3.0.0-rc.9](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.8...v3.0.0-rc.9) (2022-02-01)
20
+
21
+
22
+ ### Features
23
+
24
+ * **web:** isVisible() works with Web elements in Shadow DOM ([cf84fb0](https://github.com/serenity-js/serenity-js/commit/cf84fb072a6b813338b68bb1dec3932ea8709e3e)), closes [#1085](https://github.com/serenity-js/serenity-js/issues/1085)
25
+
26
+
27
+
28
+ # [3.0.0-rc.8](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.7...v3.0.0-rc.8) (2022-01-28)
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * **core:** ensure Question.about doesn't expose internal interfaces ([4bfb6bc](https://github.com/serenity-js/serenity-js/commit/4bfb6bca6af81d23ced551f63df5bc9f35d581df)), closes [#1106](https://github.com/serenity-js/serenity-js/issues/1106)
34
+
35
+
36
+
37
+ # [3.0.0-rc.7](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.6...v3.0.0-rc.7) (2022-01-28)
38
+
39
+
40
+ ### Bug Fixes
41
+
42
+ * **core:** removed deprecated interface DressingRoom; please use Cast instead ([d68b44b](https://github.com/serenity-js/serenity-js/commit/d68b44b545f50f6533523ab07008f9f89ac34433))
43
+ * **core:** removed deprecated interface WithStage ([45d1c2b](https://github.com/serenity-js/serenity-js/commit/45d1c2b3e0ff1946ccff97d148d0776f2fa60065))
44
+ * **core:** removed deprecated task to See.if ([dd5e2f5](https://github.com/serenity-js/serenity-js/commit/dd5e2f5c7e61444d40899f70d413f38bc9f6691a))
45
+
46
+
47
+ ### Features
48
+
49
+ * **assertions:** isPresent works with any Optional ([cea75dc](https://github.com/serenity-js/serenity-js/commit/cea75dc1c728e45e06a87aaf9c1573a237334285)), closes [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
50
+ * **core:** `f` and `d` question description formatters ([c9f3fad](https://github.com/serenity-js/serenity-js/commit/c9f3fadd86ec0196f2cdbf76d9628bbef0a3fcba))
51
+ * **core:** replaced `Adapter` with `QuestionAdapter` and introduced `Optional` ([8d84ad3](https://github.com/serenity-js/serenity-js/commit/8d84ad3863e3c726533d0f21934fb1e2fa8b3022)), closes [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
52
+ * **core:** support for Optional chaining, expectation isPresent, refactored Expectations ([1841ee5](https://github.com/serenity-js/serenity-js/commit/1841ee5fc48cfa403ddc53358f75764d9a010c21)), closes [#1099](https://github.com/serenity-js/serenity-js/issues/1099) [#1099](https://github.com/serenity-js/serenity-js/issues/1099) [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
53
+
54
+
55
+
56
+ # [3.0.0-rc.6](https://github.com/serenity-js/serenity-js/compare/v2.32.7...v3.0.0-rc.6) (2022-01-10)
57
+
58
+
59
+
60
+ # [3.0.0-rc.5](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.4...v3.0.0-rc.5) (2022-01-07)
61
+
62
+
63
+ ### Bug Fixes
64
+
65
+ * **core:** screenplay Adapters will now correctly proxy calls to function-specific object keys ([ad6f1e6](https://github.com/serenity-js/serenity-js/commit/ad6f1e655ca77d6efde4461854e54c4113ca8fdd))
66
+
67
+
68
+
69
+ # [3.0.0-rc.4](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.3...v3.0.0-rc.4) (2021-12-30)
70
+
71
+
72
+ ### Bug Fixes
73
+
74
+ * **core:** you can now retrieve the .length property of an Array wrapped in an Adapter<Array> ([c36e210](https://github.com/serenity-js/serenity-js/commit/c36e210c024052b96ba47e9663c7098e269c5688))
75
+
76
+
77
+
78
+ # [3.0.0-rc.3](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.2...v3.0.0-rc.3) (2021-12-29)
79
+
80
+
81
+ ### Bug Fixes
82
+
83
+ * **core:** refactored Mappable so that it's easier to implement filters ([176e0cd](https://github.com/serenity-js/serenity-js/commit/176e0cd0303d63271477b2b7a8e7b0572dda99a0)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
84
+ * **core:** removed interface Reducible since it's not used any more ([1e9f23b](https://github.com/serenity-js/serenity-js/commit/1e9f23b227e3c4509dd52d6885cde5d3ecd1d102))
85
+ * **deps:** updated tiny-types to 1.17.0 ([3187051](https://github.com/serenity-js/serenity-js/commit/3187051594158b4b450c82e851e417fd2ed21652))
86
+ * **web:** corrected synchronisation in Web questions and interactions ([c3a0ad1](https://github.com/serenity-js/serenity-js/commit/c3a0ad16de311e71d7e82e4f463baa0ca6b18863))
87
+
88
+
89
+ ### Features
90
+
91
+ * **core:** forEach for List and PageElements ([4592fb7](https://github.com/serenity-js/serenity-js/commit/4592fb7e700bad17fd44d91bd9db169839802d01)), closes [#823](https://github.com/serenity-js/serenity-js/issues/823)
92
+ * **core:** List supports custom collectors ([cd3f2bc](https://github.com/serenity-js/serenity-js/commit/cd3f2bc1b536c8e56714aecd669bfed7ab078e0a))
93
+ * **core:** new implementation of List.where filters ([45b3c80](https://github.com/serenity-js/serenity-js/commit/45b3c8080ca467ac6362e5217e7899ca36a04cdc)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
94
+ * **core:** support for Screenplay-style collection filters and mapping (List.where & .eachMappedTo) ([3d3c02e](https://github.com/serenity-js/serenity-js/commit/3d3c02ebe0ec5c6865f91f1991fd59ef0190a16c)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
95
+ * **web:** re-introduced PageElements.where DSL and universal By selectors ([39fe0a1](https://github.com/serenity-js/serenity-js/commit/39fe0a10edf7f652e93911159e4a4689c36d6876)), closes [#1081](https://github.com/serenity-js/serenity-js/issues/1081)
96
+
97
+
98
+
99
+ # [3.0.0-rc.1](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.0...v3.0.0-rc.1) (2021-12-09)
100
+
101
+
102
+
103
+ # [3.0.0-rc.0](https://github.com/serenity-js/serenity-js/compare/v2.32.5...v3.0.0-rc.0) (2021-12-08)
104
+
105
+
106
+ ### Bug Fixes
107
+
108
+ * **core:** `formatted` can be configured to produce single- or multi-line descriptions ([21145a3](https://github.com/serenity-js/serenity-js/commit/21145a3dda17e87ea7bd950da4526b90f37a1edc))
109
+ * **core:** `inspected` produces a better description of functions used as parameters ([15535c6](https://github.com/serenity-js/serenity-js/commit/15535c675469651b835c0b358649a590f2c15b5d))
110
+ * **core:** 3.0 RC ([469d54e](https://github.com/serenity-js/serenity-js/commit/469d54e4f81ef430566b93852e3174826f8ef672)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
111
+ * **core:** answerProxy renamed to ProxyAnswer to better reflect its purpose ([a98fe41](https://github.com/serenity-js/serenity-js/commit/a98fe41378bc8475f027946e0f01a30f4789d57a))
112
+ * **core:** corrected type defs of Question.as ([681ce22](https://github.com/serenity-js/serenity-js/commit/681ce22259bf75161df7ce2454f4b6d73ea87259))
113
+ * **core:** exported createProxyAnswer to make it easier to use ([5471989](https://github.com/serenity-js/serenity-js/commit/547198985025d0ede2ab47ea89d8944960fb980d))
114
+ * **core:** removed Loop as it will be replaced ([0b63d27](https://github.com/serenity-js/serenity-js/commit/0b63d27745c905001adf3c219dd0e3cf44756320))
115
+ * **core:** removed Property as it will be replaced by new Question ([fd7fa10](https://github.com/serenity-js/serenity-js/commit/fd7fa10dfbaa0c0cba059c5f18920609c4bac014))
116
+ * **core:** removed Transform and mapping functions as they'll be replaced with new Question ([506eaea](https://github.com/serenity-js/serenity-js/commit/506eaeaf2df22cfde5d7ca6a8f413fc053556c2b))
117
+ * **core:** renamed "Model" type to "Adapter" to better reflect its purpose ([b4ea7a1](https://github.com/serenity-js/serenity-js/commit/b4ea7a100fac2c896990bf15cbc906de641196b8)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
118
+ * **cucumber:** support for recognising non-Serenity AssertionErrors in older version of Cucumber ([31e9e99](https://github.com/serenity-js/serenity-js/commit/31e9e9919c2fd1e87b3f4405d9b2a6ae0164e893))
119
+ * **web:** wordsmithing of interface names ([5a1e76a](https://github.com/serenity-js/serenity-js/commit/5a1e76a9c162370e17238fcccc9f08e109d543c3))
120
+
121
+
122
+ ### Features
123
+
124
+ * **core:** question.about creates a proxy around the answer to simplify the API ([25e0841](https://github.com/serenity-js/serenity-js/commit/25e084116ad28a02b55fbd8814b6ffa0375ec433))
125
+ * **core:** question.about produces "props" that proxy the methods of the underlying model ([f771872](https://github.com/serenity-js/serenity-js/commit/f771872c56b487e404002c3800fc8f3baaed804f))
126
+ * **web:** Page.url() and Page.title() replace Website.url() and Website.title() ([49fe009](https://github.com/serenity-js/serenity-js/commit/49fe0094422ab53ec67d4ba303f80c33e382eebd)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
127
+ * **web:** removed Target in favour of PageElement ([69496c4](https://github.com/serenity-js/serenity-js/commit/69496c47c4a1ec7b92e7ab6c83da1559e926f28e)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
128
+ * **web:** support for working with cookies ([39cde6d](https://github.com/serenity-js/serenity-js/commit/39cde6de7a36d27a8b1c596493efbec94900af6b)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
129
+
130
+
131
+ ### BREAKING CHANGES
132
+
133
+ * **core:** Introduced @serenity-js/web - a shared library for Serenity/JS Web integration
134
+ modules such as @serenity-js/protractor and @serenity-js/webdriverio. Dropped support for Node 12.
135
+
136
+
137
+
138
+
139
+
140
+ # [3.0.0-rc.10](https://github.com/serenity-js/serenity-js/compare/v2.33.0...v3.0.0-rc.10) (2022-02-03)
141
+
142
+
143
+
144
+ # [3.0.0-rc.9](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.8...v3.0.0-rc.9) (2022-02-01)
145
+
146
+
147
+ ### Features
148
+
149
+ * **web:** isVisible() works with Web elements in Shadow DOM ([cf84fb0](https://github.com/serenity-js/serenity-js/commit/cf84fb072a6b813338b68bb1dec3932ea8709e3e)), closes [#1085](https://github.com/serenity-js/serenity-js/issues/1085)
150
+
151
+
152
+
153
+ # [3.0.0-rc.8](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.7...v3.0.0-rc.8) (2022-01-28)
154
+
155
+
156
+ ### Bug Fixes
157
+
158
+ * **core:** ensure Question.about doesn't expose internal interfaces ([4bfb6bc](https://github.com/serenity-js/serenity-js/commit/4bfb6bca6af81d23ced551f63df5bc9f35d581df)), closes [#1106](https://github.com/serenity-js/serenity-js/issues/1106)
159
+
160
+
161
+
162
+ # [3.0.0-rc.7](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.6...v3.0.0-rc.7) (2022-01-28)
163
+
164
+
165
+ ### Bug Fixes
166
+
167
+ * **core:** removed deprecated interface DressingRoom; please use Cast instead ([d68b44b](https://github.com/serenity-js/serenity-js/commit/d68b44b545f50f6533523ab07008f9f89ac34433))
168
+ * **core:** removed deprecated interface WithStage ([45d1c2b](https://github.com/serenity-js/serenity-js/commit/45d1c2b3e0ff1946ccff97d148d0776f2fa60065))
169
+ * **core:** removed deprecated task to See.if ([dd5e2f5](https://github.com/serenity-js/serenity-js/commit/dd5e2f5c7e61444d40899f70d413f38bc9f6691a))
170
+
171
+
172
+ ### Features
173
+
174
+ * **assertions:** isPresent works with any Optional ([cea75dc](https://github.com/serenity-js/serenity-js/commit/cea75dc1c728e45e06a87aaf9c1573a237334285)), closes [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
175
+ * **core:** `f` and `d` question description formatters ([c9f3fad](https://github.com/serenity-js/serenity-js/commit/c9f3fadd86ec0196f2cdbf76d9628bbef0a3fcba))
176
+ * **core:** replaced `Adapter` with `QuestionAdapter` and introduced `Optional` ([8d84ad3](https://github.com/serenity-js/serenity-js/commit/8d84ad3863e3c726533d0f21934fb1e2fa8b3022)), closes [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
177
+ * **core:** support for Optional chaining, expectation isPresent, refactored Expectations ([1841ee5](https://github.com/serenity-js/serenity-js/commit/1841ee5fc48cfa403ddc53358f75764d9a010c21)), closes [#1099](https://github.com/serenity-js/serenity-js/issues/1099) [#1099](https://github.com/serenity-js/serenity-js/issues/1099) [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
178
+
179
+
180
+
181
+ # [3.0.0-rc.6](https://github.com/serenity-js/serenity-js/compare/v2.32.7...v3.0.0-rc.6) (2022-01-10)
182
+
183
+
184
+
185
+ # [3.0.0-rc.5](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.4...v3.0.0-rc.5) (2022-01-07)
186
+
187
+
188
+ ### Bug Fixes
189
+
190
+ * **core:** screenplay Adapters will now correctly proxy calls to function-specific object keys ([ad6f1e6](https://github.com/serenity-js/serenity-js/commit/ad6f1e655ca77d6efde4461854e54c4113ca8fdd))
191
+
192
+
193
+
194
+ # [3.0.0-rc.4](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.3...v3.0.0-rc.4) (2021-12-30)
195
+
196
+
197
+ ### Bug Fixes
198
+
199
+ * **core:** you can now retrieve the .length property of an Array wrapped in an Adapter<Array> ([c36e210](https://github.com/serenity-js/serenity-js/commit/c36e210c024052b96ba47e9663c7098e269c5688))
200
+
201
+
202
+
203
+ # [3.0.0-rc.3](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.2...v3.0.0-rc.3) (2021-12-29)
204
+
205
+
206
+ ### Bug Fixes
207
+
208
+ * **core:** refactored Mappable so that it's easier to implement filters ([176e0cd](https://github.com/serenity-js/serenity-js/commit/176e0cd0303d63271477b2b7a8e7b0572dda99a0)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
209
+ * **core:** removed interface Reducible since it's not used any more ([1e9f23b](https://github.com/serenity-js/serenity-js/commit/1e9f23b227e3c4509dd52d6885cde5d3ecd1d102))
210
+ * **deps:** updated tiny-types to 1.17.0 ([3187051](https://github.com/serenity-js/serenity-js/commit/3187051594158b4b450c82e851e417fd2ed21652))
211
+ * **web:** corrected synchronisation in Web questions and interactions ([c3a0ad1](https://github.com/serenity-js/serenity-js/commit/c3a0ad16de311e71d7e82e4f463baa0ca6b18863))
212
+
213
+
214
+ ### Features
215
+
216
+ * **core:** forEach for List and PageElements ([4592fb7](https://github.com/serenity-js/serenity-js/commit/4592fb7e700bad17fd44d91bd9db169839802d01)), closes [#823](https://github.com/serenity-js/serenity-js/issues/823)
217
+ * **core:** List supports custom collectors ([cd3f2bc](https://github.com/serenity-js/serenity-js/commit/cd3f2bc1b536c8e56714aecd669bfed7ab078e0a))
218
+ * **core:** new implementation of List.where filters ([45b3c80](https://github.com/serenity-js/serenity-js/commit/45b3c8080ca467ac6362e5217e7899ca36a04cdc)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
219
+ * **core:** support for Screenplay-style collection filters and mapping (List.where & .eachMappedTo) ([3d3c02e](https://github.com/serenity-js/serenity-js/commit/3d3c02ebe0ec5c6865f91f1991fd59ef0190a16c)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
220
+ * **web:** re-introduced PageElements.where DSL and universal By selectors ([39fe0a1](https://github.com/serenity-js/serenity-js/commit/39fe0a10edf7f652e93911159e4a4689c36d6876)), closes [#1081](https://github.com/serenity-js/serenity-js/issues/1081)
221
+
222
+
223
+
224
+ # [3.0.0-rc.1](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.0...v3.0.0-rc.1) (2021-12-09)
225
+
226
+
227
+
228
+ # [3.0.0-rc.0](https://github.com/serenity-js/serenity-js/compare/v2.32.5...v3.0.0-rc.0) (2021-12-08)
229
+
230
+
231
+ ### Bug Fixes
232
+
233
+ * **core:** `formatted` can be configured to produce single- or multi-line descriptions ([21145a3](https://github.com/serenity-js/serenity-js/commit/21145a3dda17e87ea7bd950da4526b90f37a1edc))
234
+ * **core:** `inspected` produces a better description of functions used as parameters ([15535c6](https://github.com/serenity-js/serenity-js/commit/15535c675469651b835c0b358649a590f2c15b5d))
235
+ * **core:** 3.0 RC ([469d54e](https://github.com/serenity-js/serenity-js/commit/469d54e4f81ef430566b93852e3174826f8ef672)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
236
+ * **core:** answerProxy renamed to ProxyAnswer to better reflect its purpose ([a98fe41](https://github.com/serenity-js/serenity-js/commit/a98fe41378bc8475f027946e0f01a30f4789d57a))
237
+ * **core:** corrected type defs of Question.as ([681ce22](https://github.com/serenity-js/serenity-js/commit/681ce22259bf75161df7ce2454f4b6d73ea87259))
238
+ * **core:** exported createProxyAnswer to make it easier to use ([5471989](https://github.com/serenity-js/serenity-js/commit/547198985025d0ede2ab47ea89d8944960fb980d))
239
+ * **core:** removed Loop as it will be replaced ([0b63d27](https://github.com/serenity-js/serenity-js/commit/0b63d27745c905001adf3c219dd0e3cf44756320))
240
+ * **core:** removed Property as it will be replaced by new Question ([fd7fa10](https://github.com/serenity-js/serenity-js/commit/fd7fa10dfbaa0c0cba059c5f18920609c4bac014))
241
+ * **core:** removed Transform and mapping functions as they'll be replaced with new Question ([506eaea](https://github.com/serenity-js/serenity-js/commit/506eaeaf2df22cfde5d7ca6a8f413fc053556c2b))
242
+ * **core:** renamed "Model" type to "Adapter" to better reflect its purpose ([b4ea7a1](https://github.com/serenity-js/serenity-js/commit/b4ea7a100fac2c896990bf15cbc906de641196b8)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
243
+ * **cucumber:** support for recognising non-Serenity AssertionErrors in older version of Cucumber ([31e9e99](https://github.com/serenity-js/serenity-js/commit/31e9e9919c2fd1e87b3f4405d9b2a6ae0164e893))
244
+ * **web:** wordsmithing of interface names ([5a1e76a](https://github.com/serenity-js/serenity-js/commit/5a1e76a9c162370e17238fcccc9f08e109d543c3))
245
+
246
+
247
+ ### Features
248
+
249
+ * **core:** question.about creates a proxy around the answer to simplify the API ([25e0841](https://github.com/serenity-js/serenity-js/commit/25e084116ad28a02b55fbd8814b6ffa0375ec433))
250
+ * **core:** question.about produces "props" that proxy the methods of the underlying model ([f771872](https://github.com/serenity-js/serenity-js/commit/f771872c56b487e404002c3800fc8f3baaed804f))
251
+ * **web:** Page.url() and Page.title() replace Website.url() and Website.title() ([49fe009](https://github.com/serenity-js/serenity-js/commit/49fe0094422ab53ec67d4ba303f80c33e382eebd)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
252
+ * **web:** removed Target in favour of PageElement ([69496c4](https://github.com/serenity-js/serenity-js/commit/69496c47c4a1ec7b92e7ab6c83da1559e926f28e)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
253
+ * **web:** support for working with cookies ([39cde6d](https://github.com/serenity-js/serenity-js/commit/39cde6de7a36d27a8b1c596493efbec94900af6b)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
254
+
255
+
256
+ ### BREAKING CHANGES
257
+
258
+ * **core:** Introduced @serenity-js/web - a shared library for Serenity/JS Web integration
259
+ modules such as @serenity-js/protractor and @serenity-js/webdriverio. Dropped support for Node 12.
260
+
261
+
262
+
263
+
264
+
265
+ # [3.0.0-rc.9](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.8...v3.0.0-rc.9) (2022-02-01)
266
+
267
+
268
+ ### Features
269
+
270
+ * **web:** isVisible() works with Web elements in Shadow DOM ([cf84fb0](https://github.com/serenity-js/serenity-js/commit/cf84fb072a6b813338b68bb1dec3932ea8709e3e)), closes [#1085](https://github.com/serenity-js/serenity-js/issues/1085)
271
+
272
+
273
+
274
+
275
+
276
+ # [3.0.0-rc.8](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.7...v3.0.0-rc.8) (2022-01-28)
277
+
278
+
279
+ ### Bug Fixes
280
+
281
+ * **core:** ensure Question.about doesn't expose internal interfaces ([4bfb6bc](https://github.com/serenity-js/serenity-js/commit/4bfb6bca6af81d23ced551f63df5bc9f35d581df)), closes [#1106](https://github.com/serenity-js/serenity-js/issues/1106)
282
+
283
+
284
+
285
+
286
+
287
+ # [3.0.0-rc.7](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.6...v3.0.0-rc.7) (2022-01-28)
288
+
289
+
290
+ ### Bug Fixes
291
+
292
+ * **core:** removed deprecated interface DressingRoom; please use Cast instead ([d68b44b](https://github.com/serenity-js/serenity-js/commit/d68b44b545f50f6533523ab07008f9f89ac34433))
293
+ * **core:** removed deprecated interface WithStage ([45d1c2b](https://github.com/serenity-js/serenity-js/commit/45d1c2b3e0ff1946ccff97d148d0776f2fa60065))
294
+ * **core:** removed deprecated task to See.if ([dd5e2f5](https://github.com/serenity-js/serenity-js/commit/dd5e2f5c7e61444d40899f70d413f38bc9f6691a))
295
+
296
+
297
+ ### Features
298
+
299
+ * **assertions:** isPresent works with any Optional ([cea75dc](https://github.com/serenity-js/serenity-js/commit/cea75dc1c728e45e06a87aaf9c1573a237334285)), closes [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
300
+ * **core:** `f` and `d` question description formatters ([c9f3fad](https://github.com/serenity-js/serenity-js/commit/c9f3fadd86ec0196f2cdbf76d9628bbef0a3fcba))
301
+ * **core:** replaced `Adapter` with `QuestionAdapter` and introduced `Optional` ([8d84ad3](https://github.com/serenity-js/serenity-js/commit/8d84ad3863e3c726533d0f21934fb1e2fa8b3022)), closes [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
302
+ * **core:** support for Optional chaining, expectation isPresent, refactored Expectations ([1841ee5](https://github.com/serenity-js/serenity-js/commit/1841ee5fc48cfa403ddc53358f75764d9a010c21)), closes [#1099](https://github.com/serenity-js/serenity-js/issues/1099) [#1099](https://github.com/serenity-js/serenity-js/issues/1099) [#1103](https://github.com/serenity-js/serenity-js/issues/1103)
303
+
304
+
305
+
306
+
307
+
308
+ # [3.0.0-rc.6](https://github.com/serenity-js/serenity-js/compare/v2.32.7...v3.0.0-rc.6) (2022-01-10)
309
+
310
+
311
+
312
+ # [3.0.0-rc.5](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.4...v3.0.0-rc.5) (2022-01-07)
313
+
314
+
315
+ ### Bug Fixes
316
+
317
+ * **core:** screenplay Adapters will now correctly proxy calls to function-specific object keys ([ad6f1e6](https://github.com/serenity-js/serenity-js/commit/ad6f1e655ca77d6efde4461854e54c4113ca8fdd))
318
+
319
+
320
+
321
+ # [3.0.0-rc.4](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.3...v3.0.0-rc.4) (2021-12-30)
322
+
323
+
324
+ ### Bug Fixes
325
+
326
+ * **core:** you can now retrieve the .length property of an Array wrapped in an Adapter<Array> ([c36e210](https://github.com/serenity-js/serenity-js/commit/c36e210c024052b96ba47e9663c7098e269c5688))
327
+
328
+
329
+
330
+ # [3.0.0-rc.3](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.2...v3.0.0-rc.3) (2021-12-29)
331
+
332
+
333
+ ### Bug Fixes
334
+
335
+ * **core:** refactored Mappable so that it's easier to implement filters ([176e0cd](https://github.com/serenity-js/serenity-js/commit/176e0cd0303d63271477b2b7a8e7b0572dda99a0)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
336
+ * **core:** removed interface Reducible since it's not used any more ([1e9f23b](https://github.com/serenity-js/serenity-js/commit/1e9f23b227e3c4509dd52d6885cde5d3ecd1d102))
337
+ * **deps:** updated tiny-types to 1.17.0 ([3187051](https://github.com/serenity-js/serenity-js/commit/3187051594158b4b450c82e851e417fd2ed21652))
338
+ * **web:** corrected synchronisation in Web questions and interactions ([c3a0ad1](https://github.com/serenity-js/serenity-js/commit/c3a0ad16de311e71d7e82e4f463baa0ca6b18863))
339
+
340
+
341
+ ### Features
342
+
343
+ * **core:** forEach for List and PageElements ([4592fb7](https://github.com/serenity-js/serenity-js/commit/4592fb7e700bad17fd44d91bd9db169839802d01)), closes [#823](https://github.com/serenity-js/serenity-js/issues/823)
344
+ * **core:** List supports custom collectors ([cd3f2bc](https://github.com/serenity-js/serenity-js/commit/cd3f2bc1b536c8e56714aecd669bfed7ab078e0a))
345
+ * **core:** new implementation of List.where filters ([45b3c80](https://github.com/serenity-js/serenity-js/commit/45b3c8080ca467ac6362e5217e7899ca36a04cdc)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
346
+ * **core:** support for Screenplay-style collection filters and mapping (List.where & .eachMappedTo) ([3d3c02e](https://github.com/serenity-js/serenity-js/commit/3d3c02ebe0ec5c6865f91f1991fd59ef0190a16c)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
347
+ * **web:** re-introduced PageElements.where DSL and universal By selectors ([39fe0a1](https://github.com/serenity-js/serenity-js/commit/39fe0a10edf7f652e93911159e4a4689c36d6876)), closes [#1081](https://github.com/serenity-js/serenity-js/issues/1081)
348
+
349
+
350
+
351
+ # [3.0.0-rc.1](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.0...v3.0.0-rc.1) (2021-12-09)
352
+
353
+
354
+
355
+ # [3.0.0-rc.0](https://github.com/serenity-js/serenity-js/compare/v2.32.5...v3.0.0-rc.0) (2021-12-08)
356
+
357
+
358
+ ### Bug Fixes
359
+
360
+ * **core:** `formatted` can be configured to produce single- or multi-line descriptions ([21145a3](https://github.com/serenity-js/serenity-js/commit/21145a3dda17e87ea7bd950da4526b90f37a1edc))
361
+ * **core:** `inspected` produces a better description of functions used as parameters ([15535c6](https://github.com/serenity-js/serenity-js/commit/15535c675469651b835c0b358649a590f2c15b5d))
362
+ * **core:** 3.0 RC ([469d54e](https://github.com/serenity-js/serenity-js/commit/469d54e4f81ef430566b93852e3174826f8ef672)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
363
+ * **core:** answerProxy renamed to ProxyAnswer to better reflect its purpose ([a98fe41](https://github.com/serenity-js/serenity-js/commit/a98fe41378bc8475f027946e0f01a30f4789d57a))
364
+ * **core:** corrected type defs of Question.as ([681ce22](https://github.com/serenity-js/serenity-js/commit/681ce22259bf75161df7ce2454f4b6d73ea87259))
365
+ * **core:** exported createProxyAnswer to make it easier to use ([5471989](https://github.com/serenity-js/serenity-js/commit/547198985025d0ede2ab47ea89d8944960fb980d))
366
+ * **core:** removed Loop as it will be replaced ([0b63d27](https://github.com/serenity-js/serenity-js/commit/0b63d27745c905001adf3c219dd0e3cf44756320))
367
+ * **core:** removed Property as it will be replaced by new Question ([fd7fa10](https://github.com/serenity-js/serenity-js/commit/fd7fa10dfbaa0c0cba059c5f18920609c4bac014))
368
+ * **core:** removed Transform and mapping functions as they'll be replaced with new Question ([506eaea](https://github.com/serenity-js/serenity-js/commit/506eaeaf2df22cfde5d7ca6a8f413fc053556c2b))
369
+ * **core:** renamed "Model" type to "Adapter" to better reflect its purpose ([b4ea7a1](https://github.com/serenity-js/serenity-js/commit/b4ea7a100fac2c896990bf15cbc906de641196b8)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
370
+ * **cucumber:** support for recognising non-Serenity AssertionErrors in older version of Cucumber ([31e9e99](https://github.com/serenity-js/serenity-js/commit/31e9e9919c2fd1e87b3f4405d9b2a6ae0164e893))
371
+ * **web:** wordsmithing of interface names ([5a1e76a](https://github.com/serenity-js/serenity-js/commit/5a1e76a9c162370e17238fcccc9f08e109d543c3))
372
+
373
+
374
+ ### Features
375
+
376
+ * **core:** question.about creates a proxy around the answer to simplify the API ([25e0841](https://github.com/serenity-js/serenity-js/commit/25e084116ad28a02b55fbd8814b6ffa0375ec433))
377
+ * **core:** question.about produces "props" that proxy the methods of the underlying model ([f771872](https://github.com/serenity-js/serenity-js/commit/f771872c56b487e404002c3800fc8f3baaed804f))
378
+ * **web:** Page.url() and Page.title() replace Website.url() and Website.title() ([49fe009](https://github.com/serenity-js/serenity-js/commit/49fe0094422ab53ec67d4ba303f80c33e382eebd)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
379
+ * **web:** removed Target in favour of PageElement ([69496c4](https://github.com/serenity-js/serenity-js/commit/69496c47c4a1ec7b92e7ab6c83da1559e926f28e)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
380
+ * **web:** support for working with cookies ([39cde6d](https://github.com/serenity-js/serenity-js/commit/39cde6de7a36d27a8b1c596493efbec94900af6b)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
381
+
382
+
383
+ ### BREAKING CHANGES
384
+
385
+ * **core:** Introduced @serenity-js/web - a shared library for Serenity/JS Web integration
386
+ modules such as @serenity-js/protractor and @serenity-js/webdriverio. Dropped support for Node 12.
387
+
388
+
389
+
390
+
391
+
392
+ # [3.0.0-rc.5](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.4...v3.0.0-rc.5) (2022-01-07)
393
+
394
+
395
+ ### Bug Fixes
396
+
397
+ * **core:** screenplay Adapters will now correctly proxy calls to function-specific object keys ([ad6f1e6](https://github.com/serenity-js/serenity-js/commit/ad6f1e655ca77d6efde4461854e54c4113ca8fdd))
398
+
399
+
400
+
401
+
402
+
403
+ # [3.0.0-rc.4](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.3...v3.0.0-rc.4) (2021-12-30)
404
+
405
+
406
+ ### Bug Fixes
407
+
408
+ * **core:** you can now retrieve the .length property of an Array wrapped in an Adapter<Array> ([c36e210](https://github.com/serenity-js/serenity-js/commit/c36e210c024052b96ba47e9663c7098e269c5688))
409
+
410
+
411
+
412
+
413
+
414
+ # [3.0.0-rc.3](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.2...v3.0.0-rc.3) (2021-12-29)
415
+
416
+
417
+ ### Bug Fixes
418
+
419
+ * **core:** refactored Mappable so that it's easier to implement filters ([176e0cd](https://github.com/serenity-js/serenity-js/commit/176e0cd0303d63271477b2b7a8e7b0572dda99a0)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
420
+ * **core:** removed interface Reducible since it's not used any more ([1e9f23b](https://github.com/serenity-js/serenity-js/commit/1e9f23b227e3c4509dd52d6885cde5d3ecd1d102))
421
+ * **deps:** updated tiny-types to 1.17.0 ([3187051](https://github.com/serenity-js/serenity-js/commit/3187051594158b4b450c82e851e417fd2ed21652))
422
+ * **web:** corrected synchronisation in Web questions and interactions ([c3a0ad1](https://github.com/serenity-js/serenity-js/commit/c3a0ad16de311e71d7e82e4f463baa0ca6b18863))
423
+
424
+
425
+ ### Features
426
+
427
+ * **core:** forEach for List and PageElements ([4592fb7](https://github.com/serenity-js/serenity-js/commit/4592fb7e700bad17fd44d91bd9db169839802d01)), closes [#823](https://github.com/serenity-js/serenity-js/issues/823)
428
+ * **core:** List supports custom collectors ([cd3f2bc](https://github.com/serenity-js/serenity-js/commit/cd3f2bc1b536c8e56714aecd669bfed7ab078e0a))
429
+ * **core:** new implementation of List.where filters ([45b3c80](https://github.com/serenity-js/serenity-js/commit/45b3c8080ca467ac6362e5217e7899ca36a04cdc)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
430
+ * **core:** support for Screenplay-style collection filters and mapping (List.where & .eachMappedTo) ([3d3c02e](https://github.com/serenity-js/serenity-js/commit/3d3c02ebe0ec5c6865f91f1991fd59ef0190a16c)), closes [#1074](https://github.com/serenity-js/serenity-js/issues/1074)
431
+ * **web:** re-introduced PageElements.where DSL and universal By selectors ([39fe0a1](https://github.com/serenity-js/serenity-js/commit/39fe0a10edf7f652e93911159e4a4689c36d6876)), closes [#1081](https://github.com/serenity-js/serenity-js/issues/1081)
432
+
433
+
434
+
435
+
436
+
437
+ # [3.0.0-rc.1](https://github.com/serenity-js/serenity-js/compare/v3.0.0-rc.0...v3.0.0-rc.1) (2021-12-09)
438
+
439
+ **Note:** Version bump only for package @serenity-js/core
440
+
441
+
442
+
443
+
444
+
445
+ # [3.0.0-rc.0](https://github.com/serenity-js/serenity-js/compare/v2.32.5...v3.0.0-rc.0) (2021-12-08)
446
+
447
+
448
+ ### Bug Fixes
449
+
450
+ * **core:** `formatted` can be configured to produce single- or multi-line descriptions ([21145a3](https://github.com/serenity-js/serenity-js/commit/21145a3dda17e87ea7bd950da4526b90f37a1edc))
451
+ * **core:** `inspected` produces a better description of functions used as parameters ([15535c6](https://github.com/serenity-js/serenity-js/commit/15535c675469651b835c0b358649a590f2c15b5d))
452
+ * **core:** 3.0 RC ([469d54e](https://github.com/serenity-js/serenity-js/commit/469d54e4f81ef430566b93852e3174826f8ef672)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
453
+ * **core:** answerProxy renamed to ProxyAnswer to better reflect its purpose ([a98fe41](https://github.com/serenity-js/serenity-js/commit/a98fe41378bc8475f027946e0f01a30f4789d57a))
454
+ * **core:** corrected type defs of Question.as ([681ce22](https://github.com/serenity-js/serenity-js/commit/681ce22259bf75161df7ce2454f4b6d73ea87259))
455
+ * **core:** exported createProxyAnswer to make it easier to use ([5471989](https://github.com/serenity-js/serenity-js/commit/547198985025d0ede2ab47ea89d8944960fb980d))
456
+ * **core:** removed Loop as it will be replaced ([0b63d27](https://github.com/serenity-js/serenity-js/commit/0b63d27745c905001adf3c219dd0e3cf44756320))
457
+ * **core:** removed Property as it will be replaced by new Question ([fd7fa10](https://github.com/serenity-js/serenity-js/commit/fd7fa10dfbaa0c0cba059c5f18920609c4bac014))
458
+ * **core:** removed Transform and mapping functions as they'll be replaced with new Question ([506eaea](https://github.com/serenity-js/serenity-js/commit/506eaeaf2df22cfde5d7ca6a8f413fc053556c2b))
459
+ * **core:** renamed "Model" type to "Adapter" to better reflect its purpose ([b4ea7a1](https://github.com/serenity-js/serenity-js/commit/b4ea7a100fac2c896990bf15cbc906de641196b8)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
460
+ * **cucumber:** support for recognising non-Serenity AssertionErrors in older version of Cucumber ([31e9e99](https://github.com/serenity-js/serenity-js/commit/31e9e9919c2fd1e87b3f4405d9b2a6ae0164e893))
461
+ * **web:** wordsmithing of interface names ([5a1e76a](https://github.com/serenity-js/serenity-js/commit/5a1e76a9c162370e17238fcccc9f08e109d543c3))
462
+
463
+
464
+ ### Features
465
+
466
+ * **core:** question.about creates a proxy around the answer to simplify the API ([25e0841](https://github.com/serenity-js/serenity-js/commit/25e084116ad28a02b55fbd8814b6ffa0375ec433))
467
+ * **core:** question.about produces "props" that proxy the methods of the underlying model ([f771872](https://github.com/serenity-js/serenity-js/commit/f771872c56b487e404002c3800fc8f3baaed804f))
468
+ * **web:** Page.url() and Page.title() replace Website.url() and Website.title() ([49fe009](https://github.com/serenity-js/serenity-js/commit/49fe0094422ab53ec67d4ba303f80c33e382eebd)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
469
+ * **web:** removed Target in favour of PageElement ([69496c4](https://github.com/serenity-js/serenity-js/commit/69496c47c4a1ec7b92e7ab6c83da1559e926f28e)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
470
+ * **web:** support for working with cookies ([39cde6d](https://github.com/serenity-js/serenity-js/commit/39cde6de7a36d27a8b1c596493efbec94900af6b)), closes [#805](https://github.com/serenity-js/serenity-js/issues/805)
471
+
472
+
473
+ ### BREAKING CHANGES
474
+
475
+ * **core:** Introduced @serenity-js/web - a shared library for Serenity/JS Web integration
476
+ modules such as @serenity-js/protractor and @serenity-js/webdriverio. Dropped support for Node 12.
477
+
478
+
479
+
480
+
481
+
6
482
  ## [2.33.1](https://github.com/serenity-js/serenity-js/compare/v2.33.0...v2.33.1) (2022-02-10)
7
483
 
8
484
 
package/lib/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './errors';
2
2
  export * from './instance';
3
- export { Duration } from './model';
3
+ export { d, f, format } from './io';
4
+ export { Duration, Timestamp } from './model';
4
5
  export * from './screenplay';
5
6
  export * from './Serenity';
6
7
  export { SerenityConfig } from './SerenityConfig';
package/lib/index.js CHANGED
@@ -10,11 +10,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.SerenityConfig = exports.Duration = void 0;
13
+ exports.SerenityConfig = exports.Timestamp = exports.Duration = exports.format = exports.f = exports.d = void 0;
14
14
  __exportStar(require("./errors"), exports);
15
15
  __exportStar(require("./instance"), exports);
16
+ var io_1 = require("./io");
17
+ Object.defineProperty(exports, "d", { enumerable: true, get: function () { return io_1.d; } });
18
+ Object.defineProperty(exports, "f", { enumerable: true, get: function () { return io_1.f; } });
19
+ Object.defineProperty(exports, "format", { enumerable: true, get: function () { return io_1.format; } });
16
20
  var model_1 = require("./model");
17
21
  Object.defineProperty(exports, "Duration", { enumerable: true, get: function () { return model_1.Duration; } });
22
+ Object.defineProperty(exports, "Timestamp", { enumerable: true, get: function () { return model_1.Timestamp; } });
18
23
  __exportStar(require("./screenplay"), exports);
19
24
  __exportStar(require("./Serenity"), exports);
20
25
  var SerenityConfig_1 = require("./SerenityConfig");
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAyB;AACzB,6CAA2B;AAC3B,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AACjB,+CAA6B;AAC7B,6CAA2B;AAC3B,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAyB;AACzB,6CAA2B;AAC3B,2BAAoC;AAA3B,uFAAA,CAAC,OAAA;AAAE,uFAAA,CAAC,OAAA;AAAE,4FAAA,MAAM,OAAA;AACrB,iCAA8C;AAArC,iGAAA,QAAQ,OAAA;AAAE,kGAAA,SAAS,OAAA;AAC5B,+CAA6B;AAC7B,6CAA2B;AAC3B,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,0CAAwB"}
@@ -5,10 +5,13 @@ const serenitySpecificErrors = require("../errors");
5
5
  const json_1 = require("./json");
6
6
  class ErrorSerialiser {
7
7
  static serialise(error) {
8
+ const name = error && error.constructor && error.constructor.name
9
+ ? error.constructor.name
10
+ : error.name;
8
11
  const serialisedError = Object.getOwnPropertyNames(error).reduce((serialised, key) => {
9
12
  serialised[key] = error[key];
10
13
  return serialised;
11
- }, { name: error.constructor.name || error.name });
14
+ }, { name });
12
15
  return (0, json_1.stringify)(serialisedError);
13
16
  }
14
17
  static deserialise(stringifiedError) {
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorSerialiser.js","sourceRoot":"","sources":["../../src/io/ErrorSerialiser.ts"],"names":[],"mappings":";;;AAEA,oDAAoD;AACpD,iCAA0C;AAyB1C,MAAa,eAAe;IAYxB,MAAM,CAAC,SAAS,CAAC,KAAY;QACzB,MAAM,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;YACjF,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YAC5B,OAAO,UAAU,CAAC;QACtB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAoB,CAAC;QAEtE,OAAO,IAAA,gBAAS,EAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,WAAW,CAAkB,gBAAwB;QACxD,MAAM,eAAe,GAAG,IAAA,YAAK,EAAC,gBAAgB,CAAoB,CAAC;QAEnE,MAAM,WAAW,GAAG,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACzH,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC1D,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE;YACpC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE;gBACjE,YAAY,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;aACtD;SACJ;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,yBAAyB,CAAC,KAAa;QAC1C,MAAM,iBAAiB,GAAG,+CAA+C,CAAC;QAE1E,IAAI,CAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACnC;QAED,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAE,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEtE,OAAO,eAAe,CAAC,WAAW,CAAC,IAAA,gBAAS,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;;AA5CL,0CA6CC;AA5CkB,gCAAgB,GAAG;IAC9B,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC9E,KAAK;IACL,SAAS;IACT,UAAU;IACV,cAAc;IACd,WAAW;IACX,SAAS;IACT,QAAQ;CACX,CAAC"}
1
+ {"version":3,"file":"ErrorSerialiser.js","sourceRoot":"","sources":["../../src/io/ErrorSerialiser.ts"],"names":[],"mappings":";;;AAEA,oDAAoD;AACpD,iCAA0C;AAyB1C,MAAa,eAAe;IAYxB,MAAM,CAAC,SAAS,CAAC,KAAY;QACzB,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI;YAC7D,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI;YACxB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAEjB,MAAM,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;YACjF,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YAC5B,OAAO,UAAU,CAAC;QACtB,CAAC,EAAE,EAAE,IAAI,EAAE,CAAoB,CAAC;QAEhC,OAAO,IAAA,gBAAS,EAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,WAAW,CAAkB,gBAAwB;QACxD,MAAM,eAAe,GAAG,IAAA,YAAK,EAAC,gBAAgB,CAAoB,CAAC;QAEnE,MAAM,WAAW,GAAG,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACzH,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC1D,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE;YACpC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE;gBACjE,YAAY,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;aACtD;SACJ;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,yBAAyB,CAAC,KAAa;QAC1C,MAAM,iBAAiB,GAAG,+CAA+C,CAAC;QAE1E,IAAI,CAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACnC;QAED,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAE,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEtE,OAAO,eAAe,CAAC,WAAW,CAAC,IAAA,gBAAS,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;;AAhDL,0CAiDC;AAhDkB,gCAAgB,GAAG;IAC9B,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC9E,KAAK;IACL,SAAS;IACT,UAAU;IACV,cAAc;IACd,WAAW;IACX,SAAS;IACT,QAAQ;CACX,CAAC"}
@@ -1,4 +1,4 @@
1
- import * as parser from 'error-stack-parser';
1
+ import StackFrame = require('stackframe');
2
2
  /**
3
3
  * @desc
4
4
  * A thin wrapper around error-stack-parser module
@@ -8,5 +8,5 @@ import * as parser from 'error-stack-parser';
8
8
  * @package
9
9
  */
10
10
  export declare class ErrorStackParser {
11
- parse(error: Error): parser.StackFrame[];
11
+ parse(error: Error): StackFrame[];
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorStackParser.js","sourceRoot":"","sources":["../../src/io/ErrorStackParser.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAE7C;;;;;;;GAOG;AACH,MAAa,gBAAgB;IACzB,KAAK,CAAC,KAAY;QACd,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACJ;AAJD,4CAIC"}
1
+ {"version":3,"file":"ErrorStackParser.js","sourceRoot":"","sources":["../../src/io/ErrorStackParser.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAG7C;;;;;;;GAOG;AACH,MAAa,gBAAgB;IACzB,KAAK,CAAC,KAAY;QACd,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACJ;AAJD,4CAIC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @desc
3
+ * Maps an Array<Item_Type> to an Array<Result_Type>, one element at a time.
4
+ *
5
+ * @param {Array<Item_Type>} items
6
+ * @param {function(item: Item_Type): Promise<Result_Type>} mappingFunction
7
+ */
8
+ export declare function asyncMap<Item_Type, Result_Type>(items: Item_Type[], mappingFunction: (item: Item_Type) => Promise<Result_Type> | Result_Type): Promise<Result_Type[]>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.asyncMap = void 0;
4
+ /**
5
+ * @desc
6
+ * Maps an Array<Item_Type> to an Array<Result_Type>, one element at a time.
7
+ *
8
+ * @param {Array<Item_Type>} items
9
+ * @param {function(item: Item_Type): Promise<Result_Type>} mappingFunction
10
+ */
11
+ function asyncMap(items, mappingFunction) {
12
+ return items.reduce((previous, item) => previous.then(async (acc) => {
13
+ const result = await mappingFunction(item);
14
+ return acc.concat(result);
15
+ }), Promise.resolve([]));
16
+ }
17
+ exports.asyncMap = asyncMap;
18
+ //# sourceMappingURL=asyncMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncMap.js","sourceRoot":"","sources":["../../src/io/asyncMap.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAyB,KAAkB,EAAE,eAAwE;IACzI,OAAO,KAAK,CAAC,MAAM,CACf,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CACf,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAE3C,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,EACJ,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CACxB,CAAC;AACN,CAAC;AAVD,4BAUC"}