@api-client/ui 0.0.5 → 0.0.7

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 (323) hide show
  1. package/demo/elements/http/http-assertions.html +3 -0
  2. package/demo/elements/http/http-assertions.ts +1 -1
  3. package/demo/elements/http/http-flows.html +23 -0
  4. package/demo/elements/http/http-flows.ts +92 -0
  5. package/demo/elements/http/index.html +3 -0
  6. package/demo/pages/http-project/main.ts +5 -6
  7. package/dist/define/dialog/delete-cookie-action-dialog.d.ts +10 -0
  8. package/dist/define/dialog/delete-cookie-action-dialog.d.ts.map +1 -0
  9. package/dist/define/dialog/delete-cookie-action-dialog.js +14 -0
  10. package/dist/define/dialog/delete-cookie-action-dialog.js.map +1 -0
  11. package/dist/define/dialog/set-cookie-action-dialog.d.ts +10 -0
  12. package/dist/define/dialog/set-cookie-action-dialog.d.ts.map +1 -0
  13. package/dist/define/dialog/set-cookie-action-dialog.js +14 -0
  14. package/dist/define/dialog/set-cookie-action-dialog.js.map +1 -0
  15. package/dist/define/http/http-assertions.d.ts +1 -1
  16. package/dist/define/http/http-assertions.d.ts.map +1 -1
  17. package/dist/define/http/http-assertions.js +3 -3
  18. package/dist/define/http/http-assertions.js.map +1 -1
  19. package/dist/define/http/http-flows.d.ts +10 -0
  20. package/dist/define/http/http-flows.d.ts.map +1 -0
  21. package/dist/define/http/http-flows.js +13 -0
  22. package/dist/define/http/http-flows.js.map +1 -0
  23. package/dist/define/ui/ui-divider.d.ts +4 -1
  24. package/dist/define/ui/ui-divider.d.ts.map +1 -1
  25. package/dist/define/ui/ui-divider.js +11 -2
  26. package/dist/define/ui/ui-divider.js.map +1 -1
  27. package/dist/elements/ApiElement.d.ts +4 -0
  28. package/dist/elements/ApiElement.d.ts.map +1 -1
  29. package/dist/elements/ApiElement.js +6 -0
  30. package/dist/elements/ApiElement.js.map +1 -1
  31. package/dist/elements/amf/ApiAuthorizationEditor.element.js +1 -1
  32. package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
  33. package/dist/elements/amf/ApiOperationDocument.element.d.ts.map +1 -1
  34. package/dist/elements/amf/ApiOperationDocument.element.js +2 -1
  35. package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
  36. package/dist/elements/amf/ApiRequest.element.js +1 -1
  37. package/dist/elements/amf/ApiRequest.element.js.map +1 -1
  38. package/dist/elements/amf/ApiRequestEditor.element.d.ts +0 -1
  39. package/dist/elements/amf/ApiRequestEditor.element.d.ts.map +1 -1
  40. package/dist/elements/amf/ApiRequestEditor.element.js +0 -3
  41. package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
  42. package/dist/elements/authorization/ui/Authorization.d.ts +2 -1
  43. package/dist/elements/authorization/ui/Authorization.d.ts.map +1 -1
  44. package/dist/elements/authorization/ui/Authorization.js +0 -3
  45. package/dist/elements/authorization/ui/Authorization.js.map +1 -1
  46. package/dist/elements/dialog/DeleteCookieAction.element.d.ts +20 -0
  47. package/dist/elements/dialog/DeleteCookieAction.element.d.ts.map +1 -0
  48. package/dist/elements/dialog/DeleteCookieAction.element.js +93 -0
  49. package/dist/elements/dialog/DeleteCookieAction.element.js.map +1 -0
  50. package/dist/elements/dialog/DeleteCookieAction.styles.d.ts +3 -0
  51. package/dist/elements/dialog/DeleteCookieAction.styles.d.ts.map +1 -0
  52. package/dist/elements/dialog/DeleteCookieAction.styles.js +13 -0
  53. package/dist/elements/dialog/DeleteCookieAction.styles.js.map +1 -0
  54. package/dist/elements/dialog/Rename.d.ts +7 -6
  55. package/dist/elements/dialog/Rename.d.ts.map +1 -1
  56. package/dist/elements/dialog/Rename.js +7 -6
  57. package/dist/elements/dialog/Rename.js.map +1 -1
  58. package/dist/elements/dialog/SetCookieAction.element.d.ts +22 -0
  59. package/dist/elements/dialog/SetCookieAction.element.d.ts.map +1 -0
  60. package/dist/elements/dialog/SetCookieAction.element.js +173 -0
  61. package/dist/elements/dialog/SetCookieAction.element.js.map +1 -0
  62. package/dist/elements/environment/EnvironmentEditor.d.ts +24 -3
  63. package/dist/elements/environment/EnvironmentEditor.d.ts.map +1 -1
  64. package/dist/elements/environment/EnvironmentEditor.js +69 -23
  65. package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
  66. package/dist/elements/environment/EnvironmentEditor.styles.d.ts.map +1 -1
  67. package/dist/elements/environment/EnvironmentEditor.styles.js +5 -0
  68. package/dist/elements/environment/EnvironmentEditor.styles.js.map +1 -1
  69. package/dist/elements/environment/ServerEditor.d.ts +3 -3
  70. package/dist/elements/environment/ServerEditor.d.ts.map +1 -1
  71. package/dist/elements/environment/ServerEditor.js +3 -6
  72. package/dist/elements/environment/ServerEditor.js.map +1 -1
  73. package/dist/elements/environment/VariablesEditor.d.ts +0 -1
  74. package/dist/elements/environment/VariablesEditor.d.ts.map +1 -1
  75. package/dist/elements/environment/VariablesEditor.js +3 -6
  76. package/dist/elements/environment/VariablesEditor.js.map +1 -1
  77. package/dist/elements/highlight/Prism.styles.d.ts.map +1 -1
  78. package/dist/elements/highlight/Prism.styles.js +12 -5
  79. package/dist/elements/highlight/Prism.styles.js.map +1 -1
  80. package/dist/elements/http/BodyEditor.d.ts +0 -4
  81. package/dist/elements/http/BodyEditor.d.ts.map +1 -1
  82. package/dist/elements/http/BodyEditor.js +10 -16
  83. package/dist/elements/http/BodyEditor.js.map +1 -1
  84. package/dist/elements/http/BodyMultipartEditor.d.ts +3 -16
  85. package/dist/elements/http/BodyMultipartEditor.d.ts.map +1 -1
  86. package/dist/elements/http/BodyMultipartEditor.js +3 -19
  87. package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
  88. package/dist/elements/http/BodyTextEditor.d.ts +0 -1
  89. package/dist/elements/http/BodyTextEditor.d.ts.map +1 -1
  90. package/dist/elements/http/BodyTextEditor.js +0 -3
  91. package/dist/elements/http/BodyTextEditor.js.map +1 -1
  92. package/dist/elements/http/BodyUrlEncodedEditor.d.ts +3 -3
  93. package/dist/elements/http/BodyUrlEncodedEditor.d.ts.map +1 -1
  94. package/dist/elements/http/BodyUrlEncodedEditor.js +3 -5
  95. package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
  96. package/dist/elements/http/HeadersForm.d.ts +0 -4
  97. package/dist/elements/http/HeadersForm.d.ts.map +1 -1
  98. package/dist/elements/http/HeadersForm.js +0 -6
  99. package/dist/elements/http/HeadersForm.js.map +1 -1
  100. package/dist/elements/http/HttpAssertions.element.d.ts +55 -0
  101. package/dist/elements/http/HttpAssertions.element.d.ts.map +1 -0
  102. package/dist/elements/http/HttpAssertions.element.js +264 -0
  103. package/dist/elements/http/HttpAssertions.element.js.map +1 -0
  104. package/dist/elements/http/HttpAssertions.styles.d.ts.map +1 -1
  105. package/dist/elements/http/HttpAssertions.styles.js +7 -156
  106. package/dist/elements/http/HttpAssertions.styles.js.map +1 -1
  107. package/dist/elements/http/HttpFlows.common.d.ts +3 -0
  108. package/dist/elements/http/HttpFlows.common.d.ts.map +1 -0
  109. package/dist/elements/http/HttpFlows.common.js +181 -0
  110. package/dist/elements/http/HttpFlows.common.js.map +1 -0
  111. package/dist/elements/http/HttpFlows.element.d.ts +97 -0
  112. package/dist/elements/http/HttpFlows.element.d.ts.map +1 -0
  113. package/dist/elements/http/HttpFlows.element.js +684 -0
  114. package/dist/elements/http/HttpFlows.element.js.map +1 -0
  115. package/dist/elements/http/HttpFlows.styles.d.ts +3 -0
  116. package/dist/elements/http/HttpFlows.styles.d.ts.map +1 -0
  117. package/dist/elements/http/HttpFlows.styles.js +28 -0
  118. package/dist/elements/http/HttpFlows.styles.js.map +1 -0
  119. package/dist/elements/http/HttpFlowsUi.d.ts +172 -0
  120. package/dist/elements/http/HttpFlowsUi.d.ts.map +1 -0
  121. package/dist/elements/http/HttpFlowsUi.js +1256 -0
  122. package/dist/elements/http/HttpFlowsUi.js.map +1 -0
  123. package/dist/elements/http/RequestConfigElement.d.ts +0 -1
  124. package/dist/elements/http/RequestConfigElement.d.ts.map +1 -1
  125. package/dist/elements/http/RequestConfigElement.js +8 -11
  126. package/dist/elements/http/RequestConfigElement.js.map +1 -1
  127. package/dist/elements/http/RequestEditor.d.ts +10 -10
  128. package/dist/elements/http/RequestEditor.d.ts.map +1 -1
  129. package/dist/elements/http/RequestEditor.js +62 -23
  130. package/dist/elements/http/RequestEditor.js.map +1 -1
  131. package/dist/elements/http/UrlInput.d.ts +3 -3
  132. package/dist/elements/http/UrlInput.d.ts.map +1 -1
  133. package/dist/elements/http/UrlInput.js +2 -2
  134. package/dist/elements/http/UrlInput.js.map +1 -1
  135. package/dist/elements/http/UrlParamsForm.d.ts +0 -1
  136. package/dist/elements/http/UrlParamsForm.d.ts.map +1 -1
  137. package/dist/elements/http/UrlParamsForm.js +0 -3
  138. package/dist/elements/http/UrlParamsForm.js.map +1 -1
  139. package/dist/elements/layout/SplitView.styles.d.ts.map +1 -1
  140. package/dist/elements/layout/SplitView.styles.js +1 -0
  141. package/dist/elements/layout/SplitView.styles.js.map +1 -1
  142. package/dist/elements/navigation/AppNavigationItem.styles.d.ts.map +1 -1
  143. package/dist/elements/navigation/AppNavigationItem.styles.js +2 -0
  144. package/dist/elements/navigation/AppNavigationItem.styles.js.map +1 -1
  145. package/dist/elements/project/HttpProjectRequest.d.ts +2 -1
  146. package/dist/elements/project/HttpProjectRequest.d.ts.map +1 -1
  147. package/dist/elements/project/HttpProjectRequest.js +14 -5
  148. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  149. package/dist/elements/project/ProjectRunner.d.ts +0 -1
  150. package/dist/elements/project/ProjectRunner.d.ts.map +1 -1
  151. package/dist/elements/project/ProjectRunner.js +1 -4
  152. package/dist/elements/project/ProjectRunner.js.map +1 -1
  153. package/dist/elements/schema-design/AssociationFormElement.d.ts +0 -1
  154. package/dist/elements/schema-design/AssociationFormElement.d.ts.map +1 -1
  155. package/dist/elements/schema-design/AssociationFormElement.js +2 -5
  156. package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
  157. package/dist/elements/schema-design/DataEntityEditorElement.d.ts +2 -2
  158. package/dist/elements/schema-design/DataEntityEditorElement.d.ts.map +1 -1
  159. package/dist/elements/schema-design/DataEntityEditorElement.js +5 -5
  160. package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
  161. package/dist/elements/schema-design/DataSchemaDocument.d.ts +0 -1
  162. package/dist/elements/schema-design/DataSchemaDocument.d.ts.map +1 -1
  163. package/dist/elements/schema-design/DataSchemaDocument.js +4 -7
  164. package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
  165. package/dist/elements/schema-design/EntityFormElement.d.ts +0 -1
  166. package/dist/elements/schema-design/EntityFormElement.d.ts.map +1 -1
  167. package/dist/elements/schema-design/EntityFormElement.js +4 -7
  168. package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
  169. package/dist/elements/schema-design/PropertyFormElement.d.ts +1 -2
  170. package/dist/elements/schema-design/PropertyFormElement.d.ts.map +1 -1
  171. package/dist/elements/schema-design/PropertyFormElement.js +8 -11
  172. package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
  173. package/dist/pages/ApplicationScreen.d.ts +1 -1
  174. package/dist/pages/ApplicationScreen.d.ts.map +1 -1
  175. package/dist/pages/ApplicationScreen.js +1 -1
  176. package/dist/pages/ApplicationScreen.js.map +1 -1
  177. package/dist/pages/api-client/ApiClient.styles.d.ts.map +1 -1
  178. package/dist/pages/api-client/ApiClient.styles.js +22 -3
  179. package/dist/pages/api-client/ApiClient.styles.js.map +1 -1
  180. package/dist/pages/api-client/Authenticate.screen.d.ts +2 -0
  181. package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
  182. package/dist/pages/api-client/Authenticate.screen.js +19 -3
  183. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  184. package/dist/pages/api-client/StoreConfig.screen.d.ts.map +1 -1
  185. package/dist/pages/api-client/StoreConfig.screen.js +4 -2
  186. package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
  187. package/dist/pages/api-client/StoreConfig.styles.d.ts.map +1 -1
  188. package/dist/pages/api-client/StoreConfig.styles.js +5 -0
  189. package/dist/pages/api-client/StoreConfig.styles.js.map +1 -1
  190. package/dist/pages/api-client/pages/Files.page.d.ts +1 -0
  191. package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
  192. package/dist/pages/api-client/pages/Files.page.js +2 -1
  193. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  194. package/dist/pages/http-project/HttpProject.screen.d.ts +0 -8
  195. package/dist/pages/http-project/HttpProject.screen.d.ts.map +1 -1
  196. package/dist/pages/http-project/HttpProject.screen.js +14 -15
  197. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  198. package/dist/pages/http-project/types.d.ts +8 -6
  199. package/dist/pages/http-project/types.d.ts.map +1 -1
  200. package/dist/pages/http-project/types.js.map +1 -1
  201. package/dist/styles/m3/surface.module.d.ts.map +1 -1
  202. package/dist/styles/m3/surface.module.js +11 -27
  203. package/dist/styles/m3/surface.module.js.map +1 -1
  204. package/dist/ui/UiElement.d.ts +4 -0
  205. package/dist/ui/UiElement.d.ts.map +1 -1
  206. package/dist/ui/UiElement.js +6 -0
  207. package/dist/ui/UiElement.js.map +1 -1
  208. package/dist/ui/button/SegmentedButton.styles.d.ts.map +1 -1
  209. package/dist/ui/button/SegmentedButton.styles.js +3 -1
  210. package/dist/ui/button/SegmentedButton.styles.js.map +1 -1
  211. package/dist/ui/dialog/UiDialog.d.ts +3 -0
  212. package/dist/ui/dialog/UiDialog.d.ts.map +1 -1
  213. package/dist/ui/dialog/UiDialog.js +3 -0
  214. package/dist/ui/dialog/UiDialog.js.map +1 -1
  215. package/dist/ui/effects/ripple.d.ts.map +1 -1
  216. package/dist/ui/effects/ripple.js +5 -1
  217. package/dist/ui/effects/ripple.js.map +1 -1
  218. package/dist/ui/icons/Icons.d.ts +3 -2
  219. package/dist/ui/icons/Icons.d.ts.map +1 -1
  220. package/dist/ui/icons/Icons.js +2 -1
  221. package/dist/ui/icons/Icons.js.map +1 -1
  222. package/dist/ui/input/CheckedElement.d.ts +1 -1
  223. package/dist/ui/input/CheckedElement.d.ts.map +1 -1
  224. package/dist/ui/input/CheckedElement.js +3 -3
  225. package/dist/ui/input/CheckedElement.js.map +1 -1
  226. package/dist/ui/input/Input.js +1 -1
  227. package/dist/ui/input/Input.js.map +1 -1
  228. package/dist/ui/list/{DividerElement.d.ts → UiDivider.element.d.ts} +6 -6
  229. package/dist/ui/list/UiDivider.element.d.ts.map +1 -0
  230. package/dist/ui/list/UiDivider.element.js +39 -0
  231. package/dist/ui/list/UiDivider.element.js.map +1 -0
  232. package/dist/ui/list/UiDivider.styles.d.ts +3 -0
  233. package/dist/ui/list/UiDivider.styles.d.ts.map +1 -0
  234. package/dist/ui/list/UiDivider.styles.js +49 -0
  235. package/dist/ui/list/UiDivider.styles.js.map +1 -0
  236. package/dist/ui/tabs/UiTabs.d.ts +13 -1
  237. package/dist/ui/tabs/UiTabs.d.ts.map +1 -1
  238. package/dist/ui/tabs/UiTabs.js +42 -13
  239. package/dist/ui/tabs/UiTabs.js.map +1 -1
  240. package/package.json +1 -1
  241. package/src/define/dialog/delete-cookie-action-dialog.ts +16 -0
  242. package/src/define/dialog/set-cookie-action-dialog.ts +16 -0
  243. package/src/define/http/http-assertions.ts +3 -3
  244. package/src/define/http/http-flows.ts +15 -0
  245. package/src/define/ui/ui-divider.ts +7 -2
  246. package/src/elements/ApiElement.ts +7 -0
  247. package/src/elements/amf/ApiAuthorizationEditor.element.ts +1 -1
  248. package/src/elements/amf/ApiOperationDocument.element.ts +2 -1
  249. package/src/elements/amf/ApiRequest.element.ts +1 -1
  250. package/src/elements/amf/ApiRequestEditor.element.ts +0 -4
  251. package/src/elements/authorization/ui/Authorization.ts +3 -5
  252. package/src/elements/dialog/DeleteCookieAction.element.ts +100 -0
  253. package/src/elements/dialog/DeleteCookieAction.styles.ts +14 -0
  254. package/src/elements/dialog/Rename.ts +8 -7
  255. package/src/elements/dialog/SetCookieAction.element.ts +183 -0
  256. package/src/elements/environment/EnvironmentEditor.styles.ts +5 -0
  257. package/src/elements/environment/EnvironmentEditor.ts +81 -22
  258. package/src/elements/environment/ServerEditor.ts +4 -8
  259. package/src/elements/environment/VariablesEditor.ts +3 -7
  260. package/src/elements/highlight/Prism.styles.ts +12 -5
  261. package/src/elements/http/BodyEditor.ts +10 -17
  262. package/src/elements/http/BodyMultipartEditor.ts +3 -20
  263. package/src/elements/http/BodyTextEditor.ts +0 -4
  264. package/src/elements/http/BodyUrlEncodedEditor.ts +5 -8
  265. package/src/elements/http/HeadersForm.ts +2 -9
  266. package/src/elements/http/HttpAssertions.element.ts +286 -0
  267. package/src/elements/http/HttpAssertions.styles.ts +7 -156
  268. package/src/elements/http/HttpFlows.common.ts +181 -0
  269. package/src/elements/http/HttpFlows.element.ts +722 -0
  270. package/src/elements/http/HttpFlows.styles.ts +29 -0
  271. package/src/elements/http/HttpFlowsUi.ts +1327 -0
  272. package/src/elements/http/RequestConfigElement.ts +10 -14
  273. package/src/elements/http/RequestEditor.ts +77 -35
  274. package/src/elements/http/UrlInput.ts +6 -6
  275. package/src/elements/http/UrlParamsForm.ts +2 -6
  276. package/src/elements/layout/SplitView.styles.ts +1 -0
  277. package/src/elements/navigation/AppNavigationItem.styles.ts +2 -0
  278. package/src/elements/project/HttpProjectRequest.ts +16 -5
  279. package/src/elements/project/ProjectRunner.ts +3 -7
  280. package/src/elements/schema-design/AssociationFormElement.ts +4 -8
  281. package/src/elements/schema-design/DataEntityEditorElement.ts +8 -8
  282. package/src/elements/schema-design/DataSchemaDocument.ts +5 -9
  283. package/src/elements/schema-design/EntityFormElement.ts +6 -10
  284. package/src/elements/schema-design/PropertyFormElement.ts +11 -15
  285. package/src/pages/ApplicationScreen.ts +1 -1
  286. package/src/pages/api-client/ApiClient.styles.ts +22 -3
  287. package/src/pages/api-client/Authenticate.screen.ts +19 -3
  288. package/src/pages/api-client/StoreConfig.screen.ts +4 -2
  289. package/src/pages/api-client/StoreConfig.styles.ts +5 -0
  290. package/src/pages/api-client/pages/Files.page.ts +2 -1
  291. package/src/pages/http-project/HttpProject.screen.ts +14 -26
  292. package/src/pages/http-project/types.ts +8 -6
  293. package/src/styles/m3/surface.module.ts +11 -27
  294. package/src/styles/m3/theme.css +36 -0
  295. package/src/styles/m3/tokens.css +11 -0
  296. package/src/ui/UiElement.ts +7 -0
  297. package/src/ui/button/SegmentedButton.styles.ts +3 -1
  298. package/src/ui/dialog/UiDialog.ts +3 -0
  299. package/src/ui/effects/ripple.ts +6 -1
  300. package/src/ui/icons/Icons.ts +3 -2
  301. package/src/ui/input/CheckedElement.ts +3 -3
  302. package/src/ui/input/Input.ts +1 -1
  303. package/src/ui/list/UiDivider.element.ts +41 -0
  304. package/src/ui/list/UiDivider.styles.ts +49 -0
  305. package/src/ui/tabs/UiTabs.ts +55 -13
  306. package/test/amf/authorization/OAuth2Method.test.ts +1 -1
  307. package/test/elements/http/HttpAssertions.test.ts +5 -6
  308. package/test/elements/http/HttpFlows.test.ts +485 -0
  309. package/dist/elements/http/HttpAssertions.d.ts +0 -114
  310. package/dist/elements/http/HttpAssertions.d.ts.map +0 -1
  311. package/dist/elements/http/HttpAssertions.js +0 -1146
  312. package/dist/elements/http/HttpAssertions.js.map +0 -1
  313. package/dist/elements/http/internals.d.ts +0 -150
  314. package/dist/elements/http/internals.d.ts.map +0 -1
  315. package/dist/elements/http/internals.js +0 -150
  316. package/dist/elements/http/internals.js.map +0 -1
  317. package/dist/ui/list/DividerElement.d.ts.map +0 -1
  318. package/dist/ui/list/DividerElement.js +0 -82
  319. package/dist/ui/list/DividerElement.js.map +0 -1
  320. package/src/elements/http/HttpAssertions.ts +0 -1187
  321. package/src/elements/http/internals.ts +0 -151
  322. package/src/http-client/docs/Files.md +0 -28
  323. package/src/ui/list/DividerElement.ts +0 -84
@@ -1,1146 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { DataSteps, FlowSourceEnum, FlowRequestDataEnum, FlowResponseDataEnum, TransformationSteps, HttpAssertions as CoreAssertions, AmfNamespace } from "@api-client/core/build/browser.js";
3
- import { html, nothing } from "lit";
4
- import { property } from "lit/decorators.js";
5
- import { ifDefined } from "lit/directives/if-defined.js";
6
- import { live } from "lit/directives/live.js";
7
- import ApiElement from "../ApiElement.js";
8
- import '../../define/ui/ui-button.js';
9
- import '../../define/ui/ui-icon-button.js';
10
- import '../../define/ui/ui-switch.js';
11
- import '../../define/ui/ui-icon.js';
12
- import '../../define/ui/ui-text-field.js';
13
- import '../../define/ui/ui-chip.js';
14
- import '../../define/ui/ui-dialog.js';
15
- /**
16
- * @fires change When the model change
17
- */
18
- export default class HttpAssertions extends ApiElement {
19
- constructor() {
20
- super(...arguments);
21
- /**
22
- * The list of assertions.
23
- * This is a live list. All changes are propagated in the model.
24
- */
25
- this.model = [];
26
- }
27
- /**
28
- * Adds a new empty assertion to the model.
29
- * Note, this function won't notify the parent element
30
- * about the change as empty rules can be discarded.
31
- */
32
- addAssertion() {
33
- const { model } = this;
34
- model.push({
35
- enabled: true,
36
- steps: [],
37
- });
38
- this.requestUpdate();
39
- }
40
- /**
41
- * Removes an assertion at specified index.
42
- * @param index The index of the assertion in the `model` to remove.
43
- */
44
- removeAssertion(index) {
45
- const { model } = this;
46
- if (!model[index]) {
47
- throw new RangeError(`Invalid index: ${index}`);
48
- }
49
- model.splice(index, 1);
50
- this.requestUpdate();
51
- this.notifyChange();
52
- }
53
- /**
54
- * Toggles the enabled state of the assertion.
55
- * @param index The index of the assertion on the `model` array
56
- * @param value The `enabled` value.
57
- */
58
- toggleAssertion(index, value) {
59
- const { model } = this;
60
- if (!model[index]) {
61
- throw new RangeError(`Invalid index: ${index}`);
62
- }
63
- model[index].enabled = value;
64
- this.requestUpdate();
65
- this.notifyChange();
66
- }
67
- notifyChange() {
68
- this.dispatchEvent(new Event('change'));
69
- }
70
- handleAdd() {
71
- this.addAssertion();
72
- }
73
- handleRemove(e) {
74
- const node = e.currentTarget;
75
- const index = Number(node.dataset.index);
76
- if (Number.isNaN(index)) {
77
- return;
78
- }
79
- this.removeAssertion(index);
80
- }
81
- handleToggle(e) {
82
- const node = e.currentTarget;
83
- const index = Number(node.dataset.index);
84
- if (Number.isNaN(index)) {
85
- return;
86
- }
87
- this.toggleAssertion(index, node.checked);
88
- }
89
- handleRemoveStep(e) {
90
- const target = e.currentTarget;
91
- const assertionIndex = Number(target.dataset.index);
92
- const stepIndex = Number(target.dataset.stepIndex);
93
- if (Number.isNaN(assertionIndex) || Number.isNaN(stepIndex)) {
94
- return;
95
- }
96
- const assertion = this.model[assertionIndex];
97
- if (!assertion) {
98
- return;
99
- }
100
- assertion.steps.splice(stepIndex, 1);
101
- this.notifyChange();
102
- this.requestUpdate();
103
- }
104
- isValidDropTarget(dataTransfer) {
105
- if (!dataTransfer) {
106
- return false;
107
- }
108
- const { types } = dataTransfer;
109
- return types.includes('assertion/group') && types.includes('assertion/kind');
110
- }
111
- handleDragStart(e) {
112
- const { dataTransfer } = e;
113
- if (!dataTransfer) {
114
- return;
115
- }
116
- const chip = e.target;
117
- const { group, kind, source, data, variant } = chip.dataset;
118
- if (!group || !kind) {
119
- return;
120
- }
121
- const copy = chip.cloneNode(true);
122
- copy.style.position = 'absolute';
123
- copy.style.top = `-100px`;
124
- this.draggedChip = copy;
125
- document.body.appendChild(copy);
126
- dataTransfer.setDragImage(copy, 0, 0);
127
- dataTransfer.setData('assertion/group', group);
128
- dataTransfer.setData('assertion/kind', kind);
129
- if (source) {
130
- dataTransfer.setData('assertion/source', source);
131
- }
132
- if (data) {
133
- dataTransfer.setData('assertion/data', data);
134
- }
135
- if (variant) {
136
- dataTransfer.setData('assertion/variant', variant);
137
- }
138
- chip.blur();
139
- }
140
- handleDragEnd(e) {
141
- const { draggedChip } = this;
142
- if (!draggedChip) {
143
- return;
144
- }
145
- e.preventDefault();
146
- draggedChip.parentElement?.removeChild(draggedChip);
147
- }
148
- handleTargetDragOver(e) {
149
- const { draggedChip } = this;
150
- if (!draggedChip || e.defaultPrevented || !this.isValidDropTarget(e.dataTransfer)) {
151
- return;
152
- }
153
- e.preventDefault();
154
- const target = e.currentTarget;
155
- target.classList.add('dragover');
156
- }
157
- handleTargetDragLeave(e) {
158
- if (e.defaultPrevented || !this.isValidDropTarget(e.dataTransfer)) {
159
- return;
160
- }
161
- const target = e.currentTarget;
162
- target.classList.remove('dragover');
163
- }
164
- handleDrop(e) {
165
- const { dataTransfer } = e;
166
- if (!dataTransfer || e.defaultPrevented || !this.isValidDropTarget(dataTransfer)) {
167
- return;
168
- }
169
- e.preventDefault();
170
- this.resetDragIndices();
171
- const { index, stepIndex } = e.target.dataset;
172
- const typedAssertionIndex = Number(index);
173
- if (Number.isNaN(typedAssertionIndex)) {
174
- return;
175
- }
176
- let typedStepIndex;
177
- if (stepIndex) {
178
- const tmp = Number(stepIndex);
179
- if (!Number.isNaN(tmp)) {
180
- typedStepIndex = tmp;
181
- }
182
- }
183
- this.processDrop(dataTransfer, typedAssertionIndex, typedStepIndex);
184
- }
185
- resetDragIndices() {
186
- const nodes = this.shadowRoot.querySelectorAll('.dragover');
187
- Array.from(nodes).forEach(n => n.classList.remove('dragover'));
188
- }
189
- processDrop(dataTransfer, assertionIndex, stepIndex) {
190
- const group = dataTransfer.getData('assertion/group');
191
- if (!group) {
192
- return;
193
- }
194
- if (group === 'data-source') {
195
- this.processDataSourceDrop(dataTransfer, assertionIndex, stepIndex);
196
- }
197
- else if (group === 'transformation') {
198
- this.processTransformationDrop(dataTransfer, assertionIndex, stepIndex);
199
- }
200
- else if (group === 'assertion') {
201
- this.processAssertionDrop(dataTransfer, assertionIndex, stepIndex);
202
- }
203
- }
204
- processDataSourceDrop(dataTransfer, assertionIndex, stepIndex) {
205
- const item = this.model[assertionIndex];
206
- if (!item) {
207
- return;
208
- }
209
- const source = dataTransfer.getData('assertion/source');
210
- const data = dataTransfer.getData('assertion/data');
211
- const step = new DataSteps.ReadDataSourceStep(source, data).toJSON();
212
- if (stepIndex === undefined) {
213
- item.steps.push(step);
214
- }
215
- else if (stepIndex === -1) {
216
- item.steps.unshift(step);
217
- }
218
- else {
219
- item.steps.splice(stepIndex, 0, step);
220
- }
221
- this.requestUpdate();
222
- this.notifyChange();
223
- }
224
- processTransformationDrop(dataTransfer, assertionIndex, stepIndex) {
225
- const item = this.model[assertionIndex];
226
- if (!item) {
227
- return;
228
- }
229
- let step;
230
- const kind = dataTransfer.getData('assertion/kind');
231
- if (kind === DataSteps.ReadValueStepKind) {
232
- step = new DataSteps.ReadValueStep().toJSON();
233
- }
234
- else if (kind === TransformationSteps.AsNumberStepKind) {
235
- step = new TransformationSteps.AsNumberStep().toJSON();
236
- }
237
- else if (kind === TransformationSteps.RoundStepKind) {
238
- step = new TransformationSteps.RoundStep().toJSON();
239
- }
240
- else if (kind === TransformationSteps.AsLowerCaseStepKind) {
241
- step = new TransformationSteps.AsLowerCaseStep().toJSON();
242
- }
243
- else if (kind === TransformationSteps.AsUpperCaseStepKind) {
244
- step = new TransformationSteps.AsUpperCaseStep().toJSON();
245
- }
246
- else if (kind === TransformationSteps.TrimStepKind) {
247
- step = new TransformationSteps.TrimStep().toJSON();
248
- }
249
- else if (kind === TransformationSteps.SubstringStepKind) {
250
- step = new TransformationSteps.SubstringStep().toJSON();
251
- }
252
- if (!step) {
253
- return;
254
- }
255
- if (stepIndex === undefined) {
256
- item.steps.push(step);
257
- }
258
- else if (stepIndex === -1) {
259
- item.steps.unshift(step);
260
- }
261
- else {
262
- item.steps.splice(stepIndex, 0, step);
263
- }
264
- this.requestUpdate();
265
- this.notifyChange();
266
- }
267
- processAssertionDrop(dataTransfer, assertionIndex, stepIndex) {
268
- const item = this.model[assertionIndex];
269
- if (!item) {
270
- return;
271
- }
272
- let step;
273
- const kind = dataTransfer.getData('assertion/kind');
274
- if (kind === CoreAssertions.EqualAssertionKind) {
275
- step = new CoreAssertions.EqualAssertion().toJSON();
276
- }
277
- else if (kind === CoreAssertions.NotEqualAssertionKind) {
278
- step = new CoreAssertions.NotEqualAssertion().toJSON();
279
- }
280
- else if (kind === CoreAssertions.GreaterThanAssertionKind) {
281
- const instance = new CoreAssertions.GreaterThanAssertion();
282
- if (dataTransfer.getData('assertion/variant') === 'equal') {
283
- instance.equal = true;
284
- }
285
- step = instance.toJSON();
286
- }
287
- else if (kind === CoreAssertions.LessThanAssertionKind) {
288
- const instance = new CoreAssertions.LessThanAssertion();
289
- if (dataTransfer.getData('assertion/variant') === 'equal') {
290
- instance.equal = true;
291
- }
292
- step = instance.toJSON();
293
- }
294
- else if (kind === CoreAssertions.IncludesAssertionKind) {
295
- step = new CoreAssertions.IncludesAssertion().toJSON();
296
- }
297
- else if (kind === CoreAssertions.NotIncludesAssertionKind) {
298
- step = new CoreAssertions.NotIncludesAssertion().toJSON();
299
- }
300
- else if (kind === CoreAssertions.MatchesAssertionKind) {
301
- step = new CoreAssertions.MatchesAssertion().toJSON();
302
- }
303
- else if (kind === CoreAssertions.OkAssertionKind) {
304
- step = new CoreAssertions.OkAssertion().toJSON();
305
- }
306
- else if (kind === CoreAssertions.NotOkAssertionKind) {
307
- step = new CoreAssertions.NotOkAssertion().toJSON();
308
- }
309
- else if (kind === CoreAssertions.ToBeAssertionKind) {
310
- step = new CoreAssertions.ToBeAssertion().toJSON();
311
- }
312
- else if (kind === CoreAssertions.NotToBeAssertionKind) {
313
- step = new CoreAssertions.NotToBeAssertion().toJSON();
314
- }
315
- if (!step) {
316
- return;
317
- }
318
- if (stepIndex === undefined) {
319
- item.steps.push(step);
320
- }
321
- else if (stepIndex === -1) {
322
- item.steps.unshift(step);
323
- }
324
- else {
325
- item.steps.splice(stepIndex, 0, step);
326
- }
327
- this.requestUpdate();
328
- this.notifyChange();
329
- }
330
- handleReadValueStepChange(e) {
331
- const step = this.stepFromChangeEvent(e);
332
- if (!step) {
333
- return;
334
- }
335
- const input = e.target;
336
- input.checkValidity();
337
- step.path = input.value;
338
- this.requestUpdate();
339
- this.notifyChange();
340
- }
341
- handleRoundPrecisionChange(e) {
342
- const step = this.stepFromChangeEvent(e);
343
- if (!step) {
344
- return;
345
- }
346
- const input = e.target;
347
- input.checkValidity();
348
- step.precision = input.valueAsNumber;
349
- this.requestUpdate();
350
- this.notifyChange();
351
- }
352
- handleSubstringStartChange(e) {
353
- const step = this.stepFromChangeEvent(e);
354
- if (!step) {
355
- return;
356
- }
357
- const input = e.target;
358
- input.checkValidity();
359
- step.start = input.valueAsNumber;
360
- this.requestUpdate();
361
- this.notifyChange();
362
- }
363
- handleSubstringEndChange(e) {
364
- const step = this.stepFromChangeEvent(e);
365
- if (!step) {
366
- return;
367
- }
368
- const input = e.target;
369
- input.checkValidity();
370
- step.end = input.valueAsNumber;
371
- this.requestUpdate();
372
- this.notifyChange();
373
- }
374
- handleEqualAssertionValueChange(e) {
375
- const input = e.target;
376
- input.checkValidity();
377
- const assertionIndex = Number(input.dataset.assertionIndex);
378
- const stepIndex = Number(input.dataset.stepIndex);
379
- if (Number.isNaN(assertionIndex) || Number.isNaN(stepIndex)) {
380
- return;
381
- }
382
- const assertion = this.model[assertionIndex];
383
- if (!assertion) {
384
- return;
385
- }
386
- const step = assertion.steps[stepIndex];
387
- if (!step) {
388
- return;
389
- }
390
- step.value = input.value;
391
- step.dataType = this.detectInputDataType(assertion.steps.slice(0, stepIndex));
392
- this.requestUpdate();
393
- this.notifyChange();
394
- }
395
- handleGreaterThanAssertionValueChange(e) {
396
- const step = this.stepFromChangeEvent(e);
397
- if (!step) {
398
- return;
399
- }
400
- const input = e.target;
401
- input.checkValidity();
402
- step.value = Number(input.value);
403
- this.requestUpdate();
404
- this.notifyChange();
405
- }
406
- handleLessThanAssertionValueChange(e) {
407
- const step = this.stepFromChangeEvent(e);
408
- if (!step) {
409
- return;
410
- }
411
- const input = e.target;
412
- input.checkValidity();
413
- step.value = Number(input.value);
414
- this.requestUpdate();
415
- this.notifyChange();
416
- }
417
- handleIncludesAssertionValueChange(e) {
418
- const step = this.stepFromChangeEvent(e);
419
- if (!step) {
420
- return;
421
- }
422
- const input = e.target;
423
- input.checkValidity();
424
- step.value = input.value;
425
- this.requestUpdate();
426
- this.notifyChange();
427
- }
428
- handleMatchesAssertionValueChange(e) {
429
- const step = this.stepFromChangeEvent(e);
430
- if (!step) {
431
- return;
432
- }
433
- const input = e.target;
434
- step.value = input.value;
435
- this.requestUpdate();
436
- this.notifyChange();
437
- }
438
- validateRegexPattern(e) {
439
- const input = e.target;
440
- try {
441
- RegExp(input.value);
442
- input.setCustomValidity('');
443
- }
444
- catch (_) {
445
- input.setCustomValidity('Pattern is invalid');
446
- }
447
- input.reportValidity();
448
- }
449
- stepFromChangeEvent(e) {
450
- const input = e.target;
451
- input.checkValidity();
452
- const assertionIndex = Number(input.dataset.assertionIndex);
453
- const stepIndex = Number(input.dataset.stepIndex);
454
- if (Number.isNaN(assertionIndex) || Number.isNaN(stepIndex)) {
455
- return undefined;
456
- }
457
- const assertion = this.model[assertionIndex];
458
- if (!assertion) {
459
- return undefined;
460
- }
461
- return assertion.steps[stepIndex];
462
- }
463
- /**
464
- * Detects the correct data type for the step value based on previous steps.
465
- *
466
- * @param steps The steps before the current step
467
- * @returns The data type for the step in the AMF namespace.
468
- */
469
- detectInputDataType(steps) {
470
- // we reverse the list so we move from the last step.
471
- const reversed = [...steps].reverse();
472
- for (const step of reversed) {
473
- if (step.kind === TransformationSteps.AsNumberStepKind) {
474
- return AmfNamespace.aml.vocabularies.shapes.number;
475
- }
476
- if (step.kind === DataSteps.ReadDataSourceStepKind) {
477
- const typed = step;
478
- if (typed.data === FlowResponseDataEnum.status) {
479
- return AmfNamespace.aml.vocabularies.shapes.number;
480
- }
481
- }
482
- }
483
- return AmfNamespace.w3.xmlSchema.string;
484
- }
485
- handleRenameAssertion(e) {
486
- const target = e.currentTarget;
487
- const assertionIndex = Number(target.dataset.assertionIndex);
488
- if (Number.isNaN(assertionIndex)) {
489
- return;
490
- }
491
- const assertion = this.model[assertionIndex];
492
- if (!assertion) {
493
- return;
494
- }
495
- const { description } = assertion;
496
- const dialog = this.shadowRoot?.querySelector('.rename-dialog');
497
- if (!dialog) {
498
- return;
499
- }
500
- const input = dialog.querySelector('ui-text-field');
501
- input.value = description || '';
502
- dialog.open = true;
503
- dialog.dataset.assertionIndex = target.dataset.assertionIndex;
504
- }
505
- handleRenameDialogResult(e) {
506
- if (e.detail.cancelled) {
507
- return;
508
- }
509
- const dialog = e.currentTarget;
510
- const assertionIndex = Number(dialog.dataset.assertionIndex);
511
- if (Number.isNaN(assertionIndex)) {
512
- return;
513
- }
514
- const assertion = this.model[assertionIndex];
515
- if (!assertion) {
516
- return;
517
- }
518
- const input = dialog.querySelector('ui-text-field');
519
- assertion.description = input.value;
520
- this.requestUpdate();
521
- this.notifyChange();
522
- input.value = '';
523
- delete dialog.dataset.assertionIndex;
524
- }
525
- render() {
526
- return html `
527
- ${this.renderActionButtons()}
528
- <div class="container">
529
- ${this.renderEditor()}
530
- ${this.renderAssertions()}
531
- </div>
532
- ${this.renderRenameAssertionDialog()}
533
- `;
534
- }
535
- renderActionButtons() {
536
- return html `
537
- <div class="editor-actions">
538
- <ui-button type="tonal" @click="${this.handleAdd}" class="add-button">Add</ui-button>
539
- </div>
540
- `;
541
- }
542
- renderAssertions() {
543
- return html `
544
- <section aria-label="Assertion options" class="options">
545
- ${this.renderDataSourceOptions()}
546
- ${this.renderTransformationOptions()}
547
- ${this.renderAssertionOptions()}
548
- </section>
549
- `;
550
- }
551
- renderStepChip(label, group, kind, variant) {
552
- return html `
553
- <ui-chip
554
- draggable="true"
555
- data-group="${group}"
556
- data-kind="${kind}"
557
- data-variant="${ifDefined(variant)}"
558
- @dragstart="${this.handleDragStart}"
559
- @dragend="${this.handleDragEnd}"
560
- >${label}</ui-chip>
561
- `;
562
- }
563
- renderDataSourceChip(label, group, kind, source, data) {
564
- return html `
565
- <ui-chip
566
- draggable="true"
567
- data-group="${group}"
568
- data-kind="${kind}"
569
- data-source="${source}"
570
- data-data="${data}"
571
- @dragstart="${this.handleDragStart}"
572
- @dragend="${this.handleDragEnd}"
573
- >${label}</ui-chip>
574
- `;
575
- }
576
- renderDataSourceOptions() {
577
- return html `
578
- <details class="assertion-group" open>
579
- <summary>Data source</summary>
580
- <div class="group-content">
581
- ${this.renderDataSourceChip('Status code', 'data-source', DataSteps.ReadDataSourceStepKind, FlowSourceEnum.response, FlowResponseDataEnum.status)}
582
- ${this.renderDataSourceChip('Response headers', 'data-source', DataSteps.ReadDataSourceStepKind, FlowSourceEnum.response, FlowResponseDataEnum.headers)}
583
- ${this.renderDataSourceChip('Response body', 'data-source', DataSteps.ReadDataSourceStepKind, FlowSourceEnum.response, FlowResponseDataEnum.body)}
584
- ${this.renderDataSourceChip('Status message', 'data-source', DataSteps.ReadDataSourceStepKind, FlowSourceEnum.response, FlowResponseDataEnum.statusText)}
585
- </div>
586
- </details>
587
- `;
588
- }
589
- renderTransformationOptions() {
590
- return html `
591
- <details class="assertion-group" open>
592
- <summary>Transformation</summary>
593
- <div class="group-content">
594
- ${this.renderStepChip('Read value', 'transformation', DataSteps.ReadValueStepKind)}
595
- ${this.renderStepChip('As number', 'transformation', TransformationSteps.AsNumberStepKind)}
596
- ${this.renderStepChip('Round', 'transformation', TransformationSteps.RoundStepKind)}
597
- ${this.renderStepChip('To lower case', 'transformation', TransformationSteps.AsLowerCaseStepKind)}
598
- ${this.renderStepChip('To upper case', 'transformation', TransformationSteps.AsUpperCaseStepKind)}
599
- ${this.renderStepChip('Trim', 'transformation', TransformationSteps.TrimStepKind)}
600
- ${this.renderStepChip('Substring', 'transformation', TransformationSteps.SubstringStepKind)}
601
- </div>
602
- </details>
603
- `;
604
- }
605
- renderAssertionOptions() {
606
- return html `
607
- <details class="assertion-group" open>
608
- <summary>Assertions</summary>
609
- <div class="group-content">
610
- ${this.renderStepChip('Equal', 'assertion', CoreAssertions.EqualAssertionKind)}
611
- ${this.renderStepChip('Not equal', 'assertion', CoreAssertions.NotEqualAssertionKind)}
612
- ${this.renderStepChip('Greater than', 'assertion', CoreAssertions.GreaterThanAssertionKind)}
613
- ${this.renderStepChip('Greater than equal', 'assertion', CoreAssertions.GreaterThanAssertionKind, 'equal')}
614
- ${this.renderStepChip('Less than', 'assertion', CoreAssertions.LessThanAssertionKind)}
615
- ${this.renderStepChip('Less than equal', 'assertion', CoreAssertions.LessThanAssertionKind, 'equal')}
616
- ${this.renderStepChip('Includes', 'assertion', CoreAssertions.IncludesAssertionKind)}
617
- ${this.renderStepChip('Not includes', 'assertion', CoreAssertions.NotIncludesAssertionKind)}
618
- ${this.renderStepChip('Matches', 'assertion', CoreAssertions.MatchesAssertionKind)}
619
- ${this.renderStepChip('OK', 'assertion', CoreAssertions.OkAssertionKind)}
620
- ${this.renderStepChip('Not OK', 'assertion', CoreAssertions.NotOkAssertionKind)}
621
- ${this.renderStepChip('To be...', 'assertion', CoreAssertions.ToBeAssertionKind)}
622
- ${this.renderStepChip('Not to be...', 'assertion', CoreAssertions.NotToBeAssertionKind)}
623
- </div>
624
- </details>
625
- `;
626
- }
627
- renderEditor() {
628
- const { model } = this;
629
- const content = Array.isArray(model) && !!model.length ? this.renderList(model) : this.renderEmptyMessage();
630
- return html `
631
- <section aria-label="Assertions editor" class="editor">${content}</section>
632
- `;
633
- }
634
- renderEmptyMessage() {
635
- return html `
636
- <div class="empty-message">No assertions added</div>
637
- `;
638
- }
639
- renderList(model) {
640
- return html `
641
- ${model.map((item, index) => this.renderAssertion(item, index))}
642
- `;
643
- }
644
- renderAssertion(item, index) {
645
- return html `
646
- ${this.renderAssertionDescription(item)}
647
- <div class="param-row">
648
- ${this.renderToggleButton(item, index)}
649
- ${this.renderSteps(item, index)}
650
- <div class="assertion-actions">
651
- ${this.renderRenameAssertion(index)}
652
- ${this.renderDeleteAssertion(index)}
653
- </div>
654
- </div>
655
- `;
656
- }
657
- renderAssertionDescription(item) {
658
- const { description } = item;
659
- if (!description) {
660
- return nothing;
661
- }
662
- return html `
663
- <div class="assertion-description label-medium">${description}</div>
664
- `;
665
- }
666
- renderToggleButton(item, assertionIndex) {
667
- return html `
668
- <ui-switch
669
- .checked="${!!item.enabled}"
670
- @change="${this.handleToggle}"
671
- aria-label="Toggle this assertion"
672
- data-index="${assertionIndex}"
673
- class="toggle-button"
674
- ></ui-switch>
675
- `;
676
- }
677
- renderRenameAssertion(assertionIndex) {
678
- return html `
679
- <ui-icon-button
680
- aria-label="Rename this assertion"
681
- title="Rename this assertion"
682
- data-assertion-index="${assertionIndex}"
683
- @click="${this.handleRenameAssertion}"
684
- class="rename-button"
685
- >
686
- <ui-icon icon="rename" role="presentation"></ui-icon>
687
- </ui-icon-button>
688
- `;
689
- }
690
- renderDeleteAssertion(assertionIndex) {
691
- return html `
692
- <ui-icon-button
693
- aria-label="Delete this assertion"
694
- title="Delete this assertion"
695
- data-index="${assertionIndex}"
696
- @click="${this.handleRemove}"
697
- class="delete-button"
698
- >
699
- <ui-icon icon="deleteOutline" role="presentation"></ui-icon>
700
- </ui-icon-button>
701
- `;
702
- }
703
- renderSteps(item, assertionIndex) {
704
- const content = Array.isArray(item.steps) && !!item.steps.length ? this.renderStepsList(item.steps, assertionIndex) : this.renderEmptyStep(assertionIndex);
705
- return html `
706
- <div
707
- class="steps"
708
- data-index="${assertionIndex}"
709
- @drop="${this.handleDrop}"
710
- @dragover="${this.handleTargetDragOver}"
711
- @dragleave="${this.handleTargetDragLeave}"
712
- >${content}</div>
713
- `;
714
- }
715
- renderEmptyStep(assertionIndex) {
716
- return html `
717
- <span class="step-pill empty drop-target space-step-left" data-index="${assertionIndex}" @drop="${this.handleDrop}" @dragover="${this.handleTargetDragOver}">Empty slot</span>
718
- <span class="drop-info drop-target space-step-left" data-index="${assertionIndex}" @drop="${this.handleDrop}" @dragover="${this.handleTargetDragOver}">Drop an action here</span>
719
- `;
720
- }
721
- renderStepsList(steps, assertionIndex) {
722
- const items = [];
723
- steps.forEach((item, stepIndex) => {
724
- const content = this.renderStep(item, assertionIndex, stepIndex);
725
- if (content) {
726
- items.push(html `
727
- <div class="step-unit">
728
- ${this.renderDropSpacer(assertionIndex, stepIndex)}
729
- ${content}
730
- </div>
731
- `);
732
- }
733
- });
734
- return items;
735
- }
736
- renderStep(item, assertionIndex, stepIndex) {
737
- const { kind } = item;
738
- switch (kind) {
739
- case DataSteps.ReadDataSourceStepKind: return this.renderReadDataSourceStep(item, assertionIndex, stepIndex);
740
- case DataSteps.ReadValueStepKind: return this.renderReadValueStep(item, assertionIndex, stepIndex);
741
- // transformations
742
- case TransformationSteps.AsNumberStepKind: return this.renderStepPill('As number', assertionIndex, stepIndex);
743
- case TransformationSteps.AsLowerCaseStepKind: return this.renderStepPill('To lower case', assertionIndex, stepIndex);
744
- case TransformationSteps.AsUpperCaseStepKind: return this.renderStepPill('To upper case', assertionIndex, stepIndex);
745
- case TransformationSteps.TrimStepKind: return this.renderStepPill('Trim', assertionIndex, stepIndex);
746
- case TransformationSteps.RoundStepKind: return this.renderRoundStep(item, assertionIndex, stepIndex);
747
- case TransformationSteps.SubstringStepKind: return this.renderSubstringStep(item, assertionIndex, stepIndex);
748
- // assertions
749
- case CoreAssertions.EqualAssertionKind: return this.renderEqualAssertion(item, assertionIndex, stepIndex);
750
- case CoreAssertions.NotEqualAssertionKind: return this.renderNotEqualAssertion(item, assertionIndex, stepIndex);
751
- case CoreAssertions.GreaterThanAssertionKind: return this.renderGreaterThanAssertion(item, assertionIndex, stepIndex);
752
- case CoreAssertions.LessThanAssertionKind: return this.renderLessThanAssertion(item, assertionIndex, stepIndex);
753
- case CoreAssertions.IncludesAssertionKind: return this.renderIncludesAssertion(item, assertionIndex, stepIndex);
754
- case CoreAssertions.NotIncludesAssertionKind: return this.renderNotIncludesAssertion(item, assertionIndex, stepIndex);
755
- case CoreAssertions.MatchesAssertionKind: return this.renderMatchesAssertion(item, assertionIndex, stepIndex);
756
- case CoreAssertions.OkAssertionKind: return this.renderStepPill('Is OK', assertionIndex, stepIndex);
757
- case CoreAssertions.NotOkAssertionKind: return this.renderStepPill('Is not OK', assertionIndex, stepIndex);
758
- case CoreAssertions.ToBeAssertionKind: return this.renderToBeAssertion(item, assertionIndex, stepIndex);
759
- case CoreAssertions.NotToBeAssertionKind: return this.renderNotToBeAssertion(item, assertionIndex, stepIndex);
760
- default: return undefined;
761
- }
762
- }
763
- renderDropSpacer(assertionIndex, stepIndex) {
764
- return html `<div class="drop-target spacer"
765
- data-index="${assertionIndex}"
766
- data-step-index="${stepIndex}"
767
- @drop="${this.handleDrop}"
768
- @dragover="${this.handleTargetDragOver}"
769
- @dragleave="${this.handleTargetDragLeave}"
770
- > </div>`;
771
- }
772
- renderStepPill(label, assertionIndex, stepIndex) {
773
- return html `
774
- <span class="step-pill with-icon">
775
- ${label}
776
- <ui-icon-button
777
- title="Remove"
778
- aria-label="Deletes this step"
779
- @click="${this.handleRemoveStep}"
780
- data-index="${assertionIndex}"
781
- data-step-index="${stepIndex}"
782
- ><ui-icon icon="close"></ui-icon></ui-icon-button>
783
- </span>
784
- `;
785
- }
786
- renderReadDataSourceStep(item, assertionIndex, stepIndex) {
787
- const { data, source } = item;
788
- if (!data || !source) {
789
- // invalid configuration
790
- return undefined;
791
- }
792
- let label;
793
- if (source === FlowSourceEnum.response) {
794
- if (data === FlowResponseDataEnum.url) {
795
- label = 'Response URL';
796
- }
797
- else if (data === FlowResponseDataEnum.headers) {
798
- label = 'Response headers';
799
- }
800
- else if (data === FlowResponseDataEnum.status) {
801
- label = 'Status code';
802
- }
803
- else if (data === FlowResponseDataEnum.statusText) {
804
- label = 'Status message';
805
- }
806
- else if (data === FlowResponseDataEnum.body) {
807
- label = 'Response body';
808
- }
809
- }
810
- else if (source === FlowSourceEnum.request) {
811
- if (data === FlowRequestDataEnum.url) {
812
- label = 'Request URL';
813
- }
814
- else if (data === FlowRequestDataEnum.headers) {
815
- label = 'Request headers';
816
- }
817
- else if (data === FlowRequestDataEnum.body) {
818
- label = 'Request body';
819
- }
820
- else if (data === FlowRequestDataEnum.method) {
821
- label = 'Request method';
822
- }
823
- }
824
- if (!label) {
825
- return undefined;
826
- }
827
- return this.renderStepPill(label, assertionIndex, stepIndex);
828
- }
829
- renderReadValueStep(item, assertionIndex, stepIndex) {
830
- return html `
831
- <ui-text-field
832
- name="value.${assertionIndex}.${stepIndex}"
833
- data-assertion-index="${assertionIndex}"
834
- data-step-index="${stepIndex}"
835
- label="Read value"
836
- required
837
- .value="${live(item.path || '')}"
838
- @change="${this.handleReadValueStepChange}"
839
- ></ui-text-field>
840
- `;
841
- }
842
- renderRoundStep(item, assertionIndex, stepIndex) {
843
- const pill = this.renderStepPill('Round', assertionIndex, stepIndex);
844
- const { precision = 0 } = item;
845
- return html `
846
- ${pill}
847
- <ui-text-field
848
- name="precision.${assertionIndex}.${stepIndex}"
849
- data-assertion-index="${assertionIndex}"
850
- data-step-index="${stepIndex}"
851
- label="Precision"
852
- required
853
- .value="${live(String(precision))}"
854
- @change="${this.handleRoundPrecisionChange}"
855
- class="space-step-left number-input"
856
- type="number"
857
- min="0"
858
- max="100"
859
- step="1"
860
- title="The number of digits to appear after the decimal point. Should be a value between 0 and 100, inclusive."
861
- ></ui-text-field>
862
- `;
863
- }
864
- renderSubstringStep(item, assertionIndex, stepIndex) {
865
- const pill = this.renderStepPill('Substring', assertionIndex, stepIndex);
866
- const { start = 0, end } = item;
867
- return html `
868
- ${pill}
869
- <ui-text-field
870
- name="start.${assertionIndex}.${stepIndex}"
871
- data-assertion-index="${assertionIndex}"
872
- data-step-index="${stepIndex}"
873
- label="Start"
874
- required
875
- .value="${live(String(start))}"
876
- @change="${this.handleSubstringStartChange}"
877
- class="space-step-left number-input"
878
- type="number"
879
- step="1"
880
- title="The index of the first character to include in the returned substring."
881
- ></ui-text-field>
882
-
883
- <ui-text-field
884
- name="end.${assertionIndex}.${stepIndex}"
885
- data-assertion-index="${assertionIndex}"
886
- data-step-index="${stepIndex}"
887
- label="End"
888
- .value="${live(end ? String(end) : '')}"
889
- @change="${this.handleSubstringEndChange}"
890
- class="space-step-left number-input"
891
- type="number"
892
- step="1"
893
- title="The index of the first character to exclude from the returned substring."
894
- ></ui-text-field>
895
- `;
896
- }
897
- renderEqualAssertion(item, assertionIndex, stepIndex) {
898
- return html `
899
- <ui-text-field
900
- name="equal.${assertionIndex}.${stepIndex}"
901
- data-assertion-index="${assertionIndex}"
902
- data-step-index="${stepIndex}"
903
- data-kind="${CoreAssertions.EqualAssertionKind}"
904
- label="Equal to"
905
- required
906
- .value="${live(item.value || '')}"
907
- @change="${this.handleEqualAssertionValueChange}"
908
- >
909
- <ui-icon-button
910
- slot="suffix"
911
- title="Remove assertion"
912
- aria-label="Deletes this assertion"
913
- @click="${this.handleRemoveStep}"
914
- data-index="${assertionIndex}"
915
- data-step-index="${stepIndex}"
916
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
917
- </ui-text-field>
918
- `;
919
- }
920
- renderNotEqualAssertion(item, assertionIndex, stepIndex) {
921
- return html `
922
- <ui-text-field
923
- name="not-equal.${assertionIndex}.${stepIndex}"
924
- data-assertion-index="${assertionIndex}"
925
- data-step-index="${stepIndex}"
926
- data-kind="${CoreAssertions.NotEqualAssertionKind}"
927
- label="Not equal to"
928
- required
929
- .value="${live(item.value || '')}"
930
- @change="${this.handleEqualAssertionValueChange}"
931
- >
932
- <ui-icon-button
933
- slot="suffix"
934
- title="Remove assertion"
935
- aria-label="Deletes this assertion"
936
- @click="${this.handleRemoveStep}"
937
- data-index="${assertionIndex}"
938
- data-step-index="${stepIndex}"
939
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
940
- </ui-text-field>
941
- `;
942
- }
943
- renderGreaterThanAssertion(item, assertionIndex, stepIndex) {
944
- const { equal, value } = item;
945
- const label = equal ? 'Greater than equal' : 'Greater than';
946
- const effectiveValue = typeof value === 'number' ? String(value) : '';
947
- return html `
948
- <ui-text-field
949
- name="value.${assertionIndex}.${stepIndex}"
950
- data-assertion-index="${assertionIndex}"
951
- data-step-index="${stepIndex}"
952
- data-kind="${CoreAssertions.GreaterThanAssertionKind}"
953
- data-variant="${equal ? 'equal' : ''}"
954
- label="${label}"
955
- required
956
- .value="${live(effectiveValue)}"
957
- @change="${this.handleGreaterThanAssertionValueChange}"
958
- inputMode="numeric"
959
- >
960
- <ui-icon-button
961
- slot="suffix"
962
- title="Remove assertion"
963
- aria-label="Deletes this assertion"
964
- @click="${this.handleRemoveStep}"
965
- data-index="${assertionIndex}"
966
- data-step-index="${stepIndex}"
967
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
968
- </ui-text-field>
969
- `;
970
- }
971
- renderLessThanAssertion(item, assertionIndex, stepIndex) {
972
- const { equal, value } = item;
973
- const label = equal ? 'Less than equal' : 'Less than';
974
- const effectiveValue = typeof value === 'number' ? String(value) : '';
975
- return html `
976
- <ui-text-field
977
- name="value.${assertionIndex}.${stepIndex}"
978
- data-assertion-index="${assertionIndex}"
979
- data-step-index="${stepIndex}"
980
- data-kind="${CoreAssertions.LessThanAssertionKind}"
981
- data-variant="${equal ? 'equal' : ''}"
982
- label="${label}"
983
- required
984
- .value="${live(effectiveValue)}"
985
- @change="${this.handleLessThanAssertionValueChange}"
986
- inputMode="numeric"
987
- >
988
- <ui-icon-button
989
- slot="suffix"
990
- title="Remove assertion"
991
- aria-label="Deletes this assertion"
992
- @click="${this.handleRemoveStep}"
993
- data-index="${assertionIndex}"
994
- data-step-index="${stepIndex}"
995
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
996
- </ui-text-field>
997
- `;
998
- }
999
- renderIncludesAssertion(item, assertionIndex, stepIndex) {
1000
- const { value } = item;
1001
- return html `
1002
- <ui-text-field
1003
- name="includes.${assertionIndex}.${stepIndex}"
1004
- data-assertion-index="${assertionIndex}"
1005
- data-step-index="${stepIndex}"
1006
- data-kind="${CoreAssertions.IncludesAssertionKind}"
1007
- label="Includes value"
1008
- required
1009
- .value="${live(value || '')}"
1010
- @change="${this.handleIncludesAssertionValueChange}"
1011
- >
1012
- <ui-icon-button
1013
- slot="suffix"
1014
- title="Remove assertion"
1015
- aria-label="Deletes this assertion"
1016
- @click="${this.handleRemoveStep}"
1017
- data-index="${assertionIndex}"
1018
- data-step-index="${stepIndex}"
1019
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
1020
- </ui-text-field>
1021
- `;
1022
- }
1023
- renderNotIncludesAssertion(item, assertionIndex, stepIndex) {
1024
- const { value } = item;
1025
- return html `
1026
- <ui-text-field
1027
- name="not-includes.${assertionIndex}.${stepIndex}"
1028
- data-assertion-index="${assertionIndex}"
1029
- data-step-index="${stepIndex}"
1030
- data-kind="${CoreAssertions.NotIncludesAssertionKind}"
1031
- label="Not includes value"
1032
- required
1033
- .value="${live(value || '')}"
1034
- @change="${this.handleIncludesAssertionValueChange}"
1035
- >
1036
- <ui-icon-button
1037
- slot="suffix"
1038
- title="Remove assertion"
1039
- aria-label="Deletes this assertion"
1040
- @click="${this.handleRemoveStep}"
1041
- data-index="${assertionIndex}"
1042
- data-step-index="${stepIndex}"
1043
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
1044
- </ui-text-field>
1045
- `;
1046
- }
1047
- renderMatchesAssertion(item, assertionIndex, stepIndex) {
1048
- const { value } = item;
1049
- return html `
1050
- <ui-text-field
1051
- name="matches.${assertionIndex}.${stepIndex}"
1052
- data-assertion-index="${assertionIndex}"
1053
- data-step-index="${stepIndex}"
1054
- data-kind="${CoreAssertions.MatchesAssertionKind}"
1055
- label="Matches regex"
1056
- required
1057
- .value="${live(value || '')}"
1058
- @change="${this.handleMatchesAssertionValueChange}"
1059
- @input="${this.validateRegexPattern}"
1060
- invalidText="Pattern is invalid"
1061
- >
1062
- <ui-icon-button
1063
- slot="suffix"
1064
- title="Remove assertion"
1065
- aria-label="Deletes this assertion"
1066
- @click="${this.handleRemoveStep}"
1067
- data-index="${assertionIndex}"
1068
- data-step-index="${stepIndex}"
1069
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
1070
- </ui-text-field>
1071
- `;
1072
- }
1073
- renderToBeAssertion(item, assertionIndex, stepIndex) {
1074
- const { value } = item;
1075
- const types = Object.values(CoreAssertions.ToBeTypes);
1076
- return html `
1077
- <ui-text-field
1078
- name="to-be.${assertionIndex}.${stepIndex}"
1079
- data-assertion-index="${assertionIndex}"
1080
- data-step-index="${stepIndex}"
1081
- data-kind="${CoreAssertions.ToBeAssertionKind}"
1082
- label="To be..."
1083
- required
1084
- .value="${live(value || '')}"
1085
- @change="${this.handleMatchesAssertionValueChange}"
1086
- .list="${types}"
1087
- >
1088
- <ui-icon-button
1089
- slot="suffix"
1090
- title="Remove assertion"
1091
- aria-label="Deletes this assertion"
1092
- @click="${this.handleRemoveStep}"
1093
- data-index="${assertionIndex}"
1094
- data-step-index="${stepIndex}"
1095
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
1096
- </ui-text-field>
1097
- `;
1098
- }
1099
- renderNotToBeAssertion(item, assertionIndex, stepIndex) {
1100
- const { value } = item;
1101
- const types = Object.values(CoreAssertions.ToBeTypes);
1102
- return html `
1103
- <ui-text-field
1104
- name="not-to-be.${assertionIndex}.${stepIndex}"
1105
- data-assertion-index="${assertionIndex}"
1106
- data-step-index="${stepIndex}"
1107
- data-kind="${CoreAssertions.NotToBeAssertionKind}"
1108
- label="Not to be..."
1109
- required
1110
- .value="${live(value || '')}"
1111
- @change="${this.handleMatchesAssertionValueChange}"
1112
- .list="${types}"
1113
- >
1114
- <ui-icon-button
1115
- slot="suffix"
1116
- title="Remove assertion"
1117
- aria-label="Deletes this assertion"
1118
- @click="${this.handleRemoveStep}"
1119
- data-index="${assertionIndex}"
1120
- data-step-index="${stepIndex}"
1121
- ><ui-icon icon="close" role="presentation"></ui-icon></ui-icon-button>
1122
- </ui-text-field>
1123
- `;
1124
- }
1125
- renderRenameAssertionDialog() {
1126
- return html `
1127
- <ui-dialog modal class="rename-dialog" @close="${this.handleRenameDialogResult}">
1128
- <ui-icon slot="icon" icon="rename"></ui-icon>
1129
- <span slot="title">Rename assertion</span>
1130
-
1131
- <ui-text-field
1132
- name="rename"
1133
- label="Assertion description"
1134
- required
1135
- ></ui-text-field>
1136
-
1137
- <ui-button slot="button" value="dismiss" type="text">Cancel</ui-button>
1138
- <ui-button slot="button" value="confirm" type="text">Accept</ui-button>
1139
- </ui-dialog>
1140
- `;
1141
- }
1142
- }
1143
- __decorate([
1144
- property({ type: Array })
1145
- ], HttpAssertions.prototype, "model", void 0);
1146
- //# sourceMappingURL=HttpAssertions.js.map