@mablhq/mabl-cli 2.29.7 → 2.31.2

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.
@@ -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'];
@@ -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() {
@@ -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);
@@ -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) {