@mablhq/mabl-cli 2.30.0 → 2.31.32
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/api/featureSet.js +5 -1
- package/api/mablApiClient.js +18 -0
- package/browserLauncher/playwrightBrowserLauncher/playwrightPage.js +2 -2
- package/commands/app-files/app-files_cmds/create.js +1 -1
- package/commands/config/config_cmds/install.js +1 -1
- package/commands/tests/testsUtil.js +9 -1
- package/commands/tests/tests_cmds/import_cmds/import_playwright.js +2 -3
- package/commands/tests/tests_cmds/import_cmds/import_selenium.js +1 -1
- package/env/defaultEnv.js +1 -2
- package/env/dev.js +1 -2
- package/env/env.js +1 -3
- package/env/local.js +1 -2
- package/env/prod.js +1 -2
- package/execution/index.js +2 -2
- package/mablApi/index.js +1 -1
- package/mablscript/actions/ConditionAction.js +59 -26
- package/mablscript/importer.js +55 -27
- package/mablscript/mobile/steps/OpenAppStep.js +22 -0
- package/mablscript/steps/AbstractAssertionsAndVariablesStep.js +10 -0
- package/mablscript/steps/AssertStep.js +29 -6
- package/mablscript/steps/DatabaseQueryStep.js +5 -1
- package/mablscript/steps/EnterAuthCodeStep.js +4 -3
- package/mablscript/steps/IfConditionStep.js +6 -7
- package/mablscript/steps/OpenEmailStep.js +4 -3
- package/mablscript/steps/ReleaseStep.js +3 -5
- package/mablscript/types/ConditionDescriptor.js +54 -1
- package/mablscript/types/ExtractDescriptor.js +1 -0
- package/mablscript/types/ReleaseStepDescriptor.js +5 -0
- package/mablscript/types/mobile/OpenAppStepDescriptor.js +2 -0
- package/package.json +5 -5
- package/upload/index.js +1 -1
- package/util/MobileAppFileCache.js +1 -0
|
@@ -7,72 +7,105 @@ const ConditionDescriptor_1 = require("../types/ConditionDescriptor");
|
|
|
7
7
|
class ConditionAction extends MablAction_1.MablAction {
|
|
8
8
|
constructor(name, args) {
|
|
9
9
|
super(name, name, args);
|
|
10
|
-
this.
|
|
11
|
-
this.conditionValueAttribute = '';
|
|
12
|
-
this.setConditionAttributes();
|
|
10
|
+
this.hasOptionsAtInstantiation = false;
|
|
13
11
|
this.conditionDescriptor = this.getConditionDescriptor();
|
|
14
12
|
}
|
|
15
|
-
setConditionAttributes() {
|
|
16
|
-
const conditionActionArgs = this.getActionArgs();
|
|
17
|
-
if (conditionActionArgs) {
|
|
18
|
-
[this.conditionAttribute, this.conditionValueAttribute, this.options] =
|
|
19
|
-
this.getActionArgs();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
13
|
getConditionDescriptor() {
|
|
23
14
|
switch (this.name) {
|
|
24
15
|
case 'evaluate_condition':
|
|
25
16
|
return this.getEvaluateCondition();
|
|
26
17
|
case 'evaluate_presence':
|
|
27
18
|
return this.getEvaluatePresence();
|
|
19
|
+
case 'evaluate_ai_prompt':
|
|
20
|
+
return this.getEvaluateAIPrompt();
|
|
28
21
|
default:
|
|
29
22
|
throw new Error(`Unexpected condition name: ${this.name}`);
|
|
30
23
|
}
|
|
31
24
|
}
|
|
32
25
|
getEvaluateCondition() {
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
const conditionActionArgs = this.getActionArgs();
|
|
27
|
+
let conditionAttribute;
|
|
28
|
+
let conditionValueAttribute;
|
|
29
|
+
let options;
|
|
30
|
+
if (conditionActionArgs) {
|
|
31
|
+
[conditionAttribute, conditionValueAttribute, options] =
|
|
32
|
+
this.getActionArgs();
|
|
33
|
+
}
|
|
34
|
+
if (conditionValueAttribute === undefined) {
|
|
35
35
|
throw new Error('Invalid equality condition. Missing value to compare.');
|
|
36
36
|
}
|
|
37
|
+
if (conditionAttribute === undefined) {
|
|
38
|
+
throw new Error('Invalid equality condition. Missing comparison type.');
|
|
39
|
+
}
|
|
40
|
+
if (options) {
|
|
41
|
+
this.hasOptionsAtInstantiation = true;
|
|
42
|
+
}
|
|
37
43
|
return {
|
|
38
44
|
conditionType: ConditionDescriptor_1.ConditionType.Comparison,
|
|
39
|
-
comparisonType: ConditionDescriptor_1.ComparisonType.fromString(
|
|
40
|
-
comparatorValue: (0, MablAction_1.parseArgument)(
|
|
41
|
-
caseInsensitive:
|
|
45
|
+
comparisonType: ConditionDescriptor_1.ComparisonType.fromString(conditionAttribute),
|
|
46
|
+
comparatorValue: (0, MablAction_1.parseArgument)(conditionValueAttribute),
|
|
47
|
+
caseInsensitive: options === null || options === void 0 ? void 0 : options.caseInsensitive,
|
|
42
48
|
};
|
|
43
49
|
}
|
|
44
50
|
getEvaluatePresence() {
|
|
45
|
-
|
|
51
|
+
const conditionActionArgs = this.getActionArgs();
|
|
52
|
+
let conditionAttribute;
|
|
53
|
+
if (conditionActionArgs) {
|
|
54
|
+
[conditionAttribute] = this.getActionArgs();
|
|
55
|
+
}
|
|
56
|
+
if (!conditionAttribute) {
|
|
46
57
|
throw new Error('Invalid evaluate presence condition. Missing evaluation_type.');
|
|
47
58
|
}
|
|
48
59
|
return {
|
|
49
60
|
conditionType: ConditionDescriptor_1.ConditionType.Presence,
|
|
50
|
-
presenceType: ConditionDescriptor_1.PresenceEvaluationType.fromString(
|
|
61
|
+
presenceType: ConditionDescriptor_1.PresenceEvaluationType.fromString(conditionAttribute),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
getEvaluateAIPrompt() {
|
|
65
|
+
const conditionActionArgs = this.getActionArgs();
|
|
66
|
+
let userPrompt;
|
|
67
|
+
let metaPrompt;
|
|
68
|
+
if (conditionActionArgs) {
|
|
69
|
+
[userPrompt, metaPrompt] = this.getActionArgs();
|
|
70
|
+
}
|
|
71
|
+
if (userPrompt === undefined) {
|
|
72
|
+
throw new Error('Invalid ai prompt condition. Missing user prompt');
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
conditionType: ConditionDescriptor_1.ConditionType.AIPrompt,
|
|
76
|
+
userPrompt,
|
|
77
|
+
metaPrompt,
|
|
51
78
|
};
|
|
52
79
|
}
|
|
53
80
|
generateEvaluateConditionMablscript() {
|
|
81
|
+
var _a;
|
|
82
|
+
const comparatorValue = (0, ConditionDescriptor_1.getOptionalComparatorValue)(this.conditionDescriptor);
|
|
54
83
|
let value = '';
|
|
55
|
-
if (
|
|
56
|
-
if (!(0, MablAction_1.argumentIsMablVariable)(
|
|
57
|
-
value = `, "${(0, domUtil_1.escapeMablscriptString)(
|
|
84
|
+
if (comparatorValue !== undefined) {
|
|
85
|
+
if (!(0, MablAction_1.argumentIsMablVariable)(comparatorValue)) {
|
|
86
|
+
value = `, "${(0, domUtil_1.escapeMablscriptString)(comparatorValue)}"`;
|
|
58
87
|
}
|
|
59
88
|
else {
|
|
60
|
-
value = `, ${this.subVariable(
|
|
89
|
+
value = `, ${this.subVariable(comparatorValue)}`;
|
|
61
90
|
}
|
|
62
91
|
}
|
|
63
|
-
const conditionOptionsString = this.
|
|
64
|
-
? `, ${(0, MablAction_1.convertObjectToMablscriptArgs)(this.
|
|
92
|
+
const conditionOptionsString = this.hasOptionsAtInstantiation
|
|
93
|
+
? `, ${(0, MablAction_1.convertObjectToMablscriptArgs)((_a = (0, ConditionDescriptor_1.getOptionalConditionOptions)(this.conditionDescriptor)) !== null && _a !== void 0 ? _a : {})}`
|
|
65
94
|
: '';
|
|
66
|
-
return `${this.name}("${this.
|
|
95
|
+
return `${this.name}("${(0, ConditionDescriptor_1.getAssertionConditionFieldFromDescriptor)(this.conditionDescriptor)}"${value}${conditionOptionsString})`;
|
|
67
96
|
}
|
|
68
97
|
toMablscript() {
|
|
69
98
|
return `${this.generateEvaluateConditionMablscript()}`;
|
|
70
99
|
}
|
|
71
100
|
getInputVariables() {
|
|
72
101
|
var _a;
|
|
73
|
-
return MablAction_1.MablAction.findUniqueVariableReferencesInValue((_a = this.
|
|
102
|
+
return MablAction_1.MablAction.findUniqueVariableReferencesInValue((_a = (0, ConditionDescriptor_1.getOptionalComparatorValue)(this.conditionDescriptor)) !== null && _a !== void 0 ? _a : '');
|
|
74
103
|
}
|
|
75
104
|
}
|
|
76
105
|
exports.ConditionAction = ConditionAction;
|
|
77
|
-
ConditionAction.mablScriptStepNames = [
|
|
106
|
+
ConditionAction.mablScriptStepNames = [
|
|
107
|
+
'evaluate_condition',
|
|
108
|
+
'evaluate_presence',
|
|
109
|
+
'evaluate_ai_prompt',
|
|
110
|
+
];
|
|
78
111
|
ConditionAction.yamlMablScriptNames = ['ConditionAction'];
|
package/mablscript/importer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getSnippetIdsFromJsonFlow = exports.parseMablScriptIntoV2Step = exports.extractOutputVariables = exports.extractInputVariables = exports.parseMablScriptIntoSteps = exports.mablscriptTheLoadedSteps = exports.interpretStepsFromObjects = exports.interpretStepsFromObjectsInFlow = exports.loadYamlSteps = exports.yamlifyTheLoadedSteps = exports.loadMablScriptIntoSteps = exports.parseMablScript = void 0;
|
|
3
|
+
exports.getSnippetIdsFromFlows = exports.getSnippetIdsFromMablscriptFlow = exports.getSnippetIdsFromJsonFlow = exports.parseMablScriptIntoV2Step = exports.extractOutputVariables = exports.extractInputVariables = exports.parseMablScriptIntoSteps = exports.mablscriptTheLoadedSteps = exports.interpretStepsFromObjects = exports.interpretStepsFromObjectsInFlow = exports.loadYamlSteps = exports.yamlifyTheLoadedSteps = exports.loadMablScriptIntoSteps = exports.parseMablScript = void 0;
|
|
4
4
|
const esprima_1 = require("esprima");
|
|
5
5
|
const estraverse_1 = require("estraverse");
|
|
6
6
|
const AssertStep_1 = require("./steps/AssertStep");
|
|
@@ -70,6 +70,7 @@ const PrepareSessionStep_1 = require("./mobile/steps/PrepareSessionStep");
|
|
|
70
70
|
const OpenLinkStep_1 = require("./mobile/steps/OpenLinkStep");
|
|
71
71
|
const DatabaseQueryStep_1 = require("./steps/DatabaseQueryStep");
|
|
72
72
|
const HideKeyboardStep_1 = require("./mobile/steps/HideKeyboardStep");
|
|
73
|
+
const OpenAppStep_1 = require("./mobile/steps/OpenAppStep");
|
|
73
74
|
const ActionTypes = [
|
|
74
75
|
AwaitDownloadAction_1.AwaitDownloadAction,
|
|
75
76
|
AwaitPDFDownloadAction_1.AwaitPDFDownloadAction,
|
|
@@ -132,6 +133,7 @@ const MobileStepTypes = [
|
|
|
132
133
|
EnterTextStep_2.EnterTextStep,
|
|
133
134
|
SetOrientationStep_1.SetOrientationStep,
|
|
134
135
|
ScrollStep_1.ScrollStep,
|
|
136
|
+
OpenAppStep_1.OpenAppStep,
|
|
135
137
|
OpenLinkStep_1.OpenLinkStep,
|
|
136
138
|
PrepareSessionStep_1.PrepareSessionStep,
|
|
137
139
|
PushFileStep_1.PushFileStep,
|
|
@@ -490,35 +492,61 @@ function parseMablScriptIntoV2Step(script) {
|
|
|
490
492
|
return parsedStep;
|
|
491
493
|
}
|
|
492
494
|
exports.parseMablScriptIntoV2Step = parseMablScriptIntoV2Step;
|
|
493
|
-
function
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
else if ((0, IfConditionStep_1.isIfConditionStep)(step) || (0, ElseIfConditionStep_1.isElseIfConditionStep)(step)) {
|
|
502
|
-
if ((0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.primaryAction)) {
|
|
503
|
-
jsDescriptor = step.primaryAction.javaScript;
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
else if ((0, CreateVariableStep_1.isCreateVariableStep)(step)) {
|
|
507
|
-
if (step.generationType === CreateVariableStepDescriptor_1.VariableGenerator.JAVASCRIPT &&
|
|
508
|
-
(0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.actions[0])) {
|
|
509
|
-
jsDescriptor = step.actions[0].javaScript;
|
|
510
|
-
}
|
|
495
|
+
function getSnippetIdFromStep(step) {
|
|
496
|
+
let jsDescriptor;
|
|
497
|
+
if ((0, EvaluateJavaScriptStep_1.isEvaluateJavaScriptStep)(step)) {
|
|
498
|
+
jsDescriptor = step.evaluateJsAction.javaScript;
|
|
499
|
+
}
|
|
500
|
+
else if ((0, IfConditionStep_1.isIfConditionStep)(step) || (0, ElseIfConditionStep_1.isElseIfConditionStep)(step)) {
|
|
501
|
+
if ((0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.primaryAction)) {
|
|
502
|
+
jsDescriptor = step.primaryAction.javaScript;
|
|
511
503
|
}
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
504
|
+
}
|
|
505
|
+
else if ((0, CreateVariableStep_1.isCreateVariableStep)(step)) {
|
|
506
|
+
if (step.generationType === CreateVariableStepDescriptor_1.VariableGenerator.JAVASCRIPT &&
|
|
507
|
+
(0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.actions[0])) {
|
|
508
|
+
jsDescriptor = step.actions[0].javaScript;
|
|
516
509
|
}
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
510
|
+
}
|
|
511
|
+
else if ((0, DatabaseQueryStep_1.isDatabaseQueryStep)(step)) {
|
|
512
|
+
jsDescriptor = step.descriptor.snippet;
|
|
513
|
+
}
|
|
514
|
+
else if ((0, CreateVariableMobileStep_1.isCreateVariableMobileStep)(step)) {
|
|
515
|
+
if ((0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.descriptor.generator)) {
|
|
516
|
+
jsDescriptor = step.descriptor.generator.javaScript;
|
|
520
517
|
}
|
|
521
|
-
}
|
|
518
|
+
}
|
|
519
|
+
if ((jsDescriptor && (0, SnippetsDescriptor_1.isReusableSnippetDescriptor)(jsDescriptor)) ||
|
|
520
|
+
(0, SnippetsDescriptor_1.isLegacyReusableSnippetDescriptor)(jsDescriptor)) {
|
|
521
|
+
return jsDescriptor.snippetInvariantId;
|
|
522
|
+
}
|
|
523
|
+
return undefined;
|
|
524
|
+
}
|
|
525
|
+
function isDefined(value) {
|
|
526
|
+
return value !== undefined;
|
|
527
|
+
}
|
|
528
|
+
function uniqueArray(array) {
|
|
529
|
+
return Array.from(new Set(array));
|
|
530
|
+
}
|
|
531
|
+
function getSnippetIdsFromJsonFlow(flow) {
|
|
532
|
+
const steps = interpretStepsFromObjects(flow.json_steps.steps, true);
|
|
533
|
+
const snippetIds = steps
|
|
534
|
+
.map(getSnippetIdFromStep)
|
|
535
|
+
.filter(isDefined);
|
|
522
536
|
return snippetIds;
|
|
523
537
|
}
|
|
524
538
|
exports.getSnippetIdsFromJsonFlow = getSnippetIdsFromJsonFlow;
|
|
539
|
+
function getSnippetIdsFromMablscriptFlow(flow) {
|
|
540
|
+
const steps = parseMablScriptIntoSteps(flow);
|
|
541
|
+
const snippetIds = steps
|
|
542
|
+
.map(getSnippetIdFromStep)
|
|
543
|
+
.filter(isDefined);
|
|
544
|
+
return snippetIds;
|
|
545
|
+
}
|
|
546
|
+
exports.getSnippetIdsFromMablscriptFlow = getSnippetIdsFromMablscriptFlow;
|
|
547
|
+
function getSnippetIdsFromFlows(flows, isMobileTest) {
|
|
548
|
+
return uniqueArray(flows.flatMap((flow) => isMobileTest
|
|
549
|
+
? getSnippetIdsFromJsonFlow(flow)
|
|
550
|
+
: getSnippetIdsFromMablscriptFlow(flow)));
|
|
551
|
+
}
|
|
552
|
+
exports.getSnippetIdsFromFlows = getSnippetIdsFromFlows;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenAppStep = void 0;
|
|
4
|
+
const MablStepV2_1 = require("../../MablStepV2");
|
|
5
|
+
class OpenAppStep extends MablStepV2_1.MablStepV2 {
|
|
6
|
+
constructor(descriptor) {
|
|
7
|
+
super(OpenAppStep.stepName, descriptor, 'OpenApp');
|
|
8
|
+
}
|
|
9
|
+
stepDescription() {
|
|
10
|
+
if (this.descriptor.packageName) {
|
|
11
|
+
return `Open app - ${this.descriptor.packageName}`;
|
|
12
|
+
}
|
|
13
|
+
return `Open primary app under test`;
|
|
14
|
+
}
|
|
15
|
+
static fromYaml(_stepName, stepDescriptor) {
|
|
16
|
+
return new OpenAppStep(stepDescriptor);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.OpenAppStep = OpenAppStep;
|
|
20
|
+
OpenAppStep.stepName = 'OpenApp';
|
|
21
|
+
OpenAppStep.yamlMablScriptNames = [OpenAppStep.stepName];
|
|
22
|
+
OpenAppStep.stepVersion = 2;
|
|
@@ -4,6 +4,7 @@ exports.AbstractAssertionsAndVariablesStep = void 0;
|
|
|
4
4
|
const domUtil_1 = require("../../domUtil");
|
|
5
5
|
const MablAction_1 = require("../MablAction");
|
|
6
6
|
const MablStep_1 = require("../MablStep");
|
|
7
|
+
const AssertStep_1 = require("./AssertStep");
|
|
7
8
|
class AbstractAssertionsAndVariablesStep extends MablStep_1.MablStep {
|
|
8
9
|
constructor(name, args, actions, mablScriptName, stepName, descriptor) {
|
|
9
10
|
super(name, args, actions, mablScriptName);
|
|
@@ -31,5 +32,14 @@ class AbstractAssertionsAndVariablesStep extends MablStep_1.MablStep {
|
|
|
31
32
|
var _a, _b;
|
|
32
33
|
return (_b = (_a = this.descriptor.variables) === null || _a === void 0 ? void 0 : _a.map((variable) => variable.name)) !== null && _b !== void 0 ? _b : [];
|
|
33
34
|
}
|
|
35
|
+
canContinueOnFailure() {
|
|
36
|
+
var _a, _b;
|
|
37
|
+
return (((_b = (_a = this.descriptor.options) === null || _a === void 0 ? void 0 : _a.onFailure) !== null && _b !== void 0 ? _b : AssertStep_1.OnFailure.FailImmediately) !==
|
|
38
|
+
AssertStep_1.OnFailure.FailImmediately);
|
|
39
|
+
}
|
|
40
|
+
canFailAtEnd() {
|
|
41
|
+
var _a;
|
|
42
|
+
return ((_a = this.descriptor.options) === null || _a === void 0 ? void 0 : _a.onFailure) === AssertStep_1.OnFailure.FailTestAtEnd;
|
|
43
|
+
}
|
|
34
44
|
}
|
|
35
45
|
exports.AbstractAssertionsAndVariablesStep = AbstractAssertionsAndVariablesStep;
|
|
@@ -52,9 +52,14 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
52
52
|
else {
|
|
53
53
|
this.conditionAction = actions[1];
|
|
54
54
|
}
|
|
55
|
-
this.
|
|
56
|
-
.
|
|
57
|
-
|
|
55
|
+
this.userPrompt = (0, ConditionDescriptor_1.isAIPromptCondition)(this.conditionAction.conditionDescriptor)
|
|
56
|
+
? this.conditionAction.conditionDescriptor.userPrompt
|
|
57
|
+
: undefined;
|
|
58
|
+
this.metaPrompt = (0, ConditionDescriptor_1.isAIPromptCondition)(this.conditionAction.conditionDescriptor)
|
|
59
|
+
? this.conditionAction.conditionDescriptor.metaPrompt
|
|
60
|
+
: undefined;
|
|
61
|
+
this.assertionType = (0, ConditionDescriptor_1.getAssertionConditionFieldFromDescriptor)(this.conditionAction.conditionDescriptor);
|
|
62
|
+
this.assertionValue = (0, ConditionDescriptor_1.getOptionalComparatorValue)(this.conditionAction.conditionDescriptor);
|
|
58
63
|
this.isWaitUntilStep = this.determineIfWaitUntilStep();
|
|
59
64
|
this.assertArguments =
|
|
60
65
|
args[0] && typeof args[0] === 'object'
|
|
@@ -135,6 +140,12 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
135
140
|
if (this.assertionValue !== undefined) {
|
|
136
141
|
formatted.assertionValue = this.assertionValue;
|
|
137
142
|
}
|
|
143
|
+
if (this.userPrompt !== undefined) {
|
|
144
|
+
formatted.userPrompt = this.userPrompt;
|
|
145
|
+
}
|
|
146
|
+
if (this.metaPrompt !== undefined) {
|
|
147
|
+
formatted.metaPrompt = this.metaPrompt;
|
|
148
|
+
}
|
|
138
149
|
const targetDescriptor = this.primaryAction.toDescriptor();
|
|
139
150
|
if ((0, GetVariableDescriptor_1.isGetVariableDescriptor)(targetDescriptor)) {
|
|
140
151
|
formatted.target = (0, GetVariableDescriptor_1.convertGetVariableDescriptorToYaml)(targetDescriptor);
|
|
@@ -142,8 +153,8 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
142
153
|
else {
|
|
143
154
|
formatted.target = targetDescriptor;
|
|
144
155
|
}
|
|
145
|
-
if (this.conditionAction.
|
|
146
|
-
formatted.conditionOptions = this.conditionAction.
|
|
156
|
+
if (this.conditionAction.hasOptionsAtInstantiation) {
|
|
157
|
+
formatted.conditionOptions = (0, ConditionDescriptor_1.getOptionalConditionOptions)(this.conditionAction.conditionDescriptor);
|
|
147
158
|
}
|
|
148
159
|
if (!!((_a = this.assertArguments) === null || _a === void 0 ? void 0 : _a.observationScope) ||
|
|
149
160
|
!!((_b = this.assertArguments) === null || _b === void 0 ? void 0 : _b.onFailure)) {
|
|
@@ -191,7 +202,13 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
191
202
|
throw new Error(`Error parsing [${stepName}] with incompatible step arguments`);
|
|
192
203
|
}
|
|
193
204
|
actions.push(primaryAction);
|
|
194
|
-
if (assertionType === '
|
|
205
|
+
if (assertionType === 'ai_prompt') {
|
|
206
|
+
actions.push(new ConditionAction_1.ConditionAction('evaluate_ai_prompt', [
|
|
207
|
+
stepArgs.userPrompt,
|
|
208
|
+
stepArgs.metaPrompt,
|
|
209
|
+
]));
|
|
210
|
+
}
|
|
211
|
+
else if (assertionType === 'present' || assertionType === 'not_present') {
|
|
195
212
|
actions.push(new ConditionAction_1.ConditionAction('evaluate_presence', [assertionType]));
|
|
196
213
|
}
|
|
197
214
|
else if (stepName === 'WaitUntil') {
|
|
@@ -241,6 +258,12 @@ class AssertStep extends MablStep_1.MablStep {
|
|
|
241
258
|
this.assertionType === 'not_present') {
|
|
242
259
|
return `${this.primaryAction.generateFindMablscript()}.evaluate_presence("${this.assertionType}")${assertAction}`;
|
|
243
260
|
}
|
|
261
|
+
if (this.assertionType === 'ai_prompt') {
|
|
262
|
+
if (this.metaPrompt === undefined) {
|
|
263
|
+
return `${this.primaryAction.generateFindMablscript()}.evaluate_ai_prompt("${this.userPrompt}")${assertAction}`;
|
|
264
|
+
}
|
|
265
|
+
return `${this.primaryAction.generateFindMablscript()}.evaluate_ai_prompt("${this.userPrompt}", "${this.metaPrompt}")${assertAction}`;
|
|
266
|
+
}
|
|
244
267
|
return `${this.primaryAction.toMablscript()}.${this.conditionAction.toMablscript()}${assertAction}`;
|
|
245
268
|
}
|
|
246
269
|
getInputVariables() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DatabaseQueryVariableSource = exports.DatabaseQueryStep = void 0;
|
|
3
|
+
exports.isDatabaseQueryStep = exports.DatabaseQueryVariableSource = exports.DatabaseQueryStep = void 0;
|
|
4
4
|
const AbstractAssertionsAndVariablesStep_1 = require("./AbstractAssertionsAndVariablesStep");
|
|
5
5
|
class DatabaseQueryStep extends AbstractAssertionsAndVariablesStep_1.AbstractAssertionsAndVariablesStep {
|
|
6
6
|
constructor(name, args, actions) {
|
|
@@ -22,3 +22,7 @@ var DatabaseQueryVariableSource;
|
|
|
22
22
|
DatabaseQueryVariableSource["Metadata"] = "metadata";
|
|
23
23
|
DatabaseQueryVariableSource["Result"] = "result";
|
|
24
24
|
})(DatabaseQueryVariableSource || (exports.DatabaseQueryVariableSource = DatabaseQueryVariableSource = {}));
|
|
25
|
+
function isDatabaseQueryStep(step) {
|
|
26
|
+
return step.getStepName() === DatabaseQueryStep.stepName;
|
|
27
|
+
}
|
|
28
|
+
exports.isDatabaseQueryStep = isDatabaseQueryStep;
|
|
@@ -7,7 +7,7 @@ const domUtil_1 = require("../../domUtil");
|
|
|
7
7
|
const ActionsUtils_1 = require("./ActionsUtils");
|
|
8
8
|
class EnterAuthCodeStep extends MablStep_1.MablStep {
|
|
9
9
|
constructor(name, args, actions) {
|
|
10
|
-
super(name, args, actions,
|
|
10
|
+
super(name, args, actions, EnterAuthCodeStep.stepName);
|
|
11
11
|
this.findAction = ActionsUtils_1.ActionsUtils.validateSingleFindAction(this.actions);
|
|
12
12
|
}
|
|
13
13
|
getStepName() {
|
|
@@ -42,7 +42,7 @@ class EnterAuthCodeStep extends MablStep_1.MablStep {
|
|
|
42
42
|
return step;
|
|
43
43
|
}
|
|
44
44
|
static fromYaml(_stepName, stepArgs) {
|
|
45
|
-
const step = new EnterAuthCodeStep(
|
|
45
|
+
const step = new EnterAuthCodeStep(EnterAuthCodeStep.stepName, [], [FindAction_1.FindAction.findActionFromStepArgs(stepArgs)]);
|
|
46
46
|
step.setStepId(stepArgs.id);
|
|
47
47
|
return step;
|
|
48
48
|
}
|
|
@@ -54,5 +54,6 @@ class EnterAuthCodeStep extends MablStep_1.MablStep {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
exports.EnterAuthCodeStep = EnterAuthCodeStep;
|
|
57
|
-
EnterAuthCodeStep.
|
|
57
|
+
EnterAuthCodeStep.stepName = 'enter_auth_code';
|
|
58
|
+
EnterAuthCodeStep.mablScriptStepNames = [EnterAuthCodeStep.stepName];
|
|
58
59
|
EnterAuthCodeStep.yamlMablScriptNames = ['EnterAuthCode'];
|
|
@@ -61,13 +61,12 @@ class IfConditionStep extends MablStep_1.MablStep {
|
|
|
61
61
|
};
|
|
62
62
|
if (this.conditionAction) {
|
|
63
63
|
details.condition =
|
|
64
|
-
ConditionDescriptor_1.AssertionConditionFieldToStepName[this.conditionAction.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
64
|
+
ConditionDescriptor_1.AssertionConditionFieldToStepName[(0, ConditionDescriptor_1.getAssertionConditionFieldFromDescriptor)(this.conditionAction.conditionDescriptor)];
|
|
65
|
+
details.conditionValue = (0, ConditionDescriptor_1.getOptionalComparatorValue)(this.conditionAction.conditionDescriptor);
|
|
66
|
+
const optionalConditionOptions = (0, ConditionDescriptor_1.getOptionalConditionOptions)(this.conditionAction.conditionDescriptor);
|
|
67
|
+
details.conditionOptions = this.conditionAction.hasOptionsAtInstantiation
|
|
68
|
+
? optionalConditionOptions
|
|
69
|
+
: undefined;
|
|
71
70
|
}
|
|
72
71
|
if (this.primaryAction instanceof GetVariableValue_1.GetVariableValue) {
|
|
73
72
|
details.variableName = this.substituteMablscriptVariable(this.primaryAction.variable);
|
|
@@ -5,7 +5,7 @@ const FindAction_1 = require("../actions/FindAction");
|
|
|
5
5
|
const MablStep_1 = require("../MablStep");
|
|
6
6
|
class OpenEmailStep extends MablStep_1.MablStep {
|
|
7
7
|
constructor(name, args, actions) {
|
|
8
|
-
super(name, args, actions,
|
|
8
|
+
super(name, args, actions, OpenEmailStep.stepName);
|
|
9
9
|
this.tabUuid = this.getActionArgs()[0] || {};
|
|
10
10
|
this.validate();
|
|
11
11
|
this.findAction = this.actions[0];
|
|
@@ -29,7 +29,7 @@ class OpenEmailStep extends MablStep_1.MablStep {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
static fromYaml(_stepName, stepArgs) {
|
|
32
|
-
const step = new OpenEmailStep(
|
|
32
|
+
const step = new OpenEmailStep(OpenEmailStep.stepName, [stepArgs.tab], [FindAction_1.FindAction.findActionFromStepArgs(stepArgs)]);
|
|
33
33
|
step.setStepId(stepArgs.id);
|
|
34
34
|
return step;
|
|
35
35
|
}
|
|
@@ -41,5 +41,6 @@ class OpenEmailStep extends MablStep_1.MablStep {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
exports.OpenEmailStep = OpenEmailStep;
|
|
44
|
-
OpenEmailStep.
|
|
44
|
+
OpenEmailStep.stepName = 'open_email';
|
|
45
|
+
OpenEmailStep.mablScriptStepNames = [OpenEmailStep.stepName];
|
|
45
46
|
OpenEmailStep.yamlMablScriptNames = ['OpenEmail'];
|
|
@@ -6,6 +6,7 @@ const MablStep_1 = require("../MablStep");
|
|
|
6
6
|
const MablAction_1 = require("../MablAction");
|
|
7
7
|
const domUtil_1 = require("../../domUtil");
|
|
8
8
|
const ActionsUtils_1 = require("./ActionsUtils");
|
|
9
|
+
const ReleaseStepDescriptor_1 = require("../types/ReleaseStepDescriptor");
|
|
9
10
|
class ReleaseStep extends MablStep_1.MablStep {
|
|
10
11
|
constructor(name, args, actions) {
|
|
11
12
|
var _a;
|
|
@@ -20,7 +21,7 @@ class ReleaseStep extends MablStep_1.MablStep {
|
|
|
20
21
|
if (args.length !== 1) {
|
|
21
22
|
throw new Error(`Unexpected number of arguments to ${this.getStepName()} step.`);
|
|
22
23
|
}
|
|
23
|
-
if (!isReleaseArgs(args[0])) {
|
|
24
|
+
if (!(0, ReleaseStepDescriptor_1.isReleaseArgs)(args[0])) {
|
|
24
25
|
throw new Error(`Invalid argument passed to ${this.getStepName()} step.`);
|
|
25
26
|
}
|
|
26
27
|
return args[0];
|
|
@@ -37,9 +38,9 @@ class ReleaseStep extends MablStep_1.MablStep {
|
|
|
37
38
|
case domUtil_1.FindType.FIND_ONE:
|
|
38
39
|
return {
|
|
39
40
|
find,
|
|
40
|
-
isHtml5: this.releaseArgs.isHtml5,
|
|
41
41
|
descriptorToActionMap: new Map().set(find, this.findAction),
|
|
42
42
|
actionCode: this.actionCode,
|
|
43
|
+
releaseArgs: this.releaseArgs,
|
|
43
44
|
};
|
|
44
45
|
default:
|
|
45
46
|
throw new Error(`Error generating step descriptor for ${this.getStepName()}: Unexpected find type ${find.findType}`);
|
|
@@ -73,6 +74,3 @@ class ReleaseStep extends MablStep_1.MablStep {
|
|
|
73
74
|
exports.ReleaseStep = ReleaseStep;
|
|
74
75
|
ReleaseStep.mablScriptStepNames = ['release'];
|
|
75
76
|
ReleaseStep.yamlMablScriptNames = ['Release'];
|
|
76
|
-
function isReleaseArgs(value) {
|
|
77
|
-
return value.isHtml5 !== undefined;
|
|
78
|
-
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AssertionConditionFieldToStepName = exports.AssertionConditionFieldToCondition = exports.AssertionStepNameToField = exports.PresenceEvaluationType = exports.isAbsenceExpected = exports.isPresenceCondition = exports.ComparisonType = exports.ConditionType = void 0;
|
|
3
|
+
exports.AssertionConditionFieldToStepName = exports.AssertionConditionFieldToCondition = exports.AssertionStepNameToField = exports.getAssertionConditionFieldFromDescriptor = exports.PresenceEvaluationType = exports.isAbsenceExpected = exports.isAIPromptCondition = exports.isPresenceCondition = exports.getOptionalConditionOptions = exports.getOptionalComparatorValue = exports.getOptionalComparisonType = exports.ComparisonType = exports.ConditionType = void 0;
|
|
4
4
|
var ConditionType;
|
|
5
5
|
(function (ConditionType) {
|
|
6
|
+
ConditionType["AIPrompt"] = "ai_prompt";
|
|
6
7
|
ConditionType["Comparison"] = "comparison";
|
|
7
8
|
ConditionType["Presence"] = "presence";
|
|
8
9
|
ConditionType["Truthy"] = "truthy";
|
|
@@ -32,10 +33,45 @@ var ComparisonType;
|
|
|
32
33
|
}
|
|
33
34
|
ComparisonType.fromString = fromString;
|
|
34
35
|
})(ComparisonType || (exports.ComparisonType = ComparisonType = {}));
|
|
36
|
+
function getOptionalComparisonType(descriptor) {
|
|
37
|
+
if (descriptor === undefined) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
if (descriptor.conditionType === ConditionType.Comparison) {
|
|
41
|
+
return descriptor.comparisonType;
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
exports.getOptionalComparisonType = getOptionalComparisonType;
|
|
46
|
+
function getOptionalComparatorValue(descriptor) {
|
|
47
|
+
if (descriptor === undefined) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
if (descriptor.conditionType === ConditionType.Comparison) {
|
|
51
|
+
return descriptor.comparatorValue.toString();
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
exports.getOptionalComparatorValue = getOptionalComparatorValue;
|
|
56
|
+
function getOptionalConditionOptions(descriptor) {
|
|
57
|
+
if (descriptor === undefined ||
|
|
58
|
+
descriptor.conditionType !== ConditionType.Comparison) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
if (descriptor.caseInsensitive !== undefined) {
|
|
62
|
+
return { caseInsensitive: descriptor.caseInsensitive };
|
|
63
|
+
}
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
exports.getOptionalConditionOptions = getOptionalConditionOptions;
|
|
35
67
|
function isPresenceCondition(value) {
|
|
36
68
|
return value.conditionType === ConditionType.Presence;
|
|
37
69
|
}
|
|
38
70
|
exports.isPresenceCondition = isPresenceCondition;
|
|
71
|
+
function isAIPromptCondition(value) {
|
|
72
|
+
return value.conditionType === ConditionType.AIPrompt;
|
|
73
|
+
}
|
|
74
|
+
exports.isAIPromptCondition = isAIPromptCondition;
|
|
39
75
|
function isAbsenceExpected(value) {
|
|
40
76
|
return (isPresenceCondition(value) &&
|
|
41
77
|
value.presenceType === PresenceEvaluationType.NOT_PRESENT);
|
|
@@ -56,6 +92,22 @@ var PresenceEvaluationType;
|
|
|
56
92
|
}
|
|
57
93
|
PresenceEvaluationType.fromString = fromString;
|
|
58
94
|
})(PresenceEvaluationType || (exports.PresenceEvaluationType = PresenceEvaluationType = {}));
|
|
95
|
+
function getAssertionConditionFieldFromDescriptor(conditionDescriptor) {
|
|
96
|
+
if (conditionDescriptor === undefined) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
if (conditionDescriptor.conditionType === ConditionType.Comparison) {
|
|
100
|
+
return conditionDescriptor.comparisonType;
|
|
101
|
+
}
|
|
102
|
+
if (conditionDescriptor.conditionType === ConditionType.Presence) {
|
|
103
|
+
return conditionDescriptor.presenceType;
|
|
104
|
+
}
|
|
105
|
+
if (conditionDescriptor.conditionType === ConditionType.AIPrompt) {
|
|
106
|
+
return 'ai_prompt';
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
exports.getAssertionConditionFieldFromDescriptor = getAssertionConditionFieldFromDescriptor;
|
|
59
111
|
exports.AssertionStepNameToField = {
|
|
60
112
|
AssertEquals: 'equals',
|
|
61
113
|
AssertPresent: 'present',
|
|
@@ -71,6 +123,7 @@ exports.AssertionStepNameToField = {
|
|
|
71
123
|
AssertLessThan: 'less_than',
|
|
72
124
|
AssertGreaterThanOrEquals: 'greater_than_or_equals',
|
|
73
125
|
AssertLessThanOrEquals: 'less_than_or_equals',
|
|
126
|
+
AssertAIPrompt: 'ai_prompt',
|
|
74
127
|
};
|
|
75
128
|
exports.AssertionConditionFieldToCondition = Object.fromEntries(Object.entries(exports.AssertionStepNameToField).map(([stepType, field]) => [
|
|
76
129
|
field,
|
|
@@ -7,6 +7,7 @@ var ExtractType;
|
|
|
7
7
|
ExtractType["EXTRACT_CSS_PROPERTIES"] = "extract_css_properties";
|
|
8
8
|
ExtractType["EXTRACT_EMAIL_ATTRIBUTE"] = "extract_email_attribute";
|
|
9
9
|
ExtractType["EXTRACT_INNER_TEXT"] = "extract_inner_text";
|
|
10
|
+
ExtractType["EXTRACT_PROMPT"] = "extract_prompt";
|
|
10
11
|
})(ExtractType || (exports.ExtractType = ExtractType = {}));
|
|
11
12
|
(function (ExtractType) {
|
|
12
13
|
function fromString(value) {
|
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isReleaseArgs = void 0;
|
|
4
|
+
function isReleaseArgs(value) {
|
|
5
|
+
return (value === null || value === void 0 ? void 0 : value.isHtml5) !== undefined;
|
|
6
|
+
}
|
|
7
|
+
exports.isReleaseArgs = isReleaseArgs;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mablhq/mabl-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.31.32",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
5
5
|
"description": "The official mabl command line interface tool",
|
|
6
6
|
"main": "index.js",
|
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
"@aws-crypto/crc32c": "5.1.0",
|
|
24
24
|
"@google-cloud/storage": "7.9.0",
|
|
25
25
|
"@mablhq/newman-reporter-mabl-console": "0.1.0",
|
|
26
|
+
"@plist/common": "1.1.0",
|
|
27
|
+
"@plist/parse": "1.1.0",
|
|
26
28
|
"@types/adm-zip": "0.5.5",
|
|
27
29
|
"@types/estree": "1.0.5",
|
|
28
30
|
"@types/lodash": "4.14.202",
|
|
@@ -36,7 +38,6 @@
|
|
|
36
38
|
"axe-core": "4.8.3",
|
|
37
39
|
"axios": "0.27.2",
|
|
38
40
|
"axios-cookiejar-support": "1.0.1",
|
|
39
|
-
"bplist-parser": "0.3.2",
|
|
40
41
|
"cachedir": "2.4.0",
|
|
41
42
|
"cd": "0.3.3",
|
|
42
43
|
"chalk": "2.4.2",
|
|
@@ -46,7 +47,6 @@
|
|
|
46
47
|
"conf": "10.2.0",
|
|
47
48
|
"csv-parser": "3.0.0",
|
|
48
49
|
"csv-stringify": "6.2.3",
|
|
49
|
-
"decompress-zip": "0.2.2",
|
|
50
50
|
"encodeurl": "1.0.2",
|
|
51
51
|
"env-paths": "2.2.0",
|
|
52
52
|
"escodegen": "2.0.0",
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
"newman": "6.0.0",
|
|
77
77
|
"open": "6.4.0",
|
|
78
78
|
"ora": "4.0.4",
|
|
79
|
-
"playwright": "1.
|
|
80
|
-
"playwright-core": "1.
|
|
79
|
+
"playwright": "1.44.0",
|
|
80
|
+
"playwright-core": "1.44.0",
|
|
81
81
|
"pluralize": "8.0.0",
|
|
82
82
|
"pngjs": "6.0.0",
|
|
83
83
|
"portfinder": "1.0.28",
|