@testingbot/cli 1.0.9 → 1.1.0
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.
- package/README.md +21 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +26 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +1 -1
- package/dist/models/maestro_options.d.ts +8 -0
- package/dist/models/maestro_options.d.ts.map +1 -1
- package/dist/models/maestro_options.js +22 -0
- package/dist/models/xcuitest_options.d.ts +3 -0
- package/dist/models/xcuitest_options.d.ts.map +1 -1
- package/dist/models/xcuitest_options.js +6 -0
- package/dist/providers/base_provider.d.ts +9 -0
- package/dist/providers/base_provider.d.ts.map +1 -1
- package/dist/providers/base_provider.js +11 -0
- package/dist/providers/espresso.d.ts +1 -1
- package/dist/providers/espresso.d.ts.map +1 -1
- package/dist/providers/espresso.js +3 -3
- package/dist/providers/maestro.d.ts +79 -0
- package/dist/providers/maestro.d.ts.map +1 -1
- package/dist/providers/maestro.js +463 -81
- package/dist/providers/xcuitest.d.ts +5 -1
- package/dist/providers/xcuitest.d.ts.map +1 -1
- package/dist/providers/xcuitest.js +23 -11
- package/dist/upload.d.ts +1 -0
- package/dist/upload.d.ts.map +1 -1
- package/dist/upload.js +6 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -92,6 +92,13 @@ testingbot maestro <app> <flows...> [options]
|
|
|
92
92
|
- `app` - Path to your app file (.apk, .ipa, .app, or .zip)
|
|
93
93
|
- `flows` - One or more paths to flow files (.yaml/.yml), directories, .zip files, or glob patterns
|
|
94
94
|
|
|
95
|
+
**App Options:**
|
|
96
|
+
|
|
97
|
+
| Option | Description |
|
|
98
|
+
|--------|-------------|
|
|
99
|
+
| `--app <path>` | Path to the application under test (alternative to the positional `app` argument) |
|
|
100
|
+
| `--other-app <path-or-url>` | Additional companion app to install on the device alongside `--app`. Accepts a local file path (`.apk`, `.ipa`, `.app`, `.zip`) **or** a `tb://<appkey>` / `http(s)://...` URL — local paths are uploaded; URLs are passed through to the run as-is. Repeatable, **max 4** entries. |
|
|
101
|
+
|
|
95
102
|
**Device Options:**
|
|
96
103
|
|
|
97
104
|
| Option | Description |
|
|
@@ -147,8 +154,11 @@ testingbot maestro <app> <flows...> [options]
|
|
|
147
154
|
| Option | Description |
|
|
148
155
|
|--------|-------------|
|
|
149
156
|
| `--shard-split <number>` | Split flows into N parallel sessions for faster execution |
|
|
157
|
+
| `--retry <count>` | Retry failed flows up to N times (0-2, default 0). Re-runs only the flows (or shards) that failed, the moment they fail, while the rest of the run continues. Cannot be combined with `--async`. |
|
|
150
158
|
| `--ignore-checksum-check` | Skip checksum verification and always upload the app |
|
|
151
159
|
|
|
160
|
+
> **Note on `--retry`:** a failed flow/shard is retried immediately — as soon as it fails — without waiting for the other flows in the run to finish. Retry attempts appear live in the flow table marked with a `↻` icon. Each flow is retried independently up to N times, stopping as soon as that flow passes. Pass/fail uses the result of the **last** attempt per flow (last-attempt-wins), consistently across the CLI exit code, the TestingBot dashboard, and reports downloaded via `--report`.
|
|
161
|
+
|
|
152
162
|
**CI/CD Integration:**
|
|
153
163
|
|
|
154
164
|
| Option | Description |
|
|
@@ -179,6 +189,14 @@ testingbot maestro app.apk ./flows --groups "smoke,critical"
|
|
|
179
189
|
# With environment variables
|
|
180
190
|
testingbot maestro app.apk ./flows -e API_URL=https://staging.example.com -e API_KEY=secret
|
|
181
191
|
|
|
192
|
+
# With companion apps installed alongside the main app (up to 4)
|
|
193
|
+
# Each --other-app can be a local file (uploaded) or a tb:// / http(s):// URL (passed through)
|
|
194
|
+
testingbot maestro --app main.apk \
|
|
195
|
+
--other-app helper.apk \
|
|
196
|
+
--other-app tb://existing-appkey \
|
|
197
|
+
--other-app https://example.com/mock-server.apk \
|
|
198
|
+
./flows
|
|
199
|
+
|
|
182
200
|
# Download JUnit report
|
|
183
201
|
testingbot maestro app.apk ./flows --report junit --report-output-dir ./reports
|
|
184
202
|
|
|
@@ -197,6 +215,9 @@ testingbot maestro app.apk ./flows --async
|
|
|
197
215
|
# Split flows across 3 shards, grouping all flows over 3 parallel sessions
|
|
198
216
|
testingbot maestro app.apk ./flows --shard-split 3
|
|
199
217
|
|
|
218
|
+
# Retry failed flows up to 2 times (re-runs only the flows that failed)
|
|
219
|
+
testingbot maestro app.apk ./flows --retry 2
|
|
220
|
+
|
|
200
221
|
# CI/CD integration with Git metadata
|
|
201
222
|
testingbot maestro app.apk ./flows \
|
|
202
223
|
--commit-sha "abc123def" \
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA4rB9B,eAAe,OAAO,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -185,6 +185,10 @@ program
|
|
|
185
185
|
.argument('[flows...]', 'Paths to flow files, directories, or glob patterns (can specify multiple)')
|
|
186
186
|
// App and flows options
|
|
187
187
|
.option('--app <path>', 'Path to application under test (.apk, .ipa, .app, or .zip).')
|
|
188
|
+
.option('--other-app <path>', 'Additional app to install alongside --app (.apk, .ipa, .app, or .zip). Repeatable, max 4.', (val, acc) => {
|
|
189
|
+
acc.push(val);
|
|
190
|
+
return acc;
|
|
191
|
+
}, [])
|
|
188
192
|
// Device configuration
|
|
189
193
|
.option('--device <device>', 'Device name to use for testing (e.g., "Pixel 9", "iPhone 17").')
|
|
190
194
|
.option('--platform <platform>', 'Platform name: Android or iOS.', (val) => val)
|
|
@@ -196,7 +200,10 @@ program
|
|
|
196
200
|
.option('--timezone <timezone>', 'Device timezone (e.g., "America/New_York", "Europe/London").')
|
|
197
201
|
// Test metadata
|
|
198
202
|
.option('--name <name>', 'Name for this Maestro run.')
|
|
199
|
-
.option('--groups <names>', 'Tag the test session with one or more groups (comma-separated).', (val) => val
|
|
203
|
+
.option('--groups <names>', 'Tag the test session with one or more groups (comma-separated).', (val) => val
|
|
204
|
+
.split(',')
|
|
205
|
+
.map((g) => g.trim())
|
|
206
|
+
.filter((g) => g.length > 0))
|
|
200
207
|
// Network and geo
|
|
201
208
|
.option('--throttle-network <speed>', 'Network throttling: 4G, 3G, Edge, airplane, or disable.', (val) => val)
|
|
202
209
|
.option('--geo-country-code <code>', 'Geographic IP location (ISO country code, e.g., "US", "DE").')
|
|
@@ -213,6 +220,7 @@ program
|
|
|
213
220
|
.option('--maestro-version <version>', 'Maestro version to use (e.g., "2.0.10").')
|
|
214
221
|
// Execution mode
|
|
215
222
|
.option('-q, --quiet', 'Quieter console output without progress updates.')
|
|
223
|
+
.option('--retry <count>', 'Retry failed flows up to N times (0-2, default 0). Stops as soon as a flow passes.', (val) => parseInt(val, 10), 0)
|
|
216
224
|
.option('--async', 'Start tests and exit immediately without waiting for results.')
|
|
217
225
|
.option('--dry-run', 'Validate and prepare everything but skip HTTP calls. Shows what would be sent.')
|
|
218
226
|
// Tunnel
|
|
@@ -259,6 +267,16 @@ program
|
|
|
259
267
|
if (missing.length > 0) {
|
|
260
268
|
throw new testingbot_error_1.default(`Missing required argument: ${missing.join(', ')}. Run "testingbot maestro --help" for usage.`);
|
|
261
269
|
}
|
|
270
|
+
const otherApps = Array.isArray(args.otherApp)
|
|
271
|
+
? args.otherApp.slice()
|
|
272
|
+
: [];
|
|
273
|
+
// Commander stores the accumulator on a shared default array; reset it so
|
|
274
|
+
// values do not leak across repeated parses (e.g. in tests).
|
|
275
|
+
if (Array.isArray(args.otherApp))
|
|
276
|
+
args.otherApp.length = 0;
|
|
277
|
+
if (otherApps.length > 4) {
|
|
278
|
+
throw new testingbot_error_1.default(`Too many --other-app entries (${otherApps.length}). Maximum is 4.`);
|
|
279
|
+
}
|
|
262
280
|
const credentials = await auth_1.default.getCredentials({
|
|
263
281
|
apiKey: args.apiKey,
|
|
264
282
|
apiSecret: args.apiSecret,
|
|
@@ -315,11 +333,13 @@ program
|
|
|
315
333
|
artifactsOutputDir: args.artifactsOutputDir,
|
|
316
334
|
ignoreChecksumCheck: args.ignoreChecksumCheck,
|
|
317
335
|
shardSplit: args.shardSplit,
|
|
336
|
+
retry: args.retry,
|
|
318
337
|
debug: args.debug,
|
|
319
338
|
googlePlayStore: args.googlePlay,
|
|
320
339
|
configFile: args.config,
|
|
321
340
|
groups: args.groups,
|
|
322
341
|
metadata,
|
|
342
|
+
otherApps,
|
|
323
343
|
});
|
|
324
344
|
if (args.debug) {
|
|
325
345
|
(0, logger_1.enableDebugLogging)();
|
|
@@ -380,6 +400,7 @@ program
|
|
|
380
400
|
// Authentication
|
|
381
401
|
.option('--api-key <key>', 'TestingBot API key.')
|
|
382
402
|
.option('--api-secret <secret>', 'TestingBot API secret.')
|
|
403
|
+
.option('--debug', 'Enable debug logging of API responses.')
|
|
383
404
|
.action(async (appFileArg, testAppFileArg, args) => {
|
|
384
405
|
try {
|
|
385
406
|
// Positional arguments take precedence, fall back to options
|
|
@@ -432,8 +453,12 @@ program
|
|
|
432
453
|
dryRun: args.dryRun,
|
|
433
454
|
report: args.report,
|
|
434
455
|
reportOutputDir: args.reportOutputDir,
|
|
456
|
+
debug: args.debug,
|
|
435
457
|
metadata,
|
|
436
458
|
});
|
|
459
|
+
if (args.debug) {
|
|
460
|
+
(0, logger_1.enableDebugLogging)();
|
|
461
|
+
}
|
|
437
462
|
const xcuitest = new xcuitest_1.default(credentials, options);
|
|
438
463
|
const result = await xcuitest.run();
|
|
439
464
|
if (!result.success) {
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,QAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,QAAA,MAAM,MAAM,8BAUV,CAAC;AAIH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,eAAe,MAAM,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -7,7 +7,6 @@ exports.enableDebugLogging = enableDebugLogging;
|
|
|
7
7
|
const picocolors_1 = __importDefault(require("picocolors"));
|
|
8
8
|
const tracer_1 = __importDefault(require("tracer"));
|
|
9
9
|
const logger = tracer_1.default.colorConsole({
|
|
10
|
-
level: 'info',
|
|
11
10
|
format: '{{timestamp}} {{message}}',
|
|
12
11
|
dateformat: 'HH:MM:ss.L',
|
|
13
12
|
filters: [
|
|
@@ -18,6 +17,7 @@ const logger = tracer_1.default.colorConsole({
|
|
|
18
17
|
},
|
|
19
18
|
],
|
|
20
19
|
});
|
|
20
|
+
tracer_1.default.setLevel('info');
|
|
21
21
|
function enableDebugLogging() {
|
|
22
22
|
tracer_1.default.setLevel('debug');
|
|
23
23
|
}
|
|
@@ -35,10 +35,13 @@ export interface MaestroRunOptions {
|
|
|
35
35
|
env?: Record<string, string>;
|
|
36
36
|
version?: string;
|
|
37
37
|
}
|
|
38
|
+
export declare const MAX_OTHER_APPS = 4;
|
|
39
|
+
export declare const MAX_RETRY = 2;
|
|
38
40
|
export default class MaestroOptions {
|
|
39
41
|
private static isIpaFile;
|
|
40
42
|
private _app;
|
|
41
43
|
private _flows;
|
|
44
|
+
private _otherApps;
|
|
42
45
|
private _device?;
|
|
43
46
|
private _includeTags?;
|
|
44
47
|
private _excludeTags?;
|
|
@@ -64,6 +67,7 @@ export default class MaestroOptions {
|
|
|
64
67
|
private _artifactsOutputDir?;
|
|
65
68
|
private _ignoreChecksumCheck;
|
|
66
69
|
private _shardSplit?;
|
|
70
|
+
private _retry;
|
|
67
71
|
private _debug;
|
|
68
72
|
private _configFile?;
|
|
69
73
|
private _groups?;
|
|
@@ -94,14 +98,17 @@ export default class MaestroOptions {
|
|
|
94
98
|
artifactsOutputDir?: string;
|
|
95
99
|
ignoreChecksumCheck?: boolean;
|
|
96
100
|
shardSplit?: number;
|
|
101
|
+
retry?: number;
|
|
97
102
|
debug?: boolean;
|
|
98
103
|
configFile?: string;
|
|
99
104
|
groups?: string[];
|
|
100
105
|
googlePlayStore?: boolean;
|
|
101
106
|
metadata?: RunMetadata;
|
|
107
|
+
otherApps?: string[];
|
|
102
108
|
});
|
|
103
109
|
get app(): string;
|
|
104
110
|
get flows(): string[];
|
|
111
|
+
get otherApps(): string[];
|
|
105
112
|
get device(): string | undefined;
|
|
106
113
|
get includeTags(): string[] | undefined;
|
|
107
114
|
get excludeTags(): string[] | undefined;
|
|
@@ -127,6 +134,7 @@ export default class MaestroOptions {
|
|
|
127
134
|
get artifactsOutputDir(): string | undefined;
|
|
128
135
|
get ignoreChecksumCheck(): boolean;
|
|
129
136
|
get shardSplit(): number | undefined;
|
|
137
|
+
get retry(): number;
|
|
130
138
|
get debug(): boolean;
|
|
131
139
|
get configFile(): string | undefined;
|
|
132
140
|
get metadata(): RunMetadata | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_RETRY = exports.MAX_OTHER_APPS = void 0;
|
|
3
4
|
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
exports.MAX_OTHER_APPS = 4;
|
|
6
|
+
// Mirror devicecloud.dev: retries are capped at 2 (max 3 total runs per flow).
|
|
7
|
+
exports.MAX_RETRY = 2;
|
|
4
8
|
class MaestroOptions {
|
|
5
9
|
static isIpaFile(app) {
|
|
6
10
|
return app?.toLowerCase().endsWith('.ipa') ?? false;
|
|
7
11
|
}
|
|
8
12
|
_app;
|
|
9
13
|
_flows;
|
|
14
|
+
_otherApps;
|
|
10
15
|
_device;
|
|
11
16
|
_includeTags;
|
|
12
17
|
_excludeTags;
|
|
@@ -33,6 +38,7 @@ class MaestroOptions {
|
|
|
33
38
|
_artifactsOutputDir;
|
|
34
39
|
_ignoreChecksumCheck;
|
|
35
40
|
_shardSplit;
|
|
41
|
+
_retry;
|
|
36
42
|
_debug;
|
|
37
43
|
_configFile;
|
|
38
44
|
_groups;
|
|
@@ -42,6 +48,10 @@ class MaestroOptions {
|
|
|
42
48
|
constructor(app, flows, device, options) {
|
|
43
49
|
this._app = app;
|
|
44
50
|
this._flows = flows ? (Array.isArray(flows) ? flows : [flows]) : [];
|
|
51
|
+
this._otherApps = options?.otherApps ?? [];
|
|
52
|
+
if (this._otherApps.length > exports.MAX_OTHER_APPS) {
|
|
53
|
+
throw new Error(`Too many other apps (${this._otherApps.length}). Maximum is ${exports.MAX_OTHER_APPS}.`);
|
|
54
|
+
}
|
|
45
55
|
this._device = device;
|
|
46
56
|
this._includeTags = options?.includeTags;
|
|
47
57
|
this._excludeTags = options?.excludeTags;
|
|
@@ -73,6 +83,12 @@ class MaestroOptions {
|
|
|
73
83
|
this._artifactsOutputDir = options?.artifactsOutputDir;
|
|
74
84
|
this._ignoreChecksumCheck = options?.ignoreChecksumCheck ?? false;
|
|
75
85
|
this._shardSplit = options?.shardSplit;
|
|
86
|
+
this._retry = options?.retry ?? 0;
|
|
87
|
+
if (!Number.isInteger(this._retry) ||
|
|
88
|
+
this._retry < 0 ||
|
|
89
|
+
this._retry > exports.MAX_RETRY) {
|
|
90
|
+
throw new Error(`Invalid --retry value (${options?.retry}). It must be an integer between 0 and ${exports.MAX_RETRY}.`);
|
|
91
|
+
}
|
|
76
92
|
this._debug = options?.debug ?? false;
|
|
77
93
|
this._configFile = options?.configFile;
|
|
78
94
|
this._groups = options?.groups;
|
|
@@ -85,6 +101,9 @@ class MaestroOptions {
|
|
|
85
101
|
get flows() {
|
|
86
102
|
return this._flows;
|
|
87
103
|
}
|
|
104
|
+
get otherApps() {
|
|
105
|
+
return this._otherApps;
|
|
106
|
+
}
|
|
88
107
|
get device() {
|
|
89
108
|
return this._device;
|
|
90
109
|
}
|
|
@@ -160,6 +179,9 @@ class MaestroOptions {
|
|
|
160
179
|
get shardSplit() {
|
|
161
180
|
return this._shardSplit;
|
|
162
181
|
}
|
|
182
|
+
get retry() {
|
|
183
|
+
return this._retry;
|
|
184
|
+
}
|
|
163
185
|
get debug() {
|
|
164
186
|
return this._debug;
|
|
165
187
|
}
|
|
@@ -55,6 +55,7 @@ export default class XCUITestOptions {
|
|
|
55
55
|
private _dryRun;
|
|
56
56
|
private _report?;
|
|
57
57
|
private _reportOutputDir?;
|
|
58
|
+
private _debug;
|
|
58
59
|
private _metadata?;
|
|
59
60
|
constructor(app: string, testApp: string, device?: string, options?: {
|
|
60
61
|
version?: string;
|
|
@@ -76,6 +77,7 @@ export default class XCUITestOptions {
|
|
|
76
77
|
dryRun?: boolean;
|
|
77
78
|
report?: ReportFormat;
|
|
78
79
|
reportOutputDir?: string;
|
|
80
|
+
debug?: boolean;
|
|
79
81
|
metadata?: RunMetadata;
|
|
80
82
|
});
|
|
81
83
|
get app(): string;
|
|
@@ -100,6 +102,7 @@ export default class XCUITestOptions {
|
|
|
100
102
|
get dryRun(): boolean;
|
|
101
103
|
get report(): ReportFormat | undefined;
|
|
102
104
|
get reportOutputDir(): string | undefined;
|
|
105
|
+
get debug(): boolean;
|
|
103
106
|
get metadata(): RunMetadata | undefined;
|
|
104
107
|
getCapabilities(): XCUITestCapabilities;
|
|
105
108
|
getXCUITestOptions(): XCUITestRunOptions | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcuitest_options.d.ts","sourceRoot":"","sources":["../../src/models/xcuitest_options.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"xcuitest_options.d.ts","sourceRoot":"","sources":["../../src/models/xcuitest_options.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5C,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,KAAK,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IAEjC,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gBAAgB,CAAC,EAAE,eAAe,GAAG,oBAAoB,CAAC;CAC3D;AAED,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IAExB,OAAO,CAAC,YAAY,CAAC,CAAc;IAEnC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,gBAAgB,CAAC,CAAyC;IAElE,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,iBAAiB,CAAC,CAAS;IAEnC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAElC,OAAO,CAAC,MAAM,CAAU;IAExB,OAAO,CAAC,SAAS,CAAC,CAAc;gBAG9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,eAAe,GAAG,oBAAoB,CAAC;QACzD,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,WAAW,CAAC;KACxB;IAwCH,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,OAAO,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,IAAW,IAAI,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,IAAW,WAAW,IAAI,WAAW,GAAG,SAAS,CAEhD;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED,IAAW,eAAe,IACtB,eAAe,GACf,oBAAoB,GACpB,SAAS,CAEZ;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAEhD;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,MAAM,IAAI,YAAY,GAAG,SAAS,CAE5C;IAED,IAAW,eAAe,IAAI,MAAM,GAAG,SAAS,CAE/C;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,QAAQ,IAAI,WAAW,GAAG,SAAS,CAE7C;IAEM,eAAe,IAAI,oBAAoB;IAmBvC,kBAAkB,IAAI,kBAAkB,GAAG,SAAS;CAc5D"}
|
|
@@ -34,6 +34,8 @@ class XCUITestOptions {
|
|
|
34
34
|
_dryRun;
|
|
35
35
|
_report;
|
|
36
36
|
_reportOutputDir;
|
|
37
|
+
// Debugging
|
|
38
|
+
_debug;
|
|
37
39
|
// Metadata
|
|
38
40
|
_metadata;
|
|
39
41
|
constructor(app, testApp, device, options) {
|
|
@@ -67,6 +69,7 @@ class XCUITestOptions {
|
|
|
67
69
|
this._dryRun = options?.dryRun ?? false;
|
|
68
70
|
this._report = options?.report;
|
|
69
71
|
this._reportOutputDir = options?.reportOutputDir;
|
|
72
|
+
this._debug = options?.debug ?? false;
|
|
70
73
|
this._metadata = options?.metadata;
|
|
71
74
|
}
|
|
72
75
|
get app() {
|
|
@@ -135,6 +138,9 @@ class XCUITestOptions {
|
|
|
135
138
|
get reportOutputDir() {
|
|
136
139
|
return this._reportOutputDir;
|
|
137
140
|
}
|
|
141
|
+
get debug() {
|
|
142
|
+
return this._debug;
|
|
143
|
+
}
|
|
138
144
|
get metadata() {
|
|
139
145
|
return this._metadata;
|
|
140
146
|
}
|
|
@@ -35,6 +35,15 @@ export default abstract class BaseProvider<TOptions extends BaseProviderOptions>
|
|
|
35
35
|
protected readonly MAX_POLL_INTERVAL_MS: number;
|
|
36
36
|
protected readonly POLL_BACKOFF_MULTIPLIER: number;
|
|
37
37
|
protected readonly MAX_POLL_DURATION_MS: number;
|
|
38
|
+
/**
|
|
39
|
+
* Whether a run/flow `success` field reported by the API indicates success.
|
|
40
|
+
* The API is inconsistent about the representation: some endpoints return a
|
|
41
|
+
* boolean (`true`/`false`) and others a number (`1`/`0`). A strict
|
|
42
|
+
* `success === 1` check silently treats a passing run reported as `true` as a
|
|
43
|
+
* failure, which is why a test that passes on TestingBot was shown as failed
|
|
44
|
+
* by the CLI. Accept both representations.
|
|
45
|
+
*/
|
|
46
|
+
protected isRunSuccessful(success: number | boolean | undefined): boolean;
|
|
38
47
|
/**
|
|
39
48
|
* Returns the next polling interval based on whether the status payload
|
|
40
49
|
* changed since the last poll. Resets to the minimum on change; otherwise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_provider.d.ts","sourceRoot":"","sources":["../../src/providers/base_provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base_provider.d.ts","sourceRoot":"","sources":["../../src/providers/base_provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,17 @@ class BaseProvider {
|
|
|
24
24
|
MAX_POLL_INTERVAL_MS = constants_1.POLLING.MAX_INTERVAL_MS;
|
|
25
25
|
POLL_BACKOFF_MULTIPLIER = constants_1.POLLING.BACKOFF_MULTIPLIER;
|
|
26
26
|
MAX_POLL_DURATION_MS = constants_1.POLLING.MAX_DURATION_MS;
|
|
27
|
+
/**
|
|
28
|
+
* Whether a run/flow `success` field reported by the API indicates success.
|
|
29
|
+
* The API is inconsistent about the representation: some endpoints return a
|
|
30
|
+
* boolean (`true`/`false`) and others a number (`1`/`0`). A strict
|
|
31
|
+
* `success === 1` check silently treats a passing run reported as `true` as a
|
|
32
|
+
* failure, which is why a test that passes on TestingBot was shown as failed
|
|
33
|
+
* by the CLI. Accept both representations.
|
|
34
|
+
*/
|
|
35
|
+
isRunSuccessful(success) {
|
|
36
|
+
return success === 1 || success === true;
|
|
37
|
+
}
|
|
27
38
|
/**
|
|
28
39
|
* Returns the next polling interval based on whether the status payload
|
|
29
40
|
* changed since the last poll. Resets to the minimum on change; otherwise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"espresso.d.ts","sourceRoot":"","sources":["../../src/providers/espresso.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAQhD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"espresso.d.ts","sourceRoot":"","sources":["../../src/providers/espresso.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAQhD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAGrC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY,CAAC,eAAe,CAAC;IACjE,SAAS,CAAC,QAAQ,CAAC,GAAG,yDACkC;IAExD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,oBAAoB,CAAS;gBAElB,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe;YAIvD,QAAQ;IAuCT,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;YA6G7B,SAAS;YAcT,aAAa;YAab,QAAQ;YA0DR,SAAS;YA4BT,iBAAiB;IAmG/B,OAAO,CAAC,gBAAgB;IA0CxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa;YAkBP,YAAY;IAwD1B,OAAO,CAAC,qBAAqB;IA6C7B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,mBAAmB;CAa5B"}
|
|
@@ -259,7 +259,7 @@ class Espresso extends base_provider_1.default {
|
|
|
259
259
|
if (!this.options.quiet) {
|
|
260
260
|
this.spinner.stop();
|
|
261
261
|
for (const run of status.runs) {
|
|
262
|
-
const passed = run.success
|
|
262
|
+
const passed = this.isRunSuccessful(run.success);
|
|
263
263
|
const symbol = passed ? picocolors_1.default.green('✔') : picocolors_1.default.red('✘');
|
|
264
264
|
const statusText = passed
|
|
265
265
|
? picocolors_1.default.green('Test completed successfully')
|
|
@@ -267,7 +267,7 @@ class Espresso extends base_provider_1.default {
|
|
|
267
267
|
console.log(` ${symbol} Run ${run.id} ${picocolors_1.default.dim(`(${this.getRunDisplayName(run)})`)}: ${statusText}`);
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
|
-
const allSucceeded = status.runs.every((run) => run.success
|
|
270
|
+
const allSucceeded = status.runs.every((run) => this.isRunSuccessful(run.success));
|
|
271
271
|
if (allSucceeded) {
|
|
272
272
|
(0, terminal_title_1.setTitle)('espresso · ✔ passed');
|
|
273
273
|
if (!this.options.quiet) {
|
|
@@ -275,7 +275,7 @@ class Espresso extends base_provider_1.default {
|
|
|
275
275
|
}
|
|
276
276
|
}
|
|
277
277
|
else {
|
|
278
|
-
const failedRuns = status.runs.filter((run) => run.success
|
|
278
|
+
const failedRuns = status.runs.filter((run) => !this.isRunSuccessful(run.success));
|
|
279
279
|
(0, terminal_title_1.setTitle)(`espresso · ✘ ${failedRuns.length} failed`);
|
|
280
280
|
logger_1.default.error(`${failedRuns.length} test run(s) failed:`);
|
|
281
281
|
for (const run of failedRuns) {
|
|
@@ -16,6 +16,7 @@ export interface MaestroFlowInfo {
|
|
|
16
16
|
status: MaestroFlowStatus;
|
|
17
17
|
success?: number;
|
|
18
18
|
test_case_id?: number;
|
|
19
|
+
shard_index?: number;
|
|
19
20
|
error_messages?: string[];
|
|
20
21
|
assets?: MaestroRunAssets;
|
|
21
22
|
}
|
|
@@ -69,10 +70,14 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
69
70
|
private updateServer;
|
|
70
71
|
private updateKey;
|
|
71
72
|
private socketFallbackWarned;
|
|
73
|
+
private otherAppUrls;
|
|
72
74
|
private flowAnimationFrame;
|
|
73
75
|
private flowAnimationTimer;
|
|
74
76
|
private latestFlows;
|
|
75
77
|
private latestDisplayedLineCount;
|
|
78
|
+
private flowsTableDisplayed;
|
|
79
|
+
private flowTableHasFailuresColumn;
|
|
80
|
+
private flowAttempts;
|
|
76
81
|
constructor(credentials: Credentials, options: MaestroOptions);
|
|
77
82
|
private static readonly SUPPORTED_APP_EXTENSIONS;
|
|
78
83
|
private validate;
|
|
@@ -82,6 +87,8 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
82
87
|
private detectPlatform;
|
|
83
88
|
run(): Promise<MaestroResult>;
|
|
84
89
|
private uploadApp;
|
|
90
|
+
private static isOtherAppUrl;
|
|
91
|
+
private uploadOtherApps;
|
|
85
92
|
/**
|
|
86
93
|
* Zip a .app bundle directory into a temporary zip file
|
|
87
94
|
*/
|
|
@@ -154,6 +161,65 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
154
161
|
private runTests;
|
|
155
162
|
private getStatus;
|
|
156
163
|
private waitForCompletion;
|
|
164
|
+
/**
|
|
165
|
+
* Poll completion condition used when --retry > 0. True once no flow is
|
|
166
|
+
* still running and no failed flow is still eligible for — or awaiting the
|
|
167
|
+
* result of — a retry. Replaces the run-level `completed` flag, which can
|
|
168
|
+
* flip prematurely while a freshly-queued retry has not yet surfaced.
|
|
169
|
+
*/
|
|
170
|
+
private retriesComplete;
|
|
171
|
+
/**
|
|
172
|
+
* Issues a retry for every failed flow/shard whose latest attempt has just
|
|
173
|
+
* settled and still has retries left — immediately, without waiting for the
|
|
174
|
+
* rest of the run. Each attempt id is retried at most once; a retry whose
|
|
175
|
+
* request permanently fails is abandoned so the poll loop can still finish.
|
|
176
|
+
*/
|
|
177
|
+
private issueEligibleRetries;
|
|
178
|
+
/**
|
|
179
|
+
* Triggers a retry of a single flow/shard and returns the new attempt's
|
|
180
|
+
* MaestroRunTest id.
|
|
181
|
+
*/
|
|
182
|
+
private retryFlow;
|
|
183
|
+
/** Stable key identifying the logical flow/shard a flow attempt belongs to. */
|
|
184
|
+
private flowGroupKey;
|
|
185
|
+
/** Latest attempt per logical flow/shard (highest id wins). */
|
|
186
|
+
private groupLatest;
|
|
187
|
+
/**
|
|
188
|
+
* Maps each flow's id to its 1-based attempt number within its logical
|
|
189
|
+
* group (ordered by id). The first attempt is 1; anything higher is a retry.
|
|
190
|
+
*/
|
|
191
|
+
private computeFlowAttempts;
|
|
192
|
+
/**
|
|
193
|
+
* The flow name as shown in the table, prefixed with a retry marker when the
|
|
194
|
+
* row is a retry attempt. Reads the attempt map populated at render time.
|
|
195
|
+
*/
|
|
196
|
+
private flowRowName;
|
|
197
|
+
/**
|
|
198
|
+
* Colorizes the retry marker without affecting column width: the padding is
|
|
199
|
+
* computed on the plain string first, then the glyph is wrapped in color.
|
|
200
|
+
*/
|
|
201
|
+
private colorizeRetryIcon;
|
|
202
|
+
private isFlowFailed;
|
|
203
|
+
/** Failed flows/shards, considering only the latest attempt per group. */
|
|
204
|
+
private failedLatestAttempts;
|
|
205
|
+
/** A run passes if every logical flow's latest attempt passed. */
|
|
206
|
+
private runPassed;
|
|
207
|
+
private computeOverallSuccess;
|
|
208
|
+
/**
|
|
209
|
+
* Polls the run status, rendering the live flow table, until `isComplete`
|
|
210
|
+
* returns true. Returns the raw status without printing the final summary or
|
|
211
|
+
* fetching reports/artifacts — that is finalize()'s job.
|
|
212
|
+
*
|
|
213
|
+
* `onPoll`, when provided, runs after each poll is rendered and before the
|
|
214
|
+
* completion check — used by --retry to queue retries for flows that have
|
|
215
|
+
* just failed without waiting for the rest of the run to finish.
|
|
216
|
+
*/
|
|
217
|
+
private pollOnce;
|
|
218
|
+
/**
|
|
219
|
+
* Renders the final table/summary, reports the last-attempt-wins result, and
|
|
220
|
+
* fetches reports/artifacts. Called once after the (optional) retry loop.
|
|
221
|
+
*/
|
|
222
|
+
private finalize;
|
|
157
223
|
private displayRunStatus;
|
|
158
224
|
/**
|
|
159
225
|
* Get the display name for a run, preferring environment.name over capabilities.deviceName
|
|
@@ -182,7 +248,20 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
182
248
|
private truncateForRow;
|
|
183
249
|
private getRemainingSummary;
|
|
184
250
|
private displayFlowsWithLimit;
|
|
251
|
+
/**
|
|
252
|
+
* Builds the (dimmed) header and separator lines for the flows table. When
|
|
253
|
+
* `hasFailures` is set, the "Fail reason" column is appended.
|
|
254
|
+
*/
|
|
255
|
+
private buildFlowsTableHeader;
|
|
185
256
|
private displayFlowsTableHeader;
|
|
257
|
+
/**
|
|
258
|
+
* Builds the single-line representation of a flow row: duration, status, the
|
|
259
|
+
* (padded) flow name, and — when the flow has failed — its first error
|
|
260
|
+
* message inline. Shared by the static render (displayFlowRow) and the live
|
|
261
|
+
* in-place updates (updateFlowsInPlace) so the fail reason shows
|
|
262
|
+
* consistently, including while a retry is still running.
|
|
263
|
+
*/
|
|
264
|
+
private buildFlowRowLine;
|
|
186
265
|
private displayFlowRow;
|
|
187
266
|
private displayFlowsTable;
|
|
188
267
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maestro.d.ts","sourceRoot":"","sources":["../../src/providers/maestro.ts"],"names":[],"mappings":"AAAA,OAAO,cAAiC,MAAM,2BAA2B,CAAC;AAE1E,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAahD,OAAO,YAAY,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"maestro.d.ts","sourceRoot":"","sources":["../../src/providers/maestro.ts"],"names":[],"mappings":"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"}
|