@testingbot/mobilewright-driver 0.1.0 → 0.3.1
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 +87 -6
- package/dist/capabilities.d.ts +4 -3
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +21 -10
- package/dist/capabilities.js.map +1 -1
- package/dist/driver.d.ts +29 -0
- package/dist/driver.d.ts.map +1 -1
- package/dist/driver.js +163 -49
- package/dist/driver.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +3 -1
- package/dist/init.js.map +1 -1
- package/dist/observer.d.ts +84 -7
- package/dist/observer.d.ts.map +1 -1
- package/dist/observer.js +229 -27
- package/dist/observer.js.map +1 -1
- package/dist/options.d.ts +13 -2
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +2 -0
- package/dist/options.js.map +1 -1
- package/dist/rest-api.d.ts +9 -1
- package/dist/rest-api.d.ts.map +1 -1
- package/dist/rest-api.js.map +1 -1
- package/dist/run-log.d.ts +12 -2
- package/dist/run-log.d.ts.map +1 -1
- package/dist/run-log.js +13 -2
- package/dist/run-log.js.map +1 -1
- package/dist/session-commands.d.ts +75 -0
- package/dist/session-commands.d.ts.map +1 -0
- package/dist/session-commands.js +119 -0
- package/dist/session-commands.js.map +1 -0
- package/package.json +1 -1
package/dist/observer.d.ts
CHANGED
|
@@ -7,23 +7,58 @@ export interface ReportableSession {
|
|
|
7
7
|
/** Wall-clock bounds of the recorded cycles, when any exist. */
|
|
8
8
|
startedAt?: number;
|
|
9
9
|
endedAt?: number;
|
|
10
|
+
/** Worker process that ran this session's test, when unambiguous. */
|
|
11
|
+
workerIndex?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface GitInfo {
|
|
14
|
+
commit?: string;
|
|
15
|
+
branch?: string;
|
|
16
|
+
author?: string;
|
|
17
|
+
subject?: string;
|
|
10
18
|
}
|
|
11
19
|
export interface ObserverContext {
|
|
12
20
|
/** Every TestingBot session of this run (allocated + worker-rotated). */
|
|
13
21
|
sessions(): ReportableSession[];
|
|
14
22
|
build?: string;
|
|
23
|
+
/** The driver's `extra` option, merged with git metadata when reporting. */
|
|
24
|
+
extra?: string;
|
|
15
25
|
/** Local-video requests made via startRecording({ output }). */
|
|
16
26
|
recordings?(): {
|
|
17
27
|
sessionId: string;
|
|
18
28
|
output: string;
|
|
19
29
|
}[];
|
|
20
30
|
}
|
|
31
|
+
interface TestOutcome {
|
|
32
|
+
/** Playwright's stable test id — also the JSON report's `spec.id`. */
|
|
33
|
+
id: string;
|
|
34
|
+
title: string;
|
|
35
|
+
failed: boolean;
|
|
36
|
+
summary?: string;
|
|
37
|
+
/** Wall-clock interval of the (final) attempt: reconstructed at onTestEnd,
|
|
38
|
+
* replaced by the worker's own stamps when the run report supplies them. */
|
|
39
|
+
startedAt: number;
|
|
40
|
+
endedAt: number;
|
|
41
|
+
/** Worker process that ran the final attempt, per the run report. */
|
|
42
|
+
workerIndex?: number;
|
|
43
|
+
/** Interval came from the run report — i.e. from the worker's own clock. */
|
|
44
|
+
fromReport?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** What the run report adds to an outcome the reporter events cannot. */
|
|
47
|
+
interface ReportedTiming {
|
|
48
|
+
workerIndex?: number;
|
|
49
|
+
startedAt: number;
|
|
50
|
+
endedAt: number;
|
|
51
|
+
}
|
|
21
52
|
/**
|
|
22
53
|
* Reports outcomes to TestingBot. Sessions whose wall-clock interval maps to
|
|
23
54
|
* exactly one test (sessionPerTest mode) get that test's name and verdict;
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
55
|
+
* a reused pool session hosting many tests gets the run-level verdict, which
|
|
56
|
+
* genuinely describes it. A session that is neither — an ambiguous overlap
|
|
57
|
+
* under high concurrency, or one whose test span never reached the run file —
|
|
58
|
+
* gets build/extra/tags only: an unknown verdict is reported as unknown
|
|
59
|
+
* rather than as the run's, which on a failed run would mark a session failed
|
|
60
|
+
* on another test's behalf. Strictly best-effort throughout: reporting
|
|
61
|
+
* failures never fail the test run.
|
|
27
62
|
*/
|
|
28
63
|
export declare class TestingBotTestObserver implements TestObserver {
|
|
29
64
|
private readonly api;
|
|
@@ -43,13 +78,55 @@ export declare class TestingBotTestObserver implements TestObserver {
|
|
|
43
78
|
*/
|
|
44
79
|
private downloadRecordings;
|
|
45
80
|
/**
|
|
46
|
-
*
|
|
81
|
+
* Map each session to the single test that ran inside it, when unambiguous.
|
|
82
|
+
*
|
|
47
83
|
* Direction matters: connect() and disconnect() happen INSIDE the test, so
|
|
48
84
|
* the session interval is a sub-interval of its test's — but a test's
|
|
49
85
|
* reported duration also covers fixture setup (device allocation), so the
|
|
50
|
-
* test interval is much wider than the session's.
|
|
51
|
-
*
|
|
86
|
+
* test interval is much wider than the session's. Sessions are therefore
|
|
87
|
+
* scored by how much of the SESSION each test interval covers, never the
|
|
88
|
+
* other way around.
|
|
89
|
+
*
|
|
90
|
+
* Wall clock is the only join available: the worker process that owns the
|
|
91
|
+
* session never learns which test it is running (`ConnectionConfig` carries
|
|
92
|
+
* no test identity), so the coordinator has to line the two up after the
|
|
93
|
+
* fact. Everything below is therefore built to abstain rather than guess —
|
|
94
|
+
* a session with no confident, exclusive match gets no verdict at all.
|
|
52
95
|
*/
|
|
53
|
-
private
|
|
96
|
+
private attribute;
|
|
54
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Playwright's JSON report for this run, when mobilewright exposes one.
|
|
100
|
+
* Documented upstream as a transitional escape hatch, so every reader below is
|
|
101
|
+
* feature-detected and silent on failure: the report may sharpen reporting,
|
|
102
|
+
* but nothing may depend on it. Read once per run and shared.
|
|
103
|
+
*/
|
|
104
|
+
export declare function readJsonReport(result: RunResultInfo): Promise<Record<string, unknown> | undefined>;
|
|
105
|
+
/**
|
|
106
|
+
* Per-test worker index and interval, keyed by `spec.id` — which is the same
|
|
107
|
+
* id `onTestEnd` receives as `TestInfo.id`. Two things the reporter events
|
|
108
|
+
* cannot give us:
|
|
109
|
+
*
|
|
110
|
+
* - **which worker process ran the test.** The driver stamps that same index
|
|
111
|
+
* on its run-file session records from inside the worker, so this is a real
|
|
112
|
+
* identity join, not a heuristic — it rules out every test that provably ran
|
|
113
|
+
* somewhere else, which is what makes concurrent runs attributable at all.
|
|
114
|
+
* - **the worker's own timestamps.** `onTestEnd` can only reconstruct the
|
|
115
|
+
* interval from `Date.now()` in the coordinator, after reporter dispatch;
|
|
116
|
+
* any delay there shifts the whole interval away from the session's.
|
|
117
|
+
*
|
|
118
|
+
* Later attempts win, matching how `onTestEnd` overwrites retried tests.
|
|
119
|
+
*/
|
|
120
|
+
export declare function readTestTimings(report: Record<string, unknown> | undefined): Map<string, ReportedTiming>;
|
|
121
|
+
/** Overlay report timings onto the outcomes collected from the event hooks. */
|
|
122
|
+
export declare function applyReportedTimings(outcomes: TestOutcome[], timings: Map<string, ReportedTiming>): TestOutcome[];
|
|
123
|
+
/**
|
|
124
|
+
* Git metadata mobilewright captures into the Playwright report
|
|
125
|
+
* (`config.metadata.gitCommit`, populated when `captureGitInfo` is on —
|
|
126
|
+
* Playwright does this automatically on CI).
|
|
127
|
+
*/
|
|
128
|
+
export declare function readGitInfo(report: Record<string, unknown> | undefined): GitInfo | undefined;
|
|
129
|
+
/** Merge the user's `extra` with git metadata for the dashboard's extra field. */
|
|
130
|
+
export declare function buildExtra(userExtra: string | undefined, git: GitInfo | undefined): string | undefined;
|
|
131
|
+
export {};
|
|
55
132
|
//# sourceMappingURL=observer.d.ts.map
|
package/dist/observer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,IAAI,iBAAiB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,UAAU,CAAC,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxD;
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
|
package/dist/observer.js
CHANGED
|
@@ -4,9 +4,13 @@ const debug = createDebug('testingbot:observer');
|
|
|
4
4
|
/**
|
|
5
5
|
* Reports outcomes to TestingBot. Sessions whose wall-clock interval maps to
|
|
6
6
|
* exactly one test (sessionPerTest mode) get that test's name and verdict;
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* a reused pool session hosting many tests gets the run-level verdict, which
|
|
8
|
+
* genuinely describes it. A session that is neither — an ambiguous overlap
|
|
9
|
+
* under high concurrency, or one whose test span never reached the run file —
|
|
10
|
+
* gets build/extra/tags only: an unknown verdict is reported as unknown
|
|
11
|
+
* rather than as the run's, which on a failed run would mark a session failed
|
|
12
|
+
* on another test's behalf. Strictly best-effort throughout: reporting
|
|
13
|
+
* failures never fail the test run.
|
|
10
14
|
*/
|
|
11
15
|
export class TestingBotTestObserver {
|
|
12
16
|
api;
|
|
@@ -28,6 +32,7 @@ export class TestingBotTestObserver {
|
|
|
28
32
|
const error = result.errors[0]?.split('\n')[0] ?? result.status;
|
|
29
33
|
const endedAt = Date.now();
|
|
30
34
|
this.outcomes.set(test.id, {
|
|
35
|
+
id: test.id,
|
|
31
36
|
title: test.title,
|
|
32
37
|
failed,
|
|
33
38
|
summary: failed ? `${test.title}: ${error}`.slice(0, 200) : undefined,
|
|
@@ -43,15 +48,29 @@ export class TestingBotTestObserver {
|
|
|
43
48
|
return;
|
|
44
49
|
}
|
|
45
50
|
const success = result.status === 'passed';
|
|
46
|
-
|
|
51
|
+
// One read of the run report serves both git metadata and the attribution
|
|
52
|
+
// join below.
|
|
53
|
+
const report = await readJsonReport(result);
|
|
54
|
+
const outcomes = applyReportedTimings([...this.outcomes.values()], readTestTimings(report));
|
|
47
55
|
const failures = outcomes.filter((o) => o.failed).map((o) => o.summary).filter(Boolean).slice(0, 10);
|
|
48
56
|
const runMessage = success
|
|
49
57
|
? `${outcomes.length}/${this.totalTests} tests passed`
|
|
50
58
|
: `${failures.length} of ${outcomes.length} tests failed. ${failures.join(' | ')}`.slice(0, 500);
|
|
59
|
+
const git = readGitInfo(report);
|
|
60
|
+
const extra = buildExtra(this.context.extra, git);
|
|
61
|
+
const groups = ['mobilewright', ...(git?.branch ? [git.branch] : [])];
|
|
51
62
|
const sessions = this.context.sessions();
|
|
52
|
-
debug('run ended (%s), reporting to %d session(s)', result.status, sessions.length);
|
|
63
|
+
debug('run ended (%s), reporting to %d session(s)%s', result.status, sessions.length, git ? ` with git ${git.commit?.slice(0, 8) ?? '?'} (${git.branch ?? 'no branch'})` : '');
|
|
64
|
+
const attributed = this.attribute(sessions, outcomes);
|
|
53
65
|
for (const session of sessions) {
|
|
54
|
-
const test =
|
|
66
|
+
const test = attributed.get(session.sessionId);
|
|
67
|
+
// An unattributable session must never inherit the run's failure: on a
|
|
68
|
+
// failed run that would stamp another test's verdict onto a session
|
|
69
|
+
// whose own test passed. The aggregate is only safe when the failing
|
|
70
|
+
// test cannot have run anywhere else — a session that hosted several
|
|
71
|
+
// tests, or the run's only session — or when the run passed, where
|
|
72
|
+
// every session's verdict is "passed" anyway.
|
|
73
|
+
const mayInheritRunVerdict = success || session.spans > 1 || sessions.length === 1;
|
|
55
74
|
try {
|
|
56
75
|
await this.api.updateTest(session.sessionId, test
|
|
57
76
|
? {
|
|
@@ -59,15 +78,18 @@ export class TestingBotTestObserver {
|
|
|
59
78
|
name: test.title,
|
|
60
79
|
statusMessage: test.failed ? (test.summary ?? 'failed') : 'passed',
|
|
61
80
|
build: this.context.build,
|
|
62
|
-
|
|
81
|
+
extra,
|
|
82
|
+
groups,
|
|
63
83
|
}
|
|
64
84
|
: {
|
|
65
|
-
success,
|
|
66
|
-
statusMessage: runMessage,
|
|
85
|
+
...(mayInheritRunVerdict ? { success, statusMessage: runMessage } : {}),
|
|
67
86
|
build: this.context.build,
|
|
68
|
-
|
|
87
|
+
extra,
|
|
88
|
+
groups,
|
|
69
89
|
});
|
|
70
|
-
debug('reported %s -> %s', session.sessionId, test
|
|
90
|
+
debug('reported %s -> %s', session.sessionId, test
|
|
91
|
+
? `test "${test.title}"`
|
|
92
|
+
: mayInheritRunVerdict ? `run success=${success}` : 'metadata only (verdict left untouched)');
|
|
71
93
|
}
|
|
72
94
|
catch (err) {
|
|
73
95
|
// Never fail the run over reporting.
|
|
@@ -120,29 +142,209 @@ export class TestingBotTestObserver {
|
|
|
120
142
|
}
|
|
121
143
|
}
|
|
122
144
|
/**
|
|
123
|
-
*
|
|
145
|
+
* Map each session to the single test that ran inside it, when unambiguous.
|
|
146
|
+
*
|
|
124
147
|
* Direction matters: connect() and disconnect() happen INSIDE the test, so
|
|
125
148
|
* the session interval is a sub-interval of its test's — but a test's
|
|
126
149
|
* reported duration also covers fixture setup (device allocation), so the
|
|
127
|
-
* test interval is much wider than the session's.
|
|
128
|
-
*
|
|
150
|
+
* test interval is much wider than the session's. Sessions are therefore
|
|
151
|
+
* scored by how much of the SESSION each test interval covers, never the
|
|
152
|
+
* other way around.
|
|
153
|
+
*
|
|
154
|
+
* Wall clock is the only join available: the worker process that owns the
|
|
155
|
+
* session never learns which test it is running (`ConnectionConfig` carries
|
|
156
|
+
* no test identity), so the coordinator has to line the two up after the
|
|
157
|
+
* fact. Everything below is therefore built to abstain rather than guess —
|
|
158
|
+
* a session with no confident, exclusive match gets no verdict at all.
|
|
129
159
|
*/
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
return undefined;
|
|
134
|
-
if (session.startedAt === undefined || session.endedAt === undefined)
|
|
135
|
-
return undefined;
|
|
136
|
-
const midpoint = (session.startedAt + session.endedAt) / 2;
|
|
137
|
-
// Clock skew tolerance between the worker's stamps and ours.
|
|
160
|
+
attribute(sessions, outcomes) {
|
|
161
|
+
// Clock skew tolerance between the worker's stamps and ours. Report-sourced
|
|
162
|
+
// intervals need none: the worker measured both ends of the comparison.
|
|
138
163
|
const SLACK_MS = 2_000;
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
164
|
+
const slackFor = (outcome) => outcome.fromReport ? 0 : SLACK_MS;
|
|
165
|
+
// A test must cover at least this much of the session to claim it.
|
|
166
|
+
const MIN_COVERAGE = 0.5;
|
|
167
|
+
const claims = [];
|
|
168
|
+
for (const session of sessions) {
|
|
169
|
+
// A session that hosted several tests has no single correct name/verdict.
|
|
170
|
+
if (session.spans > 1) {
|
|
171
|
+
debug('%s hosted %d tests — no single verdict', session.sessionId, session.spans);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (session.spans === 0) {
|
|
175
|
+
debug('%s has no recorded test span — unattributable', session.sessionId);
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (session.startedAt === undefined || session.endedAt === undefined) {
|
|
179
|
+
debug('%s has no recorded interval — unattributable', session.sessionId);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
// Connect and disconnect can land in the same millisecond (a fast test on
|
|
183
|
+
// an already-warm session), and a zero-length interval overlaps nothing.
|
|
184
|
+
// Give every interval — session and test alike — at least 1ms of width so
|
|
185
|
+
// a degenerate one stays comparable instead of scoring zero against all.
|
|
186
|
+
const sessionEnd = Math.max(session.endedAt, session.startedAt + 1);
|
|
187
|
+
const span = sessionEnd - session.startedAt;
|
|
188
|
+
// Identity first: a test the report places in another worker process
|
|
189
|
+
// cannot have run in this session, whatever the clocks say. Pairs where
|
|
190
|
+
// either side's worker is unknown stay eligible and fall through to the
|
|
191
|
+
// timing join below.
|
|
192
|
+
const eligible = outcomes.filter((outcome) => session.workerIndex === undefined || outcome.workerIndex === undefined ||
|
|
193
|
+
outcome.workerIndex === session.workerIndex);
|
|
194
|
+
if (eligible.length < outcomes.length) {
|
|
195
|
+
debug('%s ran in worker %d — %d of %d tests eligible', session.sessionId, session.workerIndex, eligible.length, outcomes.length);
|
|
196
|
+
}
|
|
197
|
+
const scored = eligible
|
|
198
|
+
.map((outcome) => ({
|
|
199
|
+
outcome,
|
|
200
|
+
coverage: Math.max(0, Math.min(sessionEnd, Math.max(outcome.endedAt, outcome.startedAt + 1) + slackFor(outcome)) -
|
|
201
|
+
Math.max(session.startedAt, outcome.startedAt - slackFor(outcome))) / span,
|
|
202
|
+
}))
|
|
203
|
+
.filter((c) => c.coverage >= MIN_COVERAGE)
|
|
204
|
+
.sort((a, b) => b.coverage - a.coverage);
|
|
205
|
+
if (scored.length === 0) {
|
|
206
|
+
debug('%s overlaps no test interval — unattributable', session.sessionId);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (scored.length > 1 && scored[1].coverage >= scored[0].coverage) {
|
|
210
|
+
debug('%d tests overlap session %s equally — unattributable', scored.length, session.sessionId);
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
claims.push({ sessionId: session.sessionId, outcome: scored[0].outcome, coverage: scored[0].coverage });
|
|
214
|
+
}
|
|
215
|
+
// One test ran in one session: when several sessions claim the same test,
|
|
216
|
+
// the best-covered one wins, and a tie means neither may have it.
|
|
217
|
+
const attributed = new Map();
|
|
218
|
+
for (const outcome of new Set(claims.map((c) => c.outcome))) {
|
|
219
|
+
const rivals = claims.filter((c) => c.outcome === outcome).sort((a, b) => b.coverage - a.coverage);
|
|
220
|
+
if (rivals.length > 1 && rivals[1].coverage >= rivals[0].coverage) {
|
|
221
|
+
debug('%d sessions claim test "%s" equally — none attributed', rivals.length, outcome.title);
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
if (rivals.length > 1) {
|
|
225
|
+
debug('%d sessions claim test "%s" — %s wins', rivals.length, outcome.title, rivals[0].sessionId);
|
|
226
|
+
}
|
|
227
|
+
attributed.set(rivals[0].sessionId, outcome);
|
|
228
|
+
}
|
|
229
|
+
return attributed;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Playwright's JSON report for this run, when mobilewright exposes one.
|
|
234
|
+
* Documented upstream as a transitional escape hatch, so every reader below is
|
|
235
|
+
* feature-detected and silent on failure: the report may sharpen reporting,
|
|
236
|
+
* but nothing may depend on it. Read once per run and shared.
|
|
237
|
+
*/
|
|
238
|
+
export async function readJsonReport(result) {
|
|
239
|
+
try {
|
|
240
|
+
return await result.jsonReport?.();
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
debug('could not read the run report: %s', err);
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Per-test worker index and interval, keyed by `spec.id` — which is the same
|
|
249
|
+
* id `onTestEnd` receives as `TestInfo.id`. Two things the reporter events
|
|
250
|
+
* cannot give us:
|
|
251
|
+
*
|
|
252
|
+
* - **which worker process ran the test.** The driver stamps that same index
|
|
253
|
+
* on its run-file session records from inside the worker, so this is a real
|
|
254
|
+
* identity join, not a heuristic — it rules out every test that provably ran
|
|
255
|
+
* somewhere else, which is what makes concurrent runs attributable at all.
|
|
256
|
+
* - **the worker's own timestamps.** `onTestEnd` can only reconstruct the
|
|
257
|
+
* interval from `Date.now()` in the coordinator, after reporter dispatch;
|
|
258
|
+
* any delay there shifts the whole interval away from the session's.
|
|
259
|
+
*
|
|
260
|
+
* Later attempts win, matching how `onTestEnd` overwrites retried tests.
|
|
261
|
+
*/
|
|
262
|
+
export function readTestTimings(report) {
|
|
263
|
+
const timings = new Map();
|
|
264
|
+
const walk = (suite) => {
|
|
265
|
+
for (const spec of arr(suite['specs'])) {
|
|
266
|
+
const id = str(spec['id']);
|
|
267
|
+
const results = arr(spec['tests']).flatMap((test) => arr(test['results']));
|
|
268
|
+
const final = results[results.length - 1];
|
|
269
|
+
if (id === undefined || final === undefined)
|
|
270
|
+
continue;
|
|
271
|
+
const startedAt = Date.parse(str(final['startTime']) ?? '');
|
|
272
|
+
const duration = final['duration'];
|
|
273
|
+
if (!Number.isFinite(startedAt) || typeof duration !== 'number')
|
|
274
|
+
continue;
|
|
275
|
+
// Playwright reports workerIndex -1 for tests it never got to run.
|
|
276
|
+
const workerIndex = typeof final['workerIndex'] === 'number' && final['workerIndex'] >= 0
|
|
277
|
+
? final['workerIndex']
|
|
278
|
+
: undefined;
|
|
279
|
+
timings.set(id, { workerIndex, startedAt, endedAt: startedAt + duration });
|
|
144
280
|
}
|
|
281
|
+
for (const child of arr(suite['suites']))
|
|
282
|
+
walk(child);
|
|
283
|
+
};
|
|
284
|
+
try {
|
|
285
|
+
for (const suite of arr(report?.['suites']))
|
|
286
|
+
walk(suite);
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
debug('could not read test timings from the run report: %s', err);
|
|
290
|
+
return new Map();
|
|
291
|
+
}
|
|
292
|
+
return timings;
|
|
293
|
+
}
|
|
294
|
+
/** Overlay report timings onto the outcomes collected from the event hooks. */
|
|
295
|
+
export function applyReportedTimings(outcomes, timings) {
|
|
296
|
+
if (timings.size === 0)
|
|
297
|
+
return outcomes;
|
|
298
|
+
let joined = 0;
|
|
299
|
+
const merged = outcomes.map((outcome) => {
|
|
300
|
+
const timing = timings.get(outcome.id);
|
|
301
|
+
if (!timing)
|
|
302
|
+
return outcome;
|
|
303
|
+
joined += 1;
|
|
304
|
+
return { ...outcome, ...timing, fromReport: true };
|
|
305
|
+
});
|
|
306
|
+
debug('run report supplied worker identity and timings for %d/%d tests', joined, outcomes.length);
|
|
307
|
+
return merged;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Git metadata mobilewright captures into the Playwright report
|
|
311
|
+
* (`config.metadata.gitCommit`, populated when `captureGitInfo` is on —
|
|
312
|
+
* Playwright does this automatically on CI).
|
|
313
|
+
*/
|
|
314
|
+
export function readGitInfo(report) {
|
|
315
|
+
try {
|
|
316
|
+
const config = report?.['config'];
|
|
317
|
+
const metadata = config?.['metadata'];
|
|
318
|
+
const commit = metadata?.['gitCommit'];
|
|
319
|
+
if (!commit)
|
|
320
|
+
return undefined;
|
|
321
|
+
const author = commit['author'];
|
|
322
|
+
const info = {
|
|
323
|
+
commit: str(commit['hash']),
|
|
324
|
+
branch: str(commit['branch']),
|
|
325
|
+
author: str(author?.['name']),
|
|
326
|
+
subject: str(commit['subject']),
|
|
327
|
+
};
|
|
328
|
+
return Object.values(info).some((v) => v !== undefined) ? info : undefined;
|
|
329
|
+
}
|
|
330
|
+
catch (err) {
|
|
331
|
+
debug('could not read git metadata from the report: %s', err);
|
|
145
332
|
return undefined;
|
|
146
333
|
}
|
|
147
334
|
}
|
|
335
|
+
/** Merge the user's `extra` with git metadata for the dashboard's extra field. */
|
|
336
|
+
export function buildExtra(userExtra, git) {
|
|
337
|
+
if (!git)
|
|
338
|
+
return userExtra;
|
|
339
|
+
const payload = { ...git };
|
|
340
|
+
if (userExtra !== undefined)
|
|
341
|
+
payload['extra'] = userExtra;
|
|
342
|
+
return JSON.stringify(payload);
|
|
343
|
+
}
|
|
344
|
+
function str(value) {
|
|
345
|
+
return typeof value === 'string' && value ? value : undefined;
|
|
346
|
+
}
|
|
347
|
+
function arr(value) {
|
|
348
|
+
return Array.isArray(value) ? value : [];
|
|
349
|
+
}
|
|
148
350
|
//# sourceMappingURL=observer.js.map
|
package/dist/observer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts
CHANGED
|
@@ -12,8 +12,13 @@ export interface TestingBotDriverOptions {
|
|
|
12
12
|
* existing storage URLs ("tb://...").
|
|
13
13
|
*
|
|
14
14
|
* apps: { android: './build/app.apk', 'ios-simulator': './build/app.zip', 'ios-real': './build/app.ipa' }
|
|
15
|
+
*
|
|
16
|
+
* Pass an array to install helper apps alongside the app under test (they
|
|
17
|
+
* ride along as `appium:otherApps`); the FIRST entry is the app under test:
|
|
18
|
+
*
|
|
19
|
+
* apps: { android: ['./build/app.apk', './build/mock-server.apk'] }
|
|
15
20
|
*/
|
|
16
|
-
apps?: Partial<Record<AppSlot, string>>;
|
|
21
|
+
apps?: Partial<Record<AppSlot, string | string[]>>;
|
|
17
22
|
/** TestingBot API key. Default: TESTINGBOT_KEY (or TB_KEY) env variable. */
|
|
18
23
|
key?: string;
|
|
19
24
|
/** TestingBot API secret. Default: TESTINGBOT_SECRET (or TB_SECRET) env variable. */
|
|
@@ -70,6 +75,10 @@ export interface TestingBotDriverOptions {
|
|
|
70
75
|
public?: boolean;
|
|
71
76
|
/** Custom metadata (release, commit hash, ...) shown on the test detail page. */
|
|
72
77
|
extra?: string;
|
|
78
|
+
/** Android: auto-grant all app permission dialogs (`appium:autoGrantPermissions`). */
|
|
79
|
+
autoGrantPermissions?: boolean;
|
|
80
|
+
/** iOS: auto-accept system permission alerts (`appium:autoAcceptAlerts`). */
|
|
81
|
+
autoAcceptAlerts?: boolean;
|
|
73
82
|
/** Restrict allocation to tablets only. */
|
|
74
83
|
tabletOnly?: boolean;
|
|
75
84
|
/** Restrict allocation to phones only. */
|
|
@@ -105,7 +114,7 @@ export interface TestingBotDriverOptions {
|
|
|
105
114
|
sessionPerTest?: boolean;
|
|
106
115
|
}
|
|
107
116
|
export interface ResolvedOptions {
|
|
108
|
-
apps: Partial<Record<AppSlot, string>>;
|
|
117
|
+
apps: Partial<Record<AppSlot, string | string[]>>;
|
|
109
118
|
key: string;
|
|
110
119
|
secret: string;
|
|
111
120
|
hubUrl: string;
|
|
@@ -130,6 +139,8 @@ export interface ResolvedOptions {
|
|
|
130
139
|
recordLogs: boolean | 'strip-parameters' | undefined;
|
|
131
140
|
public: boolean | undefined;
|
|
132
141
|
extra: string | undefined;
|
|
142
|
+
autoGrantPermissions: boolean | undefined;
|
|
143
|
+
autoAcceptAlerts: boolean | undefined;
|
|
133
144
|
tabletOnly: boolean | undefined;
|
|
134
145
|
phoneOnly: boolean | undefined;
|
|
135
146
|
tunnelIdentifier: string | undefined;
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,SAAS,GACT,kBAAkB,GAClB,cAAc,GACd,KAAK,GACL,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,uBAAuB;IACtC
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
package/dist/options.js
CHANGED
|
@@ -28,6 +28,8 @@ export function resolveOptions(options = {}) {
|
|
|
28
28
|
recordLogs: options.recordLogs,
|
|
29
29
|
public: options.public,
|
|
30
30
|
extra: options.extra,
|
|
31
|
+
autoGrantPermissions: options.autoGrantPermissions,
|
|
32
|
+
autoAcceptAlerts: options.autoAcceptAlerts,
|
|
31
33
|
tabletOnly: options.tabletOnly,
|
|
32
34
|
phoneOnly: options.phoneOnly,
|
|
33
35
|
tunnelIdentifier: options.tunnelIdentifier ?? (typeof options.tunnel === 'object' ? options.tunnel.identifier : undefined),
|
package/dist/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAuJxC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,UAAmC,EAAE;IAClE,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QACxB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAChF,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QAC5F,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,mCAAmC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnF,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,+BAA+B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/E,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,OAAO;QACvD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,MAAM;QAChD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,aAAa,EAAE;QACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1H,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;QAChE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;KAChD,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC/E,+EAA+E;YAC/E,mEAAmE,CACpE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/rest-api.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { FetchFn } from './webdriver-client.js';
|
|
2
|
+
export interface UserInfo {
|
|
3
|
+
plan?: string;
|
|
4
|
+
/** Plan cap on parallel VM (simulator/emulator) sessions. */
|
|
5
|
+
max_concurrent?: number;
|
|
6
|
+
/** Plan cap on parallel physical-device sessions. */
|
|
7
|
+
max_concurrent_mobile?: number;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
2
10
|
export interface TestingBotDevice {
|
|
3
11
|
id: number;
|
|
4
12
|
name: string;
|
|
@@ -46,7 +54,7 @@ export declare class RestApiClient {
|
|
|
46
54
|
private readonly fetchFn;
|
|
47
55
|
constructor(apiUrl: string, key: string, secret: string, fetchFn?: FetchFn);
|
|
48
56
|
/** Validate credentials; used by prepare() to fail fast. */
|
|
49
|
-
getUser(): Promise<
|
|
57
|
+
getUser(): Promise<UserInfo>;
|
|
50
58
|
/** Physical devices. `available` restricts to currently-acquirable ones. */
|
|
51
59
|
getDevices(available: boolean): Promise<TestingBotDevice[]>;
|
|
52
60
|
/** Simulator/emulator (and desktop-browser) combos; mobile rows carry platformName + deviceName + OS version. */
|
package/dist/rest-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAKrD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,SAAS,GAAG,KAAK,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,0EAA0E;AAC1E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe;IAMjF,4DAA4D;IACtD,OAAO,IAAI,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"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"}
|
package/dist/rest-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest-api.js","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,WAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,KAAK,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"rest-api.js","sourceRoot":"","sources":["../src/rest-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,WAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,KAAK,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAwD7C,0EAA0E;AAC1E,MAAM,OAAO,aAAa;IACP,MAAM,CAAS;IACf,IAAI,CAAS;IACb,OAAO,CAAU;IAElC,YAAY,MAAc,EAAE,GAAW,EAAE,MAAc,EAAE,UAAmB,KAAK;QAC/E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,OAAO;QACX,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAa,CAAC;IACxD,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,UAAU,CAAC,SAAkB;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/C,qEAAqE;QACrE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAA4B,CAAC;QAC/D,MAAM,OAAO,GAAI,MAA2C,CAAC,OAAO,CAAC;QACrE,OAAO,OAAO,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,iHAAiH;IACjH,KAAK,CAAC,WAAW;QACf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAAwB,CAAC;QAC3D,OAAO,CAAE,MAAwC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAmB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAE,MAAwC,CAAC,MAAM,IAAI,MAAM,CAAqB,CAAC;IAC1F,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,SAAS,CAAC,QAAgB;QAC9B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,KAAK,CAAC,oCAAoC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,UAAU,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE;YAC/D,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAiB,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,MAAM,EAAE,CAAiB,CAAC;IACzE,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,MAAkB;QACpD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACjG,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;YAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC1E,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,SAAS,EAAE,CAAgB,CAAC;IACzE,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,SAAS,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAY,EAAE,IAAsB;QACxE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE;YAC3D,MAAM;YACN,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI,CAAC,IAAI;gBACxB,YAAY,EAAE,UAAU;gBACxB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,mCAAmC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzE;YACD,IAAI;YACJ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,QAAkB,EAAE,OAAe;QACrD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,mBAAmB,CAC3B,wCAAwC,OAAO,gDAAgD,CAChG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,YAAY,CAAC,GAAG,OAAO,iBAAiB,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,YAAY,CAAC,GAAG,OAAO,uBAAuB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC"}
|