@mablhq/mabl-cli 1.10.10 → 1.11.15

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 (27) hide show
  1. package/browserLauncher/elementHandle.js +11 -0
  2. package/browserLauncher/playwrightBrowserLauncher/internals.js +2 -0
  3. package/browserLauncher/playwrightBrowserLauncher/playwrightBrowser.js +9 -13
  4. package/browserLauncher/playwrightBrowserLauncher/playwrightBrowserLauncher.js +16 -8
  5. package/browserLauncher/playwrightBrowserLauncher/playwrightFrame.js +1 -1
  6. package/browserLauncher/playwrightBrowserLauncher/playwrightHttpRequest.js +46 -8
  7. package/browserLauncher/playwrightBrowserLauncher/playwrightHttpResponse.js +6 -5
  8. package/browserLauncher/playwrightBrowserLauncher/playwrightPage.js +55 -28
  9. package/browserLauncher/puppeteerBrowserLauncher/internals.js +2 -0
  10. package/browserLauncher/puppeteerBrowserLauncher/puppeteerBrowserLauncher.js +4 -1
  11. package/browserLauncher/puppeteerBrowserLauncher/puppeteerHttpRequest.js +3 -0
  12. package/browserLauncher/puppeteerBrowserLauncher/puppeteerPage.js +24 -10
  13. package/commands/commandUtil/awaitCompletion.js +4 -2
  14. package/commands/commandUtil/codeInsights.js +5 -2
  15. package/commands/deploy/deploy_cmds/create.js +2 -2
  16. package/commands/tests/mobileEmulationUtil.js +3 -3
  17. package/commands/tests/testsUtil.js +33 -21
  18. package/commands/tests/tests_cmds/import.js +10 -1
  19. package/core/execution/ApiTestUtils.js +18 -0
  20. package/domUtil/index.js +2 -0
  21. package/domUtil/index.js.LICENSE.txt +14 -0
  22. package/execution/index.js +1 -1
  23. package/mablscript/actions/JavaScriptAction.js +101 -38
  24. package/mablscript/types/ConditionDescriptor.js +6 -1
  25. package/mablscript/types/JavaScriptDescriptor.js +25 -9
  26. package/package.json +2 -2
  27. package/providers/exportRequestProvider.js +4 -2
@@ -1,15 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isJavaScriptActionDescriptor = exports.JavaScriptAction = void 0;
4
+ const domUtil_1 = require("../../domUtil");
4
5
  const MablAction_1 = require("../MablAction");
5
6
  const JavaScriptDescriptor_1 = require("../types/JavaScriptDescriptor");
6
7
  const MABLSCRIPT_NAME = 'evaluate_js';
7
8
  function isLegacySnippetReference(value) {
8
9
  return typeof value === 'object' && !!value.id && !('invariant_id' in value);
9
10
  }
10
- function isSnippetReference(value) {
11
+ function isReusableSnippetReference(value) {
11
12
  return typeof value === 'object' && !!value.id && !!value.invariant_id;
12
13
  }
14
+ function isInlineSnippetReference(value) {
15
+ return (typeof value === 'object' &&
16
+ typeof value.body === 'string' &&
17
+ Array.isArray(value.parameters) &&
18
+ !('id' in value) &&
19
+ !('invariant_id' in value));
20
+ }
13
21
  function isSnippetOptions(value) {
14
22
  return value && 'parameter_overrides' in value;
15
23
  }
@@ -36,11 +44,22 @@ class JavaScriptAction extends MablAction_1.MablAction {
36
44
  snippetInvariantId: id,
37
45
  };
38
46
  }
39
- else if (isSnippetReference(scriptOrSnippetReference)) {
47
+ else if (isReusableSnippetReference(scriptOrSnippetReference)) {
40
48
  const { id, invariant_id } = scriptOrSnippetReference;
41
49
  this.javaScript = {
42
50
  snippetId: id,
43
51
  snippetInvariantId: invariant_id,
52
+ parameterOverrides: [],
53
+ };
54
+ const snippetOptions = args[1];
55
+ if (isSnippetOptions(snippetOptions)) {
56
+ this.javaScript.parameterOverrides = snippetOptions.parameter_overrides;
57
+ }
58
+ }
59
+ else if (isInlineSnippetReference(scriptOrSnippetReference)) {
60
+ this.javaScript = {
61
+ inlineSnippet: scriptOrSnippetReference,
62
+ parameterOverrides: [],
44
63
  };
45
64
  const snippetOptions = args[1];
46
65
  if (isSnippetOptions(snippetOptions)) {
@@ -54,22 +73,53 @@ class JavaScriptAction extends MablAction_1.MablAction {
54
73
  toDescriptor() {
55
74
  return { javaScript: this.javaScript };
56
75
  }
76
+ static fromDescriptor(descriptor) {
77
+ const { javaScript } = descriptor;
78
+ if (JavaScriptDescriptor_1.isReusableSnippetDescriptor(javaScript)) {
79
+ return new JavaScriptAction(JavaScriptAction.mablscriptName, [
80
+ {
81
+ id: javaScript.snippetId,
82
+ invariant_id: javaScript.snippetInvariantId,
83
+ },
84
+ { parameter_overrides: javaScript.parameterOverrides },
85
+ ]);
86
+ }
87
+ else if (JavaScriptDescriptor_1.isInlineSnippetDescriptor(javaScript)) {
88
+ return new JavaScriptAction(JavaScriptAction.mablscriptName, [
89
+ javaScript.inlineSnippet,
90
+ { parameter_overrides: javaScript.parameterOverrides },
91
+ ]);
92
+ }
93
+ else if (JavaScriptDescriptor_1.isLegacyReusableSnippetDescriptor(javaScript)) {
94
+ return new JavaScriptAction(JavaScriptAction.mablscriptName, [
95
+ {
96
+ id: javaScript.snippetInvariantId,
97
+ },
98
+ ]);
99
+ }
100
+ else if (JavaScriptDescriptor_1.isLegacyInlineJavaScriptDescriptor(javaScript)) {
101
+ return new JavaScriptAction(JavaScriptAction.mablscriptName, [
102
+ javaScript.encodedJS,
103
+ ]);
104
+ }
105
+ throw new Error(`Invalid javascript action descriptor: ${JSON.stringify(descriptor)}`);
106
+ }
57
107
  toYaml() {
58
108
  const actionYaml = {};
59
- if (JavaScriptDescriptor_1.isInlineJavaScriptDescriptor(this.javaScript)) {
60
- actionYaml.code = this.javaScript.encodedJS;
109
+ if (JavaScriptDescriptor_1.isReusableSnippetDescriptor(this.javaScript)) {
110
+ actionYaml.snippetId = this.javaScript.snippetId;
111
+ actionYaml.snippetInvariantId = this.javaScript.snippetInvariantId;
112
+ actionYaml.parameterOverrides = this.javaScript.parameterOverrides;
61
113
  }
62
- else if (JavaScriptDescriptor_1.isSnippetJavaScriptDescriptor(this.javaScript)) {
63
- if (this.javaScript.snippetId) {
64
- actionYaml.snippetId = this.javaScript.snippetId;
65
- actionYaml.snippetInvariantId = this.javaScript.snippetInvariantId;
66
- }
67
- else {
68
- actionYaml.snippetId = this.javaScript.snippetInvariantId;
69
- }
70
- if (this.javaScript.parameterOverrides) {
71
- actionYaml.parameterOverrides = this.javaScript.parameterOverrides;
72
- }
114
+ else if (JavaScriptDescriptor_1.isInlineSnippetDescriptor(this.javaScript)) {
115
+ actionYaml.snippet = this.javaScript.inlineSnippet;
116
+ actionYaml.parameterOverrides = this.javaScript.parameterOverrides;
117
+ }
118
+ else if (JavaScriptDescriptor_1.isLegacyReusableSnippetDescriptor(this.javaScript)) {
119
+ actionYaml.snippetId = this.javaScript.snippetInvariantId;
120
+ }
121
+ else if (JavaScriptDescriptor_1.isLegacyInlineJavaScriptDescriptor(this.javaScript)) {
122
+ actionYaml.code = this.javaScript.encodedJS;
73
123
  }
74
124
  else {
75
125
  throw new Error(`Cannot export action to yaml: ${JSON.stringify(this.javaScript)}`);
@@ -87,38 +137,51 @@ class JavaScriptAction extends MablAction_1.MablAction {
87
137
  if (formatted.code) {
88
138
  args.push(formatted.code);
89
139
  }
140
+ else if (formatted.snippet) {
141
+ args.push(formatted.snippet);
142
+ }
143
+ else if (formatted.snippetInvariantId && formatted.snippetId) {
144
+ args.push({
145
+ id: formatted.snippetId,
146
+ invariant_id: formatted.snippetInvariantId,
147
+ });
148
+ }
90
149
  else if (formatted.snippetId) {
91
- args.push(formatted.snippetInvariantId
92
- ? {
93
- id: formatted.snippetId,
94
- invariant_id: formatted.snippetInvariantId,
95
- }
96
- : {
97
- id: formatted.snippetId,
98
- });
99
- if (snippetOptions) {
100
- args.push(snippetOptions);
101
- }
150
+ args.push({
151
+ id: formatted.snippetId,
152
+ });
102
153
  }
103
154
  else {
104
155
  throw new Error(`Cannot import action from yaml: ${JSON.stringify(formatted)}`);
105
156
  }
157
+ if (snippetOptions) {
158
+ args.push(snippetOptions);
159
+ }
106
160
  return new JavaScriptAction(MABLSCRIPT_NAME, args);
107
161
  }
108
162
  toMablscript() {
109
- if (JavaScriptDescriptor_1.isInlineJavaScriptDescriptor(this.javaScript)) {
110
- return `evaluate_js("${this.javaScript.encodedJS}")`;
163
+ if (JavaScriptDescriptor_1.isReusableSnippetDescriptor(this.javaScript)) {
164
+ const snippetReference = domUtil_1.buildStepArgumentString({
165
+ id: this.javaScript.snippetId,
166
+ invariant_id: this.javaScript.snippetInvariantId,
167
+ snippet_type: 'javascript',
168
+ });
169
+ const snippetOptions = `, {parameter_overrides: ${domUtil_1.buildStepArgumentString(this.javaScript.parameterOverrides)}}`;
170
+ return `evaluate_js(${snippetReference}${snippetOptions})`;
111
171
  }
112
- if (JavaScriptDescriptor_1.isSnippetJavaScriptDescriptor(this.javaScript)) {
113
- const maybeInvariantIdString = this.javaScript.snippetId
114
- ? `id: "${this.javaScript.snippetId}", invariant_id: "${this.javaScript.snippetInvariantId}"`
115
- : `id: "${this.javaScript.snippetInvariantId}"`;
116
- const maybeSnippetOptionsString = this.javaScript.parameterOverrides
117
- ? `, {parameter_overrides: [${this.javaScript.parameterOverrides
118
- .map(override => `{id: "${override.id}", value: "${override.value}"}`)
119
- .join(', ')}]}`
120
- : '';
121
- return `evaluate_js({${maybeInvariantIdString}, snippet_type: "javascript"}${maybeSnippetOptionsString})`;
172
+ if (JavaScriptDescriptor_1.isInlineSnippetDescriptor(this.javaScript)) {
173
+ const snippetReference = domUtil_1.buildStepArgumentString({
174
+ ...this.javaScript.inlineSnippet,
175
+ snippet_type: 'javascript',
176
+ });
177
+ const snippetOptions = `, {parameter_overrides: ${domUtil_1.buildStepArgumentString(this.javaScript.parameterOverrides)}}`;
178
+ return `evaluate_js(${snippetReference}${snippetOptions})`;
179
+ }
180
+ if (JavaScriptDescriptor_1.isLegacyReusableSnippetDescriptor(this.javaScript)) {
181
+ return `evaluate_js({id: "${this.javaScript.snippetInvariantId}", snippet_type: "javascript"})`;
182
+ }
183
+ if (JavaScriptDescriptor_1.isLegacyInlineJavaScriptDescriptor(this.javaScript)) {
184
+ return `evaluate_js("${this.javaScript.encodedJS}")`;
122
185
  }
123
186
  throw new Error(`Cannot export action to mablscript: ${JSON.stringify(this.javaScript)}`);
124
187
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PresenceEvaluationType = exports.isPresenceCondition = exports.ComparisonType = exports.ConditionType = void 0;
3
+ exports.PresenceEvaluationType = exports.isAbsenceExpected = exports.isPresenceCondition = exports.ComparisonType = exports.ConditionType = void 0;
4
4
  var ConditionType;
5
5
  (function (ConditionType) {
6
6
  ConditionType["Comparison"] = "comparison";
@@ -36,6 +36,11 @@ function isPresenceCondition(value) {
36
36
  return value.conditionType === ConditionType.Presence;
37
37
  }
38
38
  exports.isPresenceCondition = isPresenceCondition;
39
+ function isAbsenceExpected(value) {
40
+ return (isPresenceCondition(value) &&
41
+ value.presenceType === PresenceEvaluationType.NOT_PRESENT);
42
+ }
43
+ exports.isAbsenceExpected = isAbsenceExpected;
39
44
  var PresenceEvaluationType;
40
45
  (function (PresenceEvaluationType) {
41
46
  PresenceEvaluationType["NOT_PRESENT"] = "not_present";
@@ -1,20 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isSnippetJavaScriptDescriptor = exports.isInlineJavaScriptDescriptor = exports.isJavaScriptDescriptor = void 0;
3
+ exports.isReusableSnippetDescriptor = exports.isInlineSnippetDescriptor = exports.isLegacyReusableSnippetDescriptor = exports.isLegacyInlineJavaScriptDescriptor = exports.isJavaScriptDescriptor = void 0;
4
4
  function isJavaScriptDescriptor(value) {
5
- return (isInlineJavaScriptDescriptor(value) || isSnippetJavaScriptDescriptor(value));
5
+ return (isLegacyInlineJavaScriptDescriptor(value) ||
6
+ isLegacyReusableSnippetDescriptor(value) ||
7
+ isInlineSnippetDescriptor(value) ||
8
+ isReusableSnippetDescriptor(value));
6
9
  }
7
10
  exports.isJavaScriptDescriptor = isJavaScriptDescriptor;
8
- function isInlineJavaScriptDescriptor(value) {
11
+ function isLegacyInlineJavaScriptDescriptor(value) {
12
+ return (value && typeof value === 'object' && typeof value.encodedJS === 'string');
13
+ }
14
+ exports.isLegacyInlineJavaScriptDescriptor = isLegacyInlineJavaScriptDescriptor;
15
+ function isLegacyReusableSnippetDescriptor(value) {
16
+ return (value &&
17
+ typeof value === 'object' &&
18
+ typeof value.snippetInvariantId === 'string' &&
19
+ !('snippetId' in value));
20
+ }
21
+ exports.isLegacyReusableSnippetDescriptor = isLegacyReusableSnippetDescriptor;
22
+ function isInlineSnippetDescriptor(value) {
9
23
  return (value &&
10
24
  typeof value === 'object' &&
11
- typeof value.encodedJS === 'string' &&
12
- !('snippetInvariantId' in value));
25
+ typeof value.inlineSnippet === 'object' &&
26
+ Array.isArray(value.parameterOverrides));
13
27
  }
14
- exports.isInlineJavaScriptDescriptor = isInlineJavaScriptDescriptor;
15
- function isSnippetJavaScriptDescriptor(value) {
28
+ exports.isInlineSnippetDescriptor = isInlineSnippetDescriptor;
29
+ function isReusableSnippetDescriptor(value) {
16
30
  return (value &&
17
31
  typeof value === 'object' &&
18
- typeof value.snippetInvariantId === 'string');
32
+ typeof value.snippetInvariantId === 'string' &&
33
+ typeof value.snippetId === 'string' &&
34
+ Array.isArray(value.parameterOverrides));
19
35
  }
20
- exports.isSnippetJavaScriptDescriptor = isSnippetJavaScriptDescriptor;
36
+ exports.isReusableSnippetDescriptor = isReusableSnippetDescriptor;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mablhq/mabl-cli",
3
- "version": "1.10.10",
3
+ "version": "1.11.15",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "The official mabl command line interface tool",
6
6
  "main": "index.js",
@@ -25,7 +25,7 @@
25
25
  "postinstall": "node ./util/postInstallMessage.js"
26
26
  },
27
27
  "dependencies": {
28
- "@playwright/test": "^1.13.1",
28
+ "@playwright/test": "^1.15.2",
29
29
  "@types/fs-extra": "^8.1.0",
30
30
  "@types/serve-handler": "^6.1.0",
31
31
  "@types/tmp": "^0.2.0",
@@ -66,8 +66,10 @@ class ExportRequestProvider {
66
66
  const notTimedOut = Date.now() - this.exportStartEpochMilliseconds <
67
67
  this.pollingTimeoutMilliseconds;
68
68
  if (notTimedOut && this.isExportIncomplete()) {
69
- return new Promise(resolve => {
70
- setTimeout(() => this.awaitCompletion().then(() => resolve()), this.pollingIntervalMilliseconds);
69
+ return new Promise((resolve, reject) => {
70
+ setTimeout(() => this.awaitCompletion()
71
+ .then(() => resolve())
72
+ .catch(error => reject(error)), this.pollingIntervalMilliseconds);
71
73
  });
72
74
  }
73
75
  }