@thinkwise/testwise 0.2.62 → 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 (458) 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 +83 -10
  32. package/components/filter/ExcelStyleFilterPopupObjects.ts +29 -3
  33. package/components/filter/FilterForm.ts +10 -0
  34. package/components/filter/FilterPopup.ts +30 -9
  35. package/components/filter/FilterPopupObjects.ts +10 -3
  36. package/components/filter/FindForm.ts +7 -0
  37. package/components/filter/ManagePrefilterPopup.ts +11 -0
  38. package/components/form/Form.ts +16 -0
  39. package/components/grid/Grid.ts +50 -14
  40. package/components/grid/GridObjects.ts +0 -15
  41. package/components/maps/Maps.ts +6 -0
  42. package/components/menu/ListBarMenuComponent.ts +10 -0
  43. package/components/pivot-grid/PivotGrid.ts +6 -0
  44. package/components/pivot-grid/PivotGridFieldList.ts +7 -0
  45. package/components/pop-up/AllRowsPopUp.ts +12 -0
  46. package/components/pop-up/PopUpComponent.ts +11 -0
  47. package/components/prefilter-list/PrefilterList.ts +9 -0
  48. package/components/preview/Preview.ts +6 -0
  49. package/components/report-bar/ReportBar.ts +6 -0
  50. package/components/report-tiles/ReportTiles.ts +6 -0
  51. package/components/scheduler/Scheduler.ts +6 -0
  52. package/components/snackbar/SnackBar.ts +12 -0
  53. package/components/splitter/Splitter.ts +6 -0
  54. package/components/tab/BaseTab.ts +5 -0
  55. package/components/tab/DetailTabPage.ts +11 -0
  56. package/components/tab/Tab.ts +10 -0
  57. package/components/task/TaskBar.ts +13 -3
  58. package/components/task/TaskTiles.ts +12 -3
  59. package/components/topbar/TopBar.ts +10 -0
  60. package/components/tree-view/TreeView.ts +9 -0
  61. package/controls/DateControl.ts +47 -9
  62. package/controls/DateControlObjects.ts +15 -0
  63. package/controls/FormComboBox.ts +43 -26
  64. package/controls/FormComboBoxObjects.ts +27 -0
  65. package/controls/GridColumnControl.ts +35 -4
  66. package/controls/GridColumnControlObjects.ts +1 -1
  67. package/controls/InputFieldControl.ts +61 -15
  68. package/controls/InputFieldControlObjects.ts +19 -0
  69. package/controls/LookupDropdown.ts +59 -31
  70. package/controls/LookupDropdownObjects.ts +19 -0
  71. package/dist/Testwise.js +35 -0
  72. package/dist/Testwise.js.map +1 -1
  73. package/dist/artifact-builder/ArtifactManager.d.ts +18 -1
  74. package/dist/artifact-builder/ArtifactManager.js +24 -2
  75. package/dist/artifact-builder/ArtifactManager.js.map +1 -1
  76. package/dist/artifact-builder/ComponentClassModelBuilder.d.ts +22 -0
  77. package/dist/artifact-builder/ComponentClassModelBuilder.js +115 -0
  78. package/dist/artifact-builder/ComponentClassModelBuilder.js.map +1 -0
  79. package/dist/artifact-builder/InterfaceGenerator.d.ts +15 -6
  80. package/dist/artifact-builder/InterfaceGenerator.js +27 -26
  81. package/dist/artifact-builder/InterfaceGenerator.js.map +1 -1
  82. package/dist/artifact-builder/ModelDataBuilder.d.ts +7 -0
  83. package/dist/artifact-builder/ModelDataBuilder.js +13 -5
  84. package/dist/artifact-builder/ModelDataBuilder.js.map +1 -1
  85. package/dist/artifact-builder/ModelDataRefiner.d.ts +18 -1
  86. package/dist/artifact-builder/ModelDataRefiner.js +18 -3
  87. package/dist/artifact-builder/ModelDataRefiner.js.map +1 -1
  88. package/dist/artifact-builder/SchemaGenerator.d.ts +21 -5
  89. package/dist/artifact-builder/SchemaGenerator.js +38 -26
  90. package/dist/artifact-builder/SchemaGenerator.js.map +1 -1
  91. package/dist/artifact-builder/ScreenInterfaceRefiner.d.ts +18 -1
  92. package/dist/artifact-builder/ScreenInterfaceRefiner.js +23 -9
  93. package/dist/artifact-builder/ScreenInterfaceRefiner.js.map +1 -1
  94. package/dist/artifact-builder/SelectorBuilder.d.ts +18 -5
  95. package/dist/artifact-builder/SelectorBuilder.js +29 -14
  96. package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
  97. package/dist/artifact-builder/SubjectClassModelBuilder.d.ts +38 -0
  98. package/dist/artifact-builder/SubjectClassModelBuilder.js +158 -0
  99. package/dist/artifact-builder/SubjectClassModelBuilder.js.map +1 -0
  100. package/dist/artifact-builder/SubjectComponentGenerator.d.ts +25 -14
  101. package/dist/artifact-builder/SubjectComponentGenerator.js +65 -189
  102. package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
  103. package/dist/artifact-builder/SubjectGenerator.d.ts +32 -13
  104. package/dist/artifact-builder/SubjectGenerator.js +81 -165
  105. package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
  106. package/dist/artifact-builder/SubjectRegistration.d.ts +22 -8
  107. package/dist/artifact-builder/SubjectRegistration.js +29 -14
  108. package/dist/artifact-builder/SubjectRegistration.js.map +1 -1
  109. package/dist/artifact-builder/TsFileModel.d.ts +86 -0
  110. package/dist/artifact-builder/TsFileModel.js +2 -0
  111. package/dist/artifact-builder/TsFileModel.js.map +1 -0
  112. package/dist/artifact-builder/TsFileSerializer.d.ts +19 -0
  113. package/dist/artifact-builder/TsFileSerializer.js +225 -0
  114. package/dist/artifact-builder/TsFileSerializer.js.map +1 -0
  115. package/dist/artifact-builder/helpers/DataRetriever.d.ts +22 -3
  116. package/dist/artifact-builder/helpers/DataRetriever.js +56 -26
  117. package/dist/artifact-builder/helpers/DataRetriever.js.map +1 -1
  118. package/dist/artifact-builder/helpers/NamingHandler.d.ts +18 -6
  119. package/dist/artifact-builder/helpers/NamingHandler.js +20 -61
  120. package/dist/artifact-builder/helpers/NamingHandler.js.map +1 -1
  121. package/dist/artifact-builder/helpers/PipelinePaths.d.ts +52 -0
  122. package/dist/artifact-builder/helpers/PipelinePaths.js +99 -0
  123. package/dist/artifact-builder/helpers/PipelinePaths.js.map +1 -0
  124. package/dist/artifact-builder/helpers/Stopwatch.d.ts +10 -0
  125. package/dist/artifact-builder/helpers/Stopwatch.js +10 -0
  126. package/dist/artifact-builder/helpers/Stopwatch.js.map +1 -1
  127. package/dist/artifact-builder/helpers/index.d.ts +1 -0
  128. package/dist/artifact-builder/helpers/index.js +1 -0
  129. package/dist/artifact-builder/helpers/index.js.map +1 -1
  130. package/dist/artifact-builder/index.d.ts +4 -0
  131. package/dist/artifact-builder/index.js +4 -0
  132. package/dist/artifact-builder/index.js.map +1 -1
  133. package/dist/components/BaseComponentObjects.d.ts +17 -0
  134. package/dist/components/BaseComponentObjects.js +17 -0
  135. package/dist/components/BaseComponentObjects.js.map +1 -1
  136. package/dist/components/action-bar/ActionBar.d.ts +21 -24
  137. package/dist/components/action-bar/ActionBar.js +31 -24
  138. package/dist/components/action-bar/ActionBar.js.map +1 -1
  139. package/dist/components/action-bar/ActionBarObjects.d.ts +1 -0
  140. package/dist/components/action-bar/ActionBarObjects.js +1 -0
  141. package/dist/components/action-bar/ActionBarObjects.js.map +1 -1
  142. package/dist/components/action-bar/CustomActionBar.d.ts +6 -0
  143. package/dist/components/action-bar/CustomActionBar.js +6 -0
  144. package/dist/components/action-bar/CustomActionBar.js.map +1 -1
  145. package/dist/components/cardlist/Cardlist.d.ts +6 -0
  146. package/dist/components/cardlist/Cardlist.js +6 -0
  147. package/dist/components/cardlist/Cardlist.js.map +1 -1
  148. package/dist/components/chart/Chart.d.ts +6 -0
  149. package/dist/components/chart/Chart.js +6 -0
  150. package/dist/components/chart/Chart.js.map +1 -1
  151. package/dist/components/combined-filter/CombinedFilter.d.ts +9 -0
  152. package/dist/components/combined-filter/CombinedFilter.js +9 -0
  153. package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
  154. package/dist/components/cube-view-bar/CubeViewBar.d.ts +6 -0
  155. package/dist/components/cube-view-bar/CubeViewBar.js +6 -0
  156. package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
  157. package/dist/components/export/ExportComponent.d.ts +12 -0
  158. package/dist/components/export/ExportComponent.js +12 -0
  159. package/dist/components/export/ExportComponent.js.map +1 -1
  160. package/dist/components/filter/ExcelStyleFilterPopup.d.ts +25 -2
  161. package/dist/components/filter/ExcelStyleFilterPopup.js +60 -6
  162. package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -1
  163. package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +8 -1
  164. package/dist/components/filter/ExcelStyleFilterPopupObjects.js +15 -2
  165. package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -1
  166. package/dist/components/filter/FilterForm.d.ts +10 -0
  167. package/dist/components/filter/FilterForm.js +10 -0
  168. package/dist/components/filter/FilterForm.js.map +1 -1
  169. package/dist/components/filter/FilterPopup.d.ts +22 -4
  170. package/dist/components/filter/FilterPopup.js +17 -9
  171. package/dist/components/filter/FilterPopup.js.map +1 -1
  172. package/dist/components/filter/FilterPopupObjects.d.ts +5 -2
  173. package/dist/components/filter/FilterPopupObjects.js +5 -2
  174. package/dist/components/filter/FilterPopupObjects.js.map +1 -1
  175. package/dist/components/filter/FindForm.d.ts +7 -0
  176. package/dist/components/filter/FindForm.js +7 -0
  177. package/dist/components/filter/FindForm.js.map +1 -1
  178. package/dist/components/filter/ManagePrefilterPopup.d.ts +11 -0
  179. package/dist/components/filter/ManagePrefilterPopup.js +11 -0
  180. package/dist/components/filter/ManagePrefilterPopup.js.map +1 -1
  181. package/dist/components/form/Form.d.ts +16 -0
  182. package/dist/components/form/Form.js +16 -0
  183. package/dist/components/form/Form.js.map +1 -1
  184. package/dist/components/grid/Grid.d.ts +20 -1
  185. package/dist/components/grid/Grid.js +35 -25
  186. package/dist/components/grid/Grid.js.map +1 -1
  187. package/dist/components/grid/GridObjects.d.ts +0 -4
  188. package/dist/components/grid/GridObjects.js +0 -6
  189. package/dist/components/grid/GridObjects.js.map +1 -1
  190. package/dist/components/maps/Maps.d.ts +6 -0
  191. package/dist/components/maps/Maps.js +6 -0
  192. package/dist/components/maps/Maps.js.map +1 -1
  193. package/dist/components/menu/ListBarMenuComponent.d.ts +10 -0
  194. package/dist/components/menu/ListBarMenuComponent.js +10 -0
  195. package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
  196. package/dist/components/pivot-grid/PivotGrid.d.ts +6 -0
  197. package/dist/components/pivot-grid/PivotGrid.js +6 -0
  198. package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
  199. package/dist/components/pivot-grid/PivotGridFieldList.d.ts +7 -0
  200. package/dist/components/pivot-grid/PivotGridFieldList.js +7 -0
  201. package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
  202. package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
  203. package/dist/components/pop-up/AllRowsPopUp.js +12 -0
  204. package/dist/components/pop-up/AllRowsPopUp.js.map +1 -1
  205. package/dist/components/pop-up/PopUpComponent.d.ts +11 -0
  206. package/dist/components/pop-up/PopUpComponent.js +11 -0
  207. package/dist/components/pop-up/PopUpComponent.js.map +1 -1
  208. package/dist/components/prefilter-list/PrefilterList.d.ts +9 -0
  209. package/dist/components/prefilter-list/PrefilterList.js +9 -0
  210. package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
  211. package/dist/components/preview/Preview.d.ts +6 -0
  212. package/dist/components/preview/Preview.js +6 -0
  213. package/dist/components/preview/Preview.js.map +1 -1
  214. package/dist/components/report-bar/ReportBar.d.ts +6 -0
  215. package/dist/components/report-bar/ReportBar.js +6 -0
  216. package/dist/components/report-bar/ReportBar.js.map +1 -1
  217. package/dist/components/report-tiles/ReportTiles.d.ts +6 -0
  218. package/dist/components/report-tiles/ReportTiles.js +6 -0
  219. package/dist/components/report-tiles/ReportTiles.js.map +1 -1
  220. package/dist/components/scheduler/Scheduler.d.ts +6 -0
  221. package/dist/components/scheduler/Scheduler.js +6 -0
  222. package/dist/components/scheduler/Scheduler.js.map +1 -1
  223. package/dist/components/snackbar/SnackBar.d.ts +12 -0
  224. package/dist/components/snackbar/SnackBar.js +12 -0
  225. package/dist/components/snackbar/SnackBar.js.map +1 -1
  226. package/dist/components/splitter/Splitter.d.ts +6 -0
  227. package/dist/components/splitter/Splitter.js +6 -0
  228. package/dist/components/splitter/Splitter.js.map +1 -1
  229. package/dist/components/tab/BaseTab.d.ts +5 -0
  230. package/dist/components/tab/BaseTab.js +5 -0
  231. package/dist/components/tab/BaseTab.js.map +1 -1
  232. package/dist/components/tab/DetailTabPage.d.ts +11 -0
  233. package/dist/components/tab/DetailTabPage.js +11 -0
  234. package/dist/components/tab/DetailTabPage.js.map +1 -1
  235. package/dist/components/tab/Tab.d.ts +10 -0
  236. package/dist/components/tab/Tab.js +10 -0
  237. package/dist/components/tab/Tab.js.map +1 -1
  238. package/dist/components/task/TaskBar.d.ts +12 -2
  239. package/dist/components/task/TaskBar.js +13 -3
  240. package/dist/components/task/TaskBar.js.map +1 -1
  241. package/dist/components/task/TaskTiles.d.ts +11 -2
  242. package/dist/components/task/TaskTiles.js +12 -3
  243. package/dist/components/task/TaskTiles.js.map +1 -1
  244. package/dist/components/topbar/TopBar.d.ts +10 -0
  245. package/dist/components/topbar/TopBar.js +10 -0
  246. package/dist/components/topbar/TopBar.js.map +1 -1
  247. package/dist/components/tree-view/TreeView.d.ts +9 -0
  248. package/dist/components/tree-view/TreeView.js +9 -0
  249. package/dist/components/tree-view/TreeView.js.map +1 -1
  250. package/dist/controls/DateControl.d.ts +40 -2
  251. package/dist/controls/DateControl.js +24 -7
  252. package/dist/controls/DateControl.js.map +1 -1
  253. package/dist/controls/DateControlObjects.d.ts +8 -1
  254. package/dist/controls/DateControlObjects.js +8 -1
  255. package/dist/controls/DateControlObjects.js.map +1 -1
  256. package/dist/controls/FormComboBox.d.ts +30 -0
  257. package/dist/controls/FormComboBox.js +19 -16
  258. package/dist/controls/FormComboBox.js.map +1 -1
  259. package/dist/controls/FormComboBoxObjects.d.ts +12 -1
  260. package/dist/controls/FormComboBoxObjects.js +15 -1
  261. package/dist/controls/FormComboBoxObjects.js.map +1 -1
  262. package/dist/controls/GridColumnControl.d.ts +30 -0
  263. package/dist/controls/GridColumnControl.js +13 -4
  264. package/dist/controls/GridColumnControl.js.map +1 -1
  265. package/dist/controls/GridColumnControlObjects.js +1 -1
  266. package/dist/controls/GridColumnControlObjects.js.map +1 -1
  267. package/dist/controls/InputFieldControl.d.ts +50 -3
  268. package/dist/controls/InputFieldControl.js +40 -11
  269. package/dist/controls/InputFieldControl.js.map +1 -1
  270. package/dist/controls/InputFieldControlObjects.d.ts +10 -1
  271. package/dist/controls/InputFieldControlObjects.js +10 -1
  272. package/dist/controls/InputFieldControlObjects.js.map +1 -1
  273. package/dist/controls/LookupDropdown.d.ts +29 -0
  274. package/dist/controls/LookupDropdown.js +36 -25
  275. package/dist/controls/LookupDropdown.js.map +1 -1
  276. package/dist/controls/LookupDropdownObjects.d.ts +10 -0
  277. package/dist/controls/LookupDropdownObjects.js +11 -0
  278. package/dist/controls/LookupDropdownObjects.js.map +1 -0
  279. package/dist/enums/ElementTypes.d.ts +18 -0
  280. package/dist/enums/ElementTypes.js +18 -0
  281. package/dist/enums/ElementTypes.js.map +1 -1
  282. package/dist/enums/ExportFormat.d.ts +8 -0
  283. package/dist/enums/ExportFormat.js +8 -0
  284. package/dist/enums/ExportFormat.js.map +1 -1
  285. package/dist/enums/LogLevel.d.ts +17 -0
  286. package/dist/enums/LogLevel.js +17 -1
  287. package/dist/enums/LogLevel.js.map +1 -1
  288. package/dist/enums/index.d.ts +1 -0
  289. package/dist/enums/index.js +1 -0
  290. package/dist/enums/index.js.map +1 -1
  291. package/dist/helpers/ConfigChecker.d.ts +13 -0
  292. package/dist/helpers/ConfigChecker.js +13 -0
  293. package/dist/helpers/ConfigChecker.js.map +1 -1
  294. package/dist/helpers/Ensure.d.ts +13 -0
  295. package/dist/helpers/Ensure.js +13 -0
  296. package/dist/helpers/Ensure.js.map +1 -1
  297. package/dist/helpers/FlightTracker.d.ts +13 -3
  298. package/dist/helpers/FlightTracker.js +103 -17
  299. package/dist/helpers/FlightTracker.js.map +1 -1
  300. package/dist/helpers/GlobalWaitEventHandler.d.ts +13 -0
  301. package/dist/helpers/GlobalWaitEventHandler.js +13 -0
  302. package/dist/helpers/GlobalWaitEventHandler.js.map +1 -1
  303. package/dist/helpers/LoginHelper.d.ts +35 -1
  304. package/dist/helpers/LoginHelper.js +46 -11
  305. package/dist/helpers/LoginHelper.js.map +1 -1
  306. package/dist/helpers/PathResolver.d.ts +22 -0
  307. package/dist/helpers/PathResolver.js +22 -0
  308. package/dist/helpers/PathResolver.js.map +1 -1
  309. package/dist/helpers/Poll.d.ts +13 -1
  310. package/dist/helpers/Poll.js +12 -0
  311. package/dist/helpers/Poll.js.map +1 -1
  312. package/dist/helpers/RegexHelper.d.ts +15 -0
  313. package/dist/helpers/RegexHelper.js +15 -3
  314. package/dist/helpers/RegexHelper.js.map +1 -1
  315. package/dist/helpers/SubjectNavigator.d.ts +26 -0
  316. package/dist/helpers/SubjectNavigator.js +51 -0
  317. package/dist/helpers/SubjectNavigator.js.map +1 -0
  318. package/dist/helpers/UserSimulationHelper.d.ts +14 -0
  319. package/dist/helpers/UserSimulationHelper.js +14 -0
  320. package/dist/helpers/UserSimulationHelper.js.map +1 -1
  321. package/dist/helpers/index.d.ts +1 -0
  322. package/dist/helpers/index.js +1 -0
  323. package/dist/helpers/index.js.map +1 -1
  324. package/dist/index.d.ts +6 -20
  325. package/dist/index.js +1 -0
  326. package/dist/index.js.map +1 -1
  327. package/dist/interfaces/IComponentObjects.d.ts +12 -0
  328. package/dist/interfaces/IComponentSchemaMeta.d.ts +15 -0
  329. package/dist/interfaces/IComponentSchemaMeta.js +2 -0
  330. package/dist/interfaces/IComponentSchemaMeta.js.map +1 -0
  331. package/dist/interfaces/IProperty.d.ts +13 -0
  332. package/dist/interfaces/IRegisteredSubjects.d.ts +12 -0
  333. package/dist/interfaces/ISeedSubjectDraft.d.ts +16 -0
  334. package/dist/interfaces/ISeedSubjectDraft.js +2 -0
  335. package/dist/interfaces/ISeedSubjectDraft.js.map +1 -0
  336. package/dist/interfaces/ISubject.d.ts +13 -0
  337. package/dist/interfaces/ISubjectDetail.d.ts +11 -0
  338. package/dist/interfaces/ISubjectDetail.js +2 -0
  339. package/dist/interfaces/ISubjectDetail.js.map +1 -0
  340. package/dist/mcp/ArtifactResolver.d.ts +152 -0
  341. package/dist/mcp/ArtifactResolver.js +232 -0
  342. package/dist/mcp/ArtifactResolver.js.map +1 -0
  343. package/dist/mcp/index.d.ts +2 -0
  344. package/dist/mcp/index.js +2 -0
  345. package/dist/mcp/index.js.map +1 -0
  346. package/dist/page-extensions/GlobalComponents.d.ts +30 -0
  347. package/dist/page-extensions/GlobalComponents.js +30 -0
  348. package/dist/page-extensions/GlobalComponents.js.map +1 -1
  349. package/dist/page-extensions/GoToDeepLink.d.ts +9 -0
  350. package/dist/page-extensions/GoToDeepLink.js +9 -0
  351. package/dist/page-extensions/GoToDeepLink.js.map +1 -1
  352. package/dist/page-extensions/LoginFeatures.d.ts +8 -0
  353. package/dist/page-extensions/LoginFeatures.js +8 -0
  354. package/dist/page-extensions/LoginFeatures.js.map +1 -1
  355. package/dist/page-extensions/SubjectRegistry.d.ts +31 -0
  356. package/dist/page-extensions/SubjectRegistry.js +31 -0
  357. package/dist/page-extensions/SubjectRegistry.js.map +1 -1
  358. package/dist/page-extensions/UserSimulation.d.ts +21 -0
  359. package/dist/page-extensions/UserSimulation.js +21 -0
  360. package/dist/page-extensions/UserSimulation.js.map +1 -1
  361. package/dist/page-extensions/WaitEventHandler.d.ts +20 -0
  362. package/dist/page-extensions/WaitEventHandler.js +20 -0
  363. package/dist/page-extensions/WaitEventHandler.js.map +1 -1
  364. package/dist/page-overrides/ClickOverride.d.ts +23 -2
  365. package/dist/page-overrides/ClickOverride.js +34 -50
  366. package/dist/page-overrides/ClickOverride.js.map +1 -1
  367. package/dist/page-overrides/FillOverride.d.ts +23 -0
  368. package/dist/page-overrides/FillOverride.js +46 -66
  369. package/dist/page-overrides/FillOverride.js.map +1 -1
  370. package/dist/services/ConfigBuilder.d.ts +24 -0
  371. package/dist/services/ConfigBuilder.js +24 -0
  372. package/dist/services/ConfigBuilder.js.map +1 -1
  373. package/dist/services/IndiciumApi.service.d.ts +26 -0
  374. package/dist/services/IndiciumApi.service.js +40 -5
  375. package/dist/services/IndiciumApi.service.js.map +1 -1
  376. package/dist/services/Logger.d.ts +13 -0
  377. package/dist/services/Logger.js +39 -0
  378. package/dist/services/Logger.js.map +1 -1
  379. package/dist/types/Components.d.ts +18 -1
  380. package/dist/types/Components.js +0 -1
  381. package/dist/types/Components.js.map +1 -1
  382. package/dist/types/LocatorType.d.ts +5 -0
  383. package/dist/types/LocatorType.js +2 -0
  384. package/dist/types/LocatorType.js.map +1 -0
  385. package/dist/types/PollTypes.d.ts +8 -0
  386. package/dist/types/Test.d.ts +18 -0
  387. package/dist/types/Universal.d.ts +12 -0
  388. package/dist/types/index.d.ts +2 -0
  389. package/dist/types/index.js +2 -0
  390. package/dist/types/index.js.map +1 -1
  391. package/enums/ElementTypes.ts +18 -0
  392. package/enums/ExportFormat.ts +8 -0
  393. package/enums/LogLevel.ts +17 -1
  394. package/enums/index.ts +1 -0
  395. package/helpers/ConfigChecker.ts +13 -0
  396. package/helpers/Ensure.ts +13 -0
  397. package/helpers/FlightTracker.ts +109 -20
  398. package/helpers/GlobalWaitEventHandler.ts +13 -0
  399. package/helpers/LoginHelper.ts +49 -12
  400. package/helpers/PathResolver.ts +22 -0
  401. package/helpers/Poll.ts +13 -1
  402. package/helpers/RegexHelper.ts +15 -3
  403. package/helpers/SubjectNavigator.ts +57 -0
  404. package/helpers/UserSimulationHelper.ts +14 -0
  405. package/helpers/index.ts +1 -0
  406. package/index.ts +1 -0
  407. package/interfaces/IComponentObjects.ts +12 -0
  408. package/interfaces/IComponentSchemaMeta.ts +17 -0
  409. package/interfaces/IProperty.ts +13 -0
  410. package/interfaces/IRegisteredSubjects.ts +12 -0
  411. package/interfaces/ISeedSubjectDraft.ts +17 -0
  412. package/interfaces/ISubject.ts +13 -0
  413. package/interfaces/ISubjectDetail.ts +12 -0
  414. package/mcp/ArtifactResolver.ts +296 -0
  415. package/mcp/index.ts +2 -0
  416. package/package.json +20 -8
  417. package/page-extensions/GlobalComponents.ts +30 -0
  418. package/page-extensions/GoToDeepLink.ts +9 -0
  419. package/page-extensions/LoginFeatures.ts +8 -0
  420. package/page-extensions/SubjectRegistry.ts +32 -0
  421. package/page-extensions/UserSimulation.ts +21 -0
  422. package/page-extensions/WaitEventHandler.ts +20 -0
  423. package/page-overrides/ClickOverride.ts +36 -55
  424. package/page-overrides/FillOverride.ts +59 -73
  425. package/promptCredentials.js +1 -1
  426. package/scripts/Testwise.template.json +1 -1
  427. package/scripts/diagram.js +2267 -0
  428. package/scripts/main.js +84 -63
  429. package/scripts/postinstall.js +55 -42
  430. package/scripts/setup.js +91 -37
  431. package/scripts/sync.js +767 -748
  432. package/services/ConfigBuilder.ts +24 -0
  433. package/services/IndiciumApi.service.ts +44 -6
  434. package/services/Logger.ts +40 -0
  435. package/templates/copilot-instructions.md +130 -0
  436. package/templates/mcp.json +9 -0
  437. package/templates/testwise-test-expert.agent.md +453 -0
  438. package/tests/tsconfig.json +12 -0
  439. package/tsconfig.json +6 -2
  440. package/types/Components.ts +17 -2
  441. package/types/LocatorType.ts +5 -0
  442. package/types/PollTypes.ts +8 -0
  443. package/types/Test.ts +18 -0
  444. package/types/Universal.ts +12 -0
  445. package/types/index.ts +2 -0
  446. package/dist/interfaces/IStoredTestResults.d.ts +0 -5
  447. package/dist/interfaces/IStoredTestResults.js +0 -2
  448. package/dist/interfaces/IStoredTestResults.js.map +0 -1
  449. package/dist/templates/test-artifacts/SubjectPageBase.d.ts +0 -5
  450. package/dist/templates/test-artifacts/SubjectPageBase.js +0 -6
  451. package/dist/templates/test-artifacts/SubjectPageBase.js.map +0 -1
  452. package/dist/templates/test-artifacts/screens/index.d.ts +0 -1
  453. package/dist/templates/test-artifacts/screens/index.js +0 -2
  454. package/dist/templates/test-artifacts/screens/index.js.map +0 -1
  455. package/dist/templates/test-artifacts/subjects/index.d.ts +0 -1
  456. package/dist/templates/test-artifacts/subjects/index.js +0 -2
  457. package/dist/templates/test-artifacts/subjects/index.js.map +0 -1
  458. package/interfaces/IStoredTestResults.ts +0 -6
@@ -0,0 +1,225 @@
1
+ import { IndentationText, Project, QuoteKind, Scope, StructureKind } from 'ts-morph';
2
+ /**
3
+ * Converts in-memory TypeScript file models (`TsFileModel`, `ComponentClassModel`)
4
+ * into formatted TypeScript source strings using `ts-morph` AST manipulation.
5
+ *
6
+ * **Why ts-morph instead of string templates:** String-template code generation
7
+ * is fragile — it breaks on quoting, indentation, and special characters.
8
+ * `ts-morph` builds a real AST and prints it, so the output is always
9
+ * syntactically valid and consistently formatted.
10
+ *
11
+ * **Exported functions:**
12
+ * - `serializeTsFile(model)` — writes a complete subject class file from a
13
+ * `TsFileModel` (used by `SubjectGenerator`).
14
+ * - `appendComponentClass(existingContent, model)` — appends a typed component
15
+ * class body to an existing interface file (used by `SubjectComponentGenerator`).
16
+ * - `refineComponentInterface(rawContent, componentType)` — post-processes a
17
+ * raw quicktype interface file (adds Testwise imports, removes `Locator` base).
18
+ */
19
+ function createProject(existingContent) {
20
+ const project = new Project({
21
+ useInMemoryFileSystem: true,
22
+ skipAddingFilesFromTsConfig: true,
23
+ manipulationSettings: {
24
+ indentationText: IndentationText.TwoSpaces,
25
+ quoteKind: QuoteKind.Single
26
+ }
27
+ });
28
+ const file = project.createSourceFile('output.ts', existingContent ?? '');
29
+ return { project, file };
30
+ }
31
+ /** Builds a subject class file from a typed model. No string templates. */
32
+ export function serializeTsFile(model) {
33
+ const { file } = createProject();
34
+ for (const imp of model.imports) {
35
+ file.addImportDeclaration({
36
+ isTypeOnly: imp.isTypeOnly,
37
+ namedImports: imp.namedImports.map((n) => ({ name: n.name, isTypeOnly: n.isTypeOnly ?? false })),
38
+ moduleSpecifier: imp.from
39
+ });
40
+ }
41
+ const cls = model.classModel;
42
+ file.addClass({
43
+ name: cls.name,
44
+ extends: cls.extendsClass,
45
+ implements: [cls.implementsInterface],
46
+ isExported: true,
47
+ properties: cls.properties.map((p) => ({
48
+ kind: StructureKind.Property,
49
+ scope: p.access === 'private' ? Scope.Private : undefined,
50
+ name: p.name,
51
+ type: p.type
52
+ })),
53
+ ctors: [
54
+ {
55
+ parameters: cls.constructor.params.map((p) => ({ name: p.name, type: p.type })),
56
+ statements: [
57
+ `super(${cls.constructor.superCall});`,
58
+ ...cls.constructor.assignments.map((a) => `this.${a.property} = ${a.value};`),
59
+ ...cls.constructor.extraLines
60
+ ]
61
+ }
62
+ ],
63
+ methods: (cls.methods ?? []).map((m) => ({
64
+ scope: Scope.Public,
65
+ isAsync: m.isAsync,
66
+ name: m.name,
67
+ statements: m.bodyLines
68
+ }))
69
+ });
70
+ return file.print();
71
+ }
72
+ /**
73
+ * Parses an existing component interface file, appends the component class and
74
+ * any required control imports, and returns the complete printed file.
75
+ * Replaces string-template-based class body generation — no string templates.
76
+ */
77
+ export function appendComponentClass(existingContent, model) {
78
+ const { file } = createProject(existingContent);
79
+ addControlImports(file, model);
80
+ const contextProp = {
81
+ kind: StructureKind.Property,
82
+ scope: Scope.Private,
83
+ name: '_context',
84
+ type: 'Locator'
85
+ };
86
+ if (model.componentType === 'Grid') {
87
+ file.addClass({
88
+ name: `${model.interfaceName}Component`,
89
+ extends: model.componentType,
90
+ implements: [model.interfaceName],
91
+ isExported: true,
92
+ properties: [contextProp],
93
+ ctors: [
94
+ {
95
+ parameters: [{ name: 'context', type: 'Locator' }],
96
+ statements: ['super(context);', 'this._context = context;']
97
+ }
98
+ ],
99
+ getAccessors: model.getters.map((g) => ({
100
+ scope: Scope.Public,
101
+ name: g.name,
102
+ returnType: g.returnType,
103
+ statements: [g.bodyLine]
104
+ }))
105
+ });
106
+ }
107
+ else {
108
+ file.addClass({
109
+ name: `${model.interfaceName}Component`,
110
+ extends: model.componentType,
111
+ implements: [model.interfaceName],
112
+ isExported: true,
113
+ properties: [contextProp, ...model.properties.map((p) => ({ name: p.name, type: p.type }))],
114
+ ctors: [
115
+ {
116
+ parameters: [{ name: 'context', type: 'Locator' }],
117
+ statements: [
118
+ 'super(context);',
119
+ 'this._context = context;',
120
+ ...model.assignments.map((a) => `this.${a.property} = ${a.value};`)
121
+ ]
122
+ }
123
+ ]
124
+ });
125
+ }
126
+ return file.print();
127
+ }
128
+ // ── Control import resolution ──────────────────────────────────────────────
129
+ const controlImportMap = {
130
+ ILookupDropdown: {
131
+ createFn: 'createLookupDropdown',
132
+ moduleSpecifier: '../../../../controls/LookupDropdown.js'
133
+ },
134
+ IFormComboBox: {
135
+ createFn: 'createFormComboBox',
136
+ moduleSpecifier: '../../../../controls/FormComboBox.js'
137
+ },
138
+ IInputFieldControl: {
139
+ createFn: 'createInputFieldControl',
140
+ moduleSpecifier: '../../../../controls/InputFieldControl.js'
141
+ },
142
+ IDateControl: {
143
+ createFn: 'createDateControl',
144
+ moduleSpecifier: '../../../../controls/DateControl.js'
145
+ }
146
+ };
147
+ function addControlImports(file, model) {
148
+ const usedTypes = new Set(model.properties.map((p) => p.type));
149
+ for (const [typeName, { createFn, moduleSpecifier }] of Object.entries(controlImportMap)) {
150
+ if (!usedTypes.has(typeName))
151
+ continue;
152
+ const alreadyImported = file.getImportDeclarations().some((d) => d.getModuleSpecifierValue() === moduleSpecifier);
153
+ if (alreadyImported)
154
+ continue;
155
+ file.addImportDeclaration({
156
+ namedImports: [{ name: createFn }, { name: typeName, isTypeOnly: true }],
157
+ moduleSpecifier
158
+ });
159
+ }
160
+ }
161
+ // ── Form property-type suffix mapping ─────────────────────────────────────
162
+ const formTypeSuffixMap = {
163
+ Lookup: 'ILookupDropdown',
164
+ ComboBox: 'IFormComboBox',
165
+ Field: 'IInputFieldControl',
166
+ DatePicker: 'IDateControl'
167
+ };
168
+ /**
169
+ * Transforms a raw quicktype-generated interface file into a refined component
170
+ * interface file using ts-morph AST manipulation — no string templates.
171
+ *
172
+ * Replaces the five string-manipulation methods previously in SubjectComponentGenerator:
173
+ * removeLocatorInterface, addComponentImports, setSubjectExtendsComponent,
174
+ * transformGridInterface, transformInterfaceTypes.
175
+ */
176
+ export function refineComponentInterface(rawContent, componentType) {
177
+ const { file } = createProject(rawContent);
178
+ // Remove the stray Locator interface that quicktype emits alongside the real schema
179
+ file.getInterface('Locator')?.remove();
180
+ // Prepend the imports this component type needs
181
+ file.insertImportDeclarations(0, [
182
+ {
183
+ namedImports: [{ name: componentType }],
184
+ moduleSpecifier: '../../../../components/index.js'
185
+ },
186
+ ...(componentType === 'Grid'
187
+ ? [
188
+ {
189
+ namedImports: [{ name: 'createGridColumnControl' }, { name: 'IGridColumnControl', isTypeOnly: true }],
190
+ moduleSpecifier: '../../../../controls/GridColumnControl.js'
191
+ }
192
+ ]
193
+ : []),
194
+ {
195
+ isTypeOnly: true,
196
+ namedImports: [{ name: 'Locator' }],
197
+ moduleSpecifier: '@playwright/test'
198
+ }
199
+ ]);
200
+ // Find the main interface (no extends clause yet) and make it extend the component
201
+ const mainInterface = file.getInterfaces().find((i) => i.getExtends().length === 0);
202
+ if (mainInterface) {
203
+ mainInterface.addExtends(componentType);
204
+ if (componentType === 'Grid') {
205
+ // Swap every Locator-typed property for a readonly IGridColumnControl
206
+ for (const prop of mainInterface.getProperties()) {
207
+ const typeText = prop.getTypeNode()?.getText() ?? '';
208
+ if (typeText === 'Locator' || typeText === 'Locator[]') {
209
+ prop.setIsReadonly(true);
210
+ prop.setType('IGridColumnControl');
211
+ }
212
+ }
213
+ }
214
+ else {
215
+ // Map Form property name suffixes to their control types
216
+ for (const prop of mainInterface.getProperties()) {
217
+ const suffix = Object.keys(formTypeSuffixMap).find((s) => prop.getName().endsWith(s));
218
+ if (suffix)
219
+ prop.setType(formTypeSuffixMap[suffix]);
220
+ }
221
+ }
222
+ }
223
+ return file.print();
224
+ }
225
+ //# sourceMappingURL=TsFileSerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TsFileSerializer.js","sourceRoot":"","sources":["../../artifact-builder/TsFileSerializer.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,31 @@
1
1
  import type { IRegisteredSubjects } from '../../interfaces/IRegisteredSubjects.js';
2
2
  import type { ISubject } from '../../interfaces/ISubject.js';
3
+ import { PipelinePaths } from './PipelinePaths.js';
4
+ /**
5
+ * Thin file-system accessor that reads all JSON seed-data files used by the
6
+ * artifact-builder pipeline and returns them as typed objects.
7
+ *
8
+ * **What it does:** Abstracts away all `fs.readFileSync` / JSON.parse calls so
9
+ * that pipeline steps only deal with typed data, never raw file I/O. All path
10
+ * resolution is delegated to `PipelinePaths` — there are no hardcoded paths here.
11
+ *
12
+ * **Why it exists as a separate class:** Injecting `DataRetriever` into each
13
+ * pipeline step makes the steps unit-testable without touching the real
14
+ * filesystem. Tests pass a `DataRetriever` constructed with a fake
15
+ * `PipelinePaths` that points to a temp directory.
16
+ *
17
+ * **For contributors:** If the pipeline gains a new seed-data file, add a
18
+ * typed accessor method here (and a corresponding path getter to
19
+ * `PipelinePaths`).
20
+ */
3
21
  export declare class DataRetriever {
4
- private _consumerRootDirectory;
22
+ private readonly _paths;
23
+ constructor(paths?: PipelinePaths);
5
24
  getSubjectsSeedData(): ISubject[];
6
25
  getRegisteredSubjects(): IRegisteredSubjects[] | null;
7
26
  getSubjectsToBuild(): ISubject[];
8
27
  getScreensToBuild(): string[];
28
+ getScreenComponentMeta(screenTypeId: string): Record<string, string>;
9
29
  getSeedDataDirectory(): string;
10
- private toISubject;
11
- private toIRegisteredSubjects;
30
+ private parseJsonFile;
12
31
  }
@@ -1,53 +1,83 @@
1
1
  import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- import { PathResolver } from '../../helpers/PathResolver.js';
2
+ import { PipelinePaths } from './PipelinePaths.js';
3
+ /**
4
+ * Thin file-system accessor that reads all JSON seed-data files used by the
5
+ * artifact-builder pipeline and returns them as typed objects.
6
+ *
7
+ * **What it does:** Abstracts away all `fs.readFileSync` / JSON.parse calls so
8
+ * that pipeline steps only deal with typed data, never raw file I/O. All path
9
+ * resolution is delegated to `PipelinePaths` — there are no hardcoded paths here.
10
+ *
11
+ * **Why it exists as a separate class:** Injecting `DataRetriever` into each
12
+ * pipeline step makes the steps unit-testable without touching the real
13
+ * filesystem. Tests pass a `DataRetriever` constructed with a fake
14
+ * `PipelinePaths` that points to a temp directory.
15
+ *
16
+ * **For contributors:** If the pipeline gains a new seed-data file, add a
17
+ * typed accessor method here (and a corresponding path getter to
18
+ * `PipelinePaths`).
19
+ */
4
20
  export class DataRetriever {
5
- constructor() {
6
- this._consumerRootDirectory = new PathResolver().getConsumerRootDirectory();
21
+ constructor(paths) {
22
+ /* v8 ignore next -- default only used at runtime, not in unit tests */
23
+ this._paths = paths ?? new PipelinePaths();
7
24
  }
8
25
  getSubjectsSeedData() {
9
- const seedPath = path.join(this._consumerRootDirectory, 'seed-data/subjects.json');
26
+ const seedPath = this._paths.subjectsJson;
10
27
  if (!fs.existsSync(seedPath)) {
11
- console.error(`Seed data file not found at: ${seedPath}`);
28
+ throw new Error(`subjects.json not found at: ${seedPath}. Run the model data build step first.`);
12
29
  }
13
- const json = fs.readFileSync(seedPath, 'utf-8');
14
- return this.toISubject(json);
30
+ return this.parseJsonFile(seedPath);
15
31
  }
16
32
  getRegisteredSubjects() {
17
- const registeredSubjectsPath = path.join(this._consumerRootDirectory, 'seed-data/registeredSubjects.json');
33
+ const registeredSubjectsPath = this._paths.registeredSubjectsJson;
18
34
  if (!fs.existsSync(registeredSubjectsPath)) {
19
- console.info(`Seed data file not found at: ${registeredSubjectsPath}`);
35
+ console.info(`registeredSubjects.json not found at: ${registeredSubjectsPath}. No subjects are registered.`);
20
36
  return null;
21
37
  }
22
- const json = fs.readFileSync(registeredSubjectsPath, 'utf-8');
23
- return this.toIRegisteredSubjects(json);
38
+ return this.parseJsonFile(registeredSubjectsPath);
24
39
  }
25
40
  getSubjectsToBuild() {
26
- const subjectsToBuildPath = path.join(this._consumerRootDirectory, 'seed-data/subjectsToBuild.json');
41
+ const subjectsToBuildPath = this._paths.subjectsToBuildJson;
27
42
  if (!fs.existsSync(subjectsToBuildPath)) {
28
- console.info(`subjectsToBuild.json not found at: ${subjectsToBuildPath}. Using all subjects as fallback.`);
43
+ console.info(`subjectsToBuild.json not found – falling back to full subjects seed data.`);
29
44
  return this.getSubjectsSeedData();
30
45
  }
31
- const json = fs.readFileSync(subjectsToBuildPath, 'utf-8');
32
- return this.toISubject(json);
46
+ return this.parseJsonFile(subjectsToBuildPath);
33
47
  }
34
48
  getScreensToBuild() {
35
- const screensToBuildPath = path.join(this._consumerRootDirectory, 'seed-data/screensToBuild.json');
49
+ const screensToBuildPath = this._paths.screensToBuildJson;
36
50
  if (!fs.existsSync(screensToBuildPath)) {
37
- console.info(`screensToBuild.json not found.`);
51
+ console.info(`screensToBuild.json not found – all screens will be processed.`);
38
52
  return [];
39
53
  }
40
- const json = fs.readFileSync(screensToBuildPath, 'utf-8');
41
- return JSON.parse(json);
54
+ return this.parseJsonFile(screensToBuildPath);
42
55
  }
43
- getSeedDataDirectory() {
44
- return path.join(this._consumerRootDirectory, 'seed-data');
56
+ getScreenComponentMeta(screenTypeId) {
57
+ const schemaPath = `${this._paths.screenSchemas}/${screenTypeId}.json`;
58
+ if (!fs.existsSync(schemaPath))
59
+ return {};
60
+ const schema = this.parseJsonFile(schemaPath);
61
+ const result = {};
62
+ for (const originalId of Object.keys(schema.properties ?? {})) {
63
+ // Normalize to lowercase-alphanumeric so the lookup is insensitive to
64
+ // camelCase variations between change-case and quicktype's nice-property-names.
65
+ const normalizedKey = originalId.toLowerCase().replace(/[^a-z0-9]/g, '');
66
+ result[normalizedKey] = originalId;
67
+ }
68
+ return result;
45
69
  }
46
- toISubject(json) {
47
- return JSON.parse(json);
70
+ getSeedDataDirectory() {
71
+ return this._paths.seedData;
48
72
  }
49
- toIRegisteredSubjects(json) {
50
- return JSON.parse(json);
73
+ parseJsonFile(filePath) {
74
+ const raw = fs.readFileSync(filePath, 'utf-8');
75
+ try {
76
+ return JSON.parse(raw);
77
+ }
78
+ catch (cause) {
79
+ throw new Error(`Failed to parse JSON at ${filePath}: ${cause.message}`);
80
+ }
51
81
  }
52
82
  }
53
83
  //# sourceMappingURL=DataRetriever.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataRetriever.js","sourceRoot":"","sources":["../../../artifact-builder/helpers/DataRetriever.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAI7D,MAAM,OAAO,aAAa;IAA1B;QACU,2BAAsB,GAAW,IAAI,YAAY,EAAE,CAAC,wBAAwB,EAAE,CAAC;IA2DzF,CAAC;IAzDQ,mBAAmB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;QACnF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAA0B,CAAC;IACxD,CAAC;IAEM,qBAAqB;QAC1B,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,mCAAmC,CAAC,CAAC;QAE3G,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,gCAAgC,sBAAsB,EAAE,CAAC,CAAC;YAEvE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAqC,CAAC;IAC9E,CAAC;IAEM,kBAAkB;QACvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,gCAAgC,CAAC,CAAC;QACrG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,sCAAsC,mBAAmB,mCAAmC,CAAC,CAAC;YAE3G,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAA0B,CAAC;IACxD,CAAC;IAEM,iBAAiB;QACtB,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,+BAA+B,CAAC,CAAC;QACnG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;IACtC,CAAC;IAEM,oBAAoB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,qBAAqB,CAAC,IAAY;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"}
1
+ {"version":3,"file":"DataRetriever.js","sourceRoot":"","sources":["../../../artifact-builder/helpers/DataRetriever.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,32 @@
1
1
  import { KnownElementTypes } from '../../enums/ElementTypes.js';
2
- import type { ScreenComponents, SubjectComponents } from '../../types/Components.js';
2
+ import type { SubjectComponents } from '../../types/Components.js';
3
+ /**
4
+ * Centralises all naming and string-transformation logic used by the
5
+ * artifact-builder pipeline.
6
+ *
7
+ * **What it does:**
8
+ * - Converts subject/variant/screentype tuples into the correct PascalCase
9
+ * class names that are written to the generated subject files.
10
+ * - Maps `control_type` strings from the Indicium API to the Testwise control
11
+ * class suffix that appears in generated component interfaces
12
+ * (e.g. `"lookup"` → `"Lookup"` → property name ends in `Lookup`).
13
+ * - Handles edge cases like `Form` vs `Grid` defaults and multi-variant naming.
14
+ *
15
+ * **For contributors:** If the Thinkwise model introduces a new control type
16
+ * that should map to a different Testwise control, add it to the mapping
17
+ * matrix inside `getElementSuffixFromControlTypeAndComponentType`.
18
+ */
3
19
  export declare class NamingHandler {
4
20
  getDefaultElementSuffixFromComponentType(componentType: SubjectComponents): KnownElementTypes;
5
21
  getElementSuffixFromControlTypeAndComponentType(controlType: string, componentType: SubjectComponents): string;
6
- getIdFromElementName(elementName: string, componentType: SubjectComponents, controlType: string): string;
7
- getComponentTypeFromFileName(fileName: string): SubjectComponents;
8
- getElementTypeFromElementName(elementName: string): string;
9
22
  getSubjectFromFileName(fileName: string): string;
10
23
  getPascalSubjectComponentName(file: string): string;
11
24
  toPascalCase(name: string): string;
25
+ toSubjectPascalCase(name: string): string;
12
26
  formatPropertyName(name: string): string;
13
27
  generateScreenInterfaceName(screentypeId: string): string;
14
28
  toSnakeCase(value: string): string;
15
- getComponentIdFromName(componentName: string, componentType: ScreenComponents): string;
16
29
  capitalizeFirstLetter(value: string): string;
17
- getTabParentFromComponentName(componentName: string): string;
18
30
  generateSubjectClassName(subject: {
19
31
  subject: string;
20
32
  screentype_context: string;
@@ -1,6 +1,22 @@
1
1
  import * as path from 'node:path';
2
2
  import { pascalCase, snakeCase } from 'change-case';
3
3
  import { KnownElementTypes } from '../../enums/ElementTypes.js';
4
+ /**
5
+ * Centralises all naming and string-transformation logic used by the
6
+ * artifact-builder pipeline.
7
+ *
8
+ * **What it does:**
9
+ * - Converts subject/variant/screentype tuples into the correct PascalCase
10
+ * class names that are written to the generated subject files.
11
+ * - Maps `control_type` strings from the Indicium API to the Testwise control
12
+ * class suffix that appears in generated component interfaces
13
+ * (e.g. `"lookup"` → `"Lookup"` → property name ends in `Lookup`).
14
+ * - Handles edge cases like `Form` vs `Grid` defaults and multi-variant naming.
15
+ *
16
+ * **For contributors:** If the Thinkwise model introduces a new control type
17
+ * that should map to a different Testwise control, add it to the mapping
18
+ * matrix inside `getElementSuffixFromControlTypeAndComponentType`.
19
+ */
4
20
  export class NamingHandler {
5
21
  getDefaultElementSuffixFromComponentType(componentType) {
6
22
  const controlTypeMapping = {
@@ -34,42 +50,6 @@ export class NamingHandler {
34
50
  const componentMapping = controlTypeMappingMatrix[componentType];
35
51
  return (componentMapping[controlType.toLowerCase()] || this.getDefaultElementSuffixFromComponentType(componentType)).toLowerCase();
36
52
  }
37
- getIdFromElementName(elementName, componentType, controlType) {
38
- const elementSuffixToRemove = this.getElementSuffixFromControlTypeAndComponentType(controlType, componentType);
39
- const elementSuffixToRemoveFormatted = elementSuffixToRemove.replace(/_/g, '-').toLowerCase();
40
- let id = this.toSnakeCase(elementName)
41
- .replace(/([a-z])([A-Z])/g, '$1-$2')
42
- .toLowerCase()
43
- .replace(/_/g, '-');
44
- if (elementSuffixToRemove) {
45
- const suffixRegex = new RegExp(`-?${elementSuffixToRemoveFormatted}$`, 'i');
46
- id = id.replace(suffixRegex, '');
47
- }
48
- return id.replace(/-+/g, '-').replace(/-+$/g, '');
49
- }
50
- getComponentTypeFromFileName(fileName) {
51
- // ToDo: use this
52
- const match = fileName.match(/([A-Z][a-z]+)(?=\.ts$)/);
53
- if (match) {
54
- const componentName = match[1];
55
- if (componentName === 'Form')
56
- return 'Form';
57
- if (componentName === 'Grid')
58
- return 'Grid';
59
- }
60
- throw new Error(`Unknown component type in file name: ${fileName}`);
61
- }
62
- getElementTypeFromElementName(elementName) {
63
- const snakeCaseElementName = this.toSnakeCase(elementName);
64
- const parts = snakeCaseElementName.split('_');
65
- for (let i = parts.length - 1; i > 0; i--) {
66
- const candidate = parts.slice(i).join('_');
67
- if (Object.values(KnownElementTypes).includes(candidate)) {
68
- return candidate;
69
- }
70
- }
71
- throw new Error(`No KnownElementType match found for a partial suffix of "${elementName}"`);
72
- }
73
53
  getSubjectFromFileName(fileName) {
74
54
  return fileName.replace(/([A-Z][a-z0-9]*)$/, '');
75
55
  }
@@ -79,6 +59,9 @@ export class NamingHandler {
79
59
  toPascalCase(name) {
80
60
  return pascalCase(name);
81
61
  }
62
+ toSubjectPascalCase(name) {
63
+ return this.toPascalCase(name.replace(/_(\d)/g, '$1'));
64
+ }
82
65
  formatPropertyName(name) {
83
66
  return name.charAt(0).toLowerCase() + name.slice(1);
84
67
  }
@@ -88,37 +71,13 @@ export class NamingHandler {
88
71
  toSnakeCase(value) {
89
72
  return snakeCase(value);
90
73
  }
91
- getComponentIdFromName(componentName, componentType) {
92
- if (componentType === 'ActionBar' || componentType === 'CustomActionBar') {
93
- const capitalizedComponentName = this.capitalizeFirstLetter(componentName);
94
- return capitalizedComponentName.replace(/Toolbar/, 'Toolbar_');
95
- }
96
- if (componentType === 'Splitter') {
97
- const componentId = componentName.toLowerCase();
98
- if (/^splitter\d+$/.test(componentId)) {
99
- return componentId;
100
- }
101
- return componentId.replace(/splitter/, 'splitter-');
102
- }
103
- if (componentType === 'Tab') {
104
- return this.capitalizeFirstLetter(componentName);
105
- }
106
- return componentName;
107
- }
108
74
  capitalizeFirstLetter(value) {
109
75
  return value.charAt(0).toUpperCase() + value.slice(1);
110
76
  }
111
- getTabParentFromComponentName(componentName) {
112
- const match = componentName.match(/^[a-z0-9]+(?=[A-Z])/);
113
- if (match) {
114
- return match[0];
115
- }
116
- throw new Error(`Could not extract tab parent from component name: ${componentName}`);
117
- }
118
77
  generateSubjectClassName(subject) {
119
78
  const uniqueSubjectIdentifier = subject.variant !== '' ? `${subject.subject}_${subject.variant}` : subject.subject;
120
79
  const className = `${uniqueSubjectIdentifier}_${subject.screentype_context}`;
121
- return this.toPascalCase(className);
80
+ return this.toSubjectPascalCase(className);
122
81
  }
123
82
  }
124
83
  //# sourceMappingURL=NamingHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NamingHandler.js","sourceRoot":"","sources":["../../../artifact-builder/helpers/NamingHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,MAAM,OAAO,aAAa;IACjB,wCAAwC,CAAC,aAAgC;QAC9E,MAAM,kBAAkB,GAAiD;YACvE,IAAI,EAAE,iBAAiB,CAAC,KAAK;YAC7B,IAAI,EAAE,iBAAiB,CAAC,MAAM;SAC/B,CAAC;QAEF,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAEM,+CAA+C,CACpD,WAAmB,EACnB,aAAgC;QAEhC,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAExC,MAAM,iBAAiB,GAAsB,IAAI,CAAC,wCAAwC,CAAC,MAAM,CAAC,CAAC;QAEnG,MAAM,wBAAwB,GAAiE;YAC7F,IAAI,EAAE;gBACJ,KAAK,EAAE,iBAAiB;gBACxB,YAAY,EAAE,iBAAiB;gBAC/B,sBAAsB,EAAE,iBAAiB;gBACzC,eAAe,EAAE,iBAAiB,CAAC,MAAM;gBACzC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;gBACpC,MAAM,EAAE,iBAAiB,CAAC,MAAM;gBAChC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;gBACpC,SAAS,EAAE,iBAAiB,CAAC,QAAQ;gBACrC,KAAK,EAAE,iBAAiB,CAAC,QAAQ;gBACjC,SAAS,EAAE,iBAAiB,CAAC,QAAQ;gBACrC,IAAI,EAAE,iBAAiB,CAAC,UAAU;gBAClC,WAAW,EAAE,iBAAiB,CAAC,UAAU;aAC1C;YACD,IAAI,EAAE;YACJ,kDAAkD;aACnD;SACF,CAAC;QAEF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;QACjE,OAAO,CACL,gBAAgB,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC,wCAAwC,CAAC,aAAa,CAAC,CAC5G,CAAC,WAAW,EAAE,CAAC;IAClB,CAAC;IAEM,oBAAoB,CAAC,WAAmB,EAAE,aAAgC,EAAE,WAAmB;QACpG,MAAM,qBAAqB,GAAG,IAAI,CAAC,+CAA+C,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC/G,MAAM,8BAA8B,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9F,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;aACnC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;aACnC,WAAW,EAAE;aACb,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEtB,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,KAAK,8BAA8B,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5E,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAEM,4BAA4B,CAAC,QAAgB;QAClD,iBAAiB;QACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACvD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,aAAa,KAAK,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC5C,IAAI,aAAa,KAAK,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC9C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IAEM,6BAA6B,CAAC,WAAmB;QACtD,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9C,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE3C,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,SAA8B,CAAC,EAAE,CAAC;gBAC9E,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4DAA4D,WAAW,GAAG,CAAC,CAAC;IAC9F,CAAC;IAEM,sBAAsB,CAAC,QAAgB;QAC5C,OAAO,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,6BAA6B,CAAC,IAAY;QAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAEM,YAAY,CAAC,IAAY;QAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEM,kBAAkB,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAEM,2BAA2B,CAAC,YAAoB;QACrD,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;IAC/C,CAAC;IAEM,WAAW,CAAC,KAAa;QAC9B,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAEM,sBAAsB,CAAC,aAAqB,EAAE,aAA+B;QAClF,IAAI,aAAa,KAAK,WAAW,IAAI,aAAa,KAAK,iBAAiB,EAAE,CAAC;YACzE,MAAM,wBAAwB,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAC3E,OAAO,wBAAwB,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YAEhD,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtC,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,OAAO,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAEM,qBAAqB,CAAC,KAAa;QACxC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,6BAA6B,CAAC,aAAqB;QACxD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qDAAqD,aAAa,EAAE,CAAC,CAAC;IACxF,CAAC;IAEM,wBAAwB,CAAC,OAAyE;QACvG,MAAM,uBAAuB,GAAG,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QACnH,MAAM,SAAS,GAAG,GAAG,uBAAuB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"NamingHandler.js","sourceRoot":"","sources":["../../../artifact-builder/helpers/NamingHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Single source of truth for all filesystem paths used by the artifact-builder
3
+ * pipeline.
4
+ *
5
+ * - Generated seed data (subjects.json, screen-schemas) lives under the
6
+ * **package root** (`node_modules/@thinkwise/testwise/seed-data/`) because
7
+ * it is rebuilt on every sync and can safely be regenerated.
8
+ * - `registeredSubjects.json` lives in the **consumer project root** because
9
+ * it represents the user's curated subject list and must never be lost when
10
+ * `node_modules` is wiped and reinstalled.
11
+ */
12
+ export declare class PipelinePaths {
13
+ private readonly _packageRoot;
14
+ private readonly _consumerRoot;
15
+ constructor();
16
+ /** `<package>/seed-data/` */
17
+ get seedData(): string;
18
+ /** `<consumer>/seed-data/screen-schemas/` */
19
+ get screenSchemas(): string;
20
+ /** `<consumer>/seed-data/subjects.json` */
21
+ get subjectsJson(): string;
22
+ /** `<consumer>/seed-data/subjectsToBuild.json` */
23
+ get subjectsToBuildJson(): string;
24
+ /** `<consumer>/seed-data/screensToBuild.json` */
25
+ get screensToBuildJson(): string;
26
+ /** `<consumer>/seed-data/registeredSubjects.json` – lives in the consumer project so it survives `npm install` */
27
+ get registeredSubjectsJson(): string;
28
+ /** `<package>/test-artifacts/` */
29
+ get testArtifacts(): string;
30
+ /** `<package>/test-artifacts/screens/` */
31
+ get screens(): string;
32
+ /** `<package>/test-artifacts/screens/index.ts` */
33
+ get screensIndex(): string;
34
+ /** `<package>/test-artifacts/subjects/` */
35
+ get subjects(): string;
36
+ /**
37
+ * `<package>/dist/test-artifacts/schemas/`
38
+ *
39
+ * Intermediate JSON schemas are kept inside `dist/` so that the TypeScript
40
+ * compiler does not include them in compilation but they are accessible at
41
+ * runtime after the initial `tsc` pass.
42
+ */
43
+ get schemas(): string;
44
+ /** `<package>/page-extensions/SubjectRegistry.ts` */
45
+ get subjectRegistry(): string;
46
+ /** `<package>/templates/SubjectRegistry.template.ts` */
47
+ get subjectRegistryTemplate(): string;
48
+ /** `<package>/test-artifacts/subjects/<subjectName>/` */
49
+ subjectFolder(subjectName: string): string;
50
+ /** `<package>/test-artifacts/subjects/<subjectName>/Components/` */
51
+ subjectComponentsFolder(subjectName: string): string;
52
+ }