@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.
Files changed (32) hide show
  1. package/api/featureSet.js +5 -1
  2. package/api/mablApiClient.js +18 -0
  3. package/browserLauncher/playwrightBrowserLauncher/playwrightPage.js +2 -2
  4. package/commands/app-files/app-files_cmds/create.js +1 -1
  5. package/commands/config/config_cmds/install.js +1 -1
  6. package/commands/tests/testsUtil.js +9 -1
  7. package/commands/tests/tests_cmds/import_cmds/import_playwright.js +2 -3
  8. package/commands/tests/tests_cmds/import_cmds/import_selenium.js +1 -1
  9. package/env/defaultEnv.js +1 -2
  10. package/env/dev.js +1 -2
  11. package/env/env.js +1 -3
  12. package/env/local.js +1 -2
  13. package/env/prod.js +1 -2
  14. package/execution/index.js +2 -2
  15. package/mablApi/index.js +1 -1
  16. package/mablscript/actions/ConditionAction.js +59 -26
  17. package/mablscript/importer.js +55 -27
  18. package/mablscript/mobile/steps/OpenAppStep.js +22 -0
  19. package/mablscript/steps/AbstractAssertionsAndVariablesStep.js +10 -0
  20. package/mablscript/steps/AssertStep.js +29 -6
  21. package/mablscript/steps/DatabaseQueryStep.js +5 -1
  22. package/mablscript/steps/EnterAuthCodeStep.js +4 -3
  23. package/mablscript/steps/IfConditionStep.js +6 -7
  24. package/mablscript/steps/OpenEmailStep.js +4 -3
  25. package/mablscript/steps/ReleaseStep.js +3 -5
  26. package/mablscript/types/ConditionDescriptor.js +54 -1
  27. package/mablscript/types/ExtractDescriptor.js +1 -0
  28. package/mablscript/types/ReleaseStepDescriptor.js +5 -0
  29. package/mablscript/types/mobile/OpenAppStepDescriptor.js +2 -0
  30. package/package.json +5 -5
  31. package/upload/index.js +1 -1
  32. 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.conditionAttribute = '';
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
- var _a;
34
- if (this.conditionValueAttribute === undefined) {
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(this.conditionAttribute),
40
- comparatorValue: (0, MablAction_1.parseArgument)(this.conditionValueAttribute),
41
- caseInsensitive: (_a = this.options) === null || _a === void 0 ? void 0 : _a.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
- if (!this.conditionAttribute) {
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(this.conditionAttribute),
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 (this.conditionValueAttribute !== undefined) {
56
- if (!(0, MablAction_1.argumentIsMablVariable)(this.conditionValueAttribute)) {
57
- value = `, "${(0, domUtil_1.escapeMablscriptString)(this.conditionValueAttribute)}"`;
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(this.conditionValueAttribute)}`;
89
+ value = `, ${this.subVariable(comparatorValue)}`;
61
90
  }
62
91
  }
63
- const conditionOptionsString = this.options !== undefined
64
- ? `, ${(0, MablAction_1.convertObjectToMablscriptArgs)(this.options)}`
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.conditionAttribute}"${value}${conditionOptionsString})`;
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.conditionValueAttribute) !== null && _a !== void 0 ? _a : '');
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 = ['evaluate_condition', 'evaluate_presence'];
106
+ ConditionAction.mablScriptStepNames = [
107
+ 'evaluate_condition',
108
+ 'evaluate_presence',
109
+ 'evaluate_ai_prompt',
110
+ ];
78
111
  ConditionAction.yamlMablScriptNames = ['ConditionAction'];
@@ -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 getSnippetIdsFromJsonFlow(flow) {
494
- const steps = interpretStepsFromObjects(flow.json_steps.steps, true);
495
- const snippetIds = [];
496
- steps.forEach((step) => {
497
- let jsDescriptor;
498
- if ((0, EvaluateJavaScriptStep_1.isEvaluateJavaScriptStep)(step)) {
499
- jsDescriptor = step.evaluateJsAction.javaScript;
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
- else if ((0, CreateVariableMobileStep_1.isCreateVariableMobileStep)(step)) {
513
- if ((0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.descriptor.generator)) {
514
- jsDescriptor = step.descriptor.generator.javaScript;
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
- if ((jsDescriptor && (0, SnippetsDescriptor_1.isReusableSnippetDescriptor)(jsDescriptor)) ||
518
- (0, SnippetsDescriptor_1.isLegacyReusableSnippetDescriptor)(jsDescriptor)) {
519
- snippetIds.push(jsDescriptor.snippetInvariantId);
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.assertionType = this.conditionAction
56
- .conditionAttribute;
57
- this.assertionValue = this.conditionAction.conditionValueAttribute;
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.options) {
146
- formatted.conditionOptions = this.conditionAction.options;
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 === 'present' || assertionType === 'not_present') {
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, 'enter_auth_code');
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('enter_auth_code', [], [FindAction_1.FindAction.findActionFromStepArgs(stepArgs)]);
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.mablScriptStepNames = ['enter_auth_code'];
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.conditionAttribute];
65
- if (this.conditionAction.conditionValueAttribute !== undefined) {
66
- details.conditionValue = this.conditionAction.conditionValueAttribute;
67
- }
68
- if (this.conditionAction.options !== undefined) {
69
- details.conditionOptions = this.conditionAction.options;
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, 'open_email');
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('open_email', [stepArgs.tab], [FindAction_1.FindAction.findActionFromStepArgs(stepArgs)]);
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.mablScriptStepNames = ['open_email'];
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;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mablhq/mabl-cli",
3
- "version": "2.30.0",
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.43.0",
80
- "playwright-core": "1.43.0",
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",