@mablhq/mabl-cli 2.72.4 → 2.72.12

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 (70) hide show
  1. package/browserEngines/chromiumBrowserEngine.js +17 -0
  2. package/browserLauncher/index.js +3 -3
  3. package/commands/mcp/mcp_cmds/tools/createTest.js +10 -0
  4. package/commands/mcp/mcp_cmds/tools/getApplications.js +69 -0
  5. package/commands/mcp/mcp_cmds/tools/{getPlanResults.js → getLatestPlanRuns.js} +6 -6
  6. package/commands/mcp/mcp_cmds/tools/{getPlanRun.js → getPlanRunResult.js} +5 -5
  7. package/commands/mcp/mcp_cmds/tools/index.js +6 -4
  8. package/core/execution/ApiTestUtils.js +3 -1
  9. package/execution/index.js +1 -1
  10. package/http/requestInterceptor.js +10 -5
  11. package/index.d.ts +2 -0
  12. package/mablscript/MablStepV2.js +40 -10
  13. package/mablscript/MablStepWithFindAction.js +126 -2
  14. package/mablscript/actions/AwaitDownloadAction.js +4 -3
  15. package/mablscript/actions/AwaitPDFDownloadAction.js +6 -5
  16. package/mablscript/actions/ConditionAction.js +2 -1
  17. package/mablscript/actions/ExtractAction.js +8 -13
  18. package/mablscript/actions/FindAction.js +20 -0
  19. package/mablscript/actions/GetVariableValue.js +15 -4
  20. package/mablscript/actions/JavaScriptAction.js +25 -39
  21. package/mablscript/diffing/diffingUtil.js +5 -5
  22. package/mablscript/importer.js +79 -59
  23. package/mablscript/mobile/steps/CreateVariableMobileStep.js +3 -1
  24. package/mablscript/steps/AbstractAssertionsAndVariablesStep.js +10 -8
  25. package/mablscript/steps/AccessibilityCheck.js +78 -36
  26. package/mablscript/steps/AssertStep.js +267 -86
  27. package/mablscript/steps/AssertStepOld.js +69 -139
  28. package/mablscript/steps/AwaitTabStep.js +32 -9
  29. package/mablscript/steps/AwaitUploadsStep.js +24 -8
  30. package/mablscript/steps/ClearCookiesStep.js +24 -8
  31. package/mablscript/steps/ClickAndHoldStep.js +47 -47
  32. package/mablscript/steps/ClickStep.js +38 -33
  33. package/mablscript/steps/CreateVariableStep.js +169 -137
  34. package/mablscript/steps/DatabaseQueryStep.js +16 -4
  35. package/mablscript/steps/DoubleClickStep.js +39 -40
  36. package/mablscript/steps/DownloadStep.js +81 -63
  37. package/mablscript/steps/EchoStep.js +28 -8
  38. package/mablscript/steps/ElseIfConditionStep.js +25 -12
  39. package/mablscript/steps/ElseStep.js +24 -9
  40. package/mablscript/steps/EndStep.js +24 -9
  41. package/mablscript/steps/EnterAuthCodeStep.js +38 -34
  42. package/mablscript/steps/EnterTextStep.js +53 -64
  43. package/mablscript/steps/EvaluateFlowStep.js +41 -18
  44. package/mablscript/steps/EvaluateJavaScriptStep.js +19 -19
  45. package/mablscript/steps/HoverStep.js +39 -39
  46. package/mablscript/steps/IfConditionStep.js +141 -99
  47. package/mablscript/steps/NavigateStep.js +31 -9
  48. package/mablscript/steps/OpenEmailStep.js +41 -21
  49. package/mablscript/steps/ReleaseStep.js +48 -38
  50. package/mablscript/steps/RemoveCookieStep.js +27 -9
  51. package/mablscript/steps/RightClickStep.js +38 -33
  52. package/mablscript/steps/SelectStep.js +71 -46
  53. package/mablscript/steps/SendHttpRequestStep.js +11 -4
  54. package/mablscript/steps/SendKeyStep.js +175 -49
  55. package/mablscript/steps/SetCookieStep.js +58 -23
  56. package/mablscript/steps/SetFilesStep.js +44 -43
  57. package/mablscript/steps/SetViewportStep.js +40 -12
  58. package/mablscript/steps/StepGroupStep.js +70 -0
  59. package/mablscript/steps/SwitchContextStep.js +93 -83
  60. package/mablscript/steps/SyntheticStep.js +1 -1
  61. package/mablscript/steps/VisitUrlStep.js +31 -21
  62. package/mablscript/steps/WaitStep.js +21 -8
  63. package/mablscript/steps/WaitUntilStep.js +32 -13
  64. package/mablscript/types/AssertStepDescriptor.js +2 -0
  65. package/mablscript/types/ConditionDescriptor.js +5 -5
  66. package/mablscript/types/GetVariableDescriptor.js +0 -8
  67. package/mablscript/types/StepGroupStepDescriptor.js +2 -0
  68. package/package.json +4 -4
  69. package/proxy/index.js +1 -1
  70. package/upload/index.js +1 -1
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AssertStep = exports.assertStepYamlMablscriptNames = exports.MAX_AI_ASSERTIONS_PER_CLOUD_RUN = exports.OnFailure = void 0;
4
+ exports.buildAssertStepDescriptor = buildAssertStepDescriptor;
4
5
  const ConditionAction_1 = require("../actions/ConditionAction");
5
6
  const FindAction_1 = require("../actions/FindAction");
6
- const MablStep_1 = require("../MablStep");
7
7
  const MablAction_1 = require("../MablAction");
8
8
  const ExtractAction_1 = require("../actions/ExtractAction");
9
9
  const domUtil_1 = require("../../domUtil");
@@ -16,6 +16,9 @@ const CountAction_1 = require("../actions/CountAction");
16
16
  const MobileFindAction_1 = require("../mobile/steps/actions/MobileFindAction");
17
17
  const GetViewportDescriptor_1 = require("../types/GetViewportDescriptor");
18
18
  const GetViewportAction_1 = require("../actions/GetViewportAction");
19
+ const MablStepV2_1 = require("../MablStepV2");
20
+ const MablStepWithFindAction_1 = require("../MablStepWithFindAction");
21
+ const AssertStepOld_1 = require("./AssertStepOld");
19
22
  var OnFailure;
20
23
  (function (OnFailure) {
21
24
  OnFailure["ContinueWithWarning"] = "continue";
@@ -29,9 +32,11 @@ const assertStepYamlMablscriptNames = () => {
29
32
  return assertionNames;
30
33
  };
31
34
  exports.assertStepYamlMablscriptNames = assertStepYamlMablscriptNames;
32
- class AssertStep extends MablStep_1.MablStep {
33
- constructor(name, args, actions) {
34
- super(name, args, actions, 'assert');
35
+ class AssertStep extends MablStepV2_1.MablStepV2 {
36
+ constructor(name, args, actions, descriptor) {
37
+ const stepDescriptor = descriptor ?? buildAssertStepDescriptor(name, args, actions);
38
+ super(name, stepDescriptor, AssertStep.actionCode);
39
+ this.actions = actions;
35
40
  const firstAction = actions[0];
36
41
  if (firstAction instanceof FindAction_1.FindAction ||
37
42
  firstAction instanceof MobileFindAction_1.MobileFindAction ||
@@ -72,14 +77,13 @@ class AssertStep extends MablStep_1.MablStep {
72
77
  this.assertionType = (0, ConditionDescriptor_1.getAssertionConditionFieldFromDescriptor)(this.conditionAction.conditionDescriptor);
73
78
  this.assertionValue = (0, ConditionDescriptor_1.getOptionalComparatorValue)(this.conditionAction.conditionDescriptor);
74
79
  this.isWaitUntilStep = this.determineIfWaitUntilStep();
75
- this.assertArguments =
76
- args[0] && typeof args[0] === 'object'
77
- ? args[0]
78
- : undefined;
79
80
  this.onFailure =
80
- this.assertArguments?.onFailure ||
81
- OnFailure.FailImmediately;
82
- this.observationScope = this.assertArguments?.observationScope;
81
+ 'onFailure' in stepDescriptor && stepDescriptor.onFailure
82
+ ? stepDescriptor.onFailure
83
+ : OnFailure.FailImmediately;
84
+ if ('observationScope' in stepDescriptor) {
85
+ this.observationScope = stepDescriptor.observationScope;
86
+ }
83
87
  }
84
88
  canContinueOnFailure() {
85
89
  return this.onFailure !== OnFailure.FailImmediately;
@@ -112,77 +116,47 @@ class AssertStep extends MablStep_1.MablStep {
112
116
  return ConditionDescriptor_1.AssertionConditionFieldToStepName[this.assertionType];
113
117
  }
114
118
  toStepDescriptor() {
115
- const find = this.primaryAction.toDescriptor();
119
+ const target = this.primaryAction.toDescriptor();
116
120
  const descriptorToActionMap = new Map()
117
- .set(find, this.primaryAction)
121
+ .set(target, this.primaryAction)
118
122
  .set(this.conditionAction.conditionDescriptor, this.conditionAction);
119
- if (this.extractAction) {
120
- descriptorToActionMap.set(this.extractAction.extractDescriptor, this.extractAction);
123
+ const extractDescriptor = this.extractAction?.toDescriptor();
124
+ if (this.extractAction && extractDescriptor) {
125
+ descriptorToActionMap.set(extractDescriptor, this.extractAction);
121
126
  }
122
127
  if (this.countAction) {
123
128
  descriptorToActionMap.set(this.countAction.countDescriptor, this.countAction);
124
129
  }
125
130
  return {
126
- find,
127
- extractDescriptor: this.extractAction?.extractDescriptor,
128
- conditionDescriptor: this.conditionAction.conditionDescriptor,
129
- countDescriptor: this.countAction?.countDescriptor,
131
+ target,
132
+ extract: extractDescriptor,
133
+ condition: this.conditionAction.conditionDescriptor,
134
+ count: this.countAction?.countDescriptor,
130
135
  onFailure: this.onFailure,
131
136
  observationScope: this.observationScope,
132
137
  descriptorToActionMap,
133
138
  actionCode: this.actionCode,
134
139
  };
135
140
  }
136
- getFormattedStep(_fullLocatorsOn) {
137
- const result = {};
138
- result[this.getStepName()] = { ...this.annotationsAsYml() };
139
- const formatted = result[this.getStepName()];
140
- if (this.extractAction) {
141
- formatted.attribute = this.extractAction.extractionAttribute;
142
- formatted.extractType =
143
- ExtractAction_1.ExtractAction.mablscriptToYamlType[this.extractAction.extractionType];
144
- }
145
- if (this.countAction) {
146
- formatted.attribute = 'count';
147
- }
148
- if (this.assertionValue !== undefined) {
149
- formatted.assertionValue = this.assertionValue;
150
- }
151
- if (this.aiPrompt !== undefined) {
152
- formatted.aiPrompt = this.aiPrompt;
153
- }
154
- const targetDescriptor = this.primaryAction.toDescriptor();
155
- if ((0, GetVariableDescriptor_1.isGetVariableDescriptor)(targetDescriptor)) {
156
- formatted.target = (0, GetVariableDescriptor_1.convertGetVariableDescriptorToYaml)(targetDescriptor);
157
- }
158
- else {
159
- formatted.target = targetDescriptor;
160
- }
161
- if (this.conditionAction.hasOptionsAtInstantiation) {
162
- formatted.conditionOptions = (0, ConditionDescriptor_1.getOptionalConditionOptions)(this.conditionAction.conditionDescriptor);
163
- }
164
- if (!!this.assertArguments?.observationScope ||
165
- !!this.assertArguments?.onFailure) {
166
- formatted.assertArguments = this.assertArguments;
167
- }
168
- result[this.getStepName()] =
169
- MablStep_1.MablStep.cloneAndRemoveUndefinedEntriesFromObject(formatted);
170
- if (this.stepId()) {
171
- result[this.getStepName()].id = this.stepId();
172
- }
173
- return result;
174
- }
175
141
  static fromYaml(stepName, stepArgs) {
176
142
  const actions = [];
177
143
  const assertionType = ConditionDescriptor_1.AssertionStepNameToField[stepName];
178
- const assertionValue = stepArgs.assertionValue;
179
- const conditionOptions = stepArgs.conditionOptions;
144
+ const assertionValue = stepArgs.assertionValue ??
145
+ stepArgs.conditionDescriptor?.comparatorValue ??
146
+ stepArgs.condition?.comparatorValue;
147
+ const conditionOptions = stepArgs.conditionOptions
148
+ ?.caseInsensitive
149
+ ? { caseInsensitive: stepArgs.conditionOptions.caseInsensitive }
150
+ : {
151
+ caseInsensitive: stepArgs.conditionDescriptor?.caseInsensitive ??
152
+ stepArgs.condition?.caseInsensitive,
153
+ };
180
154
  let primaryAction;
181
155
  if (stepArgs.target?.kind === GetCurrentLocationDescriptor_1.GET_CURRENT_LOCATION_KIND) {
182
156
  primaryAction = new GetUrlAction_1.GetUrlAction(GetUrlAction_1.GetUrlAction.mablScriptStepNames[0], []);
183
157
  }
184
- else if (stepArgs.target?.kind === GetVariableDescriptor_1.GET_VARIABLE_VALUE) {
185
- primaryAction = new GetVariableValue_1.GetVariableValue(GetVariableValue_1.GetVariableValue.mablScriptStepNames[0], [stepArgs.target?.variable]);
158
+ else if ((0, GetVariableDescriptor_1.isGetVariableDescriptor)(stepArgs.target)) {
159
+ primaryAction = GetVariableValue_1.GetVariableValue.buildAction(stepArgs.target.variable);
186
160
  }
187
161
  else if ((0, GetViewportDescriptor_1.isGetViewportDescriptor)(stepArgs.target)) {
188
162
  primaryAction = new GetViewportAction_1.GetViewportAction();
@@ -199,7 +173,10 @@ class AssertStep extends MablStep_1.MablStep {
199
173
  else if ((0, domUtil_1.isFindElementDescriptor)(stepArgs.target)) {
200
174
  const { findOptions, findTarget, findType } = stepArgs.target;
201
175
  if (findType === domUtil_1.FindType.FIND_ONE) {
202
- primaryAction = new FindAction_1.FindAction(findType, [findTarget, findOptions]);
176
+ const findArgument = findTarget.shadowParents
177
+ ? findTarget
178
+ : findTarget.selector;
179
+ primaryAction = new FindAction_1.FindAction(findType, [findArgument, findOptions]);
203
180
  }
204
181
  else {
205
182
  primaryAction = new FindAction_1.FindAction(findType, [findTarget, findOptions]);
@@ -209,41 +186,107 @@ class AssertStep extends MablStep_1.MablStep {
209
186
  throw new Error(`Error parsing [${stepName}] with incompatible step arguments`);
210
187
  }
211
188
  actions.push(primaryAction);
189
+ let extractAction;
190
+ let countAction;
191
+ let conditionAction;
212
192
  if (assertionType === 'ai_prompt') {
213
- actions.push(new ConditionAction_1.ConditionAction('evaluate_ai_prompt', [
214
- stepArgs.aiPrompt?.userPrompt ?? stepArgs.userPrompt,
215
- {
216
- metaPrompt: stepArgs.aiPrompt?.metaPrompt ?? stepArgs.metaPrompt,
217
- criteria: stepArgs.aiPrompt?.criteria,
218
- },
219
- ]));
193
+ const userPrompt = stepArgs.aiPrompt?.userPrompt ??
194
+ stepArgs.userPrompt ??
195
+ stepArgs.conditionDescriptor?.userPrompt ??
196
+ stepArgs.condition?.userPrompt;
197
+ const conditionArgs = [userPrompt];
198
+ const metaPrompt = stepArgs.aiPrompt?.metaPrompt ??
199
+ stepArgs.metaPrompt ??
200
+ stepArgs.conditionDescriptor?.metaPrompt ??
201
+ stepArgs.condition?.metaPrompt;
202
+ const criteria = stepArgs.aiPrompt?.criteria ??
203
+ stepArgs.conditionDescriptor?.criteria ??
204
+ stepArgs.condition?.criteria;
205
+ if (metaPrompt || criteria) {
206
+ conditionArgs.push({
207
+ metaPrompt,
208
+ criteria,
209
+ });
210
+ }
211
+ conditionAction = new ConditionAction_1.ConditionAction('evaluate_ai_prompt', conditionArgs);
212
+ actions.push(conditionAction);
220
213
  }
221
214
  else if (assertionType === 'present' || assertionType === 'not_present') {
222
- actions.push(new ConditionAction_1.ConditionAction('evaluate_presence', [assertionType]));
215
+ conditionAction = new ConditionAction_1.ConditionAction('evaluate_presence', [
216
+ assertionType,
217
+ ]);
218
+ actions.push(conditionAction);
223
219
  }
224
220
  else if (stepName === 'WaitUntil') {
225
- actions.push(new ConditionAction_1.ConditionAction('evaluate_presence', ['present']));
221
+ conditionAction = new ConditionAction_1.ConditionAction('evaluate_presence', ['present']);
222
+ actions.push(conditionAction);
226
223
  }
227
224
  else {
228
- if (stepArgs.attribute === 'count') {
229
- actions.push(new CountAction_1.CountAction('count', [stepArgs.attribute]));
225
+ const isCountAssertion = stepArgs.attribute === 'count' ||
226
+ stepArgs.countDescriptor?.count ||
227
+ stepArgs.count?.count;
228
+ const attributeName = stepArgs.attribute ??
229
+ stepArgs.extractDescriptor?.attributeName ??
230
+ stepArgs.extract?.attributeName;
231
+ if (isCountAssertion) {
232
+ countAction = new CountAction_1.CountAction('count', ['count']);
233
+ actions.push(countAction);
230
234
  }
231
- else if (stepArgs.target?.kind !== GetVariableDescriptor_1.GET_VARIABLE_VALUE) {
232
- actions.push(new ExtractAction_1.ExtractAction(ExtractAction_1.ExtractAction.mablScriptTypeFromYamlType(stepArgs.extractType), [stepArgs.attribute]));
235
+ else if (stepArgs.target?.kind !== GetVariableDescriptor_1.GET_VARIABLE_VALUE &&
236
+ attributeName) {
237
+ const extractType = stepArgs.extractType ??
238
+ stepArgs.extractDescriptor?.extractType ??
239
+ stepArgs.extract?.extractType;
240
+ const extractArgs = [attributeName];
241
+ if (extractType === 'extract_css_properties') {
242
+ extractArgs.push({ extraction_type: 'css' });
243
+ }
244
+ extractAction = new ExtractAction_1.ExtractAction(ExtractAction_1.ExtractAction.mablScriptTypeFromYamlType(extractType), extractArgs);
245
+ actions.push(extractAction);
233
246
  }
234
- actions.push(new ConditionAction_1.ConditionAction('evaluate_condition', [
247
+ conditionAction = new ConditionAction_1.ConditionAction('evaluate_condition', [
235
248
  assertionType,
236
249
  assertionValue,
237
250
  conditionOptions,
238
- ]));
251
+ ]);
252
+ actions.push(conditionAction);
239
253
  }
240
- const assertStep = new AssertStep('assert', [stepArgs.assertArguments], actions);
254
+ const target = primaryAction.toDescriptor();
255
+ const onFailure = stepArgs.onFailure ?? stepArgs.assertArguments?.onFailure;
256
+ const observationScope = stepArgs.observationScope ?? stepArgs.assertArguments?.observationScope;
257
+ const descriptorToActionMap = new Map()
258
+ .set(target, primaryAction)
259
+ .set(conditionAction.conditionDescriptor, conditionAction);
260
+ if (extractAction) {
261
+ descriptorToActionMap.set(extractAction.toDescriptor(), extractAction);
262
+ }
263
+ if (countAction) {
264
+ descriptorToActionMap.set(countAction.countDescriptor, countAction);
265
+ }
266
+ const stepDescriptor = {
267
+ target,
268
+ extract: extractAction?.toDescriptor(),
269
+ condition: conditionAction.conditionDescriptor,
270
+ count: countAction?.countDescriptor,
271
+ onFailure,
272
+ observationScope,
273
+ descriptorToActionMap,
274
+ actionCode: AssertStep.actionCode,
275
+ description: stepArgs.description,
276
+ disabled: stepArgs.disabled,
277
+ };
278
+ const assertStep = new AssertStep('assert', [], actions, stepDescriptor);
241
279
  if (stepArgs.annotation) {
242
280
  assertStep.setAnnotation(stepArgs.annotation);
243
281
  }
244
282
  assertStep.setStepId(stepArgs.id);
245
283
  return assertStep;
246
284
  }
285
+ static fromLegacyMablscript(args, actions) {
286
+ const stepDescriptor = buildAssertStepDescriptor('assert', args, actions);
287
+ const step = new AssertStep('assert', [], actions, stepDescriptor);
288
+ return step;
289
+ }
247
290
  toMablscript() {
248
291
  if (this.primaryAction instanceof MobileFindAction_1.MobileFindAction) {
249
292
  throw new Error('Mobile steps do not generate mablscript');
@@ -256,13 +299,11 @@ class AssertStep extends MablStep_1.MablStep {
256
299
  if (primaryActionFindMablscriptPrefix.length > 0) {
257
300
  primaryActionFindMablscriptPrefix += '.';
258
301
  }
259
- const assertAction = `.assert(${!!(this.assertArguments?.onFailure ||
260
- this.assertArguments?.observationScope)
302
+ const assertAction = `.assert(${!!(this.observationScope ||
303
+ (this.onFailure && this.onFailure !== OnFailure.FailImmediately))
261
304
  ? (0, MablAction_1.convertObjectToMablscriptArgs)({
262
- ...this.assertArguments,
263
- onFailure: this.assertArguments?.onFailure === OnFailure.FailImmediately
264
- ? undefined
265
- : this.assertArguments?.onFailure,
305
+ observationScope: this.observationScope,
306
+ onFailure: this.onFailure,
266
307
  })
267
308
  : ''})`;
268
309
  if (this.countAction) {
@@ -306,7 +347,147 @@ class AssertStep extends MablStep_1.MablStep {
306
347
  ...(this.extractAction?.getInputVariables() ?? []),
307
348
  ]);
308
349
  }
350
+ stepDescription() {
351
+ if (this.assertionType === 'ai_prompt') {
352
+ return `Assert AI prompt: "${this.aiPrompt?.userPrompt}"`;
353
+ }
354
+ if (this.isWaitUntilStep) {
355
+ const elementDescription = this.humanizeFind();
356
+ return `Wait until ${elementDescription} is present`;
357
+ }
358
+ const elementDescription = this.humanizeFind();
359
+ if (this.assertionType === 'present') {
360
+ return `Assert that ${elementDescription} is present`;
361
+ }
362
+ if (this.assertionType === 'not_present') {
363
+ return `Assert that ${elementDescription} is not present`;
364
+ }
365
+ if (this.countAction) {
366
+ const comparator = this.getComparatorText();
367
+ return `Assert that count of ${elementDescription} ${comparator} ${this.assertionValue}`;
368
+ }
369
+ if (this.extractAction) {
370
+ const attribute = this.extractAction.extractionAttribute;
371
+ const comparator = this.getComparatorText();
372
+ return `Assert that ${attribute} of ${elementDescription} ${comparator} ${this.assertionValue}`;
373
+ }
374
+ const comparator = this.getComparatorText();
375
+ return `Assert that ${elementDescription} ${comparator} ${this.assertionValue}`;
376
+ }
377
+ humanizeFind() {
378
+ if (this.primaryAction instanceof GetUrlAction_1.GetUrlAction) {
379
+ return 'current URL';
380
+ }
381
+ if (this.primaryAction instanceof GetVariableValue_1.GetVariableValue) {
382
+ return `variable {{${this.primaryAction.variableName}}}`;
383
+ }
384
+ if (this.primaryAction instanceof GetViewportAction_1.GetViewportAction) {
385
+ return 'viewport';
386
+ }
387
+ if (this.primaryAction instanceof FindAction_1.FindAction) {
388
+ const findDescriptor = this.primaryAction.toDescriptor();
389
+ return (0, MablStepWithFindAction_1.humanizeFindDescriptor)(findDescriptor);
390
+ }
391
+ return 'element';
392
+ }
393
+ getComparatorText() {
394
+ switch (this.assertionType) {
395
+ case 'equals':
396
+ return 'equals';
397
+ case 'does_not_equal':
398
+ return 'does not equal';
399
+ case 'contains':
400
+ return 'contains';
401
+ case 'does_not_contain':
402
+ return 'does not contain';
403
+ case 'matches_regex':
404
+ return 'matches';
405
+ case 'greater_than':
406
+ return 'is greater than';
407
+ case 'less_than':
408
+ return 'is less than';
409
+ case 'greater_than_or_equals':
410
+ return 'is greater than or equal to';
411
+ case 'less_than_or_equals':
412
+ return 'is less than or equal to';
413
+ case 'starts_with':
414
+ return 'starts with';
415
+ case 'starts_without':
416
+ return 'starts without';
417
+ case 'ends_with':
418
+ return 'ends with';
419
+ case 'ends_without':
420
+ return 'ends without';
421
+ default:
422
+ return 'is';
423
+ }
424
+ }
309
425
  }
310
426
  exports.AssertStep = AssertStep;
311
- AssertStep.mablScriptStepNames = ['assert'];
427
+ AssertStep.actionCode = 'assert';
428
+ AssertStep.mablScriptStepNames = [
429
+ AssertStep.actionCode,
430
+ ...Object.keys(AssertStepOld_1.oldToV2StepNameMap),
431
+ ];
312
432
  AssertStep.yamlMablScriptNames = (0, exports.assertStepYamlMablscriptNames)();
433
+ function buildAssertStepDescriptor(_name, args, actions) {
434
+ const firstAction = actions[0];
435
+ let primaryAction;
436
+ if (firstAction instanceof FindAction_1.FindAction ||
437
+ firstAction instanceof MobileFindAction_1.MobileFindAction ||
438
+ firstAction instanceof GetUrlAction_1.GetUrlAction ||
439
+ firstAction instanceof GetVariableValue_1.GetVariableValue ||
440
+ firstAction instanceof GetViewportAction_1.GetViewportAction) {
441
+ primaryAction = firstAction;
442
+ }
443
+ else if (firstAction instanceof ConditionAction_1.ConditionAction &&
444
+ (0, ConditionDescriptor_1.isAIPromptCondition)(firstAction.conditionDescriptor)) {
445
+ primaryAction = new GetViewportAction_1.GetViewportAction();
446
+ }
447
+ else {
448
+ throw new Error(`Unexpected action type. Expected FindAction|MobileFindAction|GetUrlAction|GetVariableValue but got: ${firstAction.constructor.name}`);
449
+ }
450
+ let extractAction;
451
+ let countAction;
452
+ let conditionAction;
453
+ if (actions.length === 3) {
454
+ if (actions[1] instanceof CountAction_1.CountAction) {
455
+ countAction = actions[1];
456
+ }
457
+ else {
458
+ extractAction = actions[1];
459
+ }
460
+ conditionAction = actions[2];
461
+ }
462
+ else if (firstAction instanceof ConditionAction_1.ConditionAction) {
463
+ conditionAction = firstAction;
464
+ }
465
+ else {
466
+ conditionAction = actions[1];
467
+ }
468
+ const find = primaryAction.toDescriptor();
469
+ const assertArguments = args[0] && typeof args[0] === 'object'
470
+ ? args[0]
471
+ : undefined;
472
+ const onFailure = assertArguments?.onFailure || OnFailure.FailImmediately;
473
+ const observationScope = assertArguments?.observationScope;
474
+ const descriptorToActionMap = new Map()
475
+ .set(find, primaryAction)
476
+ .set(conditionAction.conditionDescriptor, conditionAction);
477
+ if (extractAction) {
478
+ descriptorToActionMap.set(extractAction.toDescriptor(), extractAction);
479
+ }
480
+ if (countAction) {
481
+ descriptorToActionMap.set(countAction.countDescriptor, countAction);
482
+ }
483
+ return {
484
+ target: find,
485
+ extract: extractAction?.toDescriptor(),
486
+ condition: conditionAction.conditionDescriptor,
487
+ count: countAction?.countDescriptor,
488
+ onFailure,
489
+ observationScope,
490
+ descriptorToActionMap,
491
+ actionCode: AssertStep.actionCode,
492
+ };
493
+ }