@thinkwise/testwise 0.2.67 → 0.2.99

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 (434) hide show
  1. package/Testwise.ts +35 -0
  2. package/artifact-builder/ArtifactManager.ts +25 -2
  3. package/artifact-builder/ComponentClassModelBuilder.ts +148 -0
  4. package/artifact-builder/InterfaceGenerator.ts +31 -33
  5. package/artifact-builder/ModelDataBuilder.ts +18 -20
  6. package/artifact-builder/ModelDataRefiner.ts +23 -3
  7. package/artifact-builder/SchemaGenerator.ts +45 -35
  8. package/artifact-builder/ScreenInterfaceRefiner.ts +25 -10
  9. package/artifact-builder/SelectorBuilder.ts +30 -24
  10. package/artifact-builder/SubjectClassModelBuilder.ts +209 -0
  11. package/artifact-builder/SubjectComponentGenerator.ts +67 -246
  12. package/artifact-builder/SubjectGenerator.ts +117 -230
  13. package/artifact-builder/SubjectRegistration.ts +41 -32
  14. package/artifact-builder/TsFileModel.ts +94 -0
  15. package/artifact-builder/TsFileSerializer.ts +247 -0
  16. package/artifact-builder/helpers/DataRetriever.ts +64 -27
  17. package/artifact-builder/helpers/NamingHandler.ts +23 -78
  18. package/artifact-builder/helpers/PipelinePaths.ts +123 -0
  19. package/artifact-builder/helpers/Stopwatch.ts +10 -0
  20. package/artifact-builder/helpers/index.ts +1 -0
  21. package/artifact-builder/index.ts +4 -0
  22. package/components/BaseComponentObjects.ts +17 -0
  23. package/components/action-bar/ActionBar.ts +35 -47
  24. package/components/action-bar/ActionBarObjects.ts +2 -0
  25. package/components/action-bar/CustomActionBar.ts +6 -0
  26. package/components/cardlist/Cardlist.ts +6 -0
  27. package/components/chart/Chart.ts +6 -0
  28. package/components/combined-filter/CombinedFilter.ts +9 -0
  29. package/components/cube-view-bar/CubeViewBar.ts +6 -0
  30. package/components/export/ExportComponent.ts +12 -0
  31. package/components/filter/ExcelStyleFilterPopup.ts +35 -2
  32. package/components/filter/FilterForm.ts +10 -0
  33. package/components/filter/FilterPopup.ts +30 -9
  34. package/components/filter/FilterPopupObjects.ts +10 -3
  35. package/components/filter/FindForm.ts +7 -0
  36. package/components/filter/ManagePrefilterPopup.ts +11 -0
  37. package/components/form/Form.ts +16 -0
  38. package/components/grid/Grid.ts +18 -1
  39. package/components/maps/Maps.ts +6 -0
  40. package/components/menu/ListBarMenuComponent.ts +10 -0
  41. package/components/pivot-grid/PivotGrid.ts +6 -0
  42. package/components/pivot-grid/PivotGridFieldList.ts +7 -0
  43. package/components/pop-up/AllRowsPopUp.ts +12 -0
  44. package/components/pop-up/PopUpComponent.ts +11 -0
  45. package/components/prefilter-list/PrefilterList.ts +9 -0
  46. package/components/preview/Preview.ts +6 -0
  47. package/components/report-bar/ReportBar.ts +6 -0
  48. package/components/report-tiles/ReportTiles.ts +6 -0
  49. package/components/scheduler/Scheduler.ts +6 -0
  50. package/components/snackbar/SnackBar.ts +12 -0
  51. package/components/splitter/Splitter.ts +6 -0
  52. package/components/tab/BaseTab.ts +5 -0
  53. package/components/tab/DetailTabPage.ts +11 -0
  54. package/components/tab/Tab.ts +10 -0
  55. package/components/task/TaskBar.ts +13 -3
  56. package/components/task/TaskTiles.ts +12 -3
  57. package/components/topbar/TopBar.ts +10 -0
  58. package/components/tree-view/TreeView.ts +9 -0
  59. package/controls/DateControl.ts +40 -1
  60. package/controls/FormComboBox.ts +30 -0
  61. package/controls/GridColumnControl.ts +34 -3
  62. package/controls/InputFieldControl.ts +49 -0
  63. package/controls/LookupDropdown.ts +29 -0
  64. package/dist/Testwise.js +35 -0
  65. package/dist/Testwise.js.map +1 -1
  66. package/dist/artifact-builder/ArtifactManager.d.ts +18 -1
  67. package/dist/artifact-builder/ArtifactManager.js +24 -2
  68. package/dist/artifact-builder/ArtifactManager.js.map +1 -1
  69. package/dist/artifact-builder/ComponentClassModelBuilder.d.ts +22 -0
  70. package/dist/artifact-builder/ComponentClassModelBuilder.js +115 -0
  71. package/dist/artifact-builder/ComponentClassModelBuilder.js.map +1 -0
  72. package/dist/artifact-builder/InterfaceGenerator.d.ts +15 -6
  73. package/dist/artifact-builder/InterfaceGenerator.js +27 -26
  74. package/dist/artifact-builder/InterfaceGenerator.js.map +1 -1
  75. package/dist/artifact-builder/ModelDataBuilder.d.ts +7 -0
  76. package/dist/artifact-builder/ModelDataBuilder.js +13 -5
  77. package/dist/artifact-builder/ModelDataBuilder.js.map +1 -1
  78. package/dist/artifact-builder/ModelDataRefiner.d.ts +18 -1
  79. package/dist/artifact-builder/ModelDataRefiner.js +18 -3
  80. package/dist/artifact-builder/ModelDataRefiner.js.map +1 -1
  81. package/dist/artifact-builder/SchemaGenerator.d.ts +21 -5
  82. package/dist/artifact-builder/SchemaGenerator.js +38 -26
  83. package/dist/artifact-builder/SchemaGenerator.js.map +1 -1
  84. package/dist/artifact-builder/ScreenInterfaceRefiner.d.ts +18 -1
  85. package/dist/artifact-builder/ScreenInterfaceRefiner.js +23 -9
  86. package/dist/artifact-builder/ScreenInterfaceRefiner.js.map +1 -1
  87. package/dist/artifact-builder/SelectorBuilder.d.ts +18 -5
  88. package/dist/artifact-builder/SelectorBuilder.js +29 -14
  89. package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
  90. package/dist/artifact-builder/SubjectClassModelBuilder.d.ts +38 -0
  91. package/dist/artifact-builder/SubjectClassModelBuilder.js +158 -0
  92. package/dist/artifact-builder/SubjectClassModelBuilder.js.map +1 -0
  93. package/dist/artifact-builder/SubjectComponentGenerator.d.ts +25 -14
  94. package/dist/artifact-builder/SubjectComponentGenerator.js +65 -189
  95. package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
  96. package/dist/artifact-builder/SubjectGenerator.d.ts +32 -13
  97. package/dist/artifact-builder/SubjectGenerator.js +81 -165
  98. package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
  99. package/dist/artifact-builder/SubjectRegistration.d.ts +22 -8
  100. package/dist/artifact-builder/SubjectRegistration.js +29 -14
  101. package/dist/artifact-builder/SubjectRegistration.js.map +1 -1
  102. package/dist/artifact-builder/TsFileModel.d.ts +86 -0
  103. package/dist/artifact-builder/TsFileModel.js +2 -0
  104. package/dist/artifact-builder/TsFileModel.js.map +1 -0
  105. package/dist/artifact-builder/TsFileSerializer.d.ts +19 -0
  106. package/dist/artifact-builder/TsFileSerializer.js +225 -0
  107. package/dist/artifact-builder/TsFileSerializer.js.map +1 -0
  108. package/dist/artifact-builder/helpers/DataRetriever.d.ts +22 -3
  109. package/dist/artifact-builder/helpers/DataRetriever.js +56 -26
  110. package/dist/artifact-builder/helpers/DataRetriever.js.map +1 -1
  111. package/dist/artifact-builder/helpers/NamingHandler.d.ts +18 -6
  112. package/dist/artifact-builder/helpers/NamingHandler.js +20 -61
  113. package/dist/artifact-builder/helpers/NamingHandler.js.map +1 -1
  114. package/dist/artifact-builder/helpers/PipelinePaths.d.ts +52 -0
  115. package/dist/artifact-builder/helpers/PipelinePaths.js +99 -0
  116. package/dist/artifact-builder/helpers/PipelinePaths.js.map +1 -0
  117. package/dist/artifact-builder/helpers/Stopwatch.d.ts +10 -0
  118. package/dist/artifact-builder/helpers/Stopwatch.js +10 -0
  119. package/dist/artifact-builder/helpers/Stopwatch.js.map +1 -1
  120. package/dist/artifact-builder/helpers/index.d.ts +1 -0
  121. package/dist/artifact-builder/helpers/index.js +1 -0
  122. package/dist/artifact-builder/helpers/index.js.map +1 -1
  123. package/dist/artifact-builder/index.d.ts +4 -0
  124. package/dist/artifact-builder/index.js +4 -0
  125. package/dist/artifact-builder/index.js.map +1 -1
  126. package/dist/components/BaseComponentObjects.d.ts +17 -0
  127. package/dist/components/BaseComponentObjects.js +17 -0
  128. package/dist/components/BaseComponentObjects.js.map +1 -1
  129. package/dist/components/action-bar/ActionBar.d.ts +21 -24
  130. package/dist/components/action-bar/ActionBar.js +31 -24
  131. package/dist/components/action-bar/ActionBar.js.map +1 -1
  132. package/dist/components/action-bar/ActionBarObjects.d.ts +1 -0
  133. package/dist/components/action-bar/ActionBarObjects.js +1 -0
  134. package/dist/components/action-bar/ActionBarObjects.js.map +1 -1
  135. package/dist/components/action-bar/CustomActionBar.d.ts +6 -0
  136. package/dist/components/action-bar/CustomActionBar.js +6 -0
  137. package/dist/components/action-bar/CustomActionBar.js.map +1 -1
  138. package/dist/components/cardlist/Cardlist.d.ts +6 -0
  139. package/dist/components/cardlist/Cardlist.js +6 -0
  140. package/dist/components/cardlist/Cardlist.js.map +1 -1
  141. package/dist/components/chart/Chart.d.ts +6 -0
  142. package/dist/components/chart/Chart.js +6 -0
  143. package/dist/components/chart/Chart.js.map +1 -1
  144. package/dist/components/combined-filter/CombinedFilter.d.ts +9 -0
  145. package/dist/components/combined-filter/CombinedFilter.js +9 -0
  146. package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
  147. package/dist/components/cube-view-bar/CubeViewBar.d.ts +6 -0
  148. package/dist/components/cube-view-bar/CubeViewBar.js +6 -0
  149. package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
  150. package/dist/components/export/ExportComponent.d.ts +12 -0
  151. package/dist/components/export/ExportComponent.js +12 -0
  152. package/dist/components/export/ExportComponent.js.map +1 -1
  153. package/dist/components/filter/ExcelStyleFilterPopup.d.ts +17 -4
  154. package/dist/components/filter/ExcelStyleFilterPopup.js +35 -23
  155. package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -1
  156. package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +1 -1
  157. package/dist/components/filter/ExcelStyleFilterPopupObjects.js +2 -2
  158. package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -1
  159. package/dist/components/filter/FilterForm.d.ts +10 -0
  160. package/dist/components/filter/FilterForm.js +10 -0
  161. package/dist/components/filter/FilterForm.js.map +1 -1
  162. package/dist/components/filter/FilterPopup.d.ts +22 -4
  163. package/dist/components/filter/FilterPopup.js +17 -9
  164. package/dist/components/filter/FilterPopup.js.map +1 -1
  165. package/dist/components/filter/FilterPopupObjects.d.ts +5 -2
  166. package/dist/components/filter/FilterPopupObjects.js +5 -2
  167. package/dist/components/filter/FilterPopupObjects.js.map +1 -1
  168. package/dist/components/filter/FindForm.d.ts +7 -0
  169. package/dist/components/filter/FindForm.js +7 -0
  170. package/dist/components/filter/FindForm.js.map +1 -1
  171. package/dist/components/filter/ManagePrefilterPopup.d.ts +11 -0
  172. package/dist/components/filter/ManagePrefilterPopup.js +11 -0
  173. package/dist/components/filter/ManagePrefilterPopup.js.map +1 -1
  174. package/dist/components/form/Form.d.ts +16 -0
  175. package/dist/components/form/Form.js +16 -0
  176. package/dist/components/form/Form.js.map +1 -1
  177. package/dist/components/grid/Grid.d.ts +17 -0
  178. package/dist/components/grid/Grid.js +18 -1
  179. package/dist/components/grid/Grid.js.map +1 -1
  180. package/dist/components/maps/Maps.d.ts +6 -0
  181. package/dist/components/maps/Maps.js +6 -0
  182. package/dist/components/maps/Maps.js.map +1 -1
  183. package/dist/components/menu/ListBarMenuComponent.d.ts +10 -0
  184. package/dist/components/menu/ListBarMenuComponent.js +10 -0
  185. package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
  186. package/dist/components/pivot-grid/PivotGrid.d.ts +6 -0
  187. package/dist/components/pivot-grid/PivotGrid.js +6 -0
  188. package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
  189. package/dist/components/pivot-grid/PivotGridFieldList.d.ts +7 -0
  190. package/dist/components/pivot-grid/PivotGridFieldList.js +7 -0
  191. package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
  192. package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
  193. package/dist/components/pop-up/AllRowsPopUp.js +12 -0
  194. package/dist/components/pop-up/AllRowsPopUp.js.map +1 -1
  195. package/dist/components/pop-up/PopUpComponent.d.ts +11 -0
  196. package/dist/components/pop-up/PopUpComponent.js +11 -0
  197. package/dist/components/pop-up/PopUpComponent.js.map +1 -1
  198. package/dist/components/prefilter-list/PrefilterList.d.ts +9 -0
  199. package/dist/components/prefilter-list/PrefilterList.js +9 -0
  200. package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
  201. package/dist/components/preview/Preview.d.ts +6 -0
  202. package/dist/components/preview/Preview.js +6 -0
  203. package/dist/components/preview/Preview.js.map +1 -1
  204. package/dist/components/report-bar/ReportBar.d.ts +6 -0
  205. package/dist/components/report-bar/ReportBar.js +6 -0
  206. package/dist/components/report-bar/ReportBar.js.map +1 -1
  207. package/dist/components/report-tiles/ReportTiles.d.ts +6 -0
  208. package/dist/components/report-tiles/ReportTiles.js +6 -0
  209. package/dist/components/report-tiles/ReportTiles.js.map +1 -1
  210. package/dist/components/scheduler/Scheduler.d.ts +6 -0
  211. package/dist/components/scheduler/Scheduler.js +6 -0
  212. package/dist/components/scheduler/Scheduler.js.map +1 -1
  213. package/dist/components/snackbar/SnackBar.d.ts +12 -0
  214. package/dist/components/snackbar/SnackBar.js +12 -0
  215. package/dist/components/snackbar/SnackBar.js.map +1 -1
  216. package/dist/components/splitter/Splitter.d.ts +6 -0
  217. package/dist/components/splitter/Splitter.js +6 -0
  218. package/dist/components/splitter/Splitter.js.map +1 -1
  219. package/dist/components/tab/BaseTab.d.ts +5 -0
  220. package/dist/components/tab/BaseTab.js +5 -0
  221. package/dist/components/tab/BaseTab.js.map +1 -1
  222. package/dist/components/tab/DetailTabPage.d.ts +11 -0
  223. package/dist/components/tab/DetailTabPage.js +11 -0
  224. package/dist/components/tab/DetailTabPage.js.map +1 -1
  225. package/dist/components/tab/Tab.d.ts +10 -0
  226. package/dist/components/tab/Tab.js +10 -0
  227. package/dist/components/tab/Tab.js.map +1 -1
  228. package/dist/components/task/TaskBar.d.ts +12 -2
  229. package/dist/components/task/TaskBar.js +13 -3
  230. package/dist/components/task/TaskBar.js.map +1 -1
  231. package/dist/components/task/TaskTiles.d.ts +11 -2
  232. package/dist/components/task/TaskTiles.js +12 -3
  233. package/dist/components/task/TaskTiles.js.map +1 -1
  234. package/dist/components/topbar/TopBar.d.ts +10 -0
  235. package/dist/components/topbar/TopBar.js +10 -0
  236. package/dist/components/topbar/TopBar.js.map +1 -1
  237. package/dist/components/tree-view/TreeView.d.ts +9 -0
  238. package/dist/components/tree-view/TreeView.js +9 -0
  239. package/dist/components/tree-view/TreeView.js.map +1 -1
  240. package/dist/controls/DateControl.d.ts +39 -0
  241. package/dist/controls/DateControl.js +18 -1
  242. package/dist/controls/DateControl.js.map +1 -1
  243. package/dist/controls/FormComboBox.d.ts +30 -0
  244. package/dist/controls/FormComboBox.js +8 -0
  245. package/dist/controls/FormComboBox.js.map +1 -1
  246. package/dist/controls/GridColumnControl.d.ts +30 -0
  247. package/dist/controls/GridColumnControl.js +12 -3
  248. package/dist/controls/GridColumnControl.js.map +1 -1
  249. package/dist/controls/InputFieldControl.d.ts +49 -0
  250. package/dist/controls/InputFieldControl.js +30 -0
  251. package/dist/controls/InputFieldControl.js.map +1 -1
  252. package/dist/controls/LookupDropdown.d.ts +29 -0
  253. package/dist/controls/LookupDropdown.js +8 -0
  254. package/dist/controls/LookupDropdown.js.map +1 -1
  255. package/dist/enums/ElementTypes.d.ts +18 -0
  256. package/dist/enums/ElementTypes.js +18 -0
  257. package/dist/enums/ElementTypes.js.map +1 -1
  258. package/dist/enums/ExportFormat.d.ts +8 -0
  259. package/dist/enums/ExportFormat.js +8 -0
  260. package/dist/enums/ExportFormat.js.map +1 -1
  261. package/dist/enums/LogLevel.d.ts +17 -0
  262. package/dist/enums/LogLevel.js +17 -1
  263. package/dist/enums/LogLevel.js.map +1 -1
  264. package/dist/enums/index.d.ts +1 -0
  265. package/dist/enums/index.js +1 -0
  266. package/dist/enums/index.js.map +1 -1
  267. package/dist/helpers/ConfigChecker.d.ts +13 -0
  268. package/dist/helpers/ConfigChecker.js +13 -0
  269. package/dist/helpers/ConfigChecker.js.map +1 -1
  270. package/dist/helpers/Ensure.d.ts +13 -0
  271. package/dist/helpers/Ensure.js +13 -0
  272. package/dist/helpers/Ensure.js.map +1 -1
  273. package/dist/helpers/FlightTracker.d.ts +13 -3
  274. package/dist/helpers/FlightTracker.js +103 -17
  275. package/dist/helpers/FlightTracker.js.map +1 -1
  276. package/dist/helpers/GlobalWaitEventHandler.d.ts +13 -0
  277. package/dist/helpers/GlobalWaitEventHandler.js +13 -0
  278. package/dist/helpers/GlobalWaitEventHandler.js.map +1 -1
  279. package/dist/helpers/LoginHelper.d.ts +35 -1
  280. package/dist/helpers/LoginHelper.js +46 -11
  281. package/dist/helpers/LoginHelper.js.map +1 -1
  282. package/dist/helpers/PathResolver.d.ts +22 -0
  283. package/dist/helpers/PathResolver.js +22 -0
  284. package/dist/helpers/PathResolver.js.map +1 -1
  285. package/dist/helpers/Poll.d.ts +13 -1
  286. package/dist/helpers/Poll.js +12 -0
  287. package/dist/helpers/Poll.js.map +1 -1
  288. package/dist/helpers/RegexHelper.d.ts +15 -0
  289. package/dist/helpers/RegexHelper.js +15 -3
  290. package/dist/helpers/RegexHelper.js.map +1 -1
  291. package/dist/helpers/SubjectNavigator.d.ts +26 -0
  292. package/dist/helpers/SubjectNavigator.js +51 -0
  293. package/dist/helpers/SubjectNavigator.js.map +1 -0
  294. package/dist/helpers/UserSimulationHelper.d.ts +14 -0
  295. package/dist/helpers/UserSimulationHelper.js +14 -0
  296. package/dist/helpers/UserSimulationHelper.js.map +1 -1
  297. package/dist/helpers/index.d.ts +1 -0
  298. package/dist/helpers/index.js +1 -0
  299. package/dist/helpers/index.js.map +1 -1
  300. package/dist/index.d.ts +6 -20
  301. package/dist/index.js +1 -0
  302. package/dist/index.js.map +1 -1
  303. package/dist/interfaces/IComponentObjects.d.ts +12 -0
  304. package/dist/interfaces/IComponentSchemaMeta.d.ts +15 -0
  305. package/dist/interfaces/IComponentSchemaMeta.js +2 -0
  306. package/dist/interfaces/IComponentSchemaMeta.js.map +1 -0
  307. package/dist/interfaces/IProperty.d.ts +13 -0
  308. package/dist/interfaces/IRegisteredSubjects.d.ts +12 -0
  309. package/dist/interfaces/ISeedSubjectDraft.d.ts +16 -0
  310. package/dist/interfaces/ISeedSubjectDraft.js +2 -0
  311. package/dist/interfaces/ISeedSubjectDraft.js.map +1 -0
  312. package/dist/interfaces/ISubject.d.ts +13 -0
  313. package/dist/interfaces/ISubjectDetail.d.ts +11 -0
  314. package/dist/interfaces/ISubjectDetail.js +2 -0
  315. package/dist/interfaces/ISubjectDetail.js.map +1 -0
  316. package/dist/mcp/ArtifactResolver.d.ts +152 -0
  317. package/dist/mcp/ArtifactResolver.js +232 -0
  318. package/dist/mcp/ArtifactResolver.js.map +1 -0
  319. package/dist/mcp/index.d.ts +2 -0
  320. package/dist/mcp/index.js +2 -0
  321. package/dist/mcp/index.js.map +1 -0
  322. package/dist/page-extensions/GlobalComponents.d.ts +30 -0
  323. package/dist/page-extensions/GlobalComponents.js +30 -0
  324. package/dist/page-extensions/GlobalComponents.js.map +1 -1
  325. package/dist/page-extensions/GoToDeepLink.d.ts +9 -0
  326. package/dist/page-extensions/GoToDeepLink.js +9 -0
  327. package/dist/page-extensions/GoToDeepLink.js.map +1 -1
  328. package/dist/page-extensions/LoginFeatures.d.ts +8 -0
  329. package/dist/page-extensions/LoginFeatures.js +8 -0
  330. package/dist/page-extensions/LoginFeatures.js.map +1 -1
  331. package/dist/page-extensions/SubjectRegistry.d.ts +31 -0
  332. package/dist/page-extensions/SubjectRegistry.js +31 -0
  333. package/dist/page-extensions/SubjectRegistry.js.map +1 -1
  334. package/dist/page-extensions/UserSimulation.d.ts +21 -0
  335. package/dist/page-extensions/UserSimulation.js +21 -0
  336. package/dist/page-extensions/UserSimulation.js.map +1 -1
  337. package/dist/page-extensions/WaitEventHandler.d.ts +20 -0
  338. package/dist/page-extensions/WaitEventHandler.js +20 -0
  339. package/dist/page-extensions/WaitEventHandler.js.map +1 -1
  340. package/dist/page-overrides/ClickOverride.d.ts +23 -2
  341. package/dist/page-overrides/ClickOverride.js +34 -50
  342. package/dist/page-overrides/ClickOverride.js.map +1 -1
  343. package/dist/page-overrides/FillOverride.d.ts +23 -0
  344. package/dist/page-overrides/FillOverride.js +46 -66
  345. package/dist/page-overrides/FillOverride.js.map +1 -1
  346. package/dist/services/ConfigBuilder.d.ts +24 -0
  347. package/dist/services/ConfigBuilder.js +24 -0
  348. package/dist/services/ConfigBuilder.js.map +1 -1
  349. package/dist/services/IndiciumApi.service.d.ts +26 -0
  350. package/dist/services/IndiciumApi.service.js +40 -5
  351. package/dist/services/IndiciumApi.service.js.map +1 -1
  352. package/dist/services/Logger.d.ts +13 -0
  353. package/dist/services/Logger.js +39 -0
  354. package/dist/services/Logger.js.map +1 -1
  355. package/dist/types/Components.d.ts +18 -1
  356. package/dist/types/Components.js +0 -1
  357. package/dist/types/Components.js.map +1 -1
  358. package/dist/types/LocatorType.d.ts +5 -0
  359. package/dist/types/LocatorType.js +2 -0
  360. package/dist/types/LocatorType.js.map +1 -0
  361. package/dist/types/PollTypes.d.ts +8 -0
  362. package/dist/types/Test.d.ts +18 -0
  363. package/dist/types/Universal.d.ts +12 -0
  364. package/dist/types/index.d.ts +2 -0
  365. package/dist/types/index.js +2 -0
  366. package/dist/types/index.js.map +1 -1
  367. package/enums/ElementTypes.ts +18 -0
  368. package/enums/ExportFormat.ts +8 -0
  369. package/enums/LogLevel.ts +17 -1
  370. package/enums/index.ts +1 -0
  371. package/helpers/ConfigChecker.ts +13 -0
  372. package/helpers/Ensure.ts +13 -0
  373. package/helpers/FlightTracker.ts +109 -20
  374. package/helpers/GlobalWaitEventHandler.ts +13 -0
  375. package/helpers/LoginHelper.ts +49 -12
  376. package/helpers/PathResolver.ts +22 -0
  377. package/helpers/Poll.ts +13 -1
  378. package/helpers/RegexHelper.ts +15 -3
  379. package/helpers/SubjectNavigator.ts +57 -0
  380. package/helpers/UserSimulationHelper.ts +14 -0
  381. package/helpers/index.ts +1 -0
  382. package/index.ts +1 -0
  383. package/interfaces/IComponentObjects.ts +12 -0
  384. package/interfaces/IComponentSchemaMeta.ts +17 -0
  385. package/interfaces/IProperty.ts +13 -0
  386. package/interfaces/IRegisteredSubjects.ts +12 -0
  387. package/interfaces/ISeedSubjectDraft.ts +17 -0
  388. package/interfaces/ISubject.ts +13 -0
  389. package/interfaces/ISubjectDetail.ts +12 -0
  390. package/mcp/ArtifactResolver.ts +296 -0
  391. package/mcp/index.ts +2 -0
  392. package/package.json +20 -8
  393. package/page-extensions/GlobalComponents.ts +30 -0
  394. package/page-extensions/GoToDeepLink.ts +9 -0
  395. package/page-extensions/LoginFeatures.ts +8 -0
  396. package/page-extensions/SubjectRegistry.ts +32 -0
  397. package/page-extensions/UserSimulation.ts +21 -0
  398. package/page-extensions/WaitEventHandler.ts +20 -0
  399. package/page-overrides/ClickOverride.ts +36 -55
  400. package/page-overrides/FillOverride.ts +59 -73
  401. package/promptCredentials.js +1 -1
  402. package/scripts/Testwise.template.json +1 -1
  403. package/scripts/diagram.js +2267 -0
  404. package/scripts/main.js +84 -63
  405. package/scripts/postinstall.js +55 -42
  406. package/scripts/setup.js +91 -37
  407. package/scripts/sync.js +767 -748
  408. package/services/ConfigBuilder.ts +24 -0
  409. package/services/IndiciumApi.service.ts +44 -6
  410. package/services/Logger.ts +40 -0
  411. package/templates/copilot-instructions.md +130 -0
  412. package/templates/mcp.json +9 -0
  413. package/templates/testwise-test-expert.agent.md +453 -0
  414. package/tests/tsconfig.json +12 -0
  415. package/tsconfig.json +6 -2
  416. package/types/Components.ts +17 -2
  417. package/types/LocatorType.ts +5 -0
  418. package/types/PollTypes.ts +8 -0
  419. package/types/Test.ts +18 -0
  420. package/types/Universal.ts +12 -0
  421. package/types/index.ts +2 -0
  422. package/dist/interfaces/IStoredTestResults.d.ts +0 -5
  423. package/dist/interfaces/IStoredTestResults.js +0 -2
  424. package/dist/interfaces/IStoredTestResults.js.map +0 -1
  425. package/dist/templates/test-artifacts/SubjectPageBase.d.ts +0 -5
  426. package/dist/templates/test-artifacts/SubjectPageBase.js +0 -6
  427. package/dist/templates/test-artifacts/SubjectPageBase.js.map +0 -1
  428. package/dist/templates/test-artifacts/screens/index.d.ts +0 -1
  429. package/dist/templates/test-artifacts/screens/index.js +0 -2
  430. package/dist/templates/test-artifacts/screens/index.js.map +0 -1
  431. package/dist/templates/test-artifacts/subjects/index.d.ts +0 -1
  432. package/dist/templates/test-artifacts/subjects/index.js +0 -2
  433. package/dist/templates/test-artifacts/subjects/index.js.map +0 -1
  434. package/interfaces/IStoredTestResults.ts +0 -6
@@ -1,31 +1,47 @@
1
1
  /** biome-ignore-all lint/suspicious/noExplicitAny: reason 42 */
2
2
  import * as fs from 'node:fs';
3
3
  import * as path from 'node:path';
4
- import { dirname } from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
- import { Form, Grid } from '../components/index.js';
4
+ import type { IComponentSchemaMeta } from '../interfaces/IComponentSchemaMeta.js';
7
5
  import type { SubjectComponents } from '../types/Components.js';
8
- import { NamingHandler } from './helpers/NamingHandler.js';
6
+ import { ComponentClassModelBuilder } from './ComponentClassModelBuilder.js';
7
+ import { NamingHandler, PipelinePaths } from './helpers/index.js';
9
8
  import { SelectorBuilder } from './SelectorBuilder.js';
10
-
9
+ import { appendComponentClass, refineComponentInterface } from './TsFileSerializer.js';
10
+
11
+ /**
12
+ * **Pipeline Step 6b** — Appends typed component class bodies to the raw
13
+ * screen interface files that `InterfaceGenerator` (quicktype) produced.
14
+ *
15
+ * **What it does:**
16
+ * - Scans the `Components/` subfolder inside each subject folder in
17
+ * `test-artifacts/subjects/`.
18
+ * - For each component interface file (e.g. `EmployeeForm.ts`), it reads the
19
+ * corresponding `.meta.json` sidecar to learn the control types of each
20
+ * property, then uses `ComponentClassModelBuilder` to produce an in-memory
21
+ * class model.
22
+ * - `TsFileSerializer.appendComponentClass` writes the class body (with typed
23
+ * property constructors) directly into the same interface file.
24
+ * - Also runs `refineComponentInterface` to clean up quicktype artefacts
25
+ * (removes the `Locator` import, adds correct Testwise imports).
26
+ *
27
+ * **When it runs:** Step 6 of `testwise sync`, in parallel with
28
+ * `SubjectGenerator` (both write into `test-artifacts/subjects/`).
29
+ */
11
30
  export class SubjectComponentGenerator {
12
- private static readonly SUBJECTS_RELATIVE_PATH = 'test-artifacts/subjects';
13
-
14
- private readonly _currentFilename: string;
15
- private readonly _currentDirname: string;
16
31
  private readonly _subjectsDirectory: string;
32
+ private readonly _schemasDirectory: string;
17
33
  private readonly _selectorBuilder: SelectorBuilder;
18
34
  private readonly _namingHandler: NamingHandler;
35
+ private readonly _paths: PipelinePaths;
36
+ private readonly _modelBuilder: ComponentClassModelBuilder;
19
37
 
20
- constructor() {
21
- this._currentFilename = fileURLToPath(import.meta.url);
22
- this._currentDirname = dirname(this._currentFilename);
23
- this._subjectsDirectory = path.resolve(
24
- this._currentDirname,
25
- `../../${SubjectComponentGenerator.SUBJECTS_RELATIVE_PATH}`
26
- );
38
+ constructor(paths?: PipelinePaths) {
39
+ this._paths = paths ?? new PipelinePaths();
40
+ this._subjectsDirectory = this._paths.subjects;
41
+ this._schemasDirectory = this._paths.schemas;
27
42
  this._selectorBuilder = new SelectorBuilder();
28
43
  this._namingHandler = new NamingHandler();
44
+ this._modelBuilder = new ComponentClassModelBuilder(this._namingHandler, this._selectorBuilder);
29
45
  }
30
46
 
31
47
  public run(): void {
@@ -38,6 +54,13 @@ export class SubjectComponentGenerator {
38
54
  });
39
55
  }
40
56
 
57
+ private loadSchemaMeta(componentFileName: string): IComponentSchemaMeta | null {
58
+ const baseName = path.basename(componentFileName, '.ts');
59
+ const metaPath = path.join(this._schemasDirectory, `${baseName}.meta.json`);
60
+ if (!fs.existsSync(metaPath)) return null;
61
+ return JSON.parse(fs.readFileSync(metaPath, 'utf-8')) as IComponentSchemaMeta;
62
+ }
63
+
41
64
  private refineSubjectComponents(): void {
42
65
  const subjectFolders = this.getAllSubjectFolders();
43
66
 
@@ -46,129 +69,57 @@ export class SubjectComponentGenerator {
46
69
 
47
70
  if (!fs.existsSync(componentsDirectory) || !fs.statSync(componentsDirectory).isDirectory()) return;
48
71
 
49
- const componentToRefine = new Map<string, typeof Grid | typeof Form>([
50
- ['Grid', Grid],
51
- ['Form', Form]
52
- ]);
53
-
54
72
  const componentFiles = fs.readdirSync(componentsDirectory);
55
73
 
56
74
  componentFiles.forEach((componentFile) => {
57
- const componentName = this.getComponentNameFromFile(componentFile);
58
- const componentClass = componentToRefine.get(componentName);
75
+ const meta = this.loadSchemaMeta(componentFile);
76
+ if (!meta) return;
59
77
 
60
- if (componentClass) {
61
- this.refine(path.join(componentsDirectory, componentFile), componentClass);
62
- }
78
+ this.refine(path.join(componentsDirectory, componentFile), meta);
63
79
  });
64
80
  });
65
81
  }
66
82
 
67
- private getComponentNameFromFile(fileName: string): string {
68
- const componentName = fileName
69
- .split(/(?=[A-Z])/)
70
- .pop()
71
- ?.replace('.ts', '');
83
+ private refine(componentDirPath: string, meta: IComponentSchemaMeta): void {
84
+ if (!fs.existsSync(componentDirPath)) return;
72
85
 
73
- if (!componentName) throw new Error(`Could not extract component name from file: ${fileName}`);
86
+ const componentName = meta.componentType;
87
+ const componentFile: { content: string } = { content: fs.readFileSync(componentDirPath, 'utf-8') };
74
88
 
75
- return componentName;
76
- }
77
-
78
- private refine<T>(componentDirPath: string, component: T): void {
79
- if (fs.existsSync(componentDirPath)) {
80
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
- const componentName: SubjectComponents = (component as any).name ?? component;
82
- const componentFile: { content: string } = { content: fs.readFileSync(componentDirPath, 'utf-8') };
89
+ componentFile.content = refineComponentInterface(componentFile.content, componentName as SubjectComponents);
83
90
 
84
- this.removeLocatorInterface(componentFile);
85
- this.addComponentImports(componentFile, componentName);
86
- this.setSubjectExtendsComponent(componentFile, componentName);
87
-
88
- if (componentName === 'Grid') {
89
- this.transformGridInterface(componentFile);
90
- }
91
+ const interfaceMatches: RegExpMatchArray | null = componentFile.content.match(/export interface (\w+) extends/);
91
92
 
92
- const interfaceMatches: RegExpMatchArray | null = componentFile.content.match(/export interface (\w+) extends/);
93
-
94
- if (interfaceMatches) {
95
- const mainInterface = interfaceMatches[1];
96
- const matchingProperties = this.getPropertyNamesFromInterface(componentFile, mainInterface);
97
- let propertyDeclarations = '';
98
- let assignments = '';
99
- let gridGetters = '';
100
-
101
- if (matchingProperties?.[1]) {
102
- const propertyLines: string[] = this.convertStringsToArray(matchingProperties[1]);
103
-
104
- if (componentName === 'Grid') {
105
- gridGetters = this.generateGridGetters(propertyLines, componentName);
106
- } else {
107
- propertyDeclarations = this.generatePropertyDeclarations(propertyLines, componentName);
108
-
109
- if (componentName === 'Form') {
110
- this.transformInterfaceTypes(componentFile);
111
- }
112
-
113
- assignments = this.getPropertyInitializations(propertyLines, componentName);
114
- this.addImportsDynamically(componentFile);
115
- }
116
- }
117
-
118
- const classBody =
119
- componentName === 'Grid'
120
- ? `\nexport class ${mainInterface}Component extends ${componentName} implements ${mainInterface} {\n\n` +
121
- ` private _context: Locator;\n\n` +
122
- ` constructor(context: Locator) {\n super(context);\n this._context = context;\n }\n\n${gridGetters}}\n`
123
- : `\nexport class ${mainInterface}Component extends ${componentName} implements ${mainInterface} {\n\n` +
124
- ` private _context: Locator;\n` +
125
- `${propertyDeclarations}\n\n` +
126
- ` constructor(context: Locator) {\n super(context);\n this._context = context;\n${assignments}\n }\n}\n`;
127
-
128
- componentFile.content += classBody;
129
- }
93
+ if (interfaceMatches) {
94
+ const mainInterface = interfaceMatches[1];
95
+ const matchingProperties = this.getPropertyNamesFromInterface(componentFile, mainInterface);
130
96
 
131
- const subjectMatch: RegExpMatchArray | null = componentDirPath.match(/subjects[/](\w+)[/]/);
132
- const subjectName: string | null = subjectMatch ? subjectMatch[1] : null;
97
+ if (matchingProperties?.[1]) {
98
+ const propertyLines: string[] = this.convertStringsToArray(matchingProperties[1]);
133
99
 
134
- if (subjectName) {
135
- const formattedSubjectName = this._namingHandler.toPascalCase(subjectName);
136
- const subjectFolder = this.getSubjectFolderPath(formattedSubjectName);
137
- const fileName = path.basename(componentDirPath);
100
+ const model = this._modelBuilder.build(mainInterface, componentName as SubjectComponents, propertyLines, meta);
138
101
 
139
- this.verifyDirectoryExists(subjectFolder);
140
- fs.writeFileSync(path.join(subjectFolder, fileName), componentFile.content, 'utf-8');
141
- } else {
142
- fs.writeFileSync(componentDirPath, componentFile.content, 'utf-8');
102
+ componentFile.content = appendComponentClass(componentFile.content, model);
143
103
  }
144
104
  }
145
- }
146
105
 
147
- private transformGridInterface(componentFile: { content: string }): void {
148
- const interfaceRegex = /export interface \w+ extends Grid \{([\s\S]*?)\}/g;
106
+ const subjectMatch: RegExpMatchArray | null = componentDirPath.match(/subjects[/\\](\w+)[/\\]/);
107
+ const subjectName: string | null = subjectMatch ? subjectMatch[1] : null;
149
108
 
150
- componentFile.content = componentFile.content.replace(interfaceRegex, (match, body) => {
151
- const transformedBody = body.replace(/(\w+)\s*:\s*Locator(?:\[\])?;/g, 'readonly $1: IGridColumnControl;');
152
- return match.replace(body, transformedBody);
153
- });
154
- }
109
+ if (subjectName) {
110
+ const formattedSubjectName = this._namingHandler.toSubjectPascalCase(subjectName);
111
+ const subjectFolder = this.getSubjectFolderPath(formattedSubjectName);
112
+ const fileName = path.basename(componentDirPath);
155
113
 
156
- private generateGridGetters(propertyLines: string[], componentName: SubjectComponents): string {
157
- return propertyLines
158
- .map((line) => {
159
- const property = line.replace('readonly', '').split(':')[0].trim();
160
- const columnId = this._selectorBuilder.getElementId(property, componentName);
161
-
162
- return ` public get ${property}(): IGridColumnControl {\n return createGridColumnControl(this._context, '${columnId}');\n }\n`;
163
- })
164
- .join('\n');
114
+ this.verifyDirectoryExists(subjectFolder);
115
+ fs.writeFileSync(path.join(subjectFolder, fileName), componentFile.content, 'utf-8');
116
+ } else {
117
+ fs.writeFileSync(componentDirPath, componentFile.content, 'utf-8');
118
+ }
165
119
  }
166
120
 
167
121
  private getSubjectFolderPath(formattedSubjectName: string): string {
168
- return path.resolve(
169
- this._currentDirname,
170
- `../../${SubjectComponentGenerator.SUBJECTS_RELATIVE_PATH}/${formattedSubjectName}/Components/`
171
- );
122
+ return this._paths.subjectComponentsFolder(formattedSubjectName);
172
123
  }
173
124
 
174
125
  private verifyDirectoryExists(directoryPath: string): void {
@@ -177,114 +128,6 @@ export class SubjectComponentGenerator {
177
128
  }
178
129
  }
179
130
 
180
- private getPropertyInitializations(propertyLines: string[], componentName: SubjectComponents): string {
181
- return propertyLines
182
- .map((line) => {
183
- const property = line.split(':')[0].replace(/\?$/, '').trim();
184
- const pageLocatorString = this._selectorBuilder.getLocatorString(property, componentName);
185
-
186
- if (componentName === 'Form') {
187
- if (property.endsWith('Lookup'))
188
- return ` this.${property} = createLookupDropdown(this._context, '${this._selectorBuilder.getElementId(property, componentName)}');`;
189
-
190
- if (property.endsWith('DatePicker'))
191
- return ` this.${property} = createDateControl(this._context, '${this._selectorBuilder.getElementId(property, componentName)}');`;
192
-
193
- if (property.endsWith('ComboBox'))
194
- return ` this.${property} = createFormComboBox(this._context, '${this._selectorBuilder.getElementId(property, componentName)}');`;
195
-
196
- if (property.endsWith('Field'))
197
- return ` this.${property} = createInputFieldControl(this._context, '${this._selectorBuilder.getElementId(property, componentName)}');`;
198
- }
199
-
200
- return ` this.${property} = ${pageLocatorString};`;
201
- })
202
- .join('\n');
203
- }
204
-
205
- private addImportsDynamically(componentFile: { content: string }): void {
206
- const lookupType = 'ILookupDropdown';
207
- const comboBoxType = 'IFormComboBox';
208
- const inputFieldType = 'IInputFieldControl';
209
- const datePickerType = 'IDateControl';
210
-
211
- const inputFieldImport =
212
- "import { createInputFieldControl, type IInputFieldControl } from '../../../../controls/InputFieldControl.js';";
213
-
214
- const lookupImport =
215
- "import { createLookupDropdown, type ILookupDropdown } from '../../../../controls/LookupDropdown.js';";
216
-
217
- const comboBoxImport =
218
- "import { createFormComboBox, type IFormComboBox } from '../../../../controls/FormComboBox.js';";
219
-
220
- const datePickerImport =
221
- "import { createDateControl, type IDateControl } from '../../../../controls/DateControl.js';";
222
-
223
- if (componentFile.content.includes(lookupType) && !componentFile.content.includes(lookupImport)) {
224
- componentFile.content = `${lookupImport}\n${componentFile.content}`;
225
- }
226
-
227
- if (componentFile.content.includes(comboBoxType) && !componentFile.content.includes(comboBoxImport)) {
228
- componentFile.content = `${comboBoxImport}\n${componentFile.content}`;
229
- }
230
-
231
- if (componentFile.content.includes(inputFieldType) && !componentFile.content.includes(inputFieldImport)) {
232
- componentFile.content = `${inputFieldImport}\n${componentFile.content}`;
233
- }
234
-
235
- if (componentFile.content.includes(datePickerType) && !componentFile.content.includes(datePickerImport)) {
236
- componentFile.content = `${datePickerImport}\n${componentFile.content}`;
237
- }
238
- }
239
-
240
- private generatePropertyDeclarations(propertiesToConvert: string[], componentName: SubjectComponents): string {
241
- return propertiesToConvert
242
- .map((line) => {
243
- const property = line.replace(/^\s+/, '').split(':')[0].replace(/\?$/, '').trim();
244
-
245
- if (componentName === 'Form' && property.endsWith('Lookup')) {
246
- return ` ${property}: ILookupDropdown;`;
247
- }
248
-
249
- if (componentName === 'Form' && property.endsWith('ComboBox')) {
250
- return ` ${property}: IFormComboBox;`;
251
- }
252
-
253
- if (componentName === 'Form' && property.endsWith('Field')) {
254
- return ` ${property}: IInputFieldControl;`;
255
- }
256
-
257
- if (componentName === 'Form' && property.endsWith('DatePicker')) {
258
- return ` ${property}: IDateControl;`;
259
- }
260
-
261
- return ` ${property}: Locator;`;
262
- })
263
- .join('\n');
264
- }
265
-
266
- private transformInterfaceTypes(componentFile: { content: string }): void {
267
- const interfaceRegex = /export interface \w+ extends Form \{([\s\S]*?)\}/g;
268
-
269
- const typeMapping: Record<string, string> = {
270
- Lookup: 'ILookupDropdown',
271
- ComboBox: 'IFormComboBox',
272
- Field: 'IInputFieldControl',
273
- DatePicker: 'IDateControl'
274
- };
275
-
276
- componentFile.content = componentFile.content.replace(interfaceRegex, (match, interfaceBody) => {
277
- const propertyRegex = /(\w+(Lookup|ComboBox|Field|DatePicker))\s*:\s*Locator;/g;
278
-
279
- const updatedBody = interfaceBody.replace(propertyRegex, (_match: string, propName: string, suffix: string) => {
280
- const newType = typeMapping[suffix];
281
- return `${propName}: ${newType};`;
282
- });
283
-
284
- return match.replace(interfaceBody, updatedBody);
285
- });
286
- }
287
-
288
131
  private convertStringsToArray(content: string): string[] {
289
132
  return content
290
133
  .split('\n')
@@ -298,26 +141,4 @@ export class SubjectComponentGenerator {
298
141
  ): RegExpMatchArray | null {
299
142
  return componentFile.content.match(new RegExp(`export interface ${mainInterface} extends [^{]+{([^}]*)}`));
300
143
  }
301
-
302
- private setSubjectExtendsComponent(componentFile: { content: string }, componentName: string): void {
303
- componentFile.content = componentFile.content.replace(
304
- /export interface (\w+) \{/,
305
- `export interface $1 extends ${componentName} {`
306
- );
307
- }
308
-
309
- private addComponentImports(componentFile: { content: string }, componentName: string): void {
310
- // biome-ignore lint/style/useTemplate: reason 42
311
- componentFile.content = `import type { Locator } from '@playwright/test';\n\n` + componentFile.content;
312
-
313
- if (componentName === 'Grid') {
314
- componentFile.content = `import { createGridColumnControl, type IGridColumnControl } from '../../../../controls/GridColumnControl.js';\n${componentFile.content}`;
315
- }
316
-
317
- componentFile.content = `import { ${componentName} } from '../../../../components/index.js';\n${componentFile.content}`;
318
- }
319
-
320
- private removeLocatorInterface(componentFile: { content: string }): void {
321
- componentFile.content = componentFile.content.replace(/export interface Locator {[^}]*}\s*/g, '');
322
- }
323
144
  }