create-appraisejs 0.1.6 → 0.1.8-alpha
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/README.md +45 -45
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/copy-template.d.ts +2 -1
- package/dist/copy-template.d.ts.map +1 -1
- package/dist/copy-template.js +10 -7
- package/dist/copy-template.js.map +1 -1
- package/dist/copy-template.test.js +19 -0
- package/dist/copy-template.test.js.map +1 -1
- package/package.json +69 -67
- package/templates/default/.vscode/settings.json +5 -0
- package/templates/default/appraisejs.config.json +1 -1
- package/templates/default/components.json +24 -24
- package/templates/default/cucumber.mjs +16 -0
- package/templates/default/eslint.config.mjs +15 -15
- package/templates/default/next.config.ts +13 -7
- package/templates/default/package-lock.json +13732 -14321
- package/templates/default/package.json +11 -9
- package/templates/default/postcss.config.mjs +8 -8
- package/templates/default/prisma/migrations/20251104113456_add_type_for_template_step_groups/migration.sql +16 -16
- package/templates/default/prisma/migrations/20251104170946_add_tags_to_test_suite_and_test_case/migration.sql +27 -27
- package/templates/default/prisma/migrations/20251112190024_add_cascade_delete_to_test_run_test_case/migration.sql +17 -17
- package/templates/default/prisma/migrations/20251113181100_add_test_run_log/migration.sql +12 -12
- package/templates/default/prisma/migrations/20251119191838_add_tag_type/migration.sql +28 -28
- package/templates/default/prisma/migrations/20251121164059_add_conflict_resolution/migration.sql +12 -12
- package/templates/default/prisma/migrations/20251223183400_add_report_model_to_db_schema/migration.sql +10 -10
- package/templates/default/prisma/migrations/20251223183637_add_report_test_case_entity_for_storing_test_results_for_individual_test_cases/migration.sql +10 -10
- package/templates/default/prisma/migrations/20251224083549_add_comprehensive_report_storage/migration.sql +108 -108
- package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql +55 -55
- package/templates/default/prisma/migrations/20251230124637_add_unique_constraint_to_test_run_name/migration.sql +27 -27
- package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql +59 -59
- package/templates/default/prisma/migrations/20260127172022_add_cascade_delete_to_step_parameters/migration.sql +34 -34
- package/templates/default/prisma/schema.prisma +554 -554
- package/templates/default/scripts/regenerate-features.ts +94 -94
- package/templates/default/scripts/setup-env.ts +19 -19
- package/templates/default/scripts/sync-all.ts +341 -341
- package/templates/default/scripts/sync-appraise-base-template.ts +52 -2
- package/templates/default/scripts/sync-environments.ts +323 -323
- package/templates/default/scripts/sync-locator-groups.ts +413 -413
- package/templates/default/scripts/sync-locators.ts +402 -402
- package/templates/default/scripts/sync-modules.ts +349 -349
- package/templates/default/scripts/sync-tags.ts +292 -292
- package/templates/default/scripts/sync-template-step-groups.ts +399 -399
- package/templates/default/scripts/sync-template-steps.ts +806 -806
- package/templates/default/scripts/sync-test-cases.ts +905 -905
- package/templates/default/scripts/sync-test-suites.ts +411 -411
- package/templates/default/src/actions/conflict/conflict.action.ts +33 -33
- package/templates/default/src/actions/dashboard/dashboard-actions.ts +240 -240
- package/templates/default/src/actions/environments/environment-actions.ts +205 -205
- package/templates/default/src/actions/locator/locator-actions.ts +547 -547
- package/templates/default/src/actions/locator-groups/locator-group-actions.ts +344 -344
- package/templates/default/src/actions/modules/module-actions.ts +133 -133
- package/templates/default/src/actions/reports/report-actions.ts +613 -613
- package/templates/default/src/actions/review/review-actions.ts +147 -147
- package/templates/default/src/actions/tags/tag-actions.ts +104 -104
- package/templates/default/src/actions/template-step/template-step-actions.ts +332 -332
- package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +278 -278
- package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +238 -238
- package/templates/default/src/actions/test-case/test-case-actions.ts +419 -419
- package/templates/default/src/actions/test-run/test-run-actions.ts +1185 -1185
- package/templates/default/src/actions/test-suite/test-suite-actions.ts +253 -253
- package/templates/default/src/actions/user/user-actions.ts +13 -13
- package/templates/default/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/environments/environment-form.tsx +219 -219
- package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -96
- package/templates/default/src/app/(base)/environments/environment-table.tsx +24 -24
- package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/environments/page.tsx +59 -59
- package/templates/default/src/app/(base)/layout.tsx +10 -10
- package/templates/default/src/app/(base)/locator-groups/create/page.tsx +44 -44
- package/templates/default/src/app/(base)/locator-groups/locator-group-form.tsx +215 -215
- package/templates/default/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
- package/templates/default/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
- package/templates/default/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/locator-groups/page.tsx +61 -61
- package/templates/default/src/app/(base)/locators/create/page.tsx +38 -38
- package/templates/default/src/app/(base)/locators/locator-form.tsx +163 -163
- package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +73 -90
- package/templates/default/src/app/(base)/locators/locator-table.tsx +28 -28
- package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +45 -45
- package/templates/default/src/app/(base)/locators/page.tsx +65 -65
- package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +66 -66
- package/templates/default/src/app/(base)/modules/create/page.tsx +34 -34
- package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/modules/module-form.tsx +126 -126
- package/templates/default/src/app/(base)/modules/module-table-columns.tsx +85 -85
- package/templates/default/src/app/(base)/modules/module-table.tsx +24 -24
- package/templates/default/src/app/(base)/modules/page.tsx +59 -59
- package/templates/default/src/app/(base)/reports/[id]/page.tsx +517 -517
- package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -33
- package/templates/default/src/app/(base)/reports/feature-chart.tsx +78 -78
- package/templates/default/src/app/(base)/reports/overview-chart.tsx +46 -46
- package/templates/default/src/app/(base)/reports/page.tsx +98 -98
- package/templates/default/src/app/(base)/reports/report-metric-card.tsx +16 -16
- package/templates/default/src/app/(base)/reports/report-table-columns.tsx +189 -189
- package/templates/default/src/app/(base)/reports/report-table.tsx +72 -72
- package/templates/default/src/app/(base)/reports/report-view-table-columns.tsx +131 -131
- package/templates/default/src/app/(base)/reports/report-view-table.tsx +82 -82
- package/templates/default/src/app/(base)/reports/test-cases/page.tsx +42 -42
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +115 -115
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
- package/templates/default/src/app/(base)/reports/test-suites/page.tsx +42 -42
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +79 -79
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +27 -27
- package/templates/default/src/app/(base)/reports/view-logs-button.tsx +60 -60
- package/templates/default/src/app/(base)/reviews/create/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +15 -15
- package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/review-form.tsx +11 -11
- package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +9 -9
- package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +9 -9
- package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +15 -15
- package/templates/default/src/app/(base)/tags/create/page.tsx +39 -39
- package/templates/default/src/app/(base)/tags/modify/[id]/page.tsx +50 -50
- package/templates/default/src/app/(base)/tags/page.tsx +58 -58
- package/templates/default/src/app/(base)/tags/tag-form.tsx +147 -147
- package/templates/default/src/app/(base)/tags/tag-table-columns.tsx +63 -63
- package/templates/default/src/app/(base)/tags/tag-table.tsx +29 -29
- package/templates/default/src/app/(base)/template-step-groups/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/template-step-groups/modify/[id]/page.tsx +45 -45
- package/templates/default/src/app/(base)/template-step-groups/page.tsx +60 -60
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.tsx +167 -167
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table-columns.tsx +89 -89
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table.tsx +32 -32
- package/templates/default/src/app/(base)/template-steps/create/page.tsx +37 -37
- package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +49 -49
- package/templates/default/src/app/(base)/template-steps/page.tsx +59 -59
- package/templates/default/src/app/(base)/template-steps/paramChip.tsx +213 -213
- package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +384 -384
- package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +158 -158
- package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +24 -24
- package/templates/default/src/app/(base)/template-test-cases/create/page.tsx +56 -56
- package/templates/default/src/app/(base)/template-test-cases/modify/[id]/page.tsx +89 -89
- package/templates/default/src/app/(base)/template-test-cases/page.tsx +58 -58
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.tsx +84 -84
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +262 -262
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
- package/templates/default/src/app/(base)/test-cases/create/page.tsx +76 -76
- package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +96 -96
- package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +38 -38
- package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +73 -73
- package/templates/default/src/app/(base)/test-cases/modify/[id]/page.tsx +106 -106
- package/templates/default/src/app/(base)/test-cases/page.tsx +60 -60
- package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +82 -82
- package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +395 -395
- package/templates/default/src/app/(base)/test-cases/test-case-table-columns.tsx +90 -90
- package/templates/default/src/app/(base)/test-cases/test-case-table.tsx +35 -35
- package/templates/default/src/app/(base)/test-runs/[id]/page.tsx +56 -56
- package/templates/default/src/app/(base)/test-runs/create/page.tsx +47 -47
- package/templates/default/src/app/(base)/test-runs/page.tsx +60 -60
- package/templates/default/src/app/(base)/test-runs/test-run-form.tsx +508 -512
- package/templates/default/src/app/(base)/test-runs/test-run-table-columns.tsx +229 -229
- package/templates/default/src/app/(base)/test-runs/test-run-table.tsx +127 -127
- package/templates/default/src/app/(base)/test-suites/create/page.tsx +45 -45
- package/templates/default/src/app/(base)/test-suites/modify/[id]/page.tsx +55 -55
- package/templates/default/src/app/(base)/test-suites/page.tsx +82 -82
- package/templates/default/src/app/(base)/test-suites/test-suite-form.tsx +269 -269
- package/templates/default/src/app/(base)/test-suites/test-suite-table-columns.tsx +97 -97
- package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +29 -29
- package/templates/default/src/app/(dashboard-components)/app-drawer.tsx +187 -187
- package/templates/default/src/app/(dashboard-components)/data-card-grid.tsx +12 -12
- package/templates/default/src/app/(dashboard-components)/data-card.tsx +26 -26
- package/templates/default/src/app/(dashboard-components)/execution-health-panel.tsx +56 -56
- package/templates/default/src/app/(dashboard-components)/ongoing-test-runs-card.tsx +87 -87
- package/templates/default/src/app/(dashboard-components)/quick-actions-drawer.tsx +44 -44
- package/templates/default/src/app/api/test-runs/[runId]/download/route.ts +133 -133
- package/templates/default/src/app/api/test-runs/[runId]/logs/route.ts +420 -420
- package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -146
- package/templates/default/src/app/globals.css +147 -147
- package/templates/default/src/app/layout.tsx +171 -171
- package/templates/default/src/app/page.tsx +64 -64
- package/templates/default/src/assets/icons/empty-tube.tsx +23 -23
- package/templates/default/src/assets/icons/tube-plus.tsx +29 -29
- package/templates/default/src/components/base-node.tsx +21 -21
- package/templates/default/src/components/chart/pie-chart.tsx +73 -73
- package/templates/default/src/components/data-extraction/locator-inspector.tsx +460 -460
- package/templates/default/src/components/data-state/empty-state.tsx +40 -40
- package/templates/default/src/components/data-visualization/info-card.tsx +70 -70
- package/templates/default/src/components/data-visualization/info-grid.tsx +22 -22
- package/templates/default/src/components/devtools/providers.tsx +19 -13
- package/templates/default/src/components/diagram/button-edge.tsx +54 -54
- package/templates/default/src/components/diagram/dynamic-parameters.tsx +438 -438
- package/templates/default/src/components/diagram/edit-header-option.tsx +36 -36
- package/templates/default/src/components/diagram/flow-diagram.tsx +470 -470
- package/templates/default/src/components/diagram/node-form.tsx +262 -262
- package/templates/default/src/components/diagram/options-header-node.tsx +57 -57
- package/templates/default/src/components/diagram/template-step-combobox.tsx +155 -155
- package/templates/default/src/components/form/error-message.tsx +7 -7
- package/templates/default/src/components/kokonutui/smooth-tab.tsx +453 -453
- package/templates/default/src/components/loading-skeleton/data-table/data-table-skeleton.tsx +30 -30
- package/templates/default/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/form/icon-button-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
- package/templates/default/src/components/logo.tsx +15 -15
- package/templates/default/src/components/navigation/command-badge.tsx +34 -34
- package/templates/default/src/components/navigation/command-chain-input.tsx +51 -51
- package/templates/default/src/components/navigation/entity-search-command.tsx +116 -116
- package/templates/default/src/components/navigation/nav-card.tsx +31 -31
- package/templates/default/src/components/navigation/nav-command.tsx +508 -508
- package/templates/default/src/components/navigation/nav-link.tsx +60 -60
- package/templates/default/src/components/navigation/nav-menu-card-deck.tsx +112 -112
- package/templates/default/src/components/node-header.tsx +159 -159
- package/templates/default/src/components/reports/test-case-logs-modal.tsx +253 -253
- package/templates/default/src/components/table/table-actions.tsx +172 -172
- package/templates/default/src/components/test-run/download-logs-button.tsx +99 -99
- package/templates/default/src/components/test-run/log-viewer.tsx +445 -445
- package/templates/default/src/components/test-run/test-run-details.tsx +611 -611
- package/templates/default/src/components/test-run/test-run-header.tsx +149 -149
- package/templates/default/src/components/test-run/view-report-button.tsx +102 -102
- package/templates/default/src/components/theme/mode-toggle.tsx +54 -54
- package/templates/default/src/components/theme/theme-provider.tsx +8 -8
- package/templates/default/src/components/typography/page-header-subtitle.tsx +7 -7
- package/templates/default/src/components/typography/page-header.tsx +7 -7
- package/templates/default/src/components/ui/alert-dialog.tsx +106 -106
- package/templates/default/src/components/ui/alert.tsx +43 -43
- package/templates/default/src/components/ui/avatar.tsx +40 -40
- package/templates/default/src/components/ui/badge.tsx +29 -29
- package/templates/default/src/components/ui/button.tsx +47 -47
- package/templates/default/src/components/ui/calendar.tsx +158 -158
- package/templates/default/src/components/ui/card.tsx +43 -43
- package/templates/default/src/components/ui/checkbox.tsx +28 -28
- package/templates/default/src/components/ui/command.tsx +135 -135
- package/templates/default/src/components/ui/data-table-column-header.tsx +61 -61
- package/templates/default/src/components/ui/data-table-pagination.tsx +87 -87
- package/templates/default/src/components/ui/data-table-view-options.tsx +50 -50
- package/templates/default/src/components/ui/data-table.tsx +267 -267
- package/templates/default/src/components/ui/dialog.tsx +97 -97
- package/templates/default/src/components/ui/dropdown-menu.tsx +182 -182
- package/templates/default/src/components/ui/input.tsx +22 -22
- package/templates/default/src/components/ui/kbd.tsx +28 -28
- package/templates/default/src/components/ui/label.tsx +19 -19
- package/templates/default/src/components/ui/loading.tsx +12 -12
- package/templates/default/src/components/ui/multi-select-with-preview.tsx +116 -116
- package/templates/default/src/components/ui/multi-select.tsx +142 -142
- package/templates/default/src/components/ui/navigation-menu.tsx +120 -120
- package/templates/default/src/components/ui/popover.tsx +33 -33
- package/templates/default/src/components/ui/progress.tsx +25 -25
- package/templates/default/src/components/ui/radio-group.tsx +44 -44
- package/templates/default/src/components/ui/scroll-area.tsx +40 -40
- package/templates/default/src/components/ui/select.tsx +151 -144
- package/templates/default/src/components/ui/separator.tsx +22 -22
- package/templates/default/src/components/ui/skeleton.tsx +7 -7
- package/templates/default/src/components/ui/table.tsx +76 -76
- package/templates/default/src/components/ui/tabs.tsx +55 -55
- package/templates/default/src/components/ui/textarea.tsx +21 -21
- package/templates/default/src/components/ui/toast.tsx +113 -113
- package/templates/default/src/components/ui/toaster.tsx +26 -26
- package/templates/default/src/components/user-prompt/delete-prompt.tsx +87 -87
- package/templates/default/src/config/db-config.ts +10 -10
- package/templates/default/src/constants/form-opts/diagram/node-form.ts +30 -30
- package/templates/default/src/constants/form-opts/environment-form-opts.ts +24 -24
- package/templates/default/src/constants/form-opts/locator-form-opts.ts +20 -20
- package/templates/default/src/constants/form-opts/locator-group-form-opts.ts +28 -28
- package/templates/default/src/constants/form-opts/module-form-opts.ts +21 -21
- package/templates/default/src/constants/form-opts/review-form-opts.ts +23 -23
- package/templates/default/src/constants/form-opts/tag-form-opts.ts +42 -42
- package/templates/default/src/constants/form-opts/template-selection-form-opts.ts +16 -16
- package/templates/default/src/constants/form-opts/template-step-group-form-opts.ts +24 -24
- package/templates/default/src/constants/form-opts/template-test-case-form-opts.ts +39 -39
- package/templates/default/src/constants/form-opts/template-test-step-form-opts.ts +36 -36
- package/templates/default/src/constants/form-opts/test-case-form-opts.ts +43 -43
- package/templates/default/src/constants/form-opts/test-run-form-opts.ts +31 -31
- package/templates/default/src/constants/form-opts/test-suite-form-opts.ts +24 -24
- package/templates/default/src/hooks/use-toast.ts +187 -187
- package/templates/default/src/lib/bidirectional-sync.ts +432 -432
- package/templates/default/src/lib/database-sync.ts +531 -531
- package/templates/default/src/lib/environment-file-utils.ts +221 -221
- package/templates/default/src/lib/feature-file-generator.ts +411 -411
- package/templates/default/src/lib/gherkin-parser.ts +259 -259
- package/templates/default/src/lib/locator-group-file-utils.ts +370 -370
- package/templates/default/src/lib/metrics/metric-calculator.ts +613 -613
- package/templates/default/src/lib/module-hierarchy-builder.ts +205 -205
- package/templates/default/src/lib/path-helpers/module-path.ts +71 -71
- package/templates/default/src/lib/test-case-utils.ts +6 -6
- package/templates/default/src/lib/test-run/log-formatter.ts +83 -83
- package/templates/default/src/lib/test-run/process-manager.ts +191 -191
- package/templates/default/src/lib/test-run/report-parser.ts +316 -316
- package/templates/default/src/lib/test-run/test-run-executor.ts +144 -144
- package/templates/default/src/lib/test-run/winston-logger.ts +95 -95
- package/templates/default/src/lib/transformers/gherkin-converter.ts +42 -42
- package/templates/default/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
- package/templates/default/src/lib/transformers/template-test-case-converter.ts +160 -160
- package/templates/default/src/lib/utils/node-param-validation.ts +81 -81
- package/templates/default/src/lib/utils/template-step-file-generator.ts +167 -167
- package/templates/default/src/lib/utils/template-step-file-manager-intelligent.ts +723 -723
- package/templates/default/src/lib/utils/template-step-file-manager.ts +166 -166
- package/templates/default/src/lib/utils.ts +31 -31
- package/templates/default/src/tests/config/executor/world.ts +41 -41
- package/templates/default/src/tests/executor.ts +80 -80
- package/templates/default/src/tests/hooks/hooks.ts +99 -99
- package/templates/default/src/tests/mapping/locator-map.json +1 -1
- package/templates/default/src/tests/steps/actions/click.step.ts +62 -62
- package/templates/default/src/tests/steps/actions/navigation.step.ts +73 -72
- package/templates/default/src/tests/steps/validations/active_state_assertion.step.ts +34 -34
- package/templates/default/src/tests/steps/validations/navigation_assertion.step.ts +24 -23
- package/templates/default/src/tests/steps/validations/text_assertion.step.ts +111 -111
- package/templates/default/src/tests/steps/validations/visibility_assertion.step.ts +30 -30
- package/templates/default/src/tests/support/parameter-types.ts +12 -12
- package/templates/default/src/tests/utils/cache.util.ts +260 -260
- package/templates/default/src/tests/utils/cli.util.ts +177 -177
- package/templates/default/src/tests/utils/environment.util.ts +65 -65
- package/templates/default/src/tests/utils/locator.util.ts +248 -248
- package/templates/default/src/tests/utils/random-data.util.ts +44 -44
- package/templates/default/src/tests/utils/spawner.util.ts +617 -617
- package/templates/default/src/types/diagram/diagram.ts +34 -34
- package/templates/default/src/types/diagram/template-step.ts +11 -11
- package/templates/default/src/types/executor/browser.type.ts +1 -1
- package/templates/default/src/types/form/actionHandler.ts +6 -6
- package/templates/default/src/types/locator/locator.type.ts +11 -11
- package/templates/default/src/types/step/step.type.ts +1 -1
- package/templates/default/src/types/table/data-table.ts +6 -6
- package/templates/default/tailwind.config.ts +62 -62
- package/templates/default/.env +0 -2
- package/templates/default/next-env.d.ts +0 -6
- package/templates/default/prisma/prisma/dev.db +0 -0
- package/templates/default/src/tests/config/environments/environments.json +0 -14
|
@@ -1,260 +1,260 @@
|
|
|
1
|
-
import { readFileSync } from 'fs'
|
|
2
|
-
import { globSync } from 'glob'
|
|
3
|
-
import { LocatorCollection, LocatorMap } from '@/types/locator/locator.type'
|
|
4
|
-
import * as path from 'path'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Singleton cache for managing Playwright locator collections
|
|
8
|
-
*
|
|
9
|
-
* This class provides a lazy-loading cache for locator JSON files. It automatically
|
|
10
|
-
* discovers all locator files in the configured directory and loads them on-demand
|
|
11
|
-
* to optimize memory usage and startup time.
|
|
12
|
-
*
|
|
13
|
-
* Features:
|
|
14
|
-
* - Singleton pattern ensures single instance across the application
|
|
15
|
-
* - Lazy loading of locator files for better performance
|
|
16
|
-
* - Automatic file discovery using glob patterns
|
|
17
|
-
* - Error handling for malformed JSON files
|
|
18
|
-
* - Memory-efficient with optional preloading
|
|
19
|
-
*/
|
|
20
|
-
export class LocatorCache {
|
|
21
|
-
/** Singleton instance of the LocatorCache */
|
|
22
|
-
private static instance: LocatorCache
|
|
23
|
-
|
|
24
|
-
/** In-memory cache of loaded locator collections, keyed by file name */
|
|
25
|
-
private data: Record<string, LocatorCollection> = {}
|
|
26
|
-
|
|
27
|
-
/** Map of file names to their full file paths */
|
|
28
|
-
private filePaths: Record<string, string> = {}
|
|
29
|
-
|
|
30
|
-
/** Set of file names that have been loaded into memory */
|
|
31
|
-
private loadedFiles: Set<string> = new Set()
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Private constructor for singleton pattern
|
|
35
|
-
*
|
|
36
|
-
* Automatically discovers all JSON files in the locator directory and
|
|
37
|
-
* maps them by their base filename for easy lookup.
|
|
38
|
-
*
|
|
39
|
-
* @private
|
|
40
|
-
*/
|
|
41
|
-
private constructor() {
|
|
42
|
-
globSync(`${process.env.LOCATOR_LOCATION ?? 'src/tests/locators'}/**/*.json`).forEach(file => {
|
|
43
|
-
const fileName = path.basename(file, path.extname(file))
|
|
44
|
-
this.filePaths[fileName ?? file] = file
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Gets the singleton instance of LocatorCache
|
|
50
|
-
*
|
|
51
|
-
* Creates a new instance if one doesn't exist, otherwise returns the existing instance.
|
|
52
|
-
*
|
|
53
|
-
* @returns The singleton LocatorCache instance
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* ```typescript
|
|
57
|
-
* const cache = LocatorCache.getInstance();
|
|
58
|
-
* const locators = cache.get('home');
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
public static getInstance(): LocatorCache {
|
|
62
|
-
if (!LocatorCache.instance) {
|
|
63
|
-
LocatorCache.instance = new LocatorCache()
|
|
64
|
-
}
|
|
65
|
-
return LocatorCache.instance
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Retrieves a locator collection by key (filename without extension)
|
|
70
|
-
*
|
|
71
|
-
* Performs lazy loading - the file is only loaded from disk when first requested.
|
|
72
|
-
* Returns a shallow copy of the data to prevent external modifications.
|
|
73
|
-
*
|
|
74
|
-
* @param key - The filename (without .json extension) of the locator file
|
|
75
|
-
* @returns A shallow copy of the LocatorCollection, or null if not found or error
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* ```typescript
|
|
79
|
-
* const homeLocators = cache.get('home');
|
|
80
|
-
* if (homeLocators) {
|
|
81
|
-
* console.log(homeLocators.loginButton); // '#login-btn'
|
|
82
|
-
* }
|
|
83
|
-
* ```
|
|
84
|
-
*/
|
|
85
|
-
public get(key: string) {
|
|
86
|
-
// Lazy load the file if not already loaded
|
|
87
|
-
if (!this.loadedFiles.has(key) && this.filePaths[key]) {
|
|
88
|
-
try {
|
|
89
|
-
const filePath = this.filePaths[key]
|
|
90
|
-
const data = JSON.parse(readFileSync(filePath, 'utf8'))
|
|
91
|
-
this.data[key] = data as LocatorCollection
|
|
92
|
-
this.loadedFiles.add(key)
|
|
93
|
-
} catch (error) {
|
|
94
|
-
console.error(`Error loading locator file for key "${key}":`, error)
|
|
95
|
-
return null
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return this.data[key] ? { ...this.data[key] } : null
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Preloads all locator files into memory at once
|
|
104
|
-
*
|
|
105
|
-
* This method loads all discovered locator files into memory, which can be
|
|
106
|
-
* useful for ensuring all files are available upfront or for performance
|
|
107
|
-
* optimization when you know all locators will be needed.
|
|
108
|
-
*
|
|
109
|
-
* @example
|
|
110
|
-
* ```typescript
|
|
111
|
-
* const cache = LocatorCache.getInstance();
|
|
112
|
-
* cache.preloadAll(); // Load all locator files now
|
|
113
|
-
* ```
|
|
114
|
-
*/
|
|
115
|
-
public preloadAll(): void {
|
|
116
|
-
Object.keys(this.filePaths).forEach(key => {
|
|
117
|
-
if (!this.loadedFiles.has(key)) {
|
|
118
|
-
this.get(key) // This will trigger lazy loading
|
|
119
|
-
}
|
|
120
|
-
})
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Gets all available locator file keys without loading the files
|
|
125
|
-
*
|
|
126
|
-
* Returns the list of all discovered locator file names (without extensions)
|
|
127
|
-
* that are available for loading. This is useful for listing available
|
|
128
|
-
* locator collections or for validation purposes.
|
|
129
|
-
*
|
|
130
|
-
* @returns Array of available locator file names
|
|
131
|
-
*
|
|
132
|
-
* @example
|
|
133
|
-
* ```typescript
|
|
134
|
-
* const cache = LocatorCache.getInstance();
|
|
135
|
-
* const availableKeys = cache.getAvailableKeys();
|
|
136
|
-
* console.log('Available locators:', availableKeys); // ['home', 'login', 'dashboard']
|
|
137
|
-
* ```
|
|
138
|
-
*/
|
|
139
|
-
public getAvailableKeys(): string[] {
|
|
140
|
-
return Object.keys(this.filePaths)
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Checks if a specific locator file has been loaded into memory
|
|
145
|
-
*
|
|
146
|
-
* @param key - The filename (without .json extension) to check
|
|
147
|
-
* @returns True if the file is loaded in memory, false otherwise
|
|
148
|
-
*
|
|
149
|
-
* @example
|
|
150
|
-
* ```typescript
|
|
151
|
-
* const cache = LocatorCache.getInstance();
|
|
152
|
-
* if (!cache.isLoaded('home')) {
|
|
153
|
-
* console.log('Home locators not yet loaded');
|
|
154
|
-
* }
|
|
155
|
-
* ```
|
|
156
|
-
*/
|
|
157
|
-
public isLoaded(key: string): boolean {
|
|
158
|
-
return this.loadedFiles.has(key)
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Singleton cache for managing locator path mappings
|
|
164
|
-
*
|
|
165
|
-
* This class provides a cache for the locator mapping configuration that
|
|
166
|
-
* maps URL paths to their corresponding locator collection names. It loads
|
|
167
|
-
* the mapping file once at initialization and provides fast lookups.
|
|
168
|
-
*
|
|
169
|
-
* Features:
|
|
170
|
-
* - Singleton pattern ensures single instance across the application
|
|
171
|
-
* - Loads mapping configuration at initialization
|
|
172
|
-
* - Provides fast path-to-locator-name lookups
|
|
173
|
-
* - Error handling for malformed mapping files
|
|
174
|
-
*/
|
|
175
|
-
export class LocatorMapCache {
|
|
176
|
-
/** Singleton instance of the LocatorMapCache */
|
|
177
|
-
private static instance: LocatorMapCache
|
|
178
|
-
|
|
179
|
-
/** Array of locator mappings loaded from the configuration file */
|
|
180
|
-
private data: LocatorMap[] = []
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Private constructor for singleton pattern
|
|
184
|
-
*
|
|
185
|
-
* Loads the locator mapping configuration file at initialization.
|
|
186
|
-
* The mapping file contains path-to-locator-name mappings.
|
|
187
|
-
*
|
|
188
|
-
* @private
|
|
189
|
-
*/
|
|
190
|
-
private constructor() {
|
|
191
|
-
this.data = JSON.parse(
|
|
192
|
-
readFileSync(process.env.LOCATOR_MAP_LOCATION ?? 'src/tests/mapping/locator-map.json', 'utf8'),
|
|
193
|
-
)
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Gets the singleton instance of LocatorMapCache
|
|
198
|
-
*
|
|
199
|
-
* Creates a new instance if one doesn't exist, otherwise returns the existing instance.
|
|
200
|
-
*
|
|
201
|
-
* @returns The singleton LocatorMapCache instance
|
|
202
|
-
*
|
|
203
|
-
* @example
|
|
204
|
-
* ```typescript
|
|
205
|
-
* const mapCache = LocatorMapCache.getInstance();
|
|
206
|
-
* const mapping = mapCache.get('/login');
|
|
207
|
-
* ```
|
|
208
|
-
*/
|
|
209
|
-
public static getInstance(): LocatorMapCache {
|
|
210
|
-
if (!LocatorMapCache.instance) {
|
|
211
|
-
LocatorMapCache.instance = new LocatorMapCache()
|
|
212
|
-
}
|
|
213
|
-
return LocatorMapCache.instance
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Retrieves a locator mapping by URL path
|
|
218
|
-
*
|
|
219
|
-
* Searches through the loaded mappings to find the one that matches the given path.
|
|
220
|
-
* Returns a default empty mapping if not found or on error.
|
|
221
|
-
*
|
|
222
|
-
* @param key - The URL path to look up (e.g., '/login', '/dashboard')
|
|
223
|
-
* @returns The LocatorMap object containing the path and corresponding locator name
|
|
224
|
-
*
|
|
225
|
-
* @example
|
|
226
|
-
* ```typescript
|
|
227
|
-
* const mapping = mapCache.get('/login');
|
|
228
|
-
* console.log(mapping.name); // 'login'
|
|
229
|
-
* console.log(mapping.path); // '/login'
|
|
230
|
-
* ```
|
|
231
|
-
*/
|
|
232
|
-
public get(key: string): LocatorMap {
|
|
233
|
-
try {
|
|
234
|
-
return this.data.find(map => map.path === key) as LocatorMap
|
|
235
|
-
} catch (error) {
|
|
236
|
-
console.error(error)
|
|
237
|
-
return {
|
|
238
|
-
name: '',
|
|
239
|
-
path: '',
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Retrieves all locator mappings
|
|
246
|
-
*
|
|
247
|
-
* @returns Array of all LocatorMap objects
|
|
248
|
-
*
|
|
249
|
-
* @example
|
|
250
|
-
* ```typescript
|
|
251
|
-
* const allMappings = mapCache.getAll();
|
|
252
|
-
* allMappings.forEach(mapping => {
|
|
253
|
-
* console.log(`${mapping.path} -> ${mapping.name}`);
|
|
254
|
-
* });
|
|
255
|
-
* ```
|
|
256
|
-
*/
|
|
257
|
-
public getAll(): LocatorMap[] {
|
|
258
|
-
return this.data
|
|
259
|
-
}
|
|
260
|
-
}
|
|
1
|
+
import { readFileSync } from 'fs'
|
|
2
|
+
import { globSync } from 'glob'
|
|
3
|
+
import { LocatorCollection, LocatorMap } from '@/types/locator/locator.type'
|
|
4
|
+
import * as path from 'path'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Singleton cache for managing Playwright locator collections
|
|
8
|
+
*
|
|
9
|
+
* This class provides a lazy-loading cache for locator JSON files. It automatically
|
|
10
|
+
* discovers all locator files in the configured directory and loads them on-demand
|
|
11
|
+
* to optimize memory usage and startup time.
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Singleton pattern ensures single instance across the application
|
|
15
|
+
* - Lazy loading of locator files for better performance
|
|
16
|
+
* - Automatic file discovery using glob patterns
|
|
17
|
+
* - Error handling for malformed JSON files
|
|
18
|
+
* - Memory-efficient with optional preloading
|
|
19
|
+
*/
|
|
20
|
+
export class LocatorCache {
|
|
21
|
+
/** Singleton instance of the LocatorCache */
|
|
22
|
+
private static instance: LocatorCache
|
|
23
|
+
|
|
24
|
+
/** In-memory cache of loaded locator collections, keyed by file name */
|
|
25
|
+
private data: Record<string, LocatorCollection> = {}
|
|
26
|
+
|
|
27
|
+
/** Map of file names to their full file paths */
|
|
28
|
+
private filePaths: Record<string, string> = {}
|
|
29
|
+
|
|
30
|
+
/** Set of file names that have been loaded into memory */
|
|
31
|
+
private loadedFiles: Set<string> = new Set()
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Private constructor for singleton pattern
|
|
35
|
+
*
|
|
36
|
+
* Automatically discovers all JSON files in the locator directory and
|
|
37
|
+
* maps them by their base filename for easy lookup.
|
|
38
|
+
*
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
private constructor() {
|
|
42
|
+
globSync(`${process.env.LOCATOR_LOCATION ?? 'src/tests/locators'}/**/*.json`).forEach(file => {
|
|
43
|
+
const fileName = path.basename(file, path.extname(file))
|
|
44
|
+
this.filePaths[fileName ?? file] = file
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Gets the singleton instance of LocatorCache
|
|
50
|
+
*
|
|
51
|
+
* Creates a new instance if one doesn't exist, otherwise returns the existing instance.
|
|
52
|
+
*
|
|
53
|
+
* @returns The singleton LocatorCache instance
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const cache = LocatorCache.getInstance();
|
|
58
|
+
* const locators = cache.get('home');
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
public static getInstance(): LocatorCache {
|
|
62
|
+
if (!LocatorCache.instance) {
|
|
63
|
+
LocatorCache.instance = new LocatorCache()
|
|
64
|
+
}
|
|
65
|
+
return LocatorCache.instance
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Retrieves a locator collection by key (filename without extension)
|
|
70
|
+
*
|
|
71
|
+
* Performs lazy loading - the file is only loaded from disk when first requested.
|
|
72
|
+
* Returns a shallow copy of the data to prevent external modifications.
|
|
73
|
+
*
|
|
74
|
+
* @param key - The filename (without .json extension) of the locator file
|
|
75
|
+
* @returns A shallow copy of the LocatorCollection, or null if not found or error
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const homeLocators = cache.get('home');
|
|
80
|
+
* if (homeLocators) {
|
|
81
|
+
* console.log(homeLocators.loginButton); // '#login-btn'
|
|
82
|
+
* }
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
public get(key: string) {
|
|
86
|
+
// Lazy load the file if not already loaded
|
|
87
|
+
if (!this.loadedFiles.has(key) && this.filePaths[key]) {
|
|
88
|
+
try {
|
|
89
|
+
const filePath = this.filePaths[key]
|
|
90
|
+
const data = JSON.parse(readFileSync(filePath, 'utf8'))
|
|
91
|
+
this.data[key] = data as LocatorCollection
|
|
92
|
+
this.loadedFiles.add(key)
|
|
93
|
+
} catch (error) {
|
|
94
|
+
console.error(`Error loading locator file for key "${key}":`, error)
|
|
95
|
+
return null
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return this.data[key] ? { ...this.data[key] } : null
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Preloads all locator files into memory at once
|
|
104
|
+
*
|
|
105
|
+
* This method loads all discovered locator files into memory, which can be
|
|
106
|
+
* useful for ensuring all files are available upfront or for performance
|
|
107
|
+
* optimization when you know all locators will be needed.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const cache = LocatorCache.getInstance();
|
|
112
|
+
* cache.preloadAll(); // Load all locator files now
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
public preloadAll(): void {
|
|
116
|
+
Object.keys(this.filePaths).forEach(key => {
|
|
117
|
+
if (!this.loadedFiles.has(key)) {
|
|
118
|
+
this.get(key) // This will trigger lazy loading
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Gets all available locator file keys without loading the files
|
|
125
|
+
*
|
|
126
|
+
* Returns the list of all discovered locator file names (without extensions)
|
|
127
|
+
* that are available for loading. This is useful for listing available
|
|
128
|
+
* locator collections or for validation purposes.
|
|
129
|
+
*
|
|
130
|
+
* @returns Array of available locator file names
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const cache = LocatorCache.getInstance();
|
|
135
|
+
* const availableKeys = cache.getAvailableKeys();
|
|
136
|
+
* console.log('Available locators:', availableKeys); // ['home', 'login', 'dashboard']
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
public getAvailableKeys(): string[] {
|
|
140
|
+
return Object.keys(this.filePaths)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Checks if a specific locator file has been loaded into memory
|
|
145
|
+
*
|
|
146
|
+
* @param key - The filename (without .json extension) to check
|
|
147
|
+
* @returns True if the file is loaded in memory, false otherwise
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* const cache = LocatorCache.getInstance();
|
|
152
|
+
* if (!cache.isLoaded('home')) {
|
|
153
|
+
* console.log('Home locators not yet loaded');
|
|
154
|
+
* }
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
public isLoaded(key: string): boolean {
|
|
158
|
+
return this.loadedFiles.has(key)
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Singleton cache for managing locator path mappings
|
|
164
|
+
*
|
|
165
|
+
* This class provides a cache for the locator mapping configuration that
|
|
166
|
+
* maps URL paths to their corresponding locator collection names. It loads
|
|
167
|
+
* the mapping file once at initialization and provides fast lookups.
|
|
168
|
+
*
|
|
169
|
+
* Features:
|
|
170
|
+
* - Singleton pattern ensures single instance across the application
|
|
171
|
+
* - Loads mapping configuration at initialization
|
|
172
|
+
* - Provides fast path-to-locator-name lookups
|
|
173
|
+
* - Error handling for malformed mapping files
|
|
174
|
+
*/
|
|
175
|
+
export class LocatorMapCache {
|
|
176
|
+
/** Singleton instance of the LocatorMapCache */
|
|
177
|
+
private static instance: LocatorMapCache
|
|
178
|
+
|
|
179
|
+
/** Array of locator mappings loaded from the configuration file */
|
|
180
|
+
private data: LocatorMap[] = []
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Private constructor for singleton pattern
|
|
184
|
+
*
|
|
185
|
+
* Loads the locator mapping configuration file at initialization.
|
|
186
|
+
* The mapping file contains path-to-locator-name mappings.
|
|
187
|
+
*
|
|
188
|
+
* @private
|
|
189
|
+
*/
|
|
190
|
+
private constructor() {
|
|
191
|
+
this.data = JSON.parse(
|
|
192
|
+
readFileSync(process.env.LOCATOR_MAP_LOCATION ?? 'src/tests/mapping/locator-map.json', 'utf8'),
|
|
193
|
+
)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Gets the singleton instance of LocatorMapCache
|
|
198
|
+
*
|
|
199
|
+
* Creates a new instance if one doesn't exist, otherwise returns the existing instance.
|
|
200
|
+
*
|
|
201
|
+
* @returns The singleton LocatorMapCache instance
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* const mapCache = LocatorMapCache.getInstance();
|
|
206
|
+
* const mapping = mapCache.get('/login');
|
|
207
|
+
* ```
|
|
208
|
+
*/
|
|
209
|
+
public static getInstance(): LocatorMapCache {
|
|
210
|
+
if (!LocatorMapCache.instance) {
|
|
211
|
+
LocatorMapCache.instance = new LocatorMapCache()
|
|
212
|
+
}
|
|
213
|
+
return LocatorMapCache.instance
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Retrieves a locator mapping by URL path
|
|
218
|
+
*
|
|
219
|
+
* Searches through the loaded mappings to find the one that matches the given path.
|
|
220
|
+
* Returns a default empty mapping if not found or on error.
|
|
221
|
+
*
|
|
222
|
+
* @param key - The URL path to look up (e.g., '/login', '/dashboard')
|
|
223
|
+
* @returns The LocatorMap object containing the path and corresponding locator name
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* const mapping = mapCache.get('/login');
|
|
228
|
+
* console.log(mapping.name); // 'login'
|
|
229
|
+
* console.log(mapping.path); // '/login'
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
public get(key: string): LocatorMap {
|
|
233
|
+
try {
|
|
234
|
+
return this.data.find(map => map.path === key) as LocatorMap
|
|
235
|
+
} catch (error) {
|
|
236
|
+
console.error(error)
|
|
237
|
+
return {
|
|
238
|
+
name: '',
|
|
239
|
+
path: '',
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Retrieves all locator mappings
|
|
246
|
+
*
|
|
247
|
+
* @returns Array of all LocatorMap objects
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```typescript
|
|
251
|
+
* const allMappings = mapCache.getAll();
|
|
252
|
+
* allMappings.forEach(mapping => {
|
|
253
|
+
* console.log(`${mapping.path} -> ${mapping.name}`);
|
|
254
|
+
* });
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
public getAll(): LocatorMap[] {
|
|
258
|
+
return this.data
|
|
259
|
+
}
|
|
260
|
+
}
|