@thinkwise/testwise 0.2.67 → 0.2.103
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.
- package/Testwise.ts +35 -0
- package/artifact-builder/ArtifactManager.ts +25 -2
- package/artifact-builder/ComponentClassModelBuilder.ts +148 -0
- package/artifact-builder/InterfaceGenerator.ts +31 -33
- package/artifact-builder/ModelDataBuilder.ts +18 -20
- package/artifact-builder/ModelDataRefiner.ts +23 -3
- package/artifact-builder/SchemaGenerator.ts +45 -35
- package/artifact-builder/ScreenInterfaceRefiner.ts +25 -10
- package/artifact-builder/SelectorBuilder.ts +30 -24
- package/artifact-builder/SubjectClassModelBuilder.ts +209 -0
- package/artifact-builder/SubjectComponentGenerator.ts +67 -246
- package/artifact-builder/SubjectGenerator.ts +117 -230
- package/artifact-builder/SubjectRegistration.ts +41 -32
- package/artifact-builder/TsFileModel.ts +94 -0
- package/artifact-builder/TsFileSerializer.ts +247 -0
- package/artifact-builder/helpers/DataRetriever.ts +64 -27
- package/artifact-builder/helpers/NamingHandler.ts +23 -78
- package/artifact-builder/helpers/PipelinePaths.ts +123 -0
- package/artifact-builder/helpers/Stopwatch.ts +10 -0
- package/artifact-builder/helpers/index.ts +1 -0
- package/artifact-builder/index.ts +4 -0
- package/components/BaseComponentObjects.ts +17 -0
- package/components/action-bar/ActionBar.ts +35 -47
- package/components/action-bar/ActionBarObjects.ts +2 -0
- package/components/action-bar/CustomActionBar.ts +6 -0
- package/components/cardlist/Cardlist.ts +6 -0
- package/components/chart/Chart.ts +6 -0
- package/components/combined-filter/CombinedFilter.ts +9 -0
- package/components/cube-view-bar/CubeViewBar.ts +6 -0
- package/components/export/ExportComponent.ts +12 -0
- package/components/filter/ExcelStyleFilterPopup.ts +35 -2
- package/components/filter/FilterForm.ts +10 -0
- package/components/filter/FilterPopup.ts +30 -9
- package/components/filter/FilterPopupObjects.ts +10 -3
- package/components/filter/FindForm.ts +7 -0
- package/components/filter/ManagePrefilterPopup.ts +11 -0
- package/components/form/Form.ts +16 -0
- package/components/grid/Grid.ts +18 -1
- package/components/maps/Maps.ts +6 -0
- package/components/menu/ListBarMenuComponent.ts +10 -0
- package/components/pivot-grid/PivotGrid.ts +6 -0
- package/components/pivot-grid/PivotGridFieldList.ts +7 -0
- package/components/pop-up/AllRowsPopUp.ts +12 -0
- package/components/pop-up/PopUpComponent.ts +11 -0
- package/components/prefilter-list/PrefilterList.ts +9 -0
- package/components/preview/Preview.ts +6 -0
- package/components/report-bar/ReportBar.ts +6 -0
- package/components/report-tiles/ReportTiles.ts +6 -0
- package/components/scheduler/Scheduler.ts +6 -0
- package/components/snackbar/SnackBar.ts +12 -0
- package/components/splitter/Splitter.ts +6 -0
- package/components/tab/BaseTab.ts +5 -0
- package/components/tab/DetailTabPage.ts +11 -0
- package/components/tab/Tab.ts +10 -0
- package/components/task/TaskBar.ts +13 -3
- package/components/task/TaskTiles.ts +12 -3
- package/components/topbar/TopBar.ts +10 -0
- package/components/tree-view/TreeView.ts +9 -0
- package/controls/DateControl.ts +40 -1
- package/controls/FormComboBox.ts +30 -0
- package/controls/GridColumnControl.ts +34 -3
- package/controls/InputFieldControl.ts +49 -0
- package/controls/LookupDropdown.ts +29 -0
- package/dist/Testwise.js +35 -0
- package/dist/Testwise.js.map +1 -1
- package/dist/artifact-builder/ArtifactManager.d.ts +18 -1
- package/dist/artifact-builder/ArtifactManager.js +24 -2
- package/dist/artifact-builder/ArtifactManager.js.map +1 -1
- package/dist/artifact-builder/ComponentClassModelBuilder.d.ts +22 -0
- package/dist/artifact-builder/ComponentClassModelBuilder.js +115 -0
- package/dist/artifact-builder/ComponentClassModelBuilder.js.map +1 -0
- package/dist/artifact-builder/InterfaceGenerator.d.ts +15 -6
- package/dist/artifact-builder/InterfaceGenerator.js +27 -26
- package/dist/artifact-builder/InterfaceGenerator.js.map +1 -1
- package/dist/artifact-builder/ModelDataBuilder.d.ts +7 -0
- package/dist/artifact-builder/ModelDataBuilder.js +13 -5
- package/dist/artifact-builder/ModelDataBuilder.js.map +1 -1
- package/dist/artifact-builder/ModelDataRefiner.d.ts +18 -1
- package/dist/artifact-builder/ModelDataRefiner.js +18 -3
- package/dist/artifact-builder/ModelDataRefiner.js.map +1 -1
- package/dist/artifact-builder/SchemaGenerator.d.ts +21 -5
- package/dist/artifact-builder/SchemaGenerator.js +38 -26
- package/dist/artifact-builder/SchemaGenerator.js.map +1 -1
- package/dist/artifact-builder/ScreenInterfaceRefiner.d.ts +18 -1
- package/dist/artifact-builder/ScreenInterfaceRefiner.js +23 -9
- package/dist/artifact-builder/ScreenInterfaceRefiner.js.map +1 -1
- package/dist/artifact-builder/SelectorBuilder.d.ts +18 -5
- package/dist/artifact-builder/SelectorBuilder.js +29 -14
- package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
- package/dist/artifact-builder/SubjectClassModelBuilder.d.ts +38 -0
- package/dist/artifact-builder/SubjectClassModelBuilder.js +158 -0
- package/dist/artifact-builder/SubjectClassModelBuilder.js.map +1 -0
- package/dist/artifact-builder/SubjectComponentGenerator.d.ts +25 -14
- package/dist/artifact-builder/SubjectComponentGenerator.js +65 -189
- package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectGenerator.d.ts +32 -13
- package/dist/artifact-builder/SubjectGenerator.js +81 -165
- package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectRegistration.d.ts +22 -8
- package/dist/artifact-builder/SubjectRegistration.js +29 -14
- package/dist/artifact-builder/SubjectRegistration.js.map +1 -1
- package/dist/artifact-builder/TsFileModel.d.ts +86 -0
- package/dist/artifact-builder/TsFileModel.js +2 -0
- package/dist/artifact-builder/TsFileModel.js.map +1 -0
- package/dist/artifact-builder/TsFileSerializer.d.ts +19 -0
- package/dist/artifact-builder/TsFileSerializer.js +225 -0
- package/dist/artifact-builder/TsFileSerializer.js.map +1 -0
- package/dist/artifact-builder/helpers/DataRetriever.d.ts +22 -3
- package/dist/artifact-builder/helpers/DataRetriever.js +56 -26
- package/dist/artifact-builder/helpers/DataRetriever.js.map +1 -1
- package/dist/artifact-builder/helpers/NamingHandler.d.ts +18 -6
- package/dist/artifact-builder/helpers/NamingHandler.js +20 -61
- package/dist/artifact-builder/helpers/NamingHandler.js.map +1 -1
- package/dist/artifact-builder/helpers/PipelinePaths.d.ts +52 -0
- package/dist/artifact-builder/helpers/PipelinePaths.js +99 -0
- package/dist/artifact-builder/helpers/PipelinePaths.js.map +1 -0
- package/dist/artifact-builder/helpers/Stopwatch.d.ts +10 -0
- package/dist/artifact-builder/helpers/Stopwatch.js +10 -0
- package/dist/artifact-builder/helpers/Stopwatch.js.map +1 -1
- package/dist/artifact-builder/helpers/index.d.ts +1 -0
- package/dist/artifact-builder/helpers/index.js +1 -0
- package/dist/artifact-builder/helpers/index.js.map +1 -1
- package/dist/artifact-builder/index.d.ts +4 -0
- package/dist/artifact-builder/index.js +4 -0
- package/dist/artifact-builder/index.js.map +1 -1
- package/dist/components/BaseComponentObjects.d.ts +17 -0
- package/dist/components/BaseComponentObjects.js +17 -0
- package/dist/components/BaseComponentObjects.js.map +1 -1
- package/dist/components/action-bar/ActionBar.d.ts +21 -24
- package/dist/components/action-bar/ActionBar.js +31 -24
- package/dist/components/action-bar/ActionBar.js.map +1 -1
- package/dist/components/action-bar/ActionBarObjects.d.ts +1 -0
- package/dist/components/action-bar/ActionBarObjects.js +1 -0
- package/dist/components/action-bar/ActionBarObjects.js.map +1 -1
- package/dist/components/action-bar/CustomActionBar.d.ts +6 -0
- package/dist/components/action-bar/CustomActionBar.js +6 -0
- package/dist/components/action-bar/CustomActionBar.js.map +1 -1
- package/dist/components/cardlist/Cardlist.d.ts +6 -0
- package/dist/components/cardlist/Cardlist.js +6 -0
- package/dist/components/cardlist/Cardlist.js.map +1 -1
- package/dist/components/chart/Chart.d.ts +6 -0
- package/dist/components/chart/Chart.js +6 -0
- package/dist/components/chart/Chart.js.map +1 -1
- package/dist/components/combined-filter/CombinedFilter.d.ts +9 -0
- package/dist/components/combined-filter/CombinedFilter.js +9 -0
- package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
- package/dist/components/cube-view-bar/CubeViewBar.d.ts +6 -0
- package/dist/components/cube-view-bar/CubeViewBar.js +6 -0
- package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
- package/dist/components/export/ExportComponent.d.ts +12 -0
- package/dist/components/export/ExportComponent.js +12 -0
- package/dist/components/export/ExportComponent.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopup.d.ts +17 -4
- package/dist/components/filter/ExcelStyleFilterPopup.js +35 -23
- package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +1 -1
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js +2 -2
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -1
- package/dist/components/filter/FilterForm.d.ts +10 -0
- package/dist/components/filter/FilterForm.js +10 -0
- package/dist/components/filter/FilterForm.js.map +1 -1
- package/dist/components/filter/FilterPopup.d.ts +22 -4
- package/dist/components/filter/FilterPopup.js +17 -9
- package/dist/components/filter/FilterPopup.js.map +1 -1
- package/dist/components/filter/FilterPopupObjects.d.ts +5 -2
- package/dist/components/filter/FilterPopupObjects.js +5 -2
- package/dist/components/filter/FilterPopupObjects.js.map +1 -1
- package/dist/components/filter/FindForm.d.ts +7 -0
- package/dist/components/filter/FindForm.js +7 -0
- package/dist/components/filter/FindForm.js.map +1 -1
- package/dist/components/filter/ManagePrefilterPopup.d.ts +11 -0
- package/dist/components/filter/ManagePrefilterPopup.js +11 -0
- package/dist/components/filter/ManagePrefilterPopup.js.map +1 -1
- package/dist/components/form/Form.d.ts +16 -0
- package/dist/components/form/Form.js +16 -0
- package/dist/components/form/Form.js.map +1 -1
- package/dist/components/grid/Grid.d.ts +17 -0
- package/dist/components/grid/Grid.js +18 -1
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/maps/Maps.d.ts +6 -0
- package/dist/components/maps/Maps.js +6 -0
- package/dist/components/maps/Maps.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponent.d.ts +10 -0
- package/dist/components/menu/ListBarMenuComponent.js +10 -0
- package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
- package/dist/components/pivot-grid/PivotGrid.d.ts +6 -0
- package/dist/components/pivot-grid/PivotGrid.js +6 -0
- package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
- package/dist/components/pivot-grid/PivotGridFieldList.d.ts +7 -0
- package/dist/components/pivot-grid/PivotGridFieldList.js +7 -0
- package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
- package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js.map +1 -1
- package/dist/components/pop-up/PopUpComponent.d.ts +11 -0
- package/dist/components/pop-up/PopUpComponent.js +11 -0
- package/dist/components/pop-up/PopUpComponent.js.map +1 -1
- package/dist/components/prefilter-list/PrefilterList.d.ts +9 -0
- package/dist/components/prefilter-list/PrefilterList.js +9 -0
- package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
- package/dist/components/preview/Preview.d.ts +6 -0
- package/dist/components/preview/Preview.js +6 -0
- package/dist/components/preview/Preview.js.map +1 -1
- package/dist/components/report-bar/ReportBar.d.ts +6 -0
- package/dist/components/report-bar/ReportBar.js +6 -0
- package/dist/components/report-bar/ReportBar.js.map +1 -1
- package/dist/components/report-tiles/ReportTiles.d.ts +6 -0
- package/dist/components/report-tiles/ReportTiles.js +6 -0
- package/dist/components/report-tiles/ReportTiles.js.map +1 -1
- package/dist/components/scheduler/Scheduler.d.ts +6 -0
- package/dist/components/scheduler/Scheduler.js +6 -0
- package/dist/components/scheduler/Scheduler.js.map +1 -1
- package/dist/components/snackbar/SnackBar.d.ts +12 -0
- package/dist/components/snackbar/SnackBar.js +12 -0
- package/dist/components/snackbar/SnackBar.js.map +1 -1
- package/dist/components/splitter/Splitter.d.ts +6 -0
- package/dist/components/splitter/Splitter.js +6 -0
- package/dist/components/splitter/Splitter.js.map +1 -1
- package/dist/components/tab/BaseTab.d.ts +5 -0
- package/dist/components/tab/BaseTab.js +5 -0
- package/dist/components/tab/BaseTab.js.map +1 -1
- package/dist/components/tab/DetailTabPage.d.ts +11 -0
- package/dist/components/tab/DetailTabPage.js +11 -0
- package/dist/components/tab/DetailTabPage.js.map +1 -1
- package/dist/components/tab/Tab.d.ts +10 -0
- package/dist/components/tab/Tab.js +10 -0
- package/dist/components/tab/Tab.js.map +1 -1
- package/dist/components/task/TaskBar.d.ts +12 -2
- package/dist/components/task/TaskBar.js +13 -3
- package/dist/components/task/TaskBar.js.map +1 -1
- package/dist/components/task/TaskTiles.d.ts +11 -2
- package/dist/components/task/TaskTiles.js +12 -3
- package/dist/components/task/TaskTiles.js.map +1 -1
- package/dist/components/topbar/TopBar.d.ts +10 -0
- package/dist/components/topbar/TopBar.js +10 -0
- package/dist/components/topbar/TopBar.js.map +1 -1
- package/dist/components/tree-view/TreeView.d.ts +9 -0
- package/dist/components/tree-view/TreeView.js +9 -0
- package/dist/components/tree-view/TreeView.js.map +1 -1
- package/dist/controls/DateControl.d.ts +39 -0
- package/dist/controls/DateControl.js +18 -1
- package/dist/controls/DateControl.js.map +1 -1
- package/dist/controls/FormComboBox.d.ts +30 -0
- package/dist/controls/FormComboBox.js +8 -0
- package/dist/controls/FormComboBox.js.map +1 -1
- package/dist/controls/GridColumnControl.d.ts +30 -0
- package/dist/controls/GridColumnControl.js +12 -3
- package/dist/controls/GridColumnControl.js.map +1 -1
- package/dist/controls/InputFieldControl.d.ts +49 -0
- package/dist/controls/InputFieldControl.js +30 -0
- package/dist/controls/InputFieldControl.js.map +1 -1
- package/dist/controls/LookupDropdown.d.ts +29 -0
- package/dist/controls/LookupDropdown.js +8 -0
- package/dist/controls/LookupDropdown.js.map +1 -1
- package/dist/enums/ElementTypes.d.ts +18 -0
- package/dist/enums/ElementTypes.js +18 -0
- package/dist/enums/ElementTypes.js.map +1 -1
- package/dist/enums/ExportFormat.d.ts +8 -0
- package/dist/enums/ExportFormat.js +8 -0
- package/dist/enums/ExportFormat.js.map +1 -1
- package/dist/enums/LogLevel.d.ts +17 -0
- package/dist/enums/LogLevel.js +17 -1
- package/dist/enums/LogLevel.js.map +1 -1
- package/dist/enums/index.d.ts +1 -0
- package/dist/enums/index.js +1 -0
- package/dist/enums/index.js.map +1 -1
- package/dist/helpers/ConfigChecker.d.ts +13 -0
- package/dist/helpers/ConfigChecker.js +13 -0
- package/dist/helpers/ConfigChecker.js.map +1 -1
- package/dist/helpers/Ensure.d.ts +13 -0
- package/dist/helpers/Ensure.js +13 -0
- package/dist/helpers/Ensure.js.map +1 -1
- package/dist/helpers/FlightTracker.d.ts +13 -3
- package/dist/helpers/FlightTracker.js +103 -17
- package/dist/helpers/FlightTracker.js.map +1 -1
- package/dist/helpers/GlobalWaitEventHandler.d.ts +13 -0
- package/dist/helpers/GlobalWaitEventHandler.js +13 -0
- package/dist/helpers/GlobalWaitEventHandler.js.map +1 -1
- package/dist/helpers/LoginHelper.d.ts +35 -1
- package/dist/helpers/LoginHelper.js +46 -11
- package/dist/helpers/LoginHelper.js.map +1 -1
- package/dist/helpers/PathResolver.d.ts +22 -0
- package/dist/helpers/PathResolver.js +22 -0
- package/dist/helpers/PathResolver.js.map +1 -1
- package/dist/helpers/Poll.d.ts +13 -1
- package/dist/helpers/Poll.js +12 -0
- package/dist/helpers/Poll.js.map +1 -1
- package/dist/helpers/RegexHelper.d.ts +15 -0
- package/dist/helpers/RegexHelper.js +15 -3
- package/dist/helpers/RegexHelper.js.map +1 -1
- package/dist/helpers/SubjectNavigator.d.ts +26 -0
- package/dist/helpers/SubjectNavigator.js +51 -0
- package/dist/helpers/SubjectNavigator.js.map +1 -0
- package/dist/helpers/UserSimulationHelper.d.ts +14 -0
- package/dist/helpers/UserSimulationHelper.js +14 -0
- package/dist/helpers/UserSimulationHelper.js.map +1 -1
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/index.d.ts +6 -20
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/IComponentObjects.d.ts +12 -0
- package/dist/interfaces/IComponentSchemaMeta.d.ts +15 -0
- package/dist/interfaces/IComponentSchemaMeta.js +2 -0
- package/dist/interfaces/IComponentSchemaMeta.js.map +1 -0
- package/dist/interfaces/IProperty.d.ts +13 -0
- package/dist/interfaces/IRegisteredSubjects.d.ts +12 -0
- package/dist/interfaces/ISeedSubjectDraft.d.ts +16 -0
- package/dist/interfaces/ISeedSubjectDraft.js +2 -0
- package/dist/interfaces/ISeedSubjectDraft.js.map +1 -0
- package/dist/interfaces/ISubject.d.ts +13 -0
- package/dist/interfaces/ISubjectDetail.d.ts +11 -0
- package/dist/interfaces/ISubjectDetail.js +2 -0
- package/dist/interfaces/ISubjectDetail.js.map +1 -0
- package/dist/mcp/ArtifactResolver.d.ts +152 -0
- package/dist/mcp/ArtifactResolver.js +232 -0
- package/dist/mcp/ArtifactResolver.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/page-extensions/GlobalComponents.d.ts +30 -0
- package/dist/page-extensions/GlobalComponents.js +30 -0
- package/dist/page-extensions/GlobalComponents.js.map +1 -1
- package/dist/page-extensions/GoToDeepLink.d.ts +9 -0
- package/dist/page-extensions/GoToDeepLink.js +9 -0
- package/dist/page-extensions/GoToDeepLink.js.map +1 -1
- package/dist/page-extensions/LoginFeatures.d.ts +8 -0
- package/dist/page-extensions/LoginFeatures.js +8 -0
- package/dist/page-extensions/LoginFeatures.js.map +1 -1
- package/dist/page-extensions/SubjectRegistry.d.ts +31 -0
- package/dist/page-extensions/SubjectRegistry.js +31 -0
- package/dist/page-extensions/SubjectRegistry.js.map +1 -1
- package/dist/page-extensions/UserSimulation.d.ts +21 -0
- package/dist/page-extensions/UserSimulation.js +21 -0
- package/dist/page-extensions/UserSimulation.js.map +1 -1
- package/dist/page-extensions/WaitEventHandler.d.ts +20 -0
- package/dist/page-extensions/WaitEventHandler.js +20 -0
- package/dist/page-extensions/WaitEventHandler.js.map +1 -1
- package/dist/page-overrides/ClickOverride.d.ts +23 -2
- package/dist/page-overrides/ClickOverride.js +34 -50
- package/dist/page-overrides/ClickOverride.js.map +1 -1
- package/dist/page-overrides/FillOverride.d.ts +23 -0
- package/dist/page-overrides/FillOverride.js +56 -61
- package/dist/page-overrides/FillOverride.js.map +1 -1
- package/dist/services/ConfigBuilder.d.ts +24 -0
- package/dist/services/ConfigBuilder.js +24 -0
- package/dist/services/ConfigBuilder.js.map +1 -1
- package/dist/services/IndiciumApi.service.d.ts +26 -0
- package/dist/services/IndiciumApi.service.js +40 -5
- package/dist/services/IndiciumApi.service.js.map +1 -1
- package/dist/services/Logger.d.ts +13 -0
- package/dist/services/Logger.js +39 -0
- package/dist/services/Logger.js.map +1 -1
- package/dist/types/Components.d.ts +18 -1
- package/dist/types/Components.js +0 -1
- package/dist/types/Components.js.map +1 -1
- package/dist/types/LocatorType.d.ts +5 -0
- package/dist/types/LocatorType.js +2 -0
- package/dist/types/LocatorType.js.map +1 -0
- package/dist/types/PollTypes.d.ts +8 -0
- package/dist/types/Test.d.ts +18 -0
- package/dist/types/Universal.d.ts +12 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/enums/ElementTypes.ts +18 -0
- package/enums/ExportFormat.ts +8 -0
- package/enums/LogLevel.ts +17 -1
- package/enums/index.ts +1 -0
- package/helpers/ConfigChecker.ts +13 -0
- package/helpers/Ensure.ts +13 -0
- package/helpers/FlightTracker.ts +109 -20
- package/helpers/GlobalWaitEventHandler.ts +13 -0
- package/helpers/LoginHelper.ts +49 -12
- package/helpers/PathResolver.ts +22 -0
- package/helpers/Poll.ts +13 -1
- package/helpers/RegexHelper.ts +15 -3
- package/helpers/SubjectNavigator.ts +57 -0
- package/helpers/UserSimulationHelper.ts +14 -0
- package/helpers/index.ts +1 -0
- package/index.ts +1 -0
- package/interfaces/IComponentObjects.ts +12 -0
- package/interfaces/IComponentSchemaMeta.ts +17 -0
- package/interfaces/IProperty.ts +13 -0
- package/interfaces/IRegisteredSubjects.ts +12 -0
- package/interfaces/ISeedSubjectDraft.ts +17 -0
- package/interfaces/ISubject.ts +13 -0
- package/interfaces/ISubjectDetail.ts +12 -0
- package/mcp/ArtifactResolver.ts +296 -0
- package/mcp/index.ts +2 -0
- package/package.json +20 -8
- package/page-extensions/GlobalComponents.ts +30 -0
- package/page-extensions/GoToDeepLink.ts +9 -0
- package/page-extensions/LoginFeatures.ts +8 -0
- package/page-extensions/SubjectRegistry.ts +32 -0
- package/page-extensions/UserSimulation.ts +21 -0
- package/page-extensions/WaitEventHandler.ts +20 -0
- package/page-overrides/ClickOverride.ts +36 -55
- package/page-overrides/FillOverride.ts +59 -73
- package/promptCredentials.js +1 -1
- package/scripts/Testwise.template.json +1 -1
- package/scripts/diagram.js +2267 -0
- package/scripts/main.js +84 -63
- package/scripts/postinstall.js +55 -42
- package/scripts/setup.js +91 -37
- package/scripts/sync.js +767 -748
- package/services/ConfigBuilder.ts +24 -0
- package/services/IndiciumApi.service.ts +44 -6
- package/services/Logger.ts +40 -0
- package/templates/copilot-instructions.md +130 -0
- package/templates/mcp.json +9 -0
- package/templates/testwise-test-expert.agent.md +453 -0
- package/tests/tsconfig.json +12 -0
- package/tsconfig.json +6 -2
- package/types/Components.ts +17 -2
- package/types/LocatorType.ts +5 -0
- package/types/PollTypes.ts +8 -0
- package/types/Test.ts +18 -0
- package/types/Universal.ts +12 -0
- package/types/index.ts +2 -0
- package/dist/interfaces/IStoredTestResults.d.ts +0 -5
- package/dist/interfaces/IStoredTestResults.js +0 -2
- package/dist/interfaces/IStoredTestResults.js.map +0 -1
- package/dist/templates/test-artifacts/SubjectPageBase.d.ts +0 -5
- package/dist/templates/test-artifacts/SubjectPageBase.js +0 -6
- package/dist/templates/test-artifacts/SubjectPageBase.js.map +0 -1
- package/dist/templates/test-artifacts/screens/index.d.ts +0 -1
- package/dist/templates/test-artifacts/screens/index.js +0 -2
- package/dist/templates/test-artifacts/screens/index.js.map +0 -1
- package/dist/templates/test-artifacts/subjects/index.d.ts +0 -1
- package/dist/templates/test-artifacts/subjects/index.js +0 -2
- package/dist/templates/test-artifacts/subjects/index.js.map +0 -1
- package/interfaces/IStoredTestResults.ts +0 -6
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import type { IProperty } from './IProperty.js';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a single Thinkwise subject as stored in `seed-data/subjects.json`
|
|
4
|
+
* after the `ModelDataBuilder` pipeline step fetches it from the Indicium API.
|
|
5
|
+
*
|
|
6
|
+
* Each subject maps to one screen variant in the Thinkwise application. The
|
|
7
|
+
* `SubjectClassModelBuilder` reads these records and turns them into generated
|
|
8
|
+
* TypeScript subject classes under `test-artifacts/subjects/`.
|
|
9
|
+
*/
|
|
2
10
|
export interface ISubject {
|
|
11
|
+
/** Internal Thinkwise subject identifier (e.g. `"Employee"`). */
|
|
3
12
|
subject: string;
|
|
13
|
+
/** Subject variant, used to distinguish multiple configurations of the same subject (e.g. `"Editable1"`). */
|
|
4
14
|
variant: string;
|
|
15
|
+
/** Human-readable screen context: `"Main"`, `"Popup"`, `"Zoom"`, or `"Detail"`. */
|
|
5
16
|
screentype_context: string;
|
|
17
|
+
/** Thinkwise screen type identifier used to look up the correct screen schema file. */
|
|
6
18
|
screentype_id: string;
|
|
19
|
+
/** All field/column properties available on this screen. */
|
|
7
20
|
properties: IProperty[];
|
|
8
21
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Screen context variants produced by the artifact-builder pipeline. */
|
|
2
|
+
export type ScreenContext = 'Main' | 'Popup' | 'Zoom' | 'Detail';
|
|
3
|
+
/**
|
|
4
|
+
* Describes a single generated subject class that the SubjectRegistration
|
|
5
|
+
* step registers in the SubjectRegistry.
|
|
6
|
+
*/
|
|
7
|
+
export interface ISubjectDetail {
|
|
8
|
+
subject: string;
|
|
9
|
+
variant?: string;
|
|
10
|
+
screen: ScreenContext;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISubjectDetail.js","sourceRoot":"","sources":["../../interfaces/ISubjectDetail.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { PipelinePaths } from '../artifact-builder/helpers/PipelinePaths.js';
|
|
2
|
+
import type { ScreenContext } from '../interfaces/ISubjectDetail.js';
|
|
3
|
+
/** Describes a single generated subject class discovered in the test-artifacts directory. */
|
|
4
|
+
export interface SubjectArtifactInfo {
|
|
5
|
+
/** PascalCase subject folder name (e.g. `"CustomerOrder"`). */
|
|
6
|
+
subject: string;
|
|
7
|
+
/** Exact generated class name (e.g. `"CustomerOrderMain"`). */
|
|
8
|
+
className: string;
|
|
9
|
+
/** Screen context encoded in the class name. */
|
|
10
|
+
screenContext: ScreenContext;
|
|
11
|
+
/**
|
|
12
|
+
* Module specifier that importing code should use, relative to the consumer
|
|
13
|
+
* project root (e.g. `"@thinkwise/testwise/test-artifacts/subjects/CustomerOrder/CustomerOrderMain.js"`).
|
|
14
|
+
*/
|
|
15
|
+
importPath: string;
|
|
16
|
+
}
|
|
17
|
+
/** Describes a single field or column on a screen interface. */
|
|
18
|
+
export interface ScreenFieldInfo {
|
|
19
|
+
/** camelCase property name as it appears on the screen interface (e.g. `"customerName"`, `"orderDate"`). */
|
|
20
|
+
propertyName: string;
|
|
21
|
+
/**
|
|
22
|
+
* Testwise control type suffix indicating which control helper to use
|
|
23
|
+
* (e.g. `"Field"`, `"Lookup"`, `"Dropdown"`, `"DatePicker"`, `"Checkbox"`, `"Textarea"`, `"ComboBox"`).
|
|
24
|
+
* Derived from the property name suffix in the generated interface.
|
|
25
|
+
*/
|
|
26
|
+
controlType: string;
|
|
27
|
+
/** The component this field belongs to — `"Form"` or `"Grid"`. */
|
|
28
|
+
componentType: 'Form' | 'Grid';
|
|
29
|
+
}
|
|
30
|
+
/** Describes a single typed component property on a generated subject class. */
|
|
31
|
+
export interface ComponentInfo {
|
|
32
|
+
/** camelCase property name as declared on the subject class (e.g. `"grid"`, `"actionBar"`). */
|
|
33
|
+
propertyName: string;
|
|
34
|
+
/** Testwise component class name (e.g. `"Grid"`, `"ActionBar"`, `"Form"`). */
|
|
35
|
+
componentType: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Runtime service that reads the generated test-artifact files to answer
|
|
39
|
+
* questions about available subjects, their screen-context variants, and the
|
|
40
|
+
* components exposed on each subject class.
|
|
41
|
+
*
|
|
42
|
+
* Intended to be used by the `@thinkwise/testwise-mcp` server so that AI
|
|
43
|
+
* tooling can discover the correct class names and component properties before
|
|
44
|
+
* generating test code — without having to guess or hallucinate names.
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* Runtime service that reads the generated test-artifact files to answer
|
|
48
|
+
* questions about available subjects, their screen-context variants, and the
|
|
49
|
+
* components exposed on each subject class.
|
|
50
|
+
*
|
|
51
|
+
* **What it does:** The `@thinkwise/testwise-mcp` MCP server calls these
|
|
52
|
+
* methods to surface information to AI tooling (e.g. GitHub Copilot agents)
|
|
53
|
+
* so the AI can write correct Testwise tests without guessing class names,
|
|
54
|
+
* property names, or field names.
|
|
55
|
+
*
|
|
56
|
+
* **How to use it (as a consumer of the MCP server):** You don't call this
|
|
57
|
+
* class directly — use the MCP tools:
|
|
58
|
+
* - `list_subjects()` — all available subject folder names
|
|
59
|
+
* - `list_artifacts(subject?, screenContext?)` — exact class names + import paths
|
|
60
|
+
* - `get_components(subject, screenContext)` — component properties on a class
|
|
61
|
+
* - `get_screen_interface(subject, screenContext)` — field/column names + control types
|
|
62
|
+
*
|
|
63
|
+
* **For contributors:** This class is intentionally side-effect-free — it
|
|
64
|
+
* only reads files and never writes anything. Do not add browser-interaction
|
|
65
|
+
* logic here.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* // Used internally by the MCP server:
|
|
69
|
+
* const resolver = new ArtifactResolver();
|
|
70
|
+
* const subjects = resolver.listSubjects();
|
|
71
|
+
* const artifacts = resolver.listArtifacts('Employee', 'Main');
|
|
72
|
+
*/
|
|
73
|
+
export declare class ArtifactResolver {
|
|
74
|
+
private readonly _paths;
|
|
75
|
+
constructor(paths?: PipelinePaths);
|
|
76
|
+
/**
|
|
77
|
+
* Returns all subject folder names (PascalCase) that have been generated
|
|
78
|
+
* into the test-artifacts directory.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* resolver.listSubjects();
|
|
82
|
+
* // → ["CustomerOrder", "Product", "Employee"]
|
|
83
|
+
*/
|
|
84
|
+
listSubjects(): string[];
|
|
85
|
+
/**
|
|
86
|
+
* Returns all artifacts for the given subject, optionally filtered to a
|
|
87
|
+
* specific screen context.
|
|
88
|
+
*
|
|
89
|
+
* When `subject` is omitted every generated artifact is returned.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* // All screen contexts for one subject
|
|
93
|
+
* resolver.listArtifacts('CustomerOrder');
|
|
94
|
+
* // → [{ className: "CustomerOrderMain", screenContext: "Main", ... }, ...]
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* // One specific artifact
|
|
98
|
+
* resolver.listArtifacts('CustomerOrder', 'Main');
|
|
99
|
+
* // → [{ className: "CustomerOrderMain", screenContext: "Main", ... }]
|
|
100
|
+
*/
|
|
101
|
+
listArtifacts(subject?: string, screenContext?: ScreenContext): SubjectArtifactInfo[];
|
|
102
|
+
/**
|
|
103
|
+
* Returns the typed component properties declared on the generated subject
|
|
104
|
+
* class for the given subject + screen context combination.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* resolver.getComponents('CustomerOrder', 'Main');
|
|
108
|
+
* // → [
|
|
109
|
+
* // { propertyName: "grid", componentType: "Grid" },
|
|
110
|
+
* // { propertyName: "actionBar", componentType: "ActionBar" },
|
|
111
|
+
* // { propertyName: "filterForm",componentType: "FilterForm"},
|
|
112
|
+
* // ]
|
|
113
|
+
*/
|
|
114
|
+
getComponents(subject: string, screenContext: ScreenContext): ComponentInfo[];
|
|
115
|
+
/**
|
|
116
|
+
* Returns all fields and columns declared on the generated screen interface
|
|
117
|
+
* for the given subject + screen context combination.
|
|
118
|
+
*
|
|
119
|
+
* The interface lives in `test-artifacts/screens/` and contains every field
|
|
120
|
+
* name, column name, and control type for the screen — enough for an AI to
|
|
121
|
+
* write a complete, accurate test without inspecting a live browser.
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* resolver.getScreenInterface('CustomerOrder', 'Main');
|
|
125
|
+
* // → [
|
|
126
|
+
* // { propertyName: "customerName", controlType: "Field", componentType: "Form" },
|
|
127
|
+
* // { propertyName: "orderDate", controlType: "DatePicker", componentType: "Form" },
|
|
128
|
+
* // { propertyName: "status", controlType: "Lookup", componentType: "Form" },
|
|
129
|
+
* // { propertyName: "orderId", controlType: "Column", componentType: "Grid" },
|
|
130
|
+
* // ]
|
|
131
|
+
*/
|
|
132
|
+
getScreenInterface(subject: string, screenContext: ScreenContext): ScreenFieldInfo[];
|
|
133
|
+
private inferScreenContext;
|
|
134
|
+
/**
|
|
135
|
+
* Parses component properties from a generated subject class.
|
|
136
|
+
*
|
|
137
|
+
* Generated classes declare properties without `public`:
|
|
138
|
+
* actionBarVXE6V0YT: ActionBar;
|
|
139
|
+
* gridQT3UL7F8: EmployeeGrid;
|
|
140
|
+
*/
|
|
141
|
+
private parseComponentProperties;
|
|
142
|
+
/**
|
|
143
|
+
* Parses fields/columns from the Components/ subfolder files for a subject.
|
|
144
|
+
*
|
|
145
|
+
* Generated component files (e.g. EmployeeGrid.ts, EmployeeForm.ts) declare
|
|
146
|
+
* getters like:
|
|
147
|
+
* public get firstNameColumn(): IGridColumnControl { ... }
|
|
148
|
+
* public get firstNameField(): IInputFieldControl { ... }
|
|
149
|
+
*/
|
|
150
|
+
private parseScreenInterface;
|
|
151
|
+
private inferControlType;
|
|
152
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { PipelinePaths } from '../artifact-builder/helpers/PipelinePaths.js';
|
|
4
|
+
/** All known screen context suffixes, ordered longest-first to avoid prefix clashes. */
|
|
5
|
+
const screenContexts = ['Detail', 'Popup', 'Main', 'Zoom'];
|
|
6
|
+
/**
|
|
7
|
+
* Runtime service that reads the generated test-artifact files to answer
|
|
8
|
+
* questions about available subjects, their screen-context variants, and the
|
|
9
|
+
* components exposed on each subject class.
|
|
10
|
+
*
|
|
11
|
+
* Intended to be used by the `@thinkwise/testwise-mcp` server so that AI
|
|
12
|
+
* tooling can discover the correct class names and component properties before
|
|
13
|
+
* generating test code — without having to guess or hallucinate names.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Runtime service that reads the generated test-artifact files to answer
|
|
17
|
+
* questions about available subjects, their screen-context variants, and the
|
|
18
|
+
* components exposed on each subject class.
|
|
19
|
+
*
|
|
20
|
+
* **What it does:** The `@thinkwise/testwise-mcp` MCP server calls these
|
|
21
|
+
* methods to surface information to AI tooling (e.g. GitHub Copilot agents)
|
|
22
|
+
* so the AI can write correct Testwise tests without guessing class names,
|
|
23
|
+
* property names, or field names.
|
|
24
|
+
*
|
|
25
|
+
* **How to use it (as a consumer of the MCP server):** You don't call this
|
|
26
|
+
* class directly — use the MCP tools:
|
|
27
|
+
* - `list_subjects()` — all available subject folder names
|
|
28
|
+
* - `list_artifacts(subject?, screenContext?)` — exact class names + import paths
|
|
29
|
+
* - `get_components(subject, screenContext)` — component properties on a class
|
|
30
|
+
* - `get_screen_interface(subject, screenContext)` — field/column names + control types
|
|
31
|
+
*
|
|
32
|
+
* **For contributors:** This class is intentionally side-effect-free — it
|
|
33
|
+
* only reads files and never writes anything. Do not add browser-interaction
|
|
34
|
+
* logic here.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* // Used internally by the MCP server:
|
|
38
|
+
* const resolver = new ArtifactResolver();
|
|
39
|
+
* const subjects = resolver.listSubjects();
|
|
40
|
+
* const artifacts = resolver.listArtifacts('Employee', 'Main');
|
|
41
|
+
*/
|
|
42
|
+
export class ArtifactResolver {
|
|
43
|
+
constructor(paths) {
|
|
44
|
+
this._paths = paths ?? new PipelinePaths();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns all subject folder names (PascalCase) that have been generated
|
|
48
|
+
* into the test-artifacts directory.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* resolver.listSubjects();
|
|
52
|
+
* // → ["CustomerOrder", "Product", "Employee"]
|
|
53
|
+
*/
|
|
54
|
+
listSubjects() {
|
|
55
|
+
const subjectsDir = this._paths.subjects;
|
|
56
|
+
if (!fs.existsSync(subjectsDir))
|
|
57
|
+
return [];
|
|
58
|
+
return fs.readdirSync(subjectsDir).filter((entry) => fs.statSync(path.join(subjectsDir, entry)).isDirectory());
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Returns all artifacts for the given subject, optionally filtered to a
|
|
62
|
+
* specific screen context.
|
|
63
|
+
*
|
|
64
|
+
* When `subject` is omitted every generated artifact is returned.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* // All screen contexts for one subject
|
|
68
|
+
* resolver.listArtifacts('CustomerOrder');
|
|
69
|
+
* // → [{ className: "CustomerOrderMain", screenContext: "Main", ... }, ...]
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* // One specific artifact
|
|
73
|
+
* resolver.listArtifacts('CustomerOrder', 'Main');
|
|
74
|
+
* // → [{ className: "CustomerOrderMain", screenContext: "Main", ... }]
|
|
75
|
+
*/
|
|
76
|
+
listArtifacts(subject, screenContext) {
|
|
77
|
+
const subjects = subject ? [subject] : this.listSubjects();
|
|
78
|
+
const results = [];
|
|
79
|
+
for (const subjectName of subjects) {
|
|
80
|
+
const subjectDir = path.join(this._paths.subjects, subjectName);
|
|
81
|
+
if (!fs.existsSync(subjectDir))
|
|
82
|
+
continue;
|
|
83
|
+
const files = fs.readdirSync(subjectDir).filter((f) => f.endsWith('.ts') && f !== 'index.ts');
|
|
84
|
+
for (const file of files) {
|
|
85
|
+
const className = file.replace('.ts', '');
|
|
86
|
+
const context = this.inferScreenContext(className);
|
|
87
|
+
if (!context)
|
|
88
|
+
continue;
|
|
89
|
+
if (screenContext && context !== screenContext)
|
|
90
|
+
continue;
|
|
91
|
+
results.push({
|
|
92
|
+
subject: subjectName,
|
|
93
|
+
className,
|
|
94
|
+
screenContext: context,
|
|
95
|
+
importPath: `@thinkwise/testwise/test-artifacts/subjects/${subjectName}/${className}.js`
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return results;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Returns the typed component properties declared on the generated subject
|
|
103
|
+
* class for the given subject + screen context combination.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* resolver.getComponents('CustomerOrder', 'Main');
|
|
107
|
+
* // → [
|
|
108
|
+
* // { propertyName: "grid", componentType: "Grid" },
|
|
109
|
+
* // { propertyName: "actionBar", componentType: "ActionBar" },
|
|
110
|
+
* // { propertyName: "filterForm",componentType: "FilterForm"},
|
|
111
|
+
* // ]
|
|
112
|
+
*/
|
|
113
|
+
getComponents(subject, screenContext) {
|
|
114
|
+
const artifacts = this.listArtifacts(subject, screenContext);
|
|
115
|
+
if (artifacts.length === 0)
|
|
116
|
+
return [];
|
|
117
|
+
const filePath = path.join(this._paths.subjects, subject, `${artifacts[0].className}.ts`);
|
|
118
|
+
if (!fs.existsSync(filePath))
|
|
119
|
+
return [];
|
|
120
|
+
return this.parseComponentProperties(fs.readFileSync(filePath, 'utf-8'));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Returns all fields and columns declared on the generated screen interface
|
|
124
|
+
* for the given subject + screen context combination.
|
|
125
|
+
*
|
|
126
|
+
* The interface lives in `test-artifacts/screens/` and contains every field
|
|
127
|
+
* name, column name, and control type for the screen — enough for an AI to
|
|
128
|
+
* write a complete, accurate test without inspecting a live browser.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* resolver.getScreenInterface('CustomerOrder', 'Main');
|
|
132
|
+
* // → [
|
|
133
|
+
* // { propertyName: "customerName", controlType: "Field", componentType: "Form" },
|
|
134
|
+
* // { propertyName: "orderDate", controlType: "DatePicker", componentType: "Form" },
|
|
135
|
+
* // { propertyName: "status", controlType: "Lookup", componentType: "Form" },
|
|
136
|
+
* // { propertyName: "orderId", controlType: "Column", componentType: "Grid" },
|
|
137
|
+
* // ]
|
|
138
|
+
*/
|
|
139
|
+
getScreenInterface(subject, screenContext) {
|
|
140
|
+
const artifacts = this.listArtifacts(subject, screenContext);
|
|
141
|
+
if (artifacts.length === 0)
|
|
142
|
+
return [];
|
|
143
|
+
// Component files live in Components/ subfolder under the subject folder
|
|
144
|
+
const componentsDir = path.join(this._paths.subjects, subject, 'Components');
|
|
145
|
+
if (!fs.existsSync(componentsDir))
|
|
146
|
+
return [];
|
|
147
|
+
const results = [];
|
|
148
|
+
const componentFiles = fs.readdirSync(componentsDir).filter((f) => f.endsWith('.ts'));
|
|
149
|
+
for (const file of componentFiles) {
|
|
150
|
+
const content = fs.readFileSync(path.join(componentsDir, file), 'utf-8');
|
|
151
|
+
const interfaceName = file.replace('.ts', '');
|
|
152
|
+
const fields = this.parseScreenInterface(content, interfaceName);
|
|
153
|
+
results.push(...fields);
|
|
154
|
+
}
|
|
155
|
+
return results;
|
|
156
|
+
}
|
|
157
|
+
// ── Private helpers ────────────────────────────────────────────────────────
|
|
158
|
+
inferScreenContext(className) {
|
|
159
|
+
for (const ctx of screenContexts) {
|
|
160
|
+
if (className.endsWith(ctx))
|
|
161
|
+
return ctx;
|
|
162
|
+
}
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Parses component properties from a generated subject class.
|
|
167
|
+
*
|
|
168
|
+
* Generated classes declare properties without `public`:
|
|
169
|
+
* actionBarVXE6V0YT: ActionBar;
|
|
170
|
+
* gridQT3UL7F8: EmployeeGrid;
|
|
171
|
+
*/
|
|
172
|
+
parseComponentProperties(content) {
|
|
173
|
+
const results = [];
|
|
174
|
+
// Match class-body property declarations: " name: Type;" (no public keyword)
|
|
175
|
+
// Excludes private fields (_name), constructor, and method declarations
|
|
176
|
+
const propertyRegex = /^\s{4}(\w+)\s*:\s*(\w+)\s*;/gm;
|
|
177
|
+
for (let match = propertyRegex.exec(content); match !== null; match = propertyRegex.exec(content)) {
|
|
178
|
+
const propertyName = match[1];
|
|
179
|
+
const componentType = match[2];
|
|
180
|
+
if (propertyName.startsWith('_'))
|
|
181
|
+
continue;
|
|
182
|
+
if (['string', 'number', 'boolean', 'Page', 'Locator'].includes(componentType))
|
|
183
|
+
continue;
|
|
184
|
+
results.push({ propertyName, componentType });
|
|
185
|
+
}
|
|
186
|
+
return results;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Parses fields/columns from the Components/ subfolder files for a subject.
|
|
190
|
+
*
|
|
191
|
+
* Generated component files (e.g. EmployeeGrid.ts, EmployeeForm.ts) declare
|
|
192
|
+
* getters like:
|
|
193
|
+
* public get firstNameColumn(): IGridColumnControl { ... }
|
|
194
|
+
* public get firstNameField(): IInputFieldControl { ... }
|
|
195
|
+
*/
|
|
196
|
+
parseScreenInterface(content, interfaceName) {
|
|
197
|
+
const results = [];
|
|
198
|
+
// Match readonly interface members: " readonly bioColumn: IGridColumnControl;"
|
|
199
|
+
const interfaceRegex = /^\s+readonly\s+(\w+)\s*:\s*(I?\w+Control)\s*;/gm;
|
|
200
|
+
for (let match = interfaceRegex.exec(content); match !== null; match = interfaceRegex.exec(content)) {
|
|
201
|
+
const propertyName = match[1];
|
|
202
|
+
const rawType = match[2];
|
|
203
|
+
const controlType = this.inferControlType(rawType, propertyName);
|
|
204
|
+
const componentType = interfaceName.toLowerCase().includes('grid') ? 'Grid' : 'Form';
|
|
205
|
+
results.push({ propertyName, controlType, componentType: componentType });
|
|
206
|
+
}
|
|
207
|
+
return results;
|
|
208
|
+
}
|
|
209
|
+
inferControlType(rawType, propertyName) {
|
|
210
|
+
const typeMap = {
|
|
211
|
+
IGridColumnControl: 'Column',
|
|
212
|
+
GridColumnControl: 'Column',
|
|
213
|
+
IInputFieldControl: 'Field',
|
|
214
|
+
InputFieldControl: 'Field',
|
|
215
|
+
ILookupDropdown: 'Lookup',
|
|
216
|
+
LookupDropdown: 'Lookup',
|
|
217
|
+
IFormComboBox: 'ComboBox',
|
|
218
|
+
FormComboBox: 'ComboBox',
|
|
219
|
+
IDateControl: 'DatePicker',
|
|
220
|
+
DateControl: 'DatePicker',
|
|
221
|
+
ICheckboxControl: 'Checkbox',
|
|
222
|
+
CheckboxControl: 'Checkbox',
|
|
223
|
+
ITextareaControl: 'Textarea',
|
|
224
|
+
TextareaControl: 'Textarea'
|
|
225
|
+
};
|
|
226
|
+
if (typeMap[rawType])
|
|
227
|
+
return typeMap[rawType];
|
|
228
|
+
const suffixMatch = propertyName.match(/(Field|Lookup|Dropdown|DatePicker|Checkbox|Textarea|ComboBox|Column)$/i);
|
|
229
|
+
return suffixMatch ? suffixMatch[1] : rawType;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=ArtifactResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArtifactResolver.js","sourceRoot":"","sources":["../../mcp/ArtifactResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../mcp/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import type { Page } from '@playwright/test';
|
|
2
2
|
import { ExportComponent, ListBarMenuComponent, ManagePrefilterPopup, PopUpComponent, SnackBarComponent, TopBarComponent } from '../components/index.js';
|
|
3
3
|
import type { Test } from '../types/Test.js';
|
|
4
|
+
/**
|
|
5
|
+
* Holds pre-constructed instances of the Thinkwise UI components that are
|
|
6
|
+
* present globally across all screens (not tied to any specific subject).
|
|
7
|
+
*
|
|
8
|
+
* Accessed via `page.components` in tests. Available properties:
|
|
9
|
+
* - `popUp` — the main overlay/modal dialog
|
|
10
|
+
* - `export` — the export panel triggered from a grid or list
|
|
11
|
+
* - `snackBar` — the toast notification bar
|
|
12
|
+
* - `topBar` — the application top bar (breadcrumbs, user menu)
|
|
13
|
+
* - `listBarMenu` — the hamburger / list-bar dropdown menu
|
|
14
|
+
* - `managePrefilterPopup` — the "Manage prefilter" popup dialog
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* // Confirm a save popup:
|
|
19
|
+
* await page.components.popUp.confirm();
|
|
20
|
+
*
|
|
21
|
+
* // Check a snackbar message:
|
|
22
|
+
* await expect(page.components.snackBar.message).toHaveText('Saved successfully');
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
4
25
|
declare class GlobalComponents {
|
|
5
26
|
popUp: PopUpComponent;
|
|
6
27
|
export: ExportComponent;
|
|
@@ -17,7 +38,16 @@ declare module '@playwright/test' {
|
|
|
17
38
|
}
|
|
18
39
|
export declare class Components {
|
|
19
40
|
private _test;
|
|
41
|
+
/**
|
|
42
|
+
* Extends the Playwright `Test` fixture to attach a `GlobalComponents` instance to
|
|
43
|
+
* `page.components` before each test, providing access to shared UI components
|
|
44
|
+
* such as `popUp`, `export`, `snackBar`, `topBar`, `listBarMenu`, and `managePrefilterPopup`.
|
|
45
|
+
* @param test - The Playwright `Test` fixture to extend.
|
|
46
|
+
*/
|
|
20
47
|
constructor(test: Test);
|
|
48
|
+
/**
|
|
49
|
+
* Returns the extended `Test` fixture with `page.components` wired up.
|
|
50
|
+
*/
|
|
21
51
|
get test(): Test;
|
|
22
52
|
}
|
|
23
53
|
export {};
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import { ExportComponent, ListBarMenuComponent, ManagePrefilterPopup, PopUpComponent, SnackBarComponent, TopBarComponent } from '../components/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Holds pre-constructed instances of the Thinkwise UI components that are
|
|
4
|
+
* present globally across all screens (not tied to any specific subject).
|
|
5
|
+
*
|
|
6
|
+
* Accessed via `page.components` in tests. Available properties:
|
|
7
|
+
* - `popUp` — the main overlay/modal dialog
|
|
8
|
+
* - `export` — the export panel triggered from a grid or list
|
|
9
|
+
* - `snackBar` — the toast notification bar
|
|
10
|
+
* - `topBar` — the application top bar (breadcrumbs, user menu)
|
|
11
|
+
* - `listBarMenu` — the hamburger / list-bar dropdown menu
|
|
12
|
+
* - `managePrefilterPopup` — the "Manage prefilter" popup dialog
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* // Confirm a save popup:
|
|
17
|
+
* await page.components.popUp.confirm();
|
|
18
|
+
*
|
|
19
|
+
* // Check a snackbar message:
|
|
20
|
+
* await expect(page.components.snackBar.message).toHaveText('Saved successfully');
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
2
23
|
class GlobalComponents {
|
|
3
24
|
constructor(page) {
|
|
4
25
|
this.popUp = new PopUpComponent(page);
|
|
@@ -10,6 +31,12 @@ class GlobalComponents {
|
|
|
10
31
|
}
|
|
11
32
|
}
|
|
12
33
|
export class Components {
|
|
34
|
+
/**
|
|
35
|
+
* Extends the Playwright `Test` fixture to attach a `GlobalComponents` instance to
|
|
36
|
+
* `page.components` before each test, providing access to shared UI components
|
|
37
|
+
* such as `popUp`, `export`, `snackBar`, `topBar`, `listBarMenu`, and `managePrefilterPopup`.
|
|
38
|
+
* @param test - The Playwright `Test` fixture to extend.
|
|
39
|
+
*/
|
|
13
40
|
constructor(test) {
|
|
14
41
|
this._test = test.extend({
|
|
15
42
|
page: async ({ page }, use) => {
|
|
@@ -18,6 +45,9 @@ export class Components {
|
|
|
18
45
|
}
|
|
19
46
|
});
|
|
20
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns the extended `Test` fixture with `page.components` wired up.
|
|
50
|
+
*/
|
|
21
51
|
get test() {
|
|
22
52
|
return this._test;
|
|
23
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalComponents.js","sourceRoot":"","sources":["../../page-extensions/GlobalComponents.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,gBAAgB;IAQpB,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAQD,MAAM,OAAO,UAAU;IAGrB,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAE7C,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"GlobalComponents.js","sourceRoot":"","sources":["../../page-extensions/GlobalComponents.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAGhC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,gBAAgB;IAQpB,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAQD,MAAM,OAAO,UAAU;IAGrB;;;;;OAKG;IACH,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAE7C,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -6,6 +6,15 @@ declare module '@playwright/test' {
|
|
|
6
6
|
}
|
|
7
7
|
export declare class GoToDeepLink {
|
|
8
8
|
private _test;
|
|
9
|
+
/**
|
|
10
|
+
* Extends the Playwright `Test` fixture to add a `page.goToDeepLink(deepLink)` method.
|
|
11
|
+
* The method preserves the current `#application=` hash segment and appends the given
|
|
12
|
+
* deep link path before navigating to the resulting URL.
|
|
13
|
+
* @param test - The Playwright `Test` fixture to extend.
|
|
14
|
+
*/
|
|
9
15
|
constructor(test: Test);
|
|
16
|
+
/**
|
|
17
|
+
* Returns the extended `Test` fixture with `page.goToDeepLink` wired up.
|
|
18
|
+
*/
|
|
10
19
|
get test(): Test;
|
|
11
20
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export class GoToDeepLink {
|
|
2
|
+
/**
|
|
3
|
+
* Extends the Playwright `Test` fixture to add a `page.goToDeepLink(deepLink)` method.
|
|
4
|
+
* The method preserves the current `#application=` hash segment and appends the given
|
|
5
|
+
* deep link path before navigating to the resulting URL.
|
|
6
|
+
* @param test - The Playwright `Test` fixture to extend.
|
|
7
|
+
*/
|
|
2
8
|
constructor(test) {
|
|
3
9
|
this._test = test.extend({
|
|
4
10
|
page: async ({ page }, use) => {
|
|
@@ -24,6 +30,9 @@ export class GoToDeepLink {
|
|
|
24
30
|
}
|
|
25
31
|
});
|
|
26
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns the extended `Test` fixture with `page.goToDeepLink` wired up.
|
|
35
|
+
*/
|
|
27
36
|
get test() {
|
|
28
37
|
return this._test;
|
|
29
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoToDeepLink.js","sourceRoot":"","sources":["../../page-extensions/GoToDeepLink.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,YAAY;IAGvB,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,EAAE,QAAgB,EAAuD,EAAE;oBAClG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oBACtC,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;oBAE3D,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;wBAC5B,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrG,GAAG,CAAC,IAAI,GAAG,gBAAgB,gBAAgB,EAAE,CAAC;oBAChD,CAAC;oBAED,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC7B,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACnC,CAAC;oBAED,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC3B,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC7B,CAAC;oBAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACzC,CAAC,CAAC;gBAEF,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"GoToDeepLink.js","sourceRoot":"","sources":["../../page-extensions/GoToDeepLink.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,YAAY;IAGvB;;;;;OAKG;IACH,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,EAAE,QAAgB,EAAuD,EAAE;oBAClG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oBACtC,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;oBAE3D,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;wBAC5B,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrG,GAAG,CAAC,IAAI,GAAG,gBAAgB,gBAAgB,EAAE,CAAC;oBAChD,CAAC;oBAED,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC7B,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACnC,CAAC;oBAED,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC3B,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC7B,CAAC;oBAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACzC,CAAC,CAAC;gBAEF,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -11,7 +11,15 @@ declare module '@playwright/test' {
|
|
|
11
11
|
export declare class LoginFeatures {
|
|
12
12
|
private _loginHelper;
|
|
13
13
|
private _test;
|
|
14
|
+
/**
|
|
15
|
+
* Extends the Playwright `Test` fixture to attach `logIn`, `logInWithCredentials`,
|
|
16
|
+
* `logInWithOptions`, and `logOut` methods to the page, backed by `LoginHelper`.
|
|
17
|
+
* @param test - The Playwright `Test` fixture to extend.
|
|
18
|
+
*/
|
|
14
19
|
constructor(test: Test);
|
|
15
20
|
private get loginHelper();
|
|
21
|
+
/**
|
|
22
|
+
* Returns the extended `Test` fixture with login methods wired up on `page`.
|
|
23
|
+
*/
|
|
16
24
|
get test(): Test;
|
|
17
25
|
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { LoginHelper } from '../helpers/LoginHelper.js';
|
|
2
2
|
export class LoginFeatures {
|
|
3
|
+
/**
|
|
4
|
+
* Extends the Playwright `Test` fixture to attach `logIn`, `logInWithCredentials`,
|
|
5
|
+
* `logInWithOptions`, and `logOut` methods to the page, backed by `LoginHelper`.
|
|
6
|
+
* @param test - The Playwright `Test` fixture to extend.
|
|
7
|
+
*/
|
|
3
8
|
constructor(test) {
|
|
4
9
|
this._test = test.extend({
|
|
5
10
|
page: async ({ page }, use) => {
|
|
@@ -26,6 +31,9 @@ export class LoginFeatures {
|
|
|
26
31
|
}
|
|
27
32
|
return this._loginHelper;
|
|
28
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns the extended `Test` fixture with login methods wired up on `page`.
|
|
36
|
+
*/
|
|
29
37
|
get test() {
|
|
30
38
|
return this._test;
|
|
31
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginFeatures.js","sourceRoot":"","sources":["../../page-extensions/LoginFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAaxD,MAAM,OAAO,aAAa;IAIxB,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;gBAE1C,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,aAAsB,EAAE,EAAE;oBAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC9C,CAAC,CAAC;gBAEF,IAAI,CAAC,oBAAoB,GAAG,KAAK,EAAE,QAAgB,EAAE,QAAgB,EAAE,EAAE;oBACvE,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAClE,CAAC,CAAC;gBAEF,IAAI,CAAC,gBAAgB,GAAG,KAAK,EAAE,OAA8B,EAAE,EAAE;oBAC/D,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACnD,CAAC,CAAC;gBAEF,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;oBACvB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAClC,CAAC,CAAC;gBAEF,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAY,WAAW;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"LoginFeatures.js","sourceRoot":"","sources":["../../page-extensions/LoginFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAaxD,MAAM,OAAO,aAAa;IAIxB;;;;OAIG;IACH,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;gBAE1C,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,aAAsB,EAAE,EAAE;oBAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC9C,CAAC,CAAC;gBAEF,IAAI,CAAC,oBAAoB,GAAG,KAAK,EAAE,QAAgB,EAAE,QAAgB,EAAE,EAAE;oBACvE,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAClE,CAAC,CAAC;gBAEF,IAAI,CAAC,gBAAgB,GAAG,KAAK,EAAE,OAA8B,EAAE,EAAE;oBAC/D,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACnD,CAAC,CAAC;gBAEF,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;oBACvB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAClC,CAAC,CAAC;gBAEF,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAY,WAAW;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|