@mablhq/mabl-cli 1.62.1 → 2.0.3

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 (78) hide show
  1. package/api/basicApiClient.js +10 -10
  2. package/api/mablApiClient.js +39 -1
  3. package/browserLauncher/playwrightBrowserLauncher/playwrightBrowser.js +6 -6
  4. package/cli.js +1 -0
  5. package/commands/app-files/app-files.js +5 -0
  6. package/commands/app-files/app-files_cmds/create.js +98 -0
  7. package/commands/app-files/app-files_cmds/delete.js +31 -0
  8. package/commands/app-files/app-files_cmds/download.js +50 -0
  9. package/commands/app-files/app-files_cmds/list.js +72 -0
  10. package/commands/config/config_cmds/install.js +92 -0
  11. package/commands/constants.js +9 -2
  12. package/commands/tests/testsUtil.js +9 -1
  13. package/commands/tests/tests_cmds/run-mobile.js +218 -0
  14. package/core/util.js +36 -2
  15. package/env/defaultEnv.js +2 -1
  16. package/env/dev.js +2 -1
  17. package/env/env.js +3 -1
  18. package/env/local.js +2 -1
  19. package/env/prod.js +2 -1
  20. package/execution/index.js +13 -1
  21. package/execution/runAppiumServer.js +133 -0
  22. package/mablApi/index.js +1 -1
  23. package/mablscript/MablAction.js +1 -1
  24. package/mablscript/MablStep.js +28 -2
  25. package/mablscript/MablStepV2.js +51 -0
  26. package/mablscript/MablSymbol.js +6 -2
  27. package/mablscript/actions/ExtractAction.js +11 -6
  28. package/mablscript/actions/FindAction.js +5 -5
  29. package/mablscript/actions/JavaScriptAction.js +19 -12
  30. package/mablscript/importer.js +97 -14
  31. package/mablscript/mobile/steps/CreateVariableMobileStep.js +53 -0
  32. package/mablscript/mobile/steps/EnterTextStep.js +41 -0
  33. package/mablscript/mobile/steps/NavigateBackStep.js +20 -0
  34. package/mablscript/mobile/steps/NavigateHomeStep.js +21 -0
  35. package/mablscript/mobile/steps/ScrollStep.js +37 -0
  36. package/mablscript/mobile/steps/SetOrientationStep.js +20 -0
  37. package/mablscript/mobile/steps/TapStep.js +37 -0
  38. package/mablscript/mobile/steps/actions/MobileFindAction.js +23 -0
  39. package/mablscript/mobile/steps/stepUtil.js +71 -0
  40. package/mablscript/mobile/tests/StepTestsUtil.js +20 -0
  41. package/mablscript/mobile/tests/TestMobileFindDescriptors.js +215 -0
  42. package/mablscript/mobile/tests/steps/CreateVariableMobileStep.mobiletest.js +287 -0
  43. package/mablscript/mobile/tests/steps/EnterTextStep.mobiletest.js +74 -0
  44. package/mablscript/mobile/tests/steps/GeneralHumanization.mobiletest.js +167 -0
  45. package/mablscript/mobile/tests/steps/NavigateBackStep.mobiletest.js +22 -0
  46. package/mablscript/mobile/tests/steps/NavigateHomeStep.mobiletest.js +22 -0
  47. package/mablscript/mobile/tests/steps/ScrollStep.mobiletest.js +112 -0
  48. package/mablscript/mobile/tests/steps/SetOrientationStep.mobiletest.js +27 -0
  49. package/mablscript/mobile/tests/steps/TapStep.mobiletest.js +53 -0
  50. package/mablscript/steps/AssertStep.js +48 -38
  51. package/mablscript/steps/AssertStepOld.js +30 -2
  52. package/mablscript/steps/CreateVariableStep.js +9 -2
  53. package/mablscript/steps/EchoStep.js +4 -3
  54. package/mablscript/steps/ElseIfConditionStep.js +8 -2
  55. package/mablscript/steps/ElseStep.js +2 -1
  56. package/mablscript/steps/EndStep.js +2 -1
  57. package/mablscript/steps/EvaluateJavaScriptStep.js +6 -1
  58. package/mablscript/steps/IfConditionStep.js +17 -10
  59. package/mablscript/steps/SendHttpRequestStep.js +4 -3
  60. package/mablscript/steps/WaitStep.js +4 -3
  61. package/mablscript/types/GetVariableDescriptor.js +8 -3
  62. package/mablscript/types/mobile/CreateVariableMobileStepDescriptor.js +9 -0
  63. package/mablscript/types/mobile/EnterTextStepDescriptor.js +2 -0
  64. package/mablscript/types/mobile/NavigateBackStepDescriptor.js +2 -0
  65. package/mablscript/types/mobile/NavigateHomeStepDescriptor.js +2 -0
  66. package/mablscript/types/mobile/ScrollStepDescriptor.js +2 -0
  67. package/mablscript/types/mobile/SetOrientationStepDescriptor.js +8 -0
  68. package/mablscript/types/mobile/StepWithMobileFindDescriptor.js +2 -0
  69. package/mablscript/types/mobile/TapStepDescriptor.js +8 -0
  70. package/mablscriptFind/index.js +1 -1
  71. package/package.json +8 -3
  72. package/resources/webdriver.js +21 -0
  73. package/upload/index.js +5 -0
  74. package/util/FileCache.js +180 -0
  75. package/util/Lazy.js +90 -0
  76. package/util/MobileAppFileCache.js +102 -0
  77. package/util/RichPromise.js +3 -1
  78. package/webdriver/index.js +41 -0
@@ -34,7 +34,7 @@ class MablAction {
34
34
  }
35
35
  static findUniqueVariableReferencesInValue(value) {
36
36
  const variableReferences = [];
37
- if (value instanceof MablSymbol_1.MablSymbol) {
37
+ if ((0, MablSymbol_1.isMablSymbolObject)(value)) {
38
38
  return [value.name];
39
39
  }
40
40
  else if (typeof value === 'string') {
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.buildObjectString = exports.buildSourceRepresentationOfObject = exports.MablStep = void 0;
6
+ exports.isMablStepV1 = exports.buildObjectString = exports.buildSourceRepresentationOfObject = exports.MablStep = void 0;
7
7
  const domUtil_1 = require("../domUtil");
8
8
  const MablAction_1 = require("./MablAction");
9
9
  const MablSymbol_1 = require("./MablSymbol");
@@ -11,8 +11,12 @@ const fast_json_stable_stringify_1 = __importDefault(require("fast-json-stable-s
11
11
  class MablStep extends MablAction_1.MablAction {
12
12
  constructor(name, args, actions) {
13
13
  super(name, args);
14
+ this.stepVersion = 1;
14
15
  this.actions = actions;
15
16
  }
17
+ getStepVersion() {
18
+ return this.stepVersion;
19
+ }
16
20
  canContinueOnFailure() {
17
21
  return false;
18
22
  }
@@ -51,7 +55,7 @@ class MablStep extends MablAction_1.MablAction {
51
55
  return (((_a = this.annotation) === null || _a === void 0 ? void 0 : _a.description) || this.description || this.getStepName());
52
56
  }
53
57
  substituteMablscriptVariable(argument) {
54
- if (argument instanceof MablSymbol_1.MablSymbol) {
58
+ if ((0, MablSymbol_1.isMablSymbolObject)(argument)) {
55
59
  return argument.name;
56
60
  }
57
61
  if ((0, MablAction_1.argumentIsMablVariable)(argument)) {
@@ -104,6 +108,20 @@ class MablStep extends MablAction_1.MablAction {
104
108
  };
105
109
  return (0, fast_json_stable_stringify_1.default)(lineDiffProperties);
106
110
  }
111
+ static cloneAndRemoveUndefinedEntriesFromObject(obj) {
112
+ const clone = {};
113
+ Object.entries(obj).forEach(([key, value]) => {
114
+ if (value !== undefined) {
115
+ if (typeof value !== 'object' || Array.isArray(value)) {
116
+ clone[key] = value;
117
+ }
118
+ else {
119
+ clone[key] = MablStep.cloneAndRemoveUndefinedEntriesFromObject(value);
120
+ }
121
+ }
122
+ });
123
+ return clone;
124
+ }
107
125
  }
108
126
  exports.MablStep = MablStep;
109
127
  MablStep.mablScriptStepNames = ['mablStep'];
@@ -150,3 +168,11 @@ function buildObjectString(objectString) {
150
168
  return final;
151
169
  }
152
170
  exports.buildObjectString = buildObjectString;
171
+ function isMablStepV1(value) {
172
+ if (value === undefined || value === null) {
173
+ return false;
174
+ }
175
+ const mablStep = value;
176
+ return !!mablStep.getStepVersion && mablStep.getStepVersion() === 1;
177
+ }
178
+ exports.isMablStepV1 = isMablStepV1;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isMablStepV2 = exports.MablStepV2 = void 0;
4
+ const MablStep_1 = require("./MablStep");
5
+ class MablStepV2 extends MablStep_1.MablStep {
6
+ constructor(name, descriptor) {
7
+ super(name, [], []);
8
+ this.stepVersion = 2;
9
+ this.descriptor = descriptor;
10
+ }
11
+ static fromYaml(stepName, stepDescriptor) {
12
+ return new MablStepV2(stepName, stepDescriptor);
13
+ }
14
+ getStepName() {
15
+ return this.name;
16
+ }
17
+ toStepDescriptor() {
18
+ return this.descriptor;
19
+ }
20
+ getFormattedStep(_fullLocatorsOn) {
21
+ return {
22
+ [this.getStepName()]: this.descriptor,
23
+ };
24
+ }
25
+ stepDescription() {
26
+ throw new Error('Step description not implemented');
27
+ }
28
+ isDisabled() {
29
+ return !!this.descriptor.disabled;
30
+ }
31
+ setDisabled(disabled) {
32
+ this.descriptor.disabled = disabled;
33
+ }
34
+ getDescriptionForLogging() {
35
+ var _a;
36
+ return (((_a = this.annotation) === null || _a === void 0 ? void 0 : _a.description) ||
37
+ this.stepDescription() ||
38
+ this.getStepName());
39
+ }
40
+ }
41
+ exports.MablStepV2 = MablStepV2;
42
+ MablStepV2.mablScriptStepNames = [];
43
+ MablStepV2.yamlMablScriptNames = ['MablStepV2'];
44
+ function isMablStepV2(value) {
45
+ if (value === undefined || value === null) {
46
+ return false;
47
+ }
48
+ const mablStep = value;
49
+ return !!mablStep.getStepVersion && mablStep.getStepVersion() === 2;
50
+ }
51
+ exports.isMablStepV2 = isMablStepV2;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatSymbol = exports.MablSymbol = exports.SINGLE_VARIABLE_PATTERN_REGEX = exports.VARIABLE_PATTERN_REGEX = void 0;
3
+ exports.isMablSymbolObject = exports.formatSymbol = exports.MablSymbol = exports.SINGLE_VARIABLE_PATTERN_REGEX = exports.VARIABLE_PATTERN_REGEX = void 0;
4
4
  exports.VARIABLE_PATTERN_REGEX = /{{@([_.a-zA-Z0-9]+)}}/g;
5
5
  exports.SINGLE_VARIABLE_PATTERN_REGEX = /^{{@([_.a-zA-Z0-9]+)}}$/;
6
6
  class MablSymbol {
@@ -23,9 +23,13 @@ class MablSymbol {
23
23
  }
24
24
  exports.MablSymbol = MablSymbol;
25
25
  function formatSymbol(symbol) {
26
- if (symbol instanceof MablSymbol) {
26
+ if (isMablSymbolObject(symbol)) {
27
27
  return '{{@' + symbol.name + '}}';
28
28
  }
29
29
  return '{{@' + symbol + '}}';
30
30
  }
31
31
  exports.formatSymbol = formatSymbol;
32
+ function isMablSymbolObject(value) {
33
+ return !!((value === null || value === void 0 ? void 0 : value.name) && (value === null || value === void 0 ? void 0 : value.tokens));
34
+ }
35
+ exports.isMablSymbolObject = isMablSymbolObject;
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExtractAction = exports.CSS_EXTRACTION_VALUE = exports.EXTRACTION_TYPE_KEY = void 0;
3
+ exports.ExtractAction = exports.ExtractTypeName = exports.CSS_EXTRACTION_VALUE = exports.EXTRACTION_TYPE_KEY = void 0;
4
4
  const MablAction_1 = require("../MablAction");
5
5
  const ExtractDescriptor_1 = require("../types/ExtractDescriptor");
6
6
  exports.EXTRACTION_TYPE_KEY = 'extraction_type';
7
7
  exports.CSS_EXTRACTION_VALUE = 'css';
8
+ var ExtractTypeName;
9
+ (function (ExtractTypeName) {
10
+ ExtractTypeName["CssProperty"] = "CssProperty";
11
+ ExtractTypeName["ElementAttribute"] = "ElementAttribute";
12
+ ExtractTypeName["EmailAttribute"] = "EmailAttribute";
13
+ })(ExtractTypeName = exports.ExtractTypeName || (exports.ExtractTypeName = {}));
8
14
  class ExtractAction extends MablAction_1.MablAction {
9
15
  constructor(name, args) {
10
16
  super(name, args);
@@ -18,8 +24,7 @@ class ExtractAction extends MablAction_1.MablAction {
18
24
  if (this.name === ExtractDescriptor_1.ExtractType.EXTRACT_ATTRIBUTE && this.args.length > 1) {
19
25
  const extractionOptions = this.args[1];
20
26
  const metaExtractionType = extractionOptions.extraction_type;
21
- if (metaExtractionType &&
22
- metaExtractionType.toLowerCase() === exports.CSS_EXTRACTION_VALUE) {
27
+ if ((metaExtractionType === null || metaExtractionType === void 0 ? void 0 : metaExtractionType.toLowerCase()) === exports.CSS_EXTRACTION_VALUE) {
23
28
  this.extractionType = ExtractDescriptor_1.ExtractType.EXTRACT_CSS_PROPERTIES.toString();
24
29
  }
25
30
  else {
@@ -60,7 +65,7 @@ ExtractAction.mablScriptStepNames = [
60
65
  'extract_inner_text',
61
66
  ];
62
67
  ExtractAction.mablscriptToYamlType = {
63
- extract_attribute: 'ElementAttribute',
64
- extract_css_property: 'CssProperty',
65
- extract_email_attribute: 'EmailAttribute',
68
+ extract_attribute: ExtractTypeName.ElementAttribute,
69
+ extract_css_property: ExtractTypeName.CssProperty,
70
+ extract_email_attribute: ExtractTypeName.EmailAttribute,
66
71
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeEmail = exports.isEmailSelectorOrDescriptor = exports.normalize = exports.isElementSelector = exports.FindAction = exports.findTypesToFormattedType = void 0;
3
+ exports.normalizeEmail = exports.isEmailSelectorOrDescriptor = exports.normalize = exports.isElementSelector = exports.FindAction = exports.formattedFindTypeToMablscript = exports.findTypesToFormattedType = void 0;
4
4
  const domUtil_1 = require("../../domUtil");
5
5
  const mablscriptFind_1 = require("../../mablscriptFind");
6
6
  const MablAction_1 = require("../MablAction");
@@ -14,8 +14,8 @@ exports.findTypesToFormattedType = {
14
14
  find_tab: 'FindTab',
15
15
  find_last: 'FindLast',
16
16
  };
17
- const formattedFindTypeToMablscript = {};
18
- Object.entries(exports.findTypesToFormattedType).forEach(([findType, field]) => (formattedFindTypeToMablscript[field] = findType));
17
+ exports.formattedFindTypeToMablscript = {};
18
+ Object.entries(exports.findTypesToFormattedType).forEach(([findType, field]) => (exports.formattedFindTypeToMablscript[field] = findType));
19
19
  class FindAction extends MablAction_1.MablAction {
20
20
  constructor(name, args) {
21
21
  super(name, args);
@@ -114,8 +114,8 @@ class FindAction extends MablAction_1.MablAction {
114
114
  }
115
115
  else {
116
116
  findType = stepArgs.findType
117
- ? formattedFindTypeToMablscript[stepArgs.findType]
118
- : formattedFindTypeToMablscript.FindOne;
117
+ ? exports.formattedFindTypeToMablscript[stepArgs.findType]
118
+ : exports.formattedFindTypeToMablscript.FindOne;
119
119
  }
120
120
  if (!stepArgs.selectorAncestors) {
121
121
  return new FindAction(findType, [
@@ -105,24 +105,27 @@ class JavaScriptAction extends MablAction_1.MablAction {
105
105
  throw new Error(`Invalid javascript action descriptor: ${JSON.stringify(descriptor)}`);
106
106
  }
107
107
  toYaml() {
108
+ return JavaScriptAction.toYamlFromJavaScriptDescriptor(this.javaScript);
109
+ }
110
+ static toYamlFromJavaScriptDescriptor(javaScript) {
108
111
  const actionYaml = {};
109
- if ((0, JavaScriptDescriptor_1.isReusableSnippetDescriptor)(this.javaScript)) {
110
- actionYaml.snippetId = this.javaScript.snippetId;
111
- actionYaml.snippetInvariantId = this.javaScript.snippetInvariantId;
112
- actionYaml.parameterOverrides = this.javaScript.parameterOverrides;
112
+ if ((0, JavaScriptDescriptor_1.isReusableSnippetDescriptor)(javaScript)) {
113
+ actionYaml.snippetId = javaScript.snippetId;
114
+ actionYaml.snippetInvariantId = javaScript.snippetInvariantId;
115
+ actionYaml.parameterOverrides = javaScript.parameterOverrides;
113
116
  }
114
- else if ((0, JavaScriptDescriptor_1.isInlineSnippetDescriptor)(this.javaScript)) {
115
- actionYaml.snippet = this.javaScript.inlineSnippet;
116
- actionYaml.parameterOverrides = this.javaScript.parameterOverrides;
117
+ else if ((0, JavaScriptDescriptor_1.isInlineSnippetDescriptor)(javaScript)) {
118
+ actionYaml.snippet = { ...actionYaml, ...javaScript.inlineSnippet };
119
+ actionYaml.parameterOverrides = javaScript.parameterOverrides;
117
120
  }
118
- else if ((0, JavaScriptDescriptor_1.isLegacyReusableSnippetDescriptor)(this.javaScript)) {
119
- actionYaml.snippetId = this.javaScript.snippetInvariantId;
121
+ else if ((0, JavaScriptDescriptor_1.isLegacyReusableSnippetDescriptor)(javaScript)) {
122
+ actionYaml.snippetId = javaScript.snippetInvariantId;
120
123
  }
121
- else if ((0, JavaScriptDescriptor_1.isLegacyInlineJavaScriptDescriptor)(this.javaScript)) {
122
- actionYaml.code = this.javaScript.encodedJS;
124
+ else if ((0, JavaScriptDescriptor_1.isLegacyInlineJavaScriptDescriptor)(javaScript)) {
125
+ actionYaml.code = javaScript.encodedJS;
123
126
  }
124
127
  else {
125
- throw new Error(`Cannot export action to yaml: ${JSON.stringify(this.javaScript)}`);
128
+ throw new Error(`Cannot export action to yaml: ${JSON.stringify(javaScript)}`);
126
129
  }
127
130
  return actionYaml;
128
131
  }
@@ -137,6 +140,10 @@ class JavaScriptAction extends MablAction_1.MablAction {
137
140
  if (formatted.code) {
138
141
  args.push(formatted.code);
139
142
  }
143
+ else if (formatted.body) {
144
+ delete formatted.parameterOverrides;
145
+ args.push(formatted);
146
+ }
140
147
  else if (formatted.snippet) {
141
148
  args.push(formatted.snippet);
142
149
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractOutputVariables = exports.extractInputVariables = exports.parseMablScriptIntoSteps = exports.mablscriptTheLoadedSteps = exports.loadYamlSteps = exports.yamlifyTheLoadedSteps = exports.loadMablScriptIntoSteps = exports.parseMablScript = void 0;
3
+ exports.getSnippetIdsFromJsonFlow = exports.parseMablScriptIntoV2Step = exports.extractOutputVariables = exports.extractInputVariables = exports.parseMablScriptIntoSteps = exports.mablscriptTheLoadedSteps = exports.interpretStepsFromObjects = 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");
@@ -53,6 +53,16 @@ const AccessibilityCheck_1 = require("./steps/AccessibilityCheck");
53
53
  const EvaluateFlowStep_1 = require("./steps/EvaluateFlowStep");
54
54
  const RightClickStep_1 = require("./steps/RightClickStep");
55
55
  const EnterAuthCodeStep_1 = require("./steps/EnterAuthCodeStep");
56
+ const TapStep_1 = require("./mobile/steps/TapStep");
57
+ const EnterTextStep_2 = require("./mobile/steps/EnterTextStep");
58
+ const SetOrientationStep_1 = require("./mobile/steps/SetOrientationStep");
59
+ const ScrollStep_1 = require("./mobile/steps/ScrollStep");
60
+ const CreateVariableMobileStep_1 = require("./mobile/steps/CreateVariableMobileStep");
61
+ const NavigateBackStep_1 = require("./mobile/steps/NavigateBackStep");
62
+ const NavigateHomeStep_1 = require("./mobile/steps/NavigateHomeStep");
63
+ const CreateVariableStepDescriptor_1 = require("./types/CreateVariableStepDescriptor");
64
+ const JavaScriptDescriptor_1 = require("./types/JavaScriptDescriptor");
65
+ const MablStepV2_1 = require("./MablStepV2");
56
66
  const ActionTypes = [
57
67
  AwaitDownloadAction_1.AwaitDownloadAction,
58
68
  AwaitPDFDownloadAction_1.AwaitPDFDownloadAction,
@@ -103,6 +113,16 @@ const StepTypes = [
103
113
  VisitUrlStep_1.VisitUrlStep,
104
114
  WaitStep_1.WaitStep,
105
115
  ];
116
+ const MobileStepTypes = [
117
+ AssertStep_1.AssertStep,
118
+ CreateVariableMobileStep_1.CreateVariableMobileStep,
119
+ NavigateBackStep_1.NavigateBackStep,
120
+ NavigateHomeStep_1.NavigateHomeStep,
121
+ TapStep_1.TapStep,
122
+ EnterTextStep_2.EnterTextStep,
123
+ SetOrientationStep_1.SetOrientationStep,
124
+ ScrollStep_1.ScrollStep,
125
+ ];
106
126
  function parseMablScript(mablscript) {
107
127
  const ast = (0, esprima_1.parseScript)(mablscript, { loc: true });
108
128
  const stepStack = {};
@@ -172,31 +192,50 @@ function yamlifyTheLoadedSteps(translatedSteps, fullLocatorsOn = true) {
172
192
  return (0, js_yaml_1.dump)(steps);
173
193
  }
174
194
  exports.yamlifyTheLoadedSteps = yamlifyTheLoadedSteps;
175
- const yamlMablscriptToObjectsStepMap = {};
195
+ const yamlMablscriptToObjectsStepV1Map = {};
176
196
  StepTypes.forEach((step) => {
177
- step.yamlMablScriptNames.forEach((name) => (yamlMablscriptToObjectsStepMap[name] = step.fromYaml));
197
+ step.yamlMablScriptNames.forEach((name) => (yamlMablscriptToObjectsStepV1Map[name] = step.fromYaml));
178
198
  });
179
- function loadYamlSteps(yamlSteps) {
199
+ const yamlMablscriptToObjectsMobileStepMap = {};
200
+ MobileStepTypes.forEach((step) => {
201
+ step.yamlMablScriptNames.forEach((name) => (yamlMablscriptToObjectsMobileStepMap[name] = step.fromYaml));
202
+ });
203
+ function loadYamlSteps(yamlSteps, isMobile) {
180
204
  const loadedStepData = (0, js_yaml_1.load)(yamlSteps);
181
- return loadedStepData.map((stepObject) => {
205
+ return interpretStepsFromObjects(loadedStepData, isMobile);
206
+ }
207
+ exports.loadYamlSteps = loadYamlSteps;
208
+ function interpretStepsFromObjects(steps, isMobile) {
209
+ return steps.map((stepObject, index) => {
210
+ var _a;
182
211
  const stepName = Object.keys(stepObject)[0];
183
212
  const stepArgs = stepObject[stepName];
184
213
  const isStepDisabled = stepObject[stepName].disabled;
185
- const stepType = yamlMablscriptToObjectsStepMap[stepName];
186
- let step;
187
- if (stepType) {
188
- step = stepType(stepName, stepArgs);
189
- }
190
- else {
191
- step = new MablStep_1.MablStep(stepName, [], []);
192
- }
214
+ const step = stepFromObjectInfo(stepName, stepArgs, isMobile !== null && isMobile !== void 0 ? isMobile : false);
215
+ step.setStepSourceIndexInFlow(index);
216
+ const actionCount = step.actions.length;
217
+ (_a = step.actions) === null || _a === void 0 ? void 0 : _a.forEach((action, index) => {
218
+ if ((0, MablStepV2_1.isMablStepV2)(step) || index + 1 !== actionCount) {
219
+ action.setActionSourceIndexInStep(index);
220
+ }
221
+ });
193
222
  if (isStepDisabled) {
194
223
  step.setDisabled(isStepDisabled);
195
224
  }
196
225
  return step;
197
226
  });
198
227
  }
199
- exports.loadYamlSteps = loadYamlSteps;
228
+ exports.interpretStepsFromObjects = interpretStepsFromObjects;
229
+ function stepFromObjectInfo(stepName, stepArgs, isMobile) {
230
+ if (isMobile &&
231
+ Object.keys(yamlMablscriptToObjectsMobileStepMap).includes(stepName)) {
232
+ return yamlMablscriptToObjectsMobileStepMap[stepName](stepName, stepArgs);
233
+ }
234
+ if (Object.keys(yamlMablscriptToObjectsStepV1Map).includes(stepName)) {
235
+ return yamlMablscriptToObjectsStepV1Map[stepName](stepName, stepArgs);
236
+ }
237
+ return new MablStep_1.MablStep(stepName, [], []);
238
+ }
200
239
  function getMablscriptMaybeWithComment(step) {
201
240
  return `${step.isDisabled() ? '//' : ''}${step.toMablscript()}`;
202
241
  }
@@ -389,3 +428,47 @@ function extractOutputVariables(steps) {
389
428
  return (0, MablAction_1.distinctStrings)(steps.flatMap((step) => step.getOutputVariables()));
390
429
  }
391
430
  exports.extractOutputVariables = extractOutputVariables;
431
+ function parseMablScriptIntoV2Step(script) {
432
+ if (!script) {
433
+ throw new Error('Unable to parse step with invalid script');
434
+ }
435
+ const parsedMablscriptStep = parseMablScriptIntoSteps({
436
+ script,
437
+ });
438
+ const stepAsObject = parsedMablscriptStep[0].getFormattedStep(true);
439
+ const [parsedStep] = interpretStepsFromObjects([stepAsObject], true);
440
+ return parsedStep;
441
+ }
442
+ exports.parseMablScriptIntoV2Step = parseMablScriptIntoV2Step;
443
+ function getSnippetIdsFromJsonFlow(flow) {
444
+ const steps = interpretStepsFromObjects(flow.json_steps.steps, true);
445
+ const snippetIds = [];
446
+ steps.forEach((step) => {
447
+ let jsDescriptor;
448
+ if ((0, EvaluateJavaScriptStep_1.isEvaluateJavaScriptStep)(step)) {
449
+ jsDescriptor = step.evaluateJsAction.javaScript;
450
+ }
451
+ else if ((0, IfConditionStep_1.isIfConditionStep)(step) || (0, ElseIfConditionStep_1.isElseIfConditionStep)(step)) {
452
+ if ((0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.primaryAction)) {
453
+ jsDescriptor = step.primaryAction.javaScript;
454
+ }
455
+ }
456
+ else if ((0, CreateVariableStep_1.isCreateVariableStep)(step)) {
457
+ if (step.generationType === CreateVariableStepDescriptor_1.VariableGenerator.JAVASCRIPT &&
458
+ (0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.actions[0])) {
459
+ jsDescriptor = step.actions[0].javaScript;
460
+ }
461
+ }
462
+ else if ((0, CreateVariableMobileStep_1.isCreateVariableMobileStep)(step)) {
463
+ if ((0, JavaScriptAction_1.isJavaScriptActionDescriptor)(step.descriptor.generator)) {
464
+ jsDescriptor = step.descriptor.generator.javaScript;
465
+ }
466
+ }
467
+ if ((jsDescriptor && (0, JavaScriptDescriptor_1.isReusableSnippetDescriptor)(jsDescriptor)) ||
468
+ (0, JavaScriptDescriptor_1.isLegacyReusableSnippetDescriptor)(jsDescriptor)) {
469
+ snippetIds.push(jsDescriptor.snippetInvariantId);
470
+ }
471
+ });
472
+ return snippetIds;
473
+ }
474
+ exports.getSnippetIdsFromJsonFlow = getSnippetIdsFromJsonFlow;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isCreateVariableMobileStep = exports.CreateVariableMobileStep = void 0;
4
+ const MablStepV2_1 = require("../../MablStepV2");
5
+ const CreateVariableStepDescriptor_1 = require("../../types/CreateVariableStepDescriptor");
6
+ const CreateVariableMobileStepDescriptor_1 = require("../../types/mobile/CreateVariableMobileStepDescriptor");
7
+ const MobileFindAction_1 = require("./actions/MobileFindAction");
8
+ const stepUtil_1 = require("./stepUtil");
9
+ class CreateVariableMobileStep extends MablStepV2_1.MablStepV2 {
10
+ constructor(descriptor) {
11
+ super(CreateVariableMobileStep.stepName, descriptor);
12
+ if ((0, CreateVariableMobileStepDescriptor_1.isCreateVariableMobileFindStepDescriptor)(this.descriptor)) {
13
+ this.findAction = MobileFindAction_1.MobileFindAction.fromDescriptor(this.descriptor.find);
14
+ this.actions = [this.findAction];
15
+ }
16
+ }
17
+ stepDescription() {
18
+ const varGenerator = this.descriptor.generator.type;
19
+ switch (varGenerator) {
20
+ case CreateVariableStepDescriptor_1.VariableGenerator.ATTRIBUTE:
21
+ return `Assign variable "${this.descriptor.name}" value from element attribute "${this.descriptor.generator.attribute}"`;
22
+ case CreateVariableStepDescriptor_1.VariableGenerator.PATTERN:
23
+ return `Assign variable "${this.descriptor.name}" value from string generated with format "${this.descriptor.generator.pattern}"`;
24
+ case CreateVariableStepDescriptor_1.VariableGenerator.EMAIL:
25
+ return `Generate a new mabl mailbox email address`;
26
+ case CreateVariableStepDescriptor_1.VariableGenerator.ELEMENT_COUNT:
27
+ return `Assign variable "${this.descriptor.name}" value from element count using ${(0, stepUtil_1.humanizeCustomFind)(this.descriptor)}`;
28
+ case CreateVariableStepDescriptor_1.VariableGenerator.JAVASCRIPT:
29
+ return `Assign variable "${this.descriptor.name}" using script`;
30
+ default:
31
+ return `Assign variable "${this.descriptor.name}" a value`;
32
+ }
33
+ }
34
+ static fromYaml(_stepName, stepDescriptor) {
35
+ if (!stepDescriptor.find) {
36
+ stepDescriptor.find = stepDescriptor.generator.find;
37
+ delete stepDescriptor.generator.find;
38
+ delete stepDescriptor.selector;
39
+ delete stepDescriptor.selectorAncestors;
40
+ }
41
+ return new CreateVariableMobileStep(stepDescriptor);
42
+ }
43
+ }
44
+ exports.CreateVariableMobileStep = CreateVariableMobileStep;
45
+ CreateVariableMobileStep.stepName = 'CreateVariable';
46
+ CreateVariableMobileStep.yamlMablScriptNames = [CreateVariableMobileStep.stepName];
47
+ CreateVariableMobileStep.stepVersion = 2;
48
+ function isCreateVariableMobileStep(value) {
49
+ return ((value === null || value === void 0 ? void 0 : value.getStepName) &&
50
+ (value === null || value === void 0 ? void 0 : value.getStepName()) === CreateVariableMobileStep.stepName &&
51
+ !!value.descriptor);
52
+ }
53
+ exports.isCreateVariableMobileStep = isCreateVariableMobileStep;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnterTextStep = void 0;
4
+ const MablStepV2_1 = require("../../MablStepV2");
5
+ const FindAction_1 = require("../../actions/FindAction");
6
+ const stepUtil_1 = require("./stepUtil");
7
+ const MablAction_1 = require("../../MablAction");
8
+ const STEP_NAME = 'EnterText';
9
+ class EnterTextStep extends MablStepV2_1.MablStepV2 {
10
+ constructor(descriptor) {
11
+ super(EnterTextStep.stepName, descriptor);
12
+ }
13
+ getInputVariables() {
14
+ const { find, text } = this.descriptor;
15
+ const vars = MablAction_1.MablAction.findUniqueVariableReferencesInValue(find);
16
+ vars.push(...MablAction_1.MablAction.findUniqueVariableReferencesInValue(text));
17
+ return vars;
18
+ }
19
+ stepDescription() {
20
+ return (0, stepUtil_1.getDescriptionForMobileStep)(`Enter text "${this.descriptor.text}" in`, this.descriptor);
21
+ }
22
+ static fromYaml(_stepName, stepDescriptor) {
23
+ if (!stepDescriptor.find &&
24
+ !!stepDescriptor.selector &&
25
+ !!stepDescriptor.findType) {
26
+ stepDescriptor.find = {
27
+ findType: FindAction_1.formattedFindTypeToMablscript[stepDescriptor.findType],
28
+ findTarget: {
29
+ selector: stepDescriptor.selector,
30
+ },
31
+ };
32
+ delete stepDescriptor.selector;
33
+ delete stepDescriptor.findType;
34
+ }
35
+ return new EnterTextStep(stepDescriptor);
36
+ }
37
+ }
38
+ exports.EnterTextStep = EnterTextStep;
39
+ EnterTextStep.stepName = STEP_NAME;
40
+ EnterTextStep.yamlMablScriptNames = [EnterTextStep.stepName];
41
+ EnterTextStep.stepVersion = 2;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NavigateBackStep = void 0;
4
+ const MablStepV2_1 = require("../../MablStepV2");
5
+ const STEP_NAME = 'NavigateBack';
6
+ class NavigateBackStep extends MablStepV2_1.MablStepV2 {
7
+ constructor(descriptor) {
8
+ super(NavigateBackStep.stepName, descriptor);
9
+ }
10
+ stepDescription() {
11
+ return `Navigate back`;
12
+ }
13
+ static fromYaml(_stepName, stepDescriptor) {
14
+ return new NavigateBackStep(stepDescriptor);
15
+ }
16
+ }
17
+ exports.NavigateBackStep = NavigateBackStep;
18
+ NavigateBackStep.stepName = STEP_NAME;
19
+ NavigateBackStep.yamlMablScriptNames = [NavigateBackStep.stepName];
20
+ NavigateBackStep.stepVersion = 2;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NavigateHomeStep = void 0;
4
+ const MablStepV2_1 = require("../../MablStepV2");
5
+ const STEP_NAME = 'NavigateHome';
6
+ class NavigateHomeStep extends MablStepV2_1.MablStepV2 {
7
+ constructor(descriptor) {
8
+ super(NavigateHomeStep.stepName, descriptor);
9
+ this.descriptor = descriptor;
10
+ }
11
+ stepDescription() {
12
+ return `Navigate home`;
13
+ }
14
+ static fromYaml(_stepName, stepDescriptor) {
15
+ return new NavigateHomeStep(stepDescriptor);
16
+ }
17
+ }
18
+ exports.NavigateHomeStep = NavigateHomeStep;
19
+ NavigateHomeStep.stepName = STEP_NAME;
20
+ NavigateHomeStep.yamlMablScriptNames = [NavigateHomeStep.stepName];
21
+ NavigateHomeStep.stepVersion = 2;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.humanizeScrollInformation = exports.formatPercentageVal = exports.ScrollStep = void 0;
4
+ const MablStepV2_1 = require("../../MablStepV2");
5
+ const STEP_NAME = 'Scroll';
6
+ class ScrollStep extends MablStepV2_1.MablStepV2 {
7
+ constructor(descriptor) {
8
+ super(ScrollStep.stepName, descriptor);
9
+ }
10
+ stepDescription() {
11
+ return humanizeScrollInformation(this.descriptor.coordinates);
12
+ }
13
+ static fromYaml(_stepName, stepDescriptor) {
14
+ return new ScrollStep(stepDescriptor);
15
+ }
16
+ }
17
+ exports.ScrollStep = ScrollStep;
18
+ ScrollStep.stepName = STEP_NAME;
19
+ ScrollStep.yamlMablScriptNames = [ScrollStep.stepName];
20
+ ScrollStep.stepVersion = 2;
21
+ function formatPercentageVal(percent) {
22
+ return `${Math.round(percent * 10000) / 100}%`;
23
+ }
24
+ exports.formatPercentageVal = formatPercentageVal;
25
+ function humanizeScrollInformation(coordinates) {
26
+ const yScrollDistance = Math.abs(coordinates.to.yPercent - coordinates.from.yPercent);
27
+ const xScrollDistance = Math.abs(coordinates.to.xPercent - coordinates.from.xPercent);
28
+ if (yScrollDistance > xScrollDistance) {
29
+ const scrollDistanceFormatted = formatPercentageVal(yScrollDistance);
30
+ const scrollUp = coordinates.from.yPercent < coordinates.to.yPercent;
31
+ return `Scroll ${scrollUp ? 'up' : 'down'} ${scrollDistanceFormatted} of the screen`;
32
+ }
33
+ const scrollDistanceFormatted = formatPercentageVal(xScrollDistance);
34
+ const swipeRight = coordinates.from.xPercent < coordinates.to.xPercent;
35
+ return `Swipe ${swipeRight ? 'right' : 'left'} ${scrollDistanceFormatted} of the screen`;
36
+ }
37
+ exports.humanizeScrollInformation = humanizeScrollInformation;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetOrientationStep = void 0;
4
+ const MablStepV2_1 = require("../../MablStepV2");
5
+ const STEP_NAME = 'SetOrientation';
6
+ class SetOrientationStep extends MablStepV2_1.MablStepV2 {
7
+ constructor(descriptor) {
8
+ super(SetOrientationStep.stepName, descriptor);
9
+ }
10
+ stepDescription() {
11
+ return `Set orientation of device to ${this.descriptor.orientation.toLowerCase()}`;
12
+ }
13
+ static fromYaml(_stepName, stepDescriptor) {
14
+ return new SetOrientationStep(stepDescriptor);
15
+ }
16
+ }
17
+ exports.SetOrientationStep = SetOrientationStep;
18
+ SetOrientationStep.stepName = STEP_NAME;
19
+ SetOrientationStep.yamlMablScriptNames = [SetOrientationStep.stepName];
20
+ SetOrientationStep.stepVersion = 2;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TapStep = void 0;
4
+ const MablStepV2_1 = require("../../MablStepV2");
5
+ const TapStepDescriptor_1 = require("../../types/mobile/TapStepDescriptor");
6
+ const MobileFindAction_1 = require("./actions/MobileFindAction");
7
+ const stepUtil_1 = require("./stepUtil");
8
+ const MablAction_1 = require("../../MablAction");
9
+ class TapStep extends MablStepV2_1.MablStepV2 {
10
+ constructor(descriptor) {
11
+ super(TapStep.stepName, descriptor);
12
+ this.findAction = MobileFindAction_1.MobileFindAction.fromDescriptor(this.descriptor.find);
13
+ this.actions = [this.findAction];
14
+ }
15
+ getInputVariables() {
16
+ const { find } = this.descriptor;
17
+ return MablAction_1.MablAction.findUniqueVariableReferencesInValue(find);
18
+ }
19
+ stepDescription() {
20
+ let prependedText;
21
+ switch (this.descriptor.type) {
22
+ case TapStepDescriptor_1.TapType.long:
23
+ prependedText = `Perform long press on `;
24
+ break;
25
+ default:
26
+ prependedText = `Tap on`;
27
+ }
28
+ return (0, stepUtil_1.getDescriptionForMobileStep)(prependedText, this.descriptor);
29
+ }
30
+ static fromYaml(_stepName, stepDescriptor) {
31
+ return new TapStep(stepDescriptor);
32
+ }
33
+ }
34
+ exports.TapStep = TapStep;
35
+ TapStep.stepName = 'Tap';
36
+ TapStep.yamlMablScriptNames = [TapStep.stepName];
37
+ TapStep.stepVersion = 2;