swipium 1.5.0 → 2.0.0
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/CHANGELOG.md +171 -0
- package/README.md +173 -280
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +30 -27
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +47 -21
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +2 -2
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +3 -3
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +2 -2
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +2 -2
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/issues.js +10 -10
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +5 -5
- package/dist/appMap/migrations.js.map +1 -1
- package/dist/appMap/prelaunch.js +2 -2
- package/dist/appMap/prelaunch.js.map +1 -1
- package/dist/appMap/projectRegistry.js +77 -11
- package/dist/appMap/projectRegistry.js.map +1 -1
- package/dist/appMap/provenance.js +2 -2
- package/dist/appMap/provenance.js.map +1 -1
- package/dist/appMap/query.js +2 -2
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +3 -3
- package/dist/appMap/runtimeMerge.js.map +1 -1
- package/dist/appMap/schema.js +1 -1
- package/dist/appMap/schema.js.map +1 -1
- package/dist/appMap/screenMatch.js +1 -1
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +17 -17
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +55 -7
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +3 -3
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +5 -5
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +10 -10
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +3 -3
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +1 -1
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +7 -7
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +3 -3
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +14 -25
- package/dist/automation/selectors.js.map +1 -1
- package/dist/automation/types.js +1 -1
- package/dist/automation/types.js.map +1 -1
- package/dist/automation/waits.js +5 -5
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +2 -2
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +13 -7
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +5 -5
- package/dist/automationGen/ciEmitter.js.map +1 -1
- package/dist/automationGen/identifiers.js +224 -0
- package/dist/automationGen/identifiers.js.map +1 -0
- package/dist/automationGen/jsEmitter.js +265 -106
- package/dist/automationGen/jsEmitter.js.map +1 -1
- package/dist/automationGen/packagePatch.js +2 -2
- package/dist/automationGen/packagePatch.js.map +1 -1
- package/dist/automationGen/platformResolve.js +36 -0
- package/dist/automationGen/platformResolve.js.map +1 -0
- package/dist/automationGen/projectProfile.js +71 -26
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +276 -105
- package/dist/automationGen/pythonEmitter.js.map +1 -1
- package/dist/automationGen/readmeEmitter.js +7 -6
- package/dist/automationGen/readmeEmitter.js.map +1 -1
- package/dist/{tools/automationGenerate.js → automationGen/run.js} +72 -113
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +6 -4
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +20 -8
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +2 -2
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +7 -7
- package/dist/build/plan.js.map +1 -1
- package/dist/ci/preflight.js +13 -4
- package/dist/ci/preflight.js.map +1 -1
- package/dist/cli/gc.js +74 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/init.js +217 -26
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +50 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/report.js +218 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.js +35 -14
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +6 -6
- package/dist/cli/suite.js.map +1 -1
- package/dist/cli/verify.js +7 -7
- package/dist/cli/verify.js.map +1 -1
- package/dist/consent/consent.js +162 -5
- package/dist/consent/consent.js.map +1 -1
- package/dist/context/detect.js +45 -14
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +6 -6
- package/dist/context/findApps.js.map +1 -1
- package/dist/context/projectRoot.js +174 -19
- package/dist/context/projectRoot.js.map +1 -1
- package/dist/context/scan.js +1 -1
- package/dist/context/scan.js.map +1 -1
- package/dist/core/capabilityGroups.js +90 -0
- package/dist/core/capabilityGroups.js.map +1 -0
- package/dist/core/target.js +3 -3
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +65 -62
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +300 -36
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +120 -7
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +350 -50
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +2 -2
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +5 -5
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/policy.js +5 -5
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +301 -284
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +1 -1
- package/dist/featureTesting/executionBootstrap.js +29 -30
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +2 -2
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +12 -12
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +7 -7
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +10 -10
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +6 -6
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +4 -4
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +1 -1
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +1 -1
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +11 -11
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +3 -3
- package/dist/featureTesting/testPlan.js.map +1 -1
- package/dist/firstRun/authStateMachine.js +1 -1
- package/dist/firstRun/authStateMachine.js.map +1 -1
- package/dist/firstRun/classifyScreen.js +5 -5
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +11 -11
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +8 -8
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +9 -9
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +5 -5
- package/dist/firstRun/inputPlanner.js.map +1 -1
- package/dist/firstRun/onboardingStateMachine.js +1 -1
- package/dist/firstRun/onboardingStateMachine.js.map +1 -1
- package/dist/firstRun/paywallPolicy.js +3 -3
- package/dist/firstRun/paywallPolicy.js.map +1 -1
- package/dist/firstRun/types.js +1 -1
- package/dist/firstRun/types.js.map +1 -1
- package/dist/fixtures/catalog.js +33 -3
- package/dist/fixtures/catalog.js.map +1 -1
- package/dist/fixtures/load.js +50 -0
- package/dist/fixtures/load.js.map +1 -0
- package/dist/flows/discover.js +2 -2
- package/dist/flows/discover.js.map +1 -1
- package/dist/flows/generate.js +20 -10
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/pack.js +3 -3
- package/dist/flows/pack.js.map +1 -1
- package/dist/flows/paths.js +57 -0
- package/dist/flows/paths.js.map +1 -0
- package/dist/flows/repair.js +111 -23
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +153 -57
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +50 -5
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +4 -4
- package/dist/flows/seedExec.js.map +1 -1
- package/dist/flows/templates.js +5 -5
- package/dist/index.js +50 -8
- package/dist/index.js.map +1 -1
- package/dist/issues/classify.js +16 -16
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +24 -4
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +94 -31
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +4 -4
- package/dist/issues/metrics.js.map +1 -1
- package/dist/issues/recurrence.js +35 -8
- package/dist/issues/recurrence.js.map +1 -1
- package/dist/issues/report.js +4 -4
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +4 -4
- package/dist/issues/reportBridge.js.map +1 -1
- package/dist/issues/schema.js +2 -2
- package/dist/issues/schema.js.map +1 -1
- package/dist/issues/sourceRevision.js +2 -2
- package/dist/issues/sourceRevision.js.map +1 -1
- package/dist/issues/store.js +110 -32
- package/dist/issues/store.js.map +1 -1
- package/dist/lib/abortScope.js +48 -0
- package/dist/lib/abortScope.js.map +1 -0
- package/dist/lib/android.js +75 -7
- package/dist/lib/android.js.map +1 -1
- package/dist/lib/coordSpace.js +1 -1
- package/dist/lib/coordSpace.js.map +1 -1
- package/dist/lib/device.js +32 -7
- package/dist/lib/device.js.map +1 -1
- package/dist/lib/gestures.js +141 -0
- package/dist/lib/gestures.js.map +1 -0
- package/dist/lib/gitignore.js +4 -3
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/image.js +1 -1
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +370 -31
- package/dist/lib/lockfile.js.map +1 -1
- package/dist/lib/needsInput.js +3 -3
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +2 -2
- package/dist/lib/png.js.map +1 -1
- package/dist/lib/redact.js +170 -9
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/result.js +79 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +3 -3
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +3 -2
- package/dist/lib/sensitive.js.map +1 -1
- package/dist/lib/simctl.js +3 -3
- package/dist/lib/simctl.js.map +1 -1
- package/dist/lib/spawn.js +52 -10
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/toolAnnotations.js +114 -0
- package/dist/lib/toolAnnotations.js.map +1 -0
- package/dist/lib/wda.js +294 -15
- package/dist/lib/wda.js.map +1 -1
- package/dist/mobileAudit/checks.js +12 -12
- package/dist/mobileAudit/checks.js.map +1 -1
- package/dist/mobileAudit/evidence.js +4 -4
- package/dist/mobileAudit/evidence.js.map +1 -1
- package/dist/mobileAudit/profiles.js +1 -1
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +3 -3
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +72 -18
- package/dist/mobileAudit/runner.js.map +1 -1
- package/dist/oracle/auth.js +1 -1
- package/dist/oracle/auth.js.map +1 -1
- package/dist/oracle/failures.js +219 -36
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +63 -17
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +13 -13
- package/dist/oracle/locator.js.map +1 -1
- package/dist/oracle/record.js +3 -3
- package/dist/oracle/record.js.map +1 -1
- package/dist/orchestration/envelope.js +2 -2
- package/dist/orchestration/envelope.js.map +1 -1
- package/dist/orchestration/goal.js +4 -4
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +62 -21
- package/dist/orchestration/testThis/execute.js.map +1 -1
- package/dist/orchestration/testThis/pipeline.js +119 -30
- package/dist/orchestration/testThis/pipeline.js.map +1 -1
- package/dist/orchestration/testThis/plan.js +162 -73
- package/dist/orchestration/testThis/plan.js.map +1 -1
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +34 -16
- package/dist/orchestration/testThis/terminal.js.map +1 -1
- package/dist/orchestration/testThis/types.js +1 -1
- package/dist/orchestration/testThis/types.js.map +1 -1
- package/dist/plan/plan.js +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +22 -22
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/export.js +392 -37
- package/dist/report/export.js.map +1 -1
- package/dist/report/findingsDedupe.js +41 -0
- package/dist/report/findingsDedupe.js.map +1 -0
- package/dist/report/policy.js +7 -4
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +8 -8
- package/dist/report/qaLevel.js.map +1 -1
- package/dist/report/sarifSources.js +160 -0
- package/dist/report/sarifSources.js.map +1 -0
- package/dist/report/summary.js +2 -2
- package/dist/report/summary.js.map +1 -1
- package/dist/report/testCatalog.js +4 -4
- package/dist/report/testCatalog.js.map +1 -1
- package/dist/report/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +472 -45
- package/dist/server.js.map +1 -1
- package/dist/services/automationGenerate.js +8 -2
- package/dist/services/automationGenerate.js.map +1 -1
- package/dist/services/build.js +2 -2
- package/dist/services/build.js.map +1 -1
- package/dist/{tools → services}/flowGenerate.js +29 -13
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +4 -4
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +46 -8
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +24 -9
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +100 -45
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +32 -16
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +28 -3
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +40 -27
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +270 -6
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +317 -48
- package/dist/session/processRegistry.js.map +1 -1
- package/dist/session/progress.js +1 -1
- package/dist/session/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +275 -48
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +53 -8
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +28 -4
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +11 -5
- package/dist/snapshot/present.js.map +1 -1
- package/dist/snapshot/settle.js +39 -9
- package/dist/snapshot/settle.js.map +1 -1
- package/dist/state/consent.js +99 -0
- package/dist/state/consent.js.map +1 -0
- package/dist/state/profile.js +46 -2
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +9 -5
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +4 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +50 -41
- package/dist/suite/pom.js.map +1 -1
- package/dist/suite/secretGuard.js +266 -0
- package/dist/suite/secretGuard.js.map +1 -0
- package/dist/suite/testcase.js +9 -7
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +4 -4
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +13 -9
- package/dist/testSuite/generator.js.map +1 -1
- package/dist/testSuite/history.js +1 -1
- package/dist/testSuite/history.js.map +1 -1
- package/dist/testSuite/issueLinks.js +3 -3
- package/dist/testSuite/issueLinks.js.map +1 -1
- package/dist/testSuite/lint.js +4 -4
- package/dist/testSuite/lint.js.map +1 -1
- package/dist/testSuite/merge.js +5 -5
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +5 -5
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +3 -3
- package/dist/testSuite/store.js.map +1 -1
- package/dist/testSuite/traceability.js +2 -2
- package/dist/testSuite/traceability.js.map +1 -1
- package/dist/tools/act.js +794 -164
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +451 -128
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +69 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +188 -130
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +32 -42
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +21 -31
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +55 -12
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +76 -24
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +68 -28
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +41 -47
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +31 -48
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +34 -41
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +183 -103
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +25 -13
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +52 -89
- package/dist/tools/generate.js.map +1 -1
- package/dist/tools/getArtifact.js +16 -5
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +15 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +45 -223
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +251 -35
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +41 -16
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +36 -35
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +50 -45
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +31 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +26 -26
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +10 -16
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +117 -50
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +11 -22
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +11 -15
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +78 -24
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +23 -21
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +23 -16
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +20 -16
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +155 -118
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +104 -116
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +72 -43
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +30 -20
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +24 -28
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +686 -210
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -38
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +187 -57
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +31 -22
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +53 -6
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +80 -12
- package/dist/visual/provider.js.map +1 -1
- package/docs/README.md +24 -10
- package/docs/ci-reports.md +328 -0
- package/docs/concepts.md +227 -0
- package/docs/flows.md +153 -0
- package/docs/mcp-server.md +194 -128
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +812 -152
- package/package.json +3 -2
- package/dist/tools/assertVisual.js +0 -84
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -179
- package/dist/tools/capabilities.js.map +0 -1
- package/dist/tools/detectContext.js +0 -41
- package/dist/tools/detectContext.js.map +0 -1
- package/dist/tools/flowGenerate.js.map +0 -1
- package/dist/tools/history.js +0 -86
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/locator.js +0 -85
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/permissions.js +0 -174
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -52
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -76
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -133
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -217
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -106
- package/dist/tools/visualText.js.map +0 -1
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Python Appium emitter. Pure: turns the shared Appium model into a runnable
|
|
2
2
|
// Python Appium-Python-Client POM suite (pytest when the project uses it, else unittest). POM
|
|
3
3
|
// classes centralize selectors; AppiumBy strategies prefer accessibility id / id; iOS predicate /
|
|
4
4
|
// class-chain only where required; XPath is never emitted. Aligns with the Appium Python quickstart.
|
|
5
|
+
import { defaultPlatformOf } from './platformResolve.js';
|
|
6
|
+
import { NameAllocator, UnemittableStepError, checkDirection, checkKey, className, commentSafe, pyName, screensOf } from './identifiers.js';
|
|
5
7
|
const DEFAULT_TIMEOUT = 15;
|
|
8
|
+
const MAX_SCROLLS = 8;
|
|
6
9
|
function snake(s) {
|
|
7
10
|
return (s
|
|
8
11
|
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
|
|
@@ -10,7 +13,72 @@ function snake(s) {
|
|
|
10
13
|
.replace(/^_+|_+$/g, '')
|
|
11
14
|
.toLowerCase() || 'x');
|
|
12
15
|
}
|
|
13
|
-
/**
|
|
16
|
+
/** Every attribute BaseScreen defines. A generated attribute/method must never shadow one (a class
|
|
17
|
+
* attribute named `tap` would replace the tap() helper at runtime). */
|
|
18
|
+
const PY_BASE_MEMBERS = [
|
|
19
|
+
'driver',
|
|
20
|
+
'find',
|
|
21
|
+
'tap',
|
|
22
|
+
'type',
|
|
23
|
+
'type_focused',
|
|
24
|
+
'scroll_to',
|
|
25
|
+
'scroll_to_text',
|
|
26
|
+
'is_visible',
|
|
27
|
+
'assert_visible',
|
|
28
|
+
'assert_text_visible',
|
|
29
|
+
'tap_at',
|
|
30
|
+
'press_key',
|
|
31
|
+
'swipe',
|
|
32
|
+
'open_url',
|
|
33
|
+
'self',
|
|
34
|
+
'cls',
|
|
35
|
+
];
|
|
36
|
+
function methodKey(action, element) {
|
|
37
|
+
return `${action}|${element}`;
|
|
38
|
+
}
|
|
39
|
+
function planPyNames(model) {
|
|
40
|
+
const classes = new NameAllocator(['BaseScreen', 'AppiumBy', 'SmokeTest', 'WebDriverWait', 'EC'], (s) => s.toLowerCase());
|
|
41
|
+
const modules = new NameAllocator(['base_screen', '__init__'], (s) => s.toLowerCase());
|
|
42
|
+
const instances = new NameAllocator([
|
|
43
|
+
'driver',
|
|
44
|
+
'test_data',
|
|
45
|
+
'self',
|
|
46
|
+
'os',
|
|
47
|
+
'unittest',
|
|
48
|
+
'pytest',
|
|
49
|
+
'webdriver',
|
|
50
|
+
'build_options',
|
|
51
|
+
'AppiumBy',
|
|
52
|
+
]);
|
|
53
|
+
const plan = new Map();
|
|
54
|
+
for (const screen of screensOf(model)) {
|
|
55
|
+
const cls = classes.alloc(className(screen.className));
|
|
56
|
+
const module = modules.alloc(pyName(cls, 'screen'), '_');
|
|
57
|
+
const instance = instances.alloc(pyName(cls, 'screen'), '_');
|
|
58
|
+
// Leading-underscore names are private helpers (_spec, _scroll_once …); pyName never emits them.
|
|
59
|
+
const members = new NameAllocator(PY_BASE_MEMBERS);
|
|
60
|
+
const attrs = new Map();
|
|
61
|
+
for (const el of screen.elements)
|
|
62
|
+
if (!attrs.has(el.name))
|
|
63
|
+
attrs.set(el.name, members.alloc(pyName(el.name), '_'));
|
|
64
|
+
const methods = new Map();
|
|
65
|
+
for (const s of model.steps) {
|
|
66
|
+
if (s.screen !== screen.className || !s.element)
|
|
67
|
+
continue;
|
|
68
|
+
const attr = attrs.get(s.element);
|
|
69
|
+
if (!attr) {
|
|
70
|
+
throw new UnemittableStepError(`cannot emit ${s.action} step on ${screen.className}: element ${JSON.stringify(s.element)} is not declared on that screen`);
|
|
71
|
+
}
|
|
72
|
+
const key = methodKey(s.action, s.element);
|
|
73
|
+
if (methods.has(key))
|
|
74
|
+
continue;
|
|
75
|
+
methods.set(key, members.alloc(methodBase(s.action, attr.replace(/_+$/, '')), '_'));
|
|
76
|
+
}
|
|
77
|
+
plan.set(screen.className, { cls, module, instance, attrs, methods });
|
|
78
|
+
}
|
|
79
|
+
return plan;
|
|
80
|
+
}
|
|
81
|
+
/** Env var (SWIPIUM_TEST_PASSWORD) > a stable test_data key (password). */
|
|
14
82
|
export function pyVarToKey(v) {
|
|
15
83
|
const stripped = v.replace(/^SWIPIUM_(TEST_)?/i, '');
|
|
16
84
|
return snake(stripped) || 'value';
|
|
@@ -18,6 +86,12 @@ export function pyVarToKey(v) {
|
|
|
18
86
|
function pyStr(s) {
|
|
19
87
|
return JSON.stringify(s);
|
|
20
88
|
}
|
|
89
|
+
/** Escape a value embedded inside a double-quoted literal WITHIN a selector expression
|
|
90
|
+
* (UiSelector text / iOS predicate). Backslashes FIRST, then quotes. pyStr() only wraps the
|
|
91
|
+
* OUTER Python string, so the inner quoted literal must escape its own \ and " itself. */
|
|
92
|
+
function innerQuoted(s) {
|
|
93
|
+
return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
94
|
+
}
|
|
21
95
|
/** (AppiumBy.<X>, "<value>") tuple for one Appium locator. No XPath, ever. */
|
|
22
96
|
export function appiumByTuple(loc) {
|
|
23
97
|
switch (loc.strategy) {
|
|
@@ -26,9 +100,9 @@ export function appiumByTuple(loc) {
|
|
|
26
100
|
case 'id':
|
|
27
101
|
return `(AppiumBy.ID, ${pyStr(loc.value)})`;
|
|
28
102
|
case 'androidUiautomator':
|
|
29
|
-
return `(AppiumBy.ANDROID_UIAUTOMATOR, ${pyStr(`new UiSelector().text("${loc.value
|
|
103
|
+
return `(AppiumBy.ANDROID_UIAUTOMATOR, ${pyStr(`new UiSelector().text("${innerQuoted(loc.value)}")`)})`;
|
|
30
104
|
case 'name':
|
|
31
|
-
return `(AppiumBy.IOS_PREDICATE, ${pyStr(`name == "${loc.value
|
|
105
|
+
return `(AppiumBy.IOS_PREDICATE, ${pyStr(`name == "${innerQuoted(loc.value)}" OR label == "${innerQuoted(loc.value)}"`)})`;
|
|
32
106
|
case 'iosPredicate':
|
|
33
107
|
return `(AppiumBy.IOS_PREDICATE, ${pyStr(loc.value)})`;
|
|
34
108
|
case 'iosClassChain':
|
|
@@ -61,6 +135,10 @@ function locatorDict(el) {
|
|
|
61
135
|
return `{${parts.join(', ')}}`;
|
|
62
136
|
}
|
|
63
137
|
export function emitPythonSuite(input) {
|
|
138
|
+
// Plan every class/attribute/method name up front (H4) and validate every step is emittable
|
|
139
|
+
// (§4). Generation fails loudly here rather than writing a suite with silent no-op steps.
|
|
140
|
+
const names = planPyNames(input.model);
|
|
141
|
+
const smoke = input.framework === 'pytest' ? pytestSmoke(input.model, names) : unittestSmoke(input.model, names);
|
|
64
142
|
const files = [];
|
|
65
143
|
files.push({ path: 'requirements.txt', content: requirementsTxt(input) });
|
|
66
144
|
if (input.framework === 'pytest')
|
|
@@ -68,20 +146,18 @@ export function emitPythonSuite(input) {
|
|
|
68
146
|
files.push({ path: 'conftest.py', content: conftest(input) });
|
|
69
147
|
files.push({ path: 'screens/__init__.py', content: '' });
|
|
70
148
|
files.push({ path: 'screens/base_screen.py', content: baseScreen() });
|
|
71
|
-
for (const screen of input.model
|
|
72
|
-
|
|
149
|
+
for (const screen of screensOf(input.model)) {
|
|
150
|
+
const n = names.get(screen.className);
|
|
151
|
+
files.push({ path: `screens/${n.module}.py`, content: screenClass(screen, n, input.model.steps) });
|
|
73
152
|
}
|
|
74
153
|
files.push({ path: 'data/__init__.py', content: '' });
|
|
75
154
|
files.push({ path: 'data/test_data.py', content: testData(input.model) });
|
|
76
155
|
files.push({ path: 'tests/__init__.py', content: '' });
|
|
77
|
-
files.push({
|
|
78
|
-
path: input.framework === 'pytest' ? 'tests/test_smoke.py' : 'tests/test_smoke.py',
|
|
79
|
-
content: input.framework === 'pytest' ? pytestSmoke(input.model) : unittestSmoke(input.model, input),
|
|
80
|
-
});
|
|
156
|
+
files.push({ path: 'tests/test_smoke.py', content: smoke });
|
|
81
157
|
return files;
|
|
82
158
|
}
|
|
83
159
|
function requirementsTxt(input) {
|
|
84
|
-
const lines = ['# Generated by Swipium
|
|
160
|
+
const lines = ['# Generated by Swipium. Review before committing.', 'Appium-Python-Client>=4.0.0', 'selenium>=4.20.0'];
|
|
85
161
|
if (input.framework === 'pytest')
|
|
86
162
|
lines.push('pytest>=8.0.0');
|
|
87
163
|
return lines.join('\n') + '\n';
|
|
@@ -96,8 +172,8 @@ addopts = -ra
|
|
|
96
172
|
}
|
|
97
173
|
function conftest(input) {
|
|
98
174
|
const appId = input.appId ?? '';
|
|
99
|
-
return `# Generated by Swipium. Appium driver fixture
|
|
100
|
-
#
|
|
175
|
+
return `# Generated by Swipium. Appium driver fixture. ALL device/app config is environment-driven.
|
|
176
|
+
# Default platform: ${defaultPlatformOf(input.profile, input.model)}. Override with SWIPIUM_PLATFORM=android|ios.
|
|
101
177
|
import os
|
|
102
178
|
import pytest
|
|
103
179
|
from appium import webdriver
|
|
@@ -106,7 +182,7 @@ from appium.options.ios import XCUITestOptions
|
|
|
106
182
|
|
|
107
183
|
|
|
108
184
|
def build_options():
|
|
109
|
-
platform = os.environ.get("SWIPIUM_PLATFORM", "${input.model
|
|
185
|
+
platform = os.environ.get("SWIPIUM_PLATFORM", "${defaultPlatformOf(input.profile, input.model)}").lower()
|
|
110
186
|
if platform == "ios":
|
|
111
187
|
opts = XCUITestOptions()
|
|
112
188
|
opts.device_name = os.environ.get("IOS_DEVICE_NAME", "iPhone 15")
|
|
@@ -145,27 +221,46 @@ def driver():
|
|
|
145
221
|
function baseScreen() {
|
|
146
222
|
return `# Generated by Swipium. BaseScreen centralizes element interaction so selectors resolve
|
|
147
223
|
# per-platform in ONE place and tests never touch raw selectors.
|
|
148
|
-
from appium.webdriver.common.appiumby import AppiumBy
|
|
224
|
+
from appium.webdriver.common.appiumby import AppiumBy
|
|
149
225
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
150
226
|
from selenium.webdriver.support import expected_conditions as EC
|
|
151
227
|
|
|
152
228
|
DEFAULT_TIMEOUT = ${DEFAULT_TIMEOUT}
|
|
229
|
+
# Upper bound on scroll gestures while looking for an element, so never an endless loop.
|
|
230
|
+
MAX_SCROLLS = ${MAX_SCROLLS}
|
|
231
|
+
|
|
232
|
+
# Finger-direction swipe vectors as fractions of the window size: (x1, y1, x2, y2).
|
|
233
|
+
_SWIPES = {
|
|
234
|
+
"up": (0.5, 0.8, 0.5, 0.2),
|
|
235
|
+
"down": (0.5, 0.2, 0.5, 0.8),
|
|
236
|
+
"left": (0.8, 0.5, 0.2, 0.5),
|
|
237
|
+
"right": (0.2, 0.5, 0.8, 0.5),
|
|
238
|
+
}
|
|
153
239
|
|
|
154
240
|
|
|
155
241
|
class BaseScreen:
|
|
156
242
|
def __init__(self, driver):
|
|
157
243
|
self.driver = driver
|
|
158
244
|
|
|
245
|
+
def _platform(self):
|
|
246
|
+
return (self.driver.capabilities.get("platformName") or "").lower()
|
|
247
|
+
|
|
159
248
|
def _spec(self, loc):
|
|
160
|
-
|
|
161
|
-
spec = loc.get("ios") if platform == "ios" else loc.get("android")
|
|
249
|
+
spec = loc.get("ios") if self._platform() == "ios" else loc.get("android")
|
|
162
250
|
if not spec:
|
|
163
251
|
raise RuntimeError(
|
|
164
|
-
"No durable selector for this platform
|
|
252
|
+
"No durable selector for this platform. Element relies on a coordinate fallback "
|
|
165
253
|
"(non-release-grade). Add an accessibility id / resource-id / testID."
|
|
166
254
|
)
|
|
167
255
|
return spec
|
|
168
256
|
|
|
257
|
+
def _text_spec(self, text):
|
|
258
|
+
# Escape backslashes first, then quotes, so the runtime text cannot break the selector.
|
|
259
|
+
escaped = text.replace("\\\\", "\\\\\\\\").replace('"', '\\\\"')
|
|
260
|
+
if self._platform() == "ios":
|
|
261
|
+
return (AppiumBy.IOS_PREDICATE, 'label CONTAINS "%s" OR name CONTAINS "%s"' % (escaped, escaped))
|
|
262
|
+
return (AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textContains("%s")' % escaped)
|
|
263
|
+
|
|
169
264
|
def find(self, loc, timeout=DEFAULT_TIMEOUT):
|
|
170
265
|
by, value = self._spec(loc)
|
|
171
266
|
return WebDriverWait(self.driver, timeout).until(
|
|
@@ -180,9 +275,50 @@ class BaseScreen:
|
|
|
180
275
|
el.clear()
|
|
181
276
|
el.send_keys(value)
|
|
182
277
|
|
|
183
|
-
def
|
|
184
|
-
#
|
|
185
|
-
self.
|
|
278
|
+
def type_focused(self, value):
|
|
279
|
+
# The recording had no locator for this field, so type into whatever has focus.
|
|
280
|
+
self.driver.switch_to.active_element.send_keys(value)
|
|
281
|
+
|
|
282
|
+
def _displayed_now(self, spec):
|
|
283
|
+
try:
|
|
284
|
+
return any(el.is_displayed() for el in self.driver.find_elements(*spec))
|
|
285
|
+
except Exception:
|
|
286
|
+
return False
|
|
287
|
+
|
|
288
|
+
def _scroll_once(self, direction):
|
|
289
|
+
"""One real content-scroll gesture. direction is the CONTENT direction ("down" reveals
|
|
290
|
+
what is below). Returns False once Android reports the end of the scrollable area."""
|
|
291
|
+
if self._platform() == "ios":
|
|
292
|
+
self.driver.execute_script("mobile: scroll", {"direction": direction})
|
|
293
|
+
return True
|
|
294
|
+
size = self.driver.get_window_size()
|
|
295
|
+
w, h = size["width"], size["height"]
|
|
296
|
+
can_scroll_more = self.driver.execute_script("mobile: scrollGesture", {
|
|
297
|
+
"left": int(w * 0.1),
|
|
298
|
+
"top": int(h * 0.2),
|
|
299
|
+
"width": int(w * 0.8),
|
|
300
|
+
"height": int(h * 0.6),
|
|
301
|
+
"direction": direction,
|
|
302
|
+
"percent": 0.75,
|
|
303
|
+
})
|
|
304
|
+
return can_scroll_more is not False
|
|
305
|
+
|
|
306
|
+
def _scroll_until(self, spec, direction, max_scrolls, what):
|
|
307
|
+
at_end = False
|
|
308
|
+
for i in range(max_scrolls + 1):
|
|
309
|
+
if self._displayed_now(spec):
|
|
310
|
+
return
|
|
311
|
+
if i == max_scrolls or at_end:
|
|
312
|
+
break
|
|
313
|
+
at_end = not self._scroll_once(direction)
|
|
314
|
+
raise AssertionError("%s not visible after scrolling %s (max %d scrolls)" % (what, direction, max_scrolls))
|
|
315
|
+
|
|
316
|
+
def scroll_to(self, loc, direction="down", max_scrolls=MAX_SCROLLS):
|
|
317
|
+
spec = self._spec(loc)
|
|
318
|
+
self._scroll_until(spec, direction, max_scrolls, "element %r" % (spec,))
|
|
319
|
+
|
|
320
|
+
def scroll_to_text(self, text, direction="down", max_scrolls=MAX_SCROLLS):
|
|
321
|
+
self._scroll_until(self._text_spec(text), direction, max_scrolls, "text %r" % (text,))
|
|
186
322
|
|
|
187
323
|
def is_visible(self, loc):
|
|
188
324
|
try:
|
|
@@ -194,26 +330,54 @@ class BaseScreen:
|
|
|
194
330
|
assert self.find(loc).is_displayed()
|
|
195
331
|
|
|
196
332
|
def assert_text_visible(self, text):
|
|
197
|
-
# Non-release-grade text assertion
|
|
198
|
-
spec =
|
|
333
|
+
# Non-release-grade text assertion. Prefer a structured locator.
|
|
334
|
+
spec = self._text_spec(text)
|
|
199
335
|
assert WebDriverWait(self.driver, DEFAULT_TIMEOUT).until(
|
|
200
336
|
EC.presence_of_element_located(spec)
|
|
201
337
|
).is_displayed()
|
|
202
338
|
|
|
203
339
|
def tap_at(self, x, y):
|
|
204
|
-
# Coordinate tap
|
|
340
|
+
# Coordinate tap: brittle, non-release-grade fallback.
|
|
205
341
|
self.driver.tap([(x, y)])
|
|
206
342
|
|
|
343
|
+
def swipe(self, direction):
|
|
344
|
+
"""Real window-size-relative swipe. direction is the FINGER direction ("up" drags bottom > top)."""
|
|
345
|
+
if direction not in _SWIPES:
|
|
346
|
+
raise ValueError("Unsupported swipe direction: %r" % (direction,))
|
|
347
|
+
size = self.driver.get_window_size()
|
|
348
|
+
w, h = size["width"], size["height"]
|
|
349
|
+
fx1, fy1, fx2, fy2 = _SWIPES[direction]
|
|
350
|
+
self.driver.swipe(int(w * fx1), int(h * fy1), int(w * fx2), int(h * fy2), 600)
|
|
351
|
+
|
|
207
352
|
def press_key(self, key):
|
|
353
|
+
ios = self._platform() == "ios"
|
|
208
354
|
if key == "back":
|
|
209
|
-
|
|
355
|
+
if not ios:
|
|
356
|
+
self.driver.back()
|
|
357
|
+
return
|
|
358
|
+
# iOS has no system back key: swipe in from the left edge (navigation back gesture).
|
|
359
|
+
size = self.driver.get_window_size()
|
|
360
|
+
w, h = size["width"], size["height"]
|
|
361
|
+
self.driver.swipe(2, h // 2, int(w * 0.7), h // 2, 400)
|
|
362
|
+
elif key == "home":
|
|
363
|
+
if ios:
|
|
364
|
+
self.driver.execute_script("mobile: pressButton", {"name": "home"})
|
|
365
|
+
else:
|
|
366
|
+
self.driver.press_keycode(3)
|
|
367
|
+
elif key == "enter":
|
|
368
|
+
if ios:
|
|
369
|
+
self.type_focused("\\n")
|
|
370
|
+
else:
|
|
371
|
+
self.driver.press_keycode(66)
|
|
372
|
+
else:
|
|
373
|
+
raise ValueError("Unsupported key: %r" % (key,))
|
|
210
374
|
|
|
211
375
|
def open_url(self, url):
|
|
212
376
|
self.driver.get(url)
|
|
213
377
|
`;
|
|
214
378
|
}
|
|
215
|
-
|
|
216
|
-
|
|
379
|
+
/** Base (pre-dedupe) action-method name for an (action, attribute) pair. */
|
|
380
|
+
function methodBase(action, e) {
|
|
217
381
|
switch (action) {
|
|
218
382
|
case 'tap':
|
|
219
383
|
return `tap_${e}`;
|
|
@@ -224,142 +388,148 @@ function methodName(action, element) {
|
|
|
224
388
|
case 'assertVisible':
|
|
225
389
|
return `assert_${e}_visible`;
|
|
226
390
|
default:
|
|
227
|
-
|
|
391
|
+
throw new UnemittableStepError(`cannot emit a ${action} step bound to an element: no generated action exists for it`);
|
|
228
392
|
}
|
|
229
393
|
}
|
|
230
|
-
function screenClass(screen, steps) {
|
|
394
|
+
function screenClass(screen, names, steps) {
|
|
231
395
|
const lines = [];
|
|
232
|
-
lines.push(`# Generated by Swipium. Screen object for ${screen.pageName}${screen.screenSignature ? ` (${screen.screenSignature})` : ''}.`);
|
|
233
|
-
lines.push('from appium.webdriver.common.appiumby import AppiumBy');
|
|
396
|
+
lines.push(`# Generated by Swipium. Screen object for ${commentSafe(screen.pageName)}${screen.screenSignature ? ` (${commentSafe(screen.screenSignature)})` : ''}.`);
|
|
397
|
+
lines.push('from appium.webdriver.common.appiumby import AppiumBy # noqa: F401');
|
|
234
398
|
lines.push('from .base_screen import BaseScreen');
|
|
235
399
|
lines.push('');
|
|
236
400
|
lines.push('');
|
|
237
|
-
lines.push(`class ${
|
|
238
|
-
|
|
239
|
-
lines.push(' pass');
|
|
401
|
+
lines.push(`class ${names.cls}(BaseScreen):`);
|
|
402
|
+
const body = [];
|
|
240
403
|
for (const el of screen.elements) {
|
|
241
|
-
const note = el.durability === 'durable' ? '' : ` # ${el.durability}${el.remediation ?
|
|
242
|
-
|
|
404
|
+
const note = el.durability === 'durable' ? '' : ` # ${el.durability}${el.remediation ? `: ${commentSafe(el.remediation)}` : ''}`;
|
|
405
|
+
body.push(` ${names.attrs.get(el.name)} = ${locatorDict(el)}${note}`);
|
|
243
406
|
}
|
|
244
|
-
if (
|
|
245
|
-
|
|
407
|
+
if (body.length)
|
|
408
|
+
body.push('');
|
|
246
409
|
const seen = new Set();
|
|
247
410
|
for (const s of steps) {
|
|
248
411
|
if (s.screen !== screen.className || !s.element)
|
|
249
412
|
continue;
|
|
250
|
-
const
|
|
251
|
-
if (
|
|
413
|
+
const key = methodKey(s.action, s.element);
|
|
414
|
+
if (seen.has(key))
|
|
252
415
|
continue;
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
seen.add(name);
|
|
257
|
-
const attr = snake(s.element);
|
|
416
|
+
seen.add(key);
|
|
417
|
+
const name = names.methods.get(key);
|
|
418
|
+
const attr = `self.${names.attrs.get(s.element)}`;
|
|
258
419
|
if (s.action === 'inputText') {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
lines.push('');
|
|
420
|
+
body.push(` def ${name}(self, value):`);
|
|
421
|
+
body.push(` self.type(${attr}, value)`);
|
|
262
422
|
}
|
|
263
423
|
else if (s.action === 'tap') {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
lines.push('');
|
|
424
|
+
body.push(` def ${name}(self):`);
|
|
425
|
+
body.push(` self.tap(${attr})`);
|
|
267
426
|
}
|
|
268
427
|
else if (s.action === 'scrollTo') {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
lines.push('');
|
|
428
|
+
body.push(` def ${name}(self, direction="down"):`);
|
|
429
|
+
body.push(` self.scroll_to(${attr}, direction)`);
|
|
272
430
|
}
|
|
273
|
-
else
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
lines.push('');
|
|
431
|
+
else {
|
|
432
|
+
body.push(` def ${name}(self):`);
|
|
433
|
+
body.push(` self.assert_visible(${attr})`);
|
|
277
434
|
}
|
|
435
|
+
body.push('');
|
|
278
436
|
}
|
|
437
|
+
if (!body.length)
|
|
438
|
+
body.push(' pass');
|
|
439
|
+
lines.push(...body);
|
|
279
440
|
return lines.join('\n').replace(/\n+$/, '\n');
|
|
280
441
|
}
|
|
281
442
|
function testData(model) {
|
|
282
443
|
const lines = [];
|
|
283
|
-
lines.push('# Generated by Swipium. Test data comes from the ENVIRONMENT
|
|
444
|
+
lines.push('# Generated by Swipium. Test data comes from the ENVIRONMENT. Secrets are never inlined.');
|
|
284
445
|
lines.push('import os');
|
|
285
446
|
lines.push('');
|
|
286
447
|
lines.push('test_data = {');
|
|
287
448
|
for (const v of model.variables)
|
|
288
449
|
lines.push(` ${pyStr(pyVarToKey(v))}: os.environ.get(${pyStr(v)}, ""),`);
|
|
289
450
|
for (const v of model.secrets)
|
|
290
|
-
lines.push(` ${pyStr(pyVarToKey(v))}: os.environ.get(${pyStr(v)}, ""), # secret
|
|
451
|
+
lines.push(` ${pyStr(pyVarToKey(v))}: os.environ.get(${pyStr(v)}, ""), # secret, environment only`);
|
|
291
452
|
lines.push('}');
|
|
292
453
|
return lines.join('\n') + '\n';
|
|
293
454
|
}
|
|
294
|
-
function
|
|
295
|
-
|
|
296
|
-
|
|
455
|
+
function stepClasses(model) {
|
|
456
|
+
return [...new Set(model.steps.map((s) => s.screen))];
|
|
457
|
+
}
|
|
458
|
+
function importsForTest(model, names) {
|
|
459
|
+
return stepClasses(model).map((c) => `from screens.${names.get(c).module} import ${names.get(c).cls}`);
|
|
460
|
+
}
|
|
461
|
+
function dataArg(s) {
|
|
462
|
+
return s.varName ? `test_data[${pyStr(pyVarToKey(s.varName))}]` : pyStr(s.text ?? '');
|
|
463
|
+
}
|
|
464
|
+
function num(n) {
|
|
465
|
+
return Number.isFinite(n) ? Math.round(n) : 0;
|
|
297
466
|
}
|
|
298
|
-
function stepCall(
|
|
467
|
+
function stepCall(n, s) {
|
|
468
|
+
const v = n.instance;
|
|
299
469
|
if (s.element) {
|
|
300
|
-
const name =
|
|
301
|
-
if (s.action === 'inputText')
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
return `${
|
|
470
|
+
const name = n.methods.get(methodKey(s.action, s.element));
|
|
471
|
+
if (s.action === 'inputText')
|
|
472
|
+
return `${v}.${name}(${dataArg(s)})`;
|
|
473
|
+
if (s.action === 'scrollTo')
|
|
474
|
+
return `${v}.${name}(${pyStr(checkDirection(s.direction ?? 'down', 'scrollTo step'))})`;
|
|
475
|
+
return `${v}.${name}()`;
|
|
306
476
|
}
|
|
307
477
|
switch (s.action) {
|
|
308
478
|
case 'tapAt':
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
479
|
+
if (!s.coords)
|
|
480
|
+
throw new UnemittableStepError('cannot emit a coordinate tap without coordinates');
|
|
481
|
+
return `${v}.tap_at(${num(s.coords[0])}, ${num(s.coords[1])}) # coordinate fallback, non-release-grade`;
|
|
482
|
+
case 'inputText':
|
|
483
|
+
return `${v}.type_focused(${dataArg(s)}) # focused-field input`;
|
|
314
484
|
case 'press':
|
|
315
|
-
return `${
|
|
485
|
+
return `${v}.press_key(${pyStr(checkKey(s.key))})`;
|
|
316
486
|
case 'swipe':
|
|
317
|
-
return `${
|
|
487
|
+
return `${v}.swipe(${pyStr(checkDirection(s.direction ?? 'up', 'swipe step'))})`;
|
|
488
|
+
case 'scrollTo':
|
|
489
|
+
if (!s.text)
|
|
490
|
+
throw new UnemittableStepError('cannot emit a scrollTo step with neither an element nor a target text');
|
|
491
|
+
return `${v}.scroll_to_text(${pyStr(s.text)}, ${pyStr(checkDirection(s.direction ?? 'down', 'scrollTo step'))})`;
|
|
318
492
|
case 'openUrl':
|
|
319
|
-
|
|
493
|
+
if (!s.url)
|
|
494
|
+
throw new UnemittableStepError('cannot emit an openUrl step without a URL');
|
|
495
|
+
return `${v}.open_url(${pyStr(s.url)})`;
|
|
320
496
|
case 'assertVisible':
|
|
321
|
-
|
|
497
|
+
if (!s.text)
|
|
498
|
+
throw new UnemittableStepError('cannot emit a text assertion without text');
|
|
499
|
+
return `${v}.assert_text_visible(${pyStr(s.text)})`;
|
|
500
|
+
case 'visualCheck':
|
|
501
|
+
// Visual judgement prose is not on-screen text. It's a manual checkpoint, never a failing text check.
|
|
502
|
+
// A comment line is safe here: the test body always instantiates the step's screen first.
|
|
503
|
+
return `# TODO(manual visual check, not automated): ${commentSafe(s.text ?? 'visual checkpoint')}`;
|
|
322
504
|
default:
|
|
323
|
-
|
|
505
|
+
throw new UnemittableStepError(`cannot emit step action ${JSON.stringify(s.action)}: no Appium Python equivalent is generated for it`);
|
|
324
506
|
}
|
|
325
507
|
}
|
|
326
|
-
function
|
|
327
|
-
const classes = [...new Set(model.steps.map((s) => s.screen))];
|
|
328
|
-
const m = new Map();
|
|
329
|
-
for (const c of classes)
|
|
330
|
-
m.set(c, snake(c));
|
|
331
|
-
return m;
|
|
332
|
-
}
|
|
333
|
-
function pytestSmoke(model) {
|
|
508
|
+
function pytestSmoke(model, names) {
|
|
334
509
|
const lines = [];
|
|
335
510
|
lines.push('# Generated by Swipium. Smoke test driving the recorded flow through the screen objects.');
|
|
336
|
-
lines.push(...importsForTest(model));
|
|
511
|
+
lines.push(...importsForTest(model, names));
|
|
337
512
|
lines.push('from data.test_data import test_data # noqa: F401');
|
|
338
|
-
const usesFocused = model.steps.some((s) => !s.element && s.action === 'inputText');
|
|
339
|
-
if (usesFocused)
|
|
340
|
-
lines.push('from appium.webdriver.common.appiumby import AppiumBy # noqa: F401');
|
|
341
513
|
lines.push('');
|
|
342
514
|
lines.push('');
|
|
343
515
|
lines.push('def test_smoke(driver):');
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
lines.push(` ${v} = ${c}(driver)`);
|
|
516
|
+
for (const c of stepClasses(model))
|
|
517
|
+
lines.push(` ${names.get(c).instance} = ${names.get(c).cls}(driver)`);
|
|
347
518
|
for (const s of model.steps)
|
|
348
|
-
lines.push(` ${stepCall(
|
|
519
|
+
lines.push(` ${stepCall(names.get(s.screen), s)}`);
|
|
520
|
+
if (!model.steps.length)
|
|
521
|
+
lines.push(' pass');
|
|
349
522
|
return lines.join('\n') + '\n';
|
|
350
523
|
}
|
|
351
|
-
function unittestSmoke(model,
|
|
524
|
+
function unittestSmoke(model, names) {
|
|
352
525
|
const lines = [];
|
|
353
526
|
lines.push('# Generated by Swipium. Smoke test (unittest) driving the recorded flow through screen objects.');
|
|
354
527
|
lines.push('import os');
|
|
355
528
|
lines.push('import unittest');
|
|
356
529
|
lines.push('from appium import webdriver');
|
|
357
530
|
lines.push('from conftest import build_options');
|
|
358
|
-
lines.push(...importsForTest(model));
|
|
531
|
+
lines.push(...importsForTest(model, names));
|
|
359
532
|
lines.push('from data.test_data import test_data # noqa: F401');
|
|
360
|
-
const usesFocused = model.steps.some((s) => !s.element && s.action === 'inputText');
|
|
361
|
-
if (usesFocused)
|
|
362
|
-
lines.push('from appium.webdriver.common.appiumby import AppiumBy # noqa: F401');
|
|
363
533
|
lines.push('');
|
|
364
534
|
lines.push('');
|
|
365
535
|
lines.push('class SmokeTest(unittest.TestCase):');
|
|
@@ -372,11 +542,12 @@ function unittestSmoke(model, _input) {
|
|
|
372
542
|
lines.push(' self.driver.quit()');
|
|
373
543
|
lines.push('');
|
|
374
544
|
lines.push(' def test_smoke(self):');
|
|
375
|
-
const
|
|
376
|
-
|
|
377
|
-
lines.push(` ${v} = ${c}(self.driver)`);
|
|
545
|
+
for (const c of stepClasses(model))
|
|
546
|
+
lines.push(` ${names.get(c).instance} = ${names.get(c).cls}(self.driver)`);
|
|
378
547
|
for (const s of model.steps)
|
|
379
|
-
lines.push(` ${stepCall(
|
|
548
|
+
lines.push(` ${stepCall(names.get(s.screen), s)}`);
|
|
549
|
+
if (!model.steps.length)
|
|
550
|
+
lines.push(' pass');
|
|
380
551
|
lines.push('');
|
|
381
552
|
lines.push('');
|
|
382
553
|
lines.push('if __name__ == "__main__":');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pythonEmitter.js","sourceRoot":"","sources":["../../src/automationGen/pythonEmitter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pythonEmitter.js","sourceRoot":"","sources":["../../src/automationGen/pythonEmitter.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8FAA8F;AAC9F,kGAAkG;AAClG,qGAAqG;AAKrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAU5I,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,CACL,CAAC;SACE,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,IAAI,GAAG,CACxB,CAAC;AACJ,CAAC;AAED;wEACwE;AACxE,MAAM,eAAe,GAAG;IACtB,QAAQ;IACR,MAAM;IACN,KAAK;IACL,MAAM;IACN,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,qBAAqB;IACrB,QAAQ;IACR,WAAW;IACX,OAAO;IACP,UAAU;IACV,MAAM;IACN,KAAK;CACN,CAAC;AAWF,SAAS,SAAS,CAAC,MAA4B,EAAE,OAAe;IAC9D,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,KAAuB;IAC1C,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1H,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC;QAClC,QAAQ;QACR,WAAW;QACX,MAAM;QACN,IAAI;QACJ,UAAU;QACV,QAAQ;QACR,WAAW;QACX,eAAe;QACf,UAAU;KACX,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,iGAAiG;QACjG,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACnH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,SAAS;YAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,oBAAoB,CAC5B,eAAe,CAAC,CAAC,MAAM,YAAY,MAAM,CAAC,SAAS,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAC3H,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC;AACpC,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED;;2FAE2F;AAC3F,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,GAAkB;IAC9C,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,iBAAiB;YACpB,OAAO,+BAA+B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5D,KAAK,IAAI;YACP,OAAO,iBAAiB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9C,KAAK,oBAAoB;YACvB,OAAO,kCAAkC,KAAK,CAAC,0BAA0B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1G,KAAK,MAAM;YACT,OAAO,4BAA4B,KAAK,CAAC,YAAY,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7H,KAAK,cAAc;YACjB,OAAO,4BAA4B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QACzD,KAAK,eAAe;YAClB,OAAO,8BAA8B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QAC3D,KAAK,YAAY;YACf,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAwB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SAC7G,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,4FAA4F;IAC5F,0FAA0F;IAC1F,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjH,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC3F,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACtE,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,MAAM,KAAK,GAAG,CAAC,mDAAmD,EAAE,6BAA6B,EAAE,kBAAkB,CAAC,CAAC;IACvH,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO;;;;;CAKR,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAC,KAAkB;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,OAAO;sBACa,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;;;;;;;;;qDASd,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;;;;oDAI9C,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;wDAW5B,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;CAmBvF,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;;;;;;oBAMW,eAAe;;gBAEnB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmJ1B,CAAC;AACF,CAAC;AAED,4EAA4E;AAC5E,SAAS,UAAU,CAAC,MAA4B,EAAE,CAAS;IACzD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,OAAO,CAAC,EAAE,CAAC;QACpB,KAAK,WAAW;YACd,OAAO,SAAS,CAAC,EAAE,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,aAAa,CAAC,EAAE,CAAC;QAC1B,KAAK,eAAe;YAClB,OAAO,UAAU,CAAC,UAAU,CAAC;QAC/B;YACE,MAAM,IAAI,oBAAoB,CAAC,iBAAiB,MAAM,8DAA8D,CAAC,CAAC;IAC1H,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAoB,EAAE,KAAoB,EAAE,KAAmB;IAClF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CACR,6CAA6C,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CACzJ,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAClF,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,GAAG,eAAe,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAE,MAAM,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,SAAS;QAC1D,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAE,EAAE,CAAC;QACnD,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,gBAAgB,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,UAAU,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,GAAG,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,2BAA2B,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,0BAA0B,IAAI,cAAc,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,+BAA+B,IAAI,GAAG,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuB;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAC;IACvG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,oBAAoB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7G,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,oBAAoB,KAAK,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;IACvI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAAC,KAAuB;IAC1C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,KAAuB,EAAE,KAAiC;IAChF,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,MAAM,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3G,CAAC;AAED,SAAS,OAAO,CAAC,CAAa;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,GAAG,CAAC,CAAqB;IAChC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,CAAgB,EAAE,CAAa;IAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACrB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAE,CAAC;QAC5D,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;QACnE,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC;QACrH,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;IAC1B,CAAC;IACD,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,IAAI,CAAC,CAAC,CAAC,MAAM;gBAAE,MAAM,IAAI,oBAAoB,CAAC,kDAAkD,CAAC,CAAC;YAClG,OAAO,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,6CAA6C,CAAC;QAC3G,KAAK,WAAW;YACd,OAAO,GAAG,CAAC,iBAAiB,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACnE,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,cAAc,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QACrD,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,UAAU,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC;QACnF,KAAK,UAAU;YACb,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,MAAM,IAAI,oBAAoB,CAAC,uEAAuE,CAAC,CAAC;YACrH,OAAO,GAAG,CAAC,mBAAmB,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC;QACnH,KAAK,SAAS;YACZ,IAAI,CAAC,CAAC,CAAC,GAAG;gBAAE,MAAM,IAAI,oBAAoB,CAAC,2CAA2C,CAAC,CAAC;YACxF,OAAO,GAAG,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1C,KAAK,eAAe;YAClB,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,MAAM,IAAI,oBAAoB,CAAC,2CAA2C,CAAC,CAAC;YACzF,OAAO,GAAG,CAAC,wBAAwB,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACtD,KAAK,aAAa;YAChB,sGAAsG;YACtG,0FAA0F;YAC1F,OAAO,+CAA+C,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,mBAAmB,CAAC,EAAE,CAAC;QACrG;YACE,MAAM,IAAI,oBAAoB,CAC5B,2BAA2B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,mDAAmD,CACvG,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAuB,EAAE,KAAiC;IAC7E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAC;IACvG,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,QAAQ,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,UAAU,CAAC,CAAC;IAC/G,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CAAC,KAAuB,EAAE,KAAiC;IAC/E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;IAC9G,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAClF,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,QAAQ,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,eAAe,CAAC,CAAC;IACxH,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACxF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC"}
|