@gate-forge/pack-playwright 0.7.1 → 0.8.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 +31 -0
- package/dist/constants.d.ts +13 -140
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +13 -148
- package/dist/constants.js.map +1 -1
- package/dist/cypress/plugin.d.ts +53 -0
- package/dist/cypress/plugin.d.ts.map +1 -0
- package/dist/cypress/plugin.js +369 -0
- package/dist/cypress/plugin.js.map +1 -0
- package/dist/cypress/spec-scan.d.ts +39 -0
- package/dist/cypress/spec-scan.d.ts.map +1 -0
- package/dist/cypress/spec-scan.js +301 -0
- package/dist/cypress/spec-scan.js.map +1 -0
- package/dist/diagnosis.d.ts +39 -0
- package/dist/diagnosis.d.ts.map +1 -0
- package/dist/diagnosis.js +63 -0
- package/dist/diagnosis.js.map +1 -0
- package/dist/discovery/adapter-projection.d.ts +13 -0
- package/dist/discovery/adapter-projection.d.ts.map +1 -0
- package/dist/discovery/adapter-projection.js +84 -0
- package/dist/discovery/adapter-projection.js.map +1 -0
- package/dist/discovery/config-locations.d.ts +5 -0
- package/dist/discovery/config-locations.d.ts.map +1 -0
- package/dist/discovery/config-locations.js +19 -0
- package/dist/discovery/config-locations.js.map +1 -0
- package/dist/discovery/cypress-runner-adapter.d.ts +112 -0
- package/dist/discovery/cypress-runner-adapter.d.ts.map +1 -0
- package/dist/discovery/cypress-runner-adapter.js +501 -0
- package/dist/discovery/cypress-runner-adapter.js.map +1 -0
- package/dist/discovery/discover.d.ts +53 -1
- package/dist/discovery/discover.d.ts.map +1 -1
- package/dist/discovery/discover.js +100 -3
- package/dist/discovery/discover.js.map +1 -1
- package/dist/discovery/git-ignore.d.ts +13 -0
- package/dist/discovery/git-ignore.d.ts.map +1 -0
- package/dist/discovery/git-ignore.js +62 -0
- package/dist/discovery/git-ignore.js.map +1 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +9 -0
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/playwright-runner-adapter.d.ts +108 -0
- package/dist/discovery/playwright-runner-adapter.d.ts.map +1 -0
- package/dist/discovery/playwright-runner-adapter.js +185 -0
- package/dist/discovery/playwright-runner-adapter.js.map +1 -0
- package/dist/discovery/prepare-barrier.d.ts +522 -0
- package/dist/discovery/prepare-barrier.d.ts.map +1 -0
- package/dist/discovery/prepare-barrier.js +739 -0
- package/dist/discovery/prepare-barrier.js.map +1 -0
- package/dist/discovery/pytest-adapter.d.ts.map +1 -1
- package/dist/discovery/pytest-adapter.js +6 -2
- package/dist/discovery/pytest-adapter.js.map +1 -1
- package/dist/discovery/pytest-runner-adapter.d.ts +124 -0
- package/dist/discovery/pytest-runner-adapter.d.ts.map +1 -0
- package/dist/discovery/pytest-runner-adapter.js +454 -0
- package/dist/discovery/pytest-runner-adapter.js.map +1 -0
- package/dist/discovery/reconcile.d.ts +80 -11
- package/dist/discovery/reconcile.d.ts.map +1 -1
- package/dist/discovery/reconcile.js +395 -78
- package/dist/discovery/reconcile.js.map +1 -1
- package/dist/discovery/runner-env.d.ts +88 -2
- package/dist/discovery/runner-env.d.ts.map +1 -1
- package/dist/discovery/runner-env.js +142 -4
- package/dist/discovery/runner-env.js.map +1 -1
- package/dist/discovery/static-discovery.d.ts +38 -3
- package/dist/discovery/static-discovery.d.ts.map +1 -1
- package/dist/discovery/static-discovery.js +454 -15
- package/dist/discovery/static-discovery.js.map +1 -1
- package/dist/discovery/supervised-run.d.ts +199 -10
- package/dist/discovery/supervised-run.d.ts.map +1 -1
- package/dist/discovery/supervised-run.js +350 -39
- package/dist/discovery/supervised-run.js.map +1 -1
- package/dist/discovery/trusted-config.d.ts +180 -6
- package/dist/discovery/trusted-config.d.ts.map +1 -1
- package/dist/discovery/trusted-config.js +279 -10
- package/dist/discovery/trusted-config.js.map +1 -1
- package/dist/discovery/vitest-runner-adapter.d.ts +172 -0
- package/dist/discovery/vitest-runner-adapter.d.ts.map +1 -0
- package/dist/discovery/vitest-runner-adapter.js +607 -0
- package/dist/discovery/vitest-runner-adapter.js.map +1 -0
- package/dist/fixture/consumer-runner.d.ts +4 -0
- package/dist/fixture/consumer-runner.d.ts.map +1 -0
- package/dist/fixture/consumer-runner.js +38 -0
- package/dist/fixture/consumer-runner.js.map +1 -0
- package/dist/fixture/evidence.d.ts +27 -0
- package/dist/fixture/evidence.d.ts.map +1 -1
- package/dist/fixture/evidence.js +12 -0
- package/dist/fixture/evidence.js.map +1 -1
- package/dist/fixture/fixture.d.ts +2 -1
- package/dist/fixture/fixture.d.ts.map +1 -1
- package/dist/fixture/fixture.js +1 -17
- package/dist/fixture/fixture.js.map +1 -1
- package/dist/fixture/witness-client.d.ts +6 -174
- package/dist/fixture/witness-client.d.ts.map +1 -1
- package/dist/fixture/witness-client.js +6 -267
- package/dist/fixture/witness-client.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +6 -12
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +6 -17
- package/dist/json.js.map +1 -1
- package/dist/reporter/project-graph-reporter.d.ts +92 -0
- package/dist/reporter/project-graph-reporter.d.ts.map +1 -0
- package/dist/reporter/project-graph-reporter.js +92 -0
- package/dist/reporter/project-graph-reporter.js.map +1 -0
- package/dist/reporter/reporter.cjs.map +1 -1
- package/dist/reporter/reporter.d.ts +93 -4
- package/dist/reporter/reporter.d.ts.map +1 -1
- package/dist/reporter/reporter.js +174 -18
- package/dist/reporter/reporter.js.map +1 -1
- package/dist/runner-claims.d.ts +13 -0
- package/dist/runner-claims.d.ts.map +1 -0
- package/dist/runner-claims.js +46 -0
- package/dist/runner-claims.js.map +1 -0
- package/dist/runner-resolution.d.ts +3 -0
- package/dist/runner-resolution.d.ts.map +1 -0
- package/dist/runner-resolution.js +14 -0
- package/dist/runner-resolution.js.map +1 -0
- package/dist/supervisor/client.d.ts +23 -1
- package/dist/supervisor/client.d.ts.map +1 -1
- package/dist/supervisor/client.js +49 -0
- package/dist/supervisor/client.js.map +1 -1
- package/dist/supervisor/drain.d.ts +65 -0
- package/dist/supervisor/drain.d.ts.map +1 -1
- package/dist/supervisor/drain.js +353 -9
- package/dist/supervisor/drain.js.map +1 -1
- package/dist/supervisor/index.d.ts +7 -3
- package/dist/supervisor/index.d.ts.map +1 -1
- package/dist/supervisor/index.js +7 -3
- package/dist/supervisor/index.js.map +1 -1
- package/dist/supervisor/spool.d.ts +65 -2
- package/dist/supervisor/spool.d.ts.map +1 -1
- package/dist/supervisor/spool.js +47 -0
- package/dist/supervisor/spool.js.map +1 -1
- package/dist/surface.d.ts +6 -207
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +6 -264
- package/dist/surface.js.map +1 -1
- package/dist/vitest/index.d.ts +23 -0
- package/dist/vitest/index.d.ts.map +1 -0
- package/dist/vitest/index.js +356 -0
- package/dist/vitest/index.js.map +1 -0
- package/dist/vitest/reporter.d.ts +83 -0
- package/dist/vitest/reporter.d.ts.map +1 -0
- package/dist/vitest/reporter.js +211 -0
- package/dist/vitest/reporter.js.map +1 -0
- package/dist/vitest/worker-slot.d.ts +36 -0
- package/dist/vitest/worker-slot.d.ts.map +1 -0
- package/dist/vitest/worker-slot.js +51 -0
- package/dist/vitest/worker-slot.js.map +1 -0
- package/dist/witness/adapter-registry.d.ts +6 -50
- package/dist/witness/adapter-registry.d.ts.map +1 -1
- package/dist/witness/adapter-registry.js +6 -257
- package/dist/witness/adapter-registry.js.map +1 -1
- package/dist/witness/behavior-request.d.ts +6 -76
- package/dist/witness/behavior-request.d.ts.map +1 -1
- package/dist/witness/behavior-request.js +6 -273
- package/dist/witness/behavior-request.js.map +1 -1
- package/dist/witness/behavior.d.ts +6 -48
- package/dist/witness/behavior.d.ts.map +1 -1
- package/dist/witness/behavior.js +6 -114
- package/dist/witness/behavior.js.map +1 -1
- package/dist/witness/bin.d.ts +6 -17
- package/dist/witness/bin.d.ts.map +1 -1
- package/dist/witness/bin.js +6 -168
- package/dist/witness/bin.js.map +1 -1
- package/dist/witness/browser.d.ts +14 -206
- package/dist/witness/browser.d.ts.map +1 -1
- package/dist/witness/browser.js +15 -654
- package/dist/witness/browser.js.map +1 -1
- package/dist/witness/classifications.d.ts +6 -38
- package/dist/witness/classifications.d.ts.map +1 -1
- package/dist/witness/classifications.js +6 -83
- package/dist/witness/classifications.js.map +1 -1
- package/dist/witness/env-attestation.d.ts +6 -94
- package/dist/witness/env-attestation.d.ts.map +1 -1
- package/dist/witness/env-attestation.js +6 -198
- package/dist/witness/env-attestation.js.map +1 -1
- package/dist/witness/fixture-provider.d.ts +6 -82
- package/dist/witness/fixture-provider.d.ts.map +1 -1
- package/dist/witness/fixture-provider.js +6 -105
- package/dist/witness/fixture-provider.js.map +1 -1
- package/dist/witness/loopback-pins.d.ts +6 -75
- package/dist/witness/loopback-pins.d.ts.map +1 -1
- package/dist/witness/loopback-pins.js +6 -240
- package/dist/witness/loopback-pins.js.map +1 -1
- package/dist/witness/server.d.ts +8 -26
- package/dist/witness/server.d.ts.map +1 -1
- package/dist/witness/server.js +24 -3761
- package/dist/witness/server.js.map +1 -1
- package/dist/witness/types.d.ts +6 -882
- package/dist/witness/types.d.ts.map +1 -1
- package/dist/witness/types.js +9 -1
- package/dist/witness/types.js.map +1 -1
- package/examples/overlay-proof.spec.js +75 -0
- package/package.json +8 -2
- package/python/__pycache__/gateforge_persistence_intents.cpython-312.pyc +0 -0
- package/python/__pycache__/gateforge_persistence_intents.cpython-314.pyc +0 -0
- package/python/gateforge_pytest_plugin.py +462 -0
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Vitest runner adapter behind the runner-neutral `RunnerAdapter`
|
|
3
|
+
* contract (plan 2026-09-25 phase 4: Jest/Vitest + supertest).
|
|
4
|
+
*
|
|
5
|
+
* - enumerate: the project's own vitest CLI runs `list --run --json` —
|
|
6
|
+
* the runnable set, fixed BEFORE the run. Vitest's list omits skipped
|
|
7
|
+
* tests (a bounded, documented divergence: a selection that would run
|
|
8
|
+
* nothing enumerates `unavailable`, which is the honest verdict).
|
|
9
|
+
* - tag: the pack's Vitest reporter (`vitest/reporter`) spools the same
|
|
10
|
+
* lifecycle events the Playwright reporter writes, and the in-test
|
|
11
|
+
* helper (`@gate-forge/pack-playwright/vitest`) resolves the
|
|
12
|
+
* supervisor-issued session for the running test and rewrites its
|
|
13
|
+
* supertest traffic through the per-test session proxy origin.
|
|
14
|
+
* - execute: `vitest run --reporter=json` into the EXCLUDED run-state
|
|
15
|
+
* dir plus the gateforge reporter; the selection granularity is the
|
|
16
|
+
* test FILE (the same granularity the supervised Playwright run
|
|
17
|
+
* composes).
|
|
18
|
+
* - parse: the jest-compatible JSON document, strictly. A row without
|
|
19
|
+
* an attributable file/title identity is NEVER attributed to a test;
|
|
20
|
+
* runner-assisted retries surface through the reporter's flags
|
|
21
|
+
* document ({@link mergeVitestRunnerFlags}).
|
|
22
|
+
*/
|
|
23
|
+
import { spawn } from 'node:child_process';
|
|
24
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
25
|
+
import { isAbsolute, join, relative } from 'node:path';
|
|
26
|
+
import { fileURLToPath } from 'node:url';
|
|
27
|
+
import { ENV_APP_BASE_URL, ENV_RUN_ID, ENV_RUN_TOKEN, ENV_STATE_DIR, ENV_WITNESS_URL } from '@gate-forge/witness/constants';
|
|
28
|
+
import { buildWitnessedSessionRunnerEnv } from './runner-env.js';
|
|
29
|
+
import { untrustedEnv } from './reconcile.js';
|
|
30
|
+
import { VITEST_END_BARRIER_ENV } from '../vitest/reporter.js';
|
|
31
|
+
/** Per-test session variables a runner adapter publishes to the test. */
|
|
32
|
+
export const VITEST_ENV_SESSION_ID = 'GATEFORGE_SESSION_ID';
|
|
33
|
+
export const VITEST_ENV_SESSION_TOKEN = 'GATEFORGE_SESSION_TOKEN';
|
|
34
|
+
export const VITEST_ENV_SESSION_PROXY_URL = 'GATEFORGE_SESSION_PROXY_URL';
|
|
35
|
+
/** The variables that carry ONE test's identity to its traffic. */
|
|
36
|
+
export const VITEST_IDENTITY_ENV = [
|
|
37
|
+
VITEST_ENV_SESSION_ID,
|
|
38
|
+
VITEST_ENV_SESSION_TOKEN,
|
|
39
|
+
VITEST_ENV_SESSION_PROXY_URL,
|
|
40
|
+
];
|
|
41
|
+
/** The runner-flags document the reporter seals (retry detection). */
|
|
42
|
+
const RUNNER_FLAGS_FILE = 'runner-flags.json';
|
|
43
|
+
/**
|
|
44
|
+
* The flag that keeps the runner's persistent result cache out of the
|
|
45
|
+
* candidate workspace (see {@link VitestRunnerAdapter.enumerate}).
|
|
46
|
+
*/
|
|
47
|
+
const NO_CACHE_FLAG = ['--no-cache'];
|
|
48
|
+
/**
|
|
49
|
+
* The Vitest runner adapter.
|
|
50
|
+
*
|
|
51
|
+
* The child's vitest resolves from the project under test first
|
|
52
|
+
* (`<cwd>/node_modules/vitest/vitest.mjs`, the same local-first rule
|
|
53
|
+
* the supervised Playwright run applies to its CLI), then the parent
|
|
54
|
+
* process's own module graph, then `vitest` on PATH.
|
|
55
|
+
*/
|
|
56
|
+
export class VitestRunnerAdapter {
|
|
57
|
+
options;
|
|
58
|
+
runner = 'vitest';
|
|
59
|
+
capabilities = {
|
|
60
|
+
inventory: 'available',
|
|
61
|
+
resolveInstances: 'available',
|
|
62
|
+
execute: 'available',
|
|
63
|
+
};
|
|
64
|
+
constructor(options = {}) {
|
|
65
|
+
this.options = options;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Job 1: the runnable set, fixed BEFORE the run (the project's own
|
|
69
|
+
* vitest CLI, JSON output).
|
|
70
|
+
*
|
|
71
|
+
* Args:
|
|
72
|
+
* cwd: absolute repo root the vitest project lives under.
|
|
73
|
+
*
|
|
74
|
+
* Returns:
|
|
75
|
+
* Promise<RunnerEnumeration>: the enumerated tests, or an
|
|
76
|
+
* `unavailable` verdict with a single cause. An empty project, a
|
|
77
|
+
* vitest failure, and an unreadable listing are all `unavailable`.
|
|
78
|
+
*/
|
|
79
|
+
async enumerate(cwd) {
|
|
80
|
+
const entry = this.vitestEntryOf(cwd);
|
|
81
|
+
if (entry === null) {
|
|
82
|
+
return {
|
|
83
|
+
status: 'unavailable',
|
|
84
|
+
detail: `vitest enumeration found no vitest CLI under ${cwd} — install vitest in the project`,
|
|
85
|
+
tests: [],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// `--no-cache`: vitest's persistent result cache lives INSIDE the
|
|
89
|
+
// candidate workspace (`node_modules/.vite`), so an ordinary run
|
|
90
|
+
// mutates candidate bytes after the authority froze the tree and the
|
|
91
|
+
// fail-closed drift gate then refuses the whole run. The cache buys
|
|
92
|
+
// nothing here (the run is bounded and the selection is fixed), so
|
|
93
|
+
// neither supervised child ever writes into the workspace.
|
|
94
|
+
const outcome = await this.spawnVitest(cwd, entry, ['list', '--run', '--json', ...NO_CACHE_FLAG]);
|
|
95
|
+
if (outcome.timedOut) {
|
|
96
|
+
return {
|
|
97
|
+
status: 'unavailable',
|
|
98
|
+
detail: `vitest enumeration exceeded its timeout and was killed — an unavailable run never proves coverage`,
|
|
99
|
+
tests: [],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (outcome.code !== 0 || outcome.error !== null) {
|
|
103
|
+
return {
|
|
104
|
+
status: 'unavailable',
|
|
105
|
+
detail: `vitest enumeration failed (exit ${String(outcome.code)}): ${firstLine(outcome.stderr)} — the expected set is unavailable, never faked empty`,
|
|
106
|
+
tests: [],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const tests = parseVitestListing(outcome.stdout, cwd);
|
|
110
|
+
if (tests === null) {
|
|
111
|
+
return {
|
|
112
|
+
status: 'unavailable',
|
|
113
|
+
detail: 'vitest enumeration produced an unreadable JSON listing — fail closed',
|
|
114
|
+
tests: [],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (tests.length === 0) {
|
|
118
|
+
return {
|
|
119
|
+
status: 'unavailable',
|
|
120
|
+
detail: `vitest enumerated no runnable tests under ${cwd} — a zero-test run never proves coverage`,
|
|
121
|
+
tests: [],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
status: 'discovered',
|
|
126
|
+
detail: `enumerated ${String(tests.length)} vitest test(s) via the project's vitest CLI`,
|
|
127
|
+
tests: tests.sort((a, b) => (a.logicalKey < b.logicalKey ? -1 : a.logicalKey > b.logicalKey ? 1 : 0)),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Job 2: the per-test tag. The pack's Vitest reporter spools the
|
|
132
|
+
* lifecycle events; the in-test helper resolves the supervisor
|
|
133
|
+
* session for the running test and rewrites its supertest traffic
|
|
134
|
+
* through that session's proxy origin.
|
|
135
|
+
*
|
|
136
|
+
* Args:
|
|
137
|
+
* session: the test being tagged.
|
|
138
|
+
* context: run-scoped, non-secret witness wiring.
|
|
139
|
+
*
|
|
140
|
+
* Returns:
|
|
141
|
+
* RunnerChildEnv: the run identity plus the session-scoped tag.
|
|
142
|
+
*/
|
|
143
|
+
childEnv(_session, context) {
|
|
144
|
+
return {
|
|
145
|
+
vars: {
|
|
146
|
+
[ENV_WITNESS_URL]: context.witnessUrl,
|
|
147
|
+
[ENV_RUN_TOKEN]: context.runToken,
|
|
148
|
+
[ENV_APP_BASE_URL]: context.appBaseUrl,
|
|
149
|
+
[ENV_STATE_DIR]: '<run-state dir>',
|
|
150
|
+
[ENV_RUN_ID]: '<run id>',
|
|
151
|
+
[VITEST_ENV_SESSION_ID]: context.sessionId,
|
|
152
|
+
[VITEST_ENV_SESSION_TOKEN]: context.sessionToken,
|
|
153
|
+
[VITEST_ENV_SESSION_PROXY_URL]: context.sessionProxyUrl,
|
|
154
|
+
},
|
|
155
|
+
tagChannel: 'session-proxy',
|
|
156
|
+
identityVars: VITEST_IDENTITY_ENV,
|
|
157
|
+
mechanism: 'gateforge vitest reporter spools the test lifecycle and the in-test helper resolves the ' +
|
|
158
|
+
'supervisor session, rewriting supertest traffic through the per-test session proxy origin',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Job 3: runs the SELECTED vitest tests under the jest-compatible
|
|
163
|
+
* JSON reporter plus the pack's gateforge reporter, with the
|
|
164
|
+
* witnessed-session env allowlist (the run identity the reporter
|
|
165
|
+
* needs to address the lifecycle spool plus the non-secret run
|
|
166
|
+
* wiring — never the verifier key, never any other parent-side name).
|
|
167
|
+
* A `named-selection` run adds the anchored full-name pattern so only
|
|
168
|
+
* the named tests execute, never their file neighbours.
|
|
169
|
+
*
|
|
170
|
+
* Args:
|
|
171
|
+
* request: the exact selection (with its mode), run identity, and
|
|
172
|
+
* wall-clock bound.
|
|
173
|
+
*
|
|
174
|
+
* Returns:
|
|
175
|
+
* Promise<RunnerExecutionEnvelope>: the structured outcome envelope
|
|
176
|
+
* (a runner exit code alone is never a gate result).
|
|
177
|
+
*/
|
|
178
|
+
async execute(request) {
|
|
179
|
+
const entry = this.vitestEntryOf(request.cwd);
|
|
180
|
+
if (entry === null) {
|
|
181
|
+
return envelopeIncomplete(null, `vitest execution found no vitest CLI under ${request.cwd} — install vitest in the project`);
|
|
182
|
+
}
|
|
183
|
+
const files = new Set();
|
|
184
|
+
const fullNames = [];
|
|
185
|
+
for (const logicalKey of request.logicalKeys) {
|
|
186
|
+
const identity = vitestIdentityKeyOf(logicalKey);
|
|
187
|
+
if (identity === null) {
|
|
188
|
+
return envelopeIncomplete(null, `vitest execution cannot run '${logicalKey}': not a <file>#<title path> identity this adapter enumerated`);
|
|
189
|
+
}
|
|
190
|
+
files.add(identity.file);
|
|
191
|
+
fullNames.push(identity.titlePath.join(' '));
|
|
192
|
+
}
|
|
193
|
+
// A `named-selection` run executes ONLY the named tests: vitest
|
|
194
|
+
// matches `--testNamePattern` against the full name (enclosing
|
|
195
|
+
// describes + the test title), so the anchored, escaped alternation
|
|
196
|
+
// of exactly those names is the per-test narrowing. Every other mode
|
|
197
|
+
// runs the selection's files unchanged.
|
|
198
|
+
const namePattern = request.mode === 'named-selection' ? `^(?:${[...new Set(fullNames)].sort().map(escapeRegExp).join('|')})$` : null;
|
|
199
|
+
const reportPath = join(request.stateDir, 'vitest', request.runId, 'report.json');
|
|
200
|
+
const argv = [
|
|
201
|
+
'run',
|
|
202
|
+
'--run',
|
|
203
|
+
'--reporter=json',
|
|
204
|
+
`--outputFile.json=${reportPath}`,
|
|
205
|
+
`--reporter=${vitestReporterModulePath()}`,
|
|
206
|
+
...NO_CACHE_FLAG,
|
|
207
|
+
...(namePattern === null ? [] : [`--testNamePattern=${namePattern}`]),
|
|
208
|
+
...[...files].sort(),
|
|
209
|
+
];
|
|
210
|
+
const child = spawn(entry.command, [...entry.prefix, ...argv], {
|
|
211
|
+
cwd: request.cwd,
|
|
212
|
+
env: buildWitnessedSessionRunnerEnv({
|
|
213
|
+
[ENV_WITNESS_URL]: this.options.witness?.url ?? process.env[ENV_WITNESS_URL] ?? '',
|
|
214
|
+
[ENV_RUN_TOKEN]: this.options.witness?.token ?? process.env[ENV_RUN_TOKEN] ?? '',
|
|
215
|
+
[ENV_STATE_DIR]: request.stateDir,
|
|
216
|
+
[ENV_RUN_ID]: request.runId,
|
|
217
|
+
[ENV_APP_BASE_URL]: this.options.witness?.appBaseUrl ?? process.env[ENV_APP_BASE_URL] ?? '',
|
|
218
|
+
// The pack reporter's end-barrier TEST SEAM, read from the
|
|
219
|
+
// ambient environment like the other non-secret run wiring
|
|
220
|
+
// above: unset in every real run, and inert when set except
|
|
221
|
+
// that the reporter waits for the named file before it spools
|
|
222
|
+
// any `testEnd` (see ../vitest/reporter.ts).
|
|
223
|
+
[VITEST_END_BARRIER_ENV]: process.env[VITEST_END_BARRIER_ENV] ?? '',
|
|
224
|
+
}, process.env),
|
|
225
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
226
|
+
});
|
|
227
|
+
const outcome = await new Promise((settle) => {
|
|
228
|
+
let timedOut = false;
|
|
229
|
+
const timer = setTimeout(() => {
|
|
230
|
+
timedOut = true;
|
|
231
|
+
child.kill('SIGKILL');
|
|
232
|
+
}, request.timeoutMs);
|
|
233
|
+
child.stdout?.resume();
|
|
234
|
+
child.stderr?.resume();
|
|
235
|
+
child.once('error', (error) => {
|
|
236
|
+
clearTimeout(timer);
|
|
237
|
+
settle({ code: null, timedOut: false, error });
|
|
238
|
+
});
|
|
239
|
+
child.once('exit', (code) => {
|
|
240
|
+
clearTimeout(timer);
|
|
241
|
+
settle({ code, timedOut, error: null });
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
if (outcome.error !== null) {
|
|
245
|
+
return envelopeIncomplete(null, `vitest execution could not start (${entry.command}): ${outcome.error.message}`);
|
|
246
|
+
}
|
|
247
|
+
if (outcome.timedOut) {
|
|
248
|
+
return envelopeIncomplete(null, `vitest execution exceeded its ${String(request.timeoutMs)}ms bound and was killed — an incomplete run never grades complete`);
|
|
249
|
+
}
|
|
250
|
+
let report = '';
|
|
251
|
+
try {
|
|
252
|
+
report = readFileSync(reportPath, 'utf8');
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
report = '';
|
|
256
|
+
}
|
|
257
|
+
let envelope = this.parseResults({ processExit: outcome.code, report, cwd: request.cwd });
|
|
258
|
+
if (!envelope.complete && report === '') {
|
|
259
|
+
envelope = {
|
|
260
|
+
...envelope,
|
|
261
|
+
incompleteDetail: `vitest produced no JSON report at ${reportPath} (exit ${String(outcome.code)}) — fail closed`,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// A `named-selection` run reports the tests vitest COLLECTED in the
|
|
265
|
+
// selected files, not the ones it executed: the name pattern keeps
|
|
266
|
+
// the unselected rows (as never-run placeholders), and a test this
|
|
267
|
+
// run never selected is never evidence, so those rows are dropped
|
|
268
|
+
// here instead of being graded as unplanned executions.
|
|
269
|
+
if (request.mode === 'named-selection') {
|
|
270
|
+
const selected = new Set(request.logicalKeys);
|
|
271
|
+
envelope = { ...envelope, outcomes: envelope.outcomes.filter((row) => selected.has(row.logicalKey)) };
|
|
272
|
+
}
|
|
273
|
+
// Retry evidence lives in the runner-flags document the gateforge
|
|
274
|
+
// reporter seals (the JSON reporter has no retry surface).
|
|
275
|
+
const flags = this.readRunnerFlags(request.stateDir, request.runId);
|
|
276
|
+
if (flags !== null && flags.retriesDetected) {
|
|
277
|
+
envelope = {
|
|
278
|
+
...envelope,
|
|
279
|
+
complete: false,
|
|
280
|
+
incompleteDetail: envelope.incompleteDetail ??
|
|
281
|
+
'vitest runner-assisted retry detected (required retries are zero) — the run blocks',
|
|
282
|
+
retriesDetected: true,
|
|
283
|
+
retriesDetail: 'the gateforge vitest reporter observed retryCount > 0 for at least one test',
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
return envelope;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Job 4: the jest-compatible JSON document, strictly mapped.
|
|
290
|
+
*
|
|
291
|
+
* Args:
|
|
292
|
+
* raw: the JSON report text plus the runner exit status.
|
|
293
|
+
*
|
|
294
|
+
* Returns:
|
|
295
|
+
* RunnerExecutionEnvelope: reporter INPUT, never a verdict. An
|
|
296
|
+
* unreadable report, a zero-test run, and a report whose rows carry
|
|
297
|
+
* no attributable identity are all `complete: false`.
|
|
298
|
+
*/
|
|
299
|
+
parseResults(raw) {
|
|
300
|
+
if (raw.report.trim() === '') {
|
|
301
|
+
return envelopeIncomplete(raw.processExit, 'no vitest JSON report — a missing report never proves anything');
|
|
302
|
+
}
|
|
303
|
+
let document;
|
|
304
|
+
try {
|
|
305
|
+
document = parseVitestReport(raw.report);
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
return envelopeIncomplete(raw.processExit, `unparsable vitest JSON report — fail closed: ${describeError(error)}`);
|
|
309
|
+
}
|
|
310
|
+
const rows = [];
|
|
311
|
+
let suiteCount = 0;
|
|
312
|
+
const base = raw.cwd ?? process.cwd();
|
|
313
|
+
for (const suite of document.testResults ?? []) {
|
|
314
|
+
const reportedFile = typeof suite.name === 'string' ? suite.name.replace(/^file:\/\//, '') : '';
|
|
315
|
+
const file = reportedFile !== '' && isAbsolute(reportedFile)
|
|
316
|
+
? relative(base, reportedFile).split('\\').join('/')
|
|
317
|
+
: reportedFile;
|
|
318
|
+
for (const row of suite.assertionResults ?? []) {
|
|
319
|
+
suiteCount += 1;
|
|
320
|
+
const identity = vitestIdentityOf(file, row);
|
|
321
|
+
if (identity !== null) {
|
|
322
|
+
rows.push({ identity, row, frameworkId: `${identity.file}::${identity.titlePath.join('::')}` });
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (suiteCount > 0 && rows.length === 0) {
|
|
327
|
+
return envelopeIncomplete(raw.processExit, `vitest report carries ${String(suiteCount)} row(s) with no attributable file/title identity — ` +
|
|
328
|
+
'an unidentified row is never attributed to a test');
|
|
329
|
+
}
|
|
330
|
+
if ((document.numTotalTests ?? 0) === 0 && suiteCount === 0) {
|
|
331
|
+
return envelopeIncomplete(raw.processExit, 'vitest report covers zero tests — a zero-test run is incomplete');
|
|
332
|
+
}
|
|
333
|
+
if (suiteCount > 0 && rows.length > 0 && rows.every((entry) => entry.row.status === 'skipped')) {
|
|
334
|
+
return envelopeIncomplete(raw.processExit, 'vitest report ran only skipped cases — nothing executed');
|
|
335
|
+
}
|
|
336
|
+
const exitDetail = vitestExitIncompleteDetail(raw.processExit);
|
|
337
|
+
const outcomes = rows.map((entry) => ({
|
|
338
|
+
logicalKey: `${entry.identity.file}#${entry.identity.titlePath.join('>')}`,
|
|
339
|
+
project: null,
|
|
340
|
+
frameworkId: entry.frameworkId,
|
|
341
|
+
status: entry.row.status === 'passed' ? 'passed' : entry.row.status === 'skipped' ? 'skipped' : 'failed',
|
|
342
|
+
attempt: 1,
|
|
343
|
+
}));
|
|
344
|
+
if (exitDetail !== null)
|
|
345
|
+
return { ...envelopeIncomplete(raw.processExit, exitDetail), outcomes };
|
|
346
|
+
return {
|
|
347
|
+
processExit: raw.processExit,
|
|
348
|
+
complete: true,
|
|
349
|
+
outcomes,
|
|
350
|
+
fixtureOutcome: 'passed',
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* The runner's native parsed report (diagnostics surfaces).
|
|
355
|
+
*
|
|
356
|
+
* Args:
|
|
357
|
+
* raw: the JSON report text plus the runner exit status.
|
|
358
|
+
*
|
|
359
|
+
* Returns:
|
|
360
|
+
* VitestJsonReport | null: the parsed document, or null when the
|
|
361
|
+
* report is absent or unparsable (never a guess).
|
|
362
|
+
*/
|
|
363
|
+
parseReport(raw) {
|
|
364
|
+
if (raw.report.trim() === '')
|
|
365
|
+
return null;
|
|
366
|
+
try {
|
|
367
|
+
return parseVitestReport(raw.report);
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/** The runner-flags document of one run (null when absent/broken). */
|
|
374
|
+
readRunnerFlags(stateDir, runId) {
|
|
375
|
+
try {
|
|
376
|
+
const parsed = JSON.parse(readFileSync(join(stateDir, 'vitest', runId, RUNNER_FLAGS_FILE), 'utf8'));
|
|
377
|
+
return { retriesDetected: parsed.retriesDetected === true };
|
|
378
|
+
}
|
|
379
|
+
catch {
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/** The vitest CLI entry for a project (local-first), or null. */
|
|
384
|
+
vitestEntryOf(cwd) {
|
|
385
|
+
if (this.options.vitestEntry !== undefined) {
|
|
386
|
+
return this.options.vitestEntry.endsWith('.mjs')
|
|
387
|
+
? { command: process.execPath, prefix: [this.options.vitestEntry] }
|
|
388
|
+
: { command: this.options.vitestEntry, prefix: [] };
|
|
389
|
+
}
|
|
390
|
+
const localEntry = join(cwd, 'node_modules', 'vitest', 'vitest.mjs');
|
|
391
|
+
if (existsSync(localEntry))
|
|
392
|
+
return { command: process.execPath, prefix: [localEntry] };
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* One bounded vitest CLI invocation (stdout/stderr captured).
|
|
397
|
+
*
|
|
398
|
+
* ENUMERATION runs the CONSUMER's own vitest config, so the child
|
|
399
|
+
* environment is the `untrustedEnv` one: every ambient `GATEFORGE_*`
|
|
400
|
+
* name is stripped, which keeps the verifier key, the run token and
|
|
401
|
+
* the witness URL out of reach of the repository being gated. The
|
|
402
|
+
* ambient `GATEFORGE_REPORTER_FAIL_RUN` the old merge carried is
|
|
403
|
+
* stripped by the same rule, so the list child cannot be armed to
|
|
404
|
+
* fail a run it never reports.
|
|
405
|
+
*/
|
|
406
|
+
spawnVitest(cwd, entry, args) {
|
|
407
|
+
return new Promise((settle) => {
|
|
408
|
+
let stdout = '';
|
|
409
|
+
let stderr = '';
|
|
410
|
+
let timedOut = false;
|
|
411
|
+
const child = spawn(entry.command, [...entry.prefix, ...args], {
|
|
412
|
+
cwd,
|
|
413
|
+
env: untrustedEnv(process.env),
|
|
414
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
415
|
+
});
|
|
416
|
+
const timer = setTimeout(() => {
|
|
417
|
+
timedOut = true;
|
|
418
|
+
child.kill('SIGKILL');
|
|
419
|
+
}, 120_000);
|
|
420
|
+
child.stdout?.on('data', (chunk) => {
|
|
421
|
+
stdout += chunk.toString('utf8');
|
|
422
|
+
});
|
|
423
|
+
child.stderr?.on('data', (chunk) => {
|
|
424
|
+
stderr += chunk.toString('utf8');
|
|
425
|
+
});
|
|
426
|
+
child.once('error', (error) => {
|
|
427
|
+
clearTimeout(timer);
|
|
428
|
+
settle({ code: null, stdout, stderr, timedOut: false, error });
|
|
429
|
+
});
|
|
430
|
+
child.once('exit', (code) => {
|
|
431
|
+
clearTimeout(timer);
|
|
432
|
+
settle({ code, stdout, stderr, timedOut, error: null });
|
|
433
|
+
});
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Merges the gateforge reporter's runner-flags document into an
|
|
439
|
+
* envelope (retry detection is only observable from the reporter, not
|
|
440
|
+
* from the JSON document).
|
|
441
|
+
*
|
|
442
|
+
* Args:
|
|
443
|
+
* envelope: the envelope `parseResults` produced.
|
|
444
|
+
* flagsJson: the runner-flags document text (empty when absent).
|
|
445
|
+
*
|
|
446
|
+
* Returns:
|
|
447
|
+
* RunnerExecutionEnvelope: the envelope with retry evidence merged;
|
|
448
|
+
* a retry-detected run blocks (required retries are zero).
|
|
449
|
+
*/
|
|
450
|
+
export function mergeVitestRunnerFlags(envelope, flagsJson) {
|
|
451
|
+
let flags;
|
|
452
|
+
try {
|
|
453
|
+
flags = JSON.parse(flagsJson);
|
|
454
|
+
}
|
|
455
|
+
catch {
|
|
456
|
+
return envelope;
|
|
457
|
+
}
|
|
458
|
+
if (flags.retriesDetected !== true)
|
|
459
|
+
return envelope;
|
|
460
|
+
return {
|
|
461
|
+
...envelope,
|
|
462
|
+
complete: false,
|
|
463
|
+
incompleteDetail: envelope.incompleteDetail ??
|
|
464
|
+
'vitest runner-assisted retry detected (required retries are zero) — the run blocks',
|
|
465
|
+
retriesDetected: true,
|
|
466
|
+
retriesDetail: 'the gateforge vitest reporter observed retryCount > 0 for at least one test',
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* The identity of one jest-compatible assertion row, or null when the
|
|
471
|
+
* row carries no attributable identity (a row without a suite file or
|
|
472
|
+
* a non-empty title is never attributed to a test).
|
|
473
|
+
*/
|
|
474
|
+
function vitestIdentityOf(file, row) {
|
|
475
|
+
if (file === '' || typeof row.title !== 'string' || row.title === '')
|
|
476
|
+
return null;
|
|
477
|
+
const ancestors = Array.isArray(row.ancestorTitles)
|
|
478
|
+
? row.ancestorTitles.filter((title) => typeof title === 'string')
|
|
479
|
+
: [];
|
|
480
|
+
return { file, titlePath: [...ancestors, row.title] };
|
|
481
|
+
}
|
|
482
|
+
/** Parses the `vitest list --json` document into identities. */
|
|
483
|
+
function parseVitestListing(stdout, cwd) {
|
|
484
|
+
let document;
|
|
485
|
+
try {
|
|
486
|
+
document = JSON.parse(stdout);
|
|
487
|
+
}
|
|
488
|
+
catch {
|
|
489
|
+
return null;
|
|
490
|
+
}
|
|
491
|
+
if (!Array.isArray(document))
|
|
492
|
+
return null;
|
|
493
|
+
const tests = [];
|
|
494
|
+
for (const entry of document) {
|
|
495
|
+
if (typeof entry !== 'object' || entry === null)
|
|
496
|
+
continue;
|
|
497
|
+
const record = entry;
|
|
498
|
+
if (typeof record.name !== 'string' || typeof record.file !== 'string')
|
|
499
|
+
continue;
|
|
500
|
+
const file = repoPosix(record.file);
|
|
501
|
+
const relativeFile = relative(cwd, file).split('\\').join('/');
|
|
502
|
+
const titlePath = record.name.split(' > ');
|
|
503
|
+
tests.push({
|
|
504
|
+
logicalKey: `${relativeFile}#${titlePath.join('>')}`,
|
|
505
|
+
project: null,
|
|
506
|
+
file: relativeFile,
|
|
507
|
+
titlePath,
|
|
508
|
+
blockingAnnotations: [],
|
|
509
|
+
// The pack reporter spools `<file>#<title path>` — registration
|
|
510
|
+
// must name the same id.
|
|
511
|
+
frameworkId: `${relativeFile}#${titlePath.join('>')}`,
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
return tests;
|
|
515
|
+
}
|
|
516
|
+
/** Strictly parses the jest-compatible JSON report. */
|
|
517
|
+
function parseVitestReport(report) {
|
|
518
|
+
const document = JSON.parse(report);
|
|
519
|
+
if (typeof document !== 'object' || document === null || Array.isArray(document)) {
|
|
520
|
+
throw new Error('the vitest JSON report is not an object');
|
|
521
|
+
}
|
|
522
|
+
return document;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* The `<file>#<title path>` identity one logical key carries, or null
|
|
526
|
+
* when the key is not the identity this adapter enumerated (never a
|
|
527
|
+
* wildcard, never a guess).
|
|
528
|
+
*
|
|
529
|
+
* Args:
|
|
530
|
+
* logicalKey: the exact logical key of one selected test.
|
|
531
|
+
*
|
|
532
|
+
* Returns:
|
|
533
|
+
* TestIdentityKey | null: the file and title path, or null.
|
|
534
|
+
*/
|
|
535
|
+
function vitestIdentityKeyOf(logicalKey) {
|
|
536
|
+
const hash = logicalKey.indexOf('#');
|
|
537
|
+
if (hash <= 0)
|
|
538
|
+
return null;
|
|
539
|
+
const file = logicalKey.slice(0, hash);
|
|
540
|
+
const titlePath = logicalKey.slice(hash + 1);
|
|
541
|
+
if (file === '' || titlePath === '' || titlePath.includes('#'))
|
|
542
|
+
return null;
|
|
543
|
+
return { file, titlePath: titlePath.split('>') };
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Escapes one literal test name for use inside a regular expression, so
|
|
547
|
+
* a name that contains regex metacharacters matches itself and nothing
|
|
548
|
+
* else.
|
|
549
|
+
*
|
|
550
|
+
* Args:
|
|
551
|
+
* value: the literal title text.
|
|
552
|
+
*
|
|
553
|
+
* Returns:
|
|
554
|
+
* string: the escaped literal.
|
|
555
|
+
*/
|
|
556
|
+
export function escapeRegExp(value) {
|
|
557
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
558
|
+
}
|
|
559
|
+
/** Vitest exit codes, fail closed (0 passed, 1 failures). */
|
|
560
|
+
function vitestExitIncompleteDetail(exit) {
|
|
561
|
+
if (exit === null)
|
|
562
|
+
return 'vitest ended without an exit status — incomplete';
|
|
563
|
+
if (exit >= 2)
|
|
564
|
+
return `vitest ended with status ${String(exit)} (fatal/internal error) — incomplete`;
|
|
565
|
+
return null;
|
|
566
|
+
}
|
|
567
|
+
/** Single-cause incomplete envelope (no outcomes are ever invented). */
|
|
568
|
+
function envelopeIncomplete(processExit, detail) {
|
|
569
|
+
return {
|
|
570
|
+
processExit,
|
|
571
|
+
complete: false,
|
|
572
|
+
incompleteDetail: detail,
|
|
573
|
+
outcomes: [],
|
|
574
|
+
fixtureOutcome: 'unknown',
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
/** Absolute-normalizes then posix-normalizes a reported suite path. */
|
|
578
|
+
function repoPosix(path) {
|
|
579
|
+
return path.replace(/^file:\/\//, '').split('\\').join('/');
|
|
580
|
+
}
|
|
581
|
+
/** The pack's Vitest reporter module path (built JS, or the TS source). */
|
|
582
|
+
function vitestReporterModulePath() {
|
|
583
|
+
const candidates = [
|
|
584
|
+
// When this module runs from dist (the published/compiled layout).
|
|
585
|
+
fileURLToPath(new URL('../vitest/reporter.js', import.meta.url)),
|
|
586
|
+
// When this module runs from src (the monorepo test layout).
|
|
587
|
+
fileURLToPath(new URL('../../dist/vitest/reporter.js', import.meta.url)),
|
|
588
|
+
// Last resort: the TypeScript source, loadable by the child's
|
|
589
|
+
// vite-node runner.
|
|
590
|
+
fileURLToPath(new URL('../vitest/reporter.ts', import.meta.url)),
|
|
591
|
+
];
|
|
592
|
+
for (const candidate of candidates) {
|
|
593
|
+
if (existsSync(candidate))
|
|
594
|
+
return candidate;
|
|
595
|
+
}
|
|
596
|
+
return candidates[0];
|
|
597
|
+
}
|
|
598
|
+
/** First non-empty line of a captured stream (bounded). */
|
|
599
|
+
function firstLine(text) {
|
|
600
|
+
const line = text.split('\n').find((candidate) => candidate.trim() !== '');
|
|
601
|
+
return line === undefined ? 'no output' : line.trim().slice(0, 300);
|
|
602
|
+
}
|
|
603
|
+
/** Single-line message of an unknown thrown value. */
|
|
604
|
+
function describeError(error) {
|
|
605
|
+
return error instanceof Error ? error.message : String(error);
|
|
606
|
+
}
|
|
607
|
+
//# sourceMappingURL=vitest-runner-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest-runner-adapter.js","sourceRoot":"","sources":["../../src/discovery/vitest-runner-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAezC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAC5H,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAClE,MAAM,CAAC,MAAM,4BAA4B,GAAG,6BAA6B,CAAC;AAE1E,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,qBAAqB;IACrB,wBAAwB;IACxB,4BAA4B;CAC7B,CAAC;AAEF,sEAAsE;AACtE,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAuB9C;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,YAAY,CAAU,CAAC;AAe9C;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAmB;IASD;IARpB,MAAM,GAAG,QAAQ,CAAC;IAElB,YAAY,GAAG;QACtB,SAAS,EAAE,WAAW;QACtB,gBAAgB,EAAE,WAAW;QAC7B,OAAO,EAAE,WAAW;KACZ,CAAC;IAEX,YAA6B,UAAsC,EAAE;QAAxC,YAAO,GAAP,OAAO,CAAiC;IAAG,CAAC;IAEzE;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,gDAAgD,GAAG,kCAAkC;gBAC7F,KAAK,EAAE,EAAE;aACV,CAAC;QACJ,CAAC;QACD,kEAAkE;QAClE,iEAAiE;QACjE,qEAAqE;QACrE,oEAAoE;QACpE,mEAAmE;QACnE,2DAA2D;QAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC;QAClG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,mGAAmG;gBAC3G,KAAK,EAAE,EAAE;aACV,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACjD,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,mCAAmC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,uDAAuD;gBACrJ,KAAK,EAAE,EAAE;aACV,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,sEAAsE;gBAC9E,KAAK,EAAE,EAAE;aACV,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,6CAA6C,GAAG,0CAA0C;gBAClG,KAAK,EAAE,EAAE;aACV,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,cAAc,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C;YACxF,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtG,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,QAA0B,EAAE,OAA8B;QACjE,OAAO;YACL,IAAI,EAAE;gBACJ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,UAAU;gBACrC,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,QAAQ;gBACjC,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,UAAU;gBACtC,CAAC,aAAa,CAAC,EAAE,iBAAiB;gBAClC,CAAC,UAAU,CAAC,EAAE,UAAU;gBACxB,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC,SAAS;gBAC1C,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC,YAAY;gBAChD,CAAC,4BAA4B,CAAC,EAAE,OAAO,CAAC,eAAe;aACxD;YACD,UAAU,EAAE,eAAe;YAC3B,YAAY,EAAE,mBAAmB;YACjC,SAAS,EACP,0FAA0F;gBAC1F,2FAA2F;SAC9F,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,OAAO,CAAC,OAA6B;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,kBAAkB,CAAC,IAAI,EAAE,8CAA8C,OAAO,CAAC,GAAG,kCAAkC,CAAC,CAAC;QAC/H,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,OAAO,kBAAkB,CACvB,IAAI,EACJ,gCAAgC,UAAU,+DAA+D,CAC1G,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,gEAAgE;QAChE,+DAA+D;QAC/D,oEAAoE;QACpE,qEAAqE;QACrE,wCAAwC;QACxC,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACpH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG;YACX,KAAK;YACL,OAAO;YACP,iBAAiB;YACjB,qBAAqB,UAAU,EAAE;YACjC,cAAc,wBAAwB,EAAE,EAAE;YAC1C,GAAG,aAAa;YAChB,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC;YACrE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE;SACrB,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;YAC7D,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,8BAA8B,CACjC;gBACE,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE;gBAClF,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE;gBAChF,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,QAAQ;gBACjC,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,KAAK;gBAC3B,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE;gBAC3F,2DAA2D;gBAC3D,2DAA2D;gBAC3D,4DAA4D;gBAC5D,8DAA8D;gBAC9D,6CAA6C;gBAC7C,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE;aACpE,EACD,OAAO,CAAC,GAAG,CACZ;YACD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAkE,CAAC,MAAM,EAAE,EAAE;YAC5G,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,QAAQ,GAAG,IAAI,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACtB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,kBAAkB,CAAC,IAAI,EAAE,qCAAqC,KAAK,CAAC,OAAO,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnH,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,kBAAkB,CACvB,IAAI,EACJ,iCAAiC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,mEAAmE,CAC9H,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YACxC,QAAQ,GAAG;gBACT,GAAG,QAAQ;gBACX,gBAAgB,EAAE,qCAAqC,UAAU,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB;aACjH,CAAC;QACJ,CAAC;QACD,oEAAoE;QACpE,mEAAmE;QACnE,mEAAmE;QACnE,kEAAkE;QAClE,wDAAwD;QACxD,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACxG,CAAC;QACD,kEAAkE;QAClE,2DAA2D;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC5C,QAAQ,GAAG;gBACT,GAAG,QAAQ;gBACX,QAAQ,EAAE,KAAK;gBACf,gBAAgB,EACd,QAAQ,CAAC,gBAAgB;oBACzB,oFAAoF;gBACtF,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,6EAA6E;aAC7F,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,GAAqB;QAChC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7B,OAAO,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,gEAAgE,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,QAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,gDAAgD,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrH,CAAC;QACD,MAAM,IAAI,GAAuF,EAAE,CAAC;QACpG,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAC/C,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,MAAM,IAAI,GACR,YAAY,KAAK,EAAE,IAAI,UAAU,CAAC,YAAY,CAAC;gBAC7C,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpD,CAAC,CAAC,YAAY,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;gBAC/C,UAAU,IAAI,CAAC,CAAC;gBAChB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC7C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,kBAAkB,CACvB,GAAG,CAAC,WAAW,EACf,yBAAyB,MAAM,CAAC,UAAU,CAAC,qDAAqD;gBAC9F,mDAAmD,CACtD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,iEAAiE,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;YAC/F,OAAO,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,yDAAyD,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAA4B,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7D,UAAU,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC1E,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EACJ,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAClG,OAAO,EAAE,CAAC;SACX,CAAC,CAAC,CAAC;QACJ,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;QACjG,OAAO;YACL,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,QAAQ,EAAE,IAAI;YACd,QAAQ;YACR,cAAc,EAAE,QAAiB;SAClC,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,WAAW,CAAC,GAAqB;QAC/B,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,sEAAsE;IAC9D,eAAe,CAAC,QAAgB,EAAE,KAAa;QACrD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAEjG,CAAC;YACF,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,iEAAiE;IACzD,aAAa,CAAC,GAAW;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC9C,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBACnE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxD,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrE,IAAI,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;OAUG;IACK,WAAW,CACjB,GAAW,EACX,KAA4C,EAC5C,IAAc;QAEd,OAAO,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5B,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;gBAC7D,GAAG;gBACH,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC9B,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,QAAQ,GAAG,IAAI,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC,EAAE,OAAO,CAAC,CAAC;YACZ,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAiC,EACjC,SAAiB;IAEjB,IAAI,KAAoC,CAAC;IACzC,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAkC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACpD,OAAO;QACL,GAAG,QAAQ;QACX,QAAQ,EAAE,KAAK;QACf,gBAAgB,EACd,QAAQ,CAAC,gBAAgB;YACzB,oFAAoF;QACtF,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,6EAA6E;KAC7F,CAAC;AACJ,CAAC;AAQD;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAY,EAAE,GAAuB;IAC7D,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAClF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACjD,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QAClF,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,gEAAgE;AAChE,SAAS,kBAAkB,CAAC,MAAc,EAAE,GAAW;IACrD,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,MAAM,GAAG,KAA2C,CAAC;QAC3D,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACjF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC;YACT,UAAU,EAAE,GAAG,YAAY,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACpD,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,YAAY;YAClB,SAAS;YACT,mBAAmB,EAAE,EAAE;YACvB,gEAAgE;YAChE,yBAAyB;YACzB,WAAW,EAAE,GAAG,YAAY,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uDAAuD;AACvD,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,QAAQ,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,QAA4B,CAAC;AACtC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,IAAI,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,6DAA6D;AAC7D,SAAS,0BAA0B,CAAC,IAAmB;IACrD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,kDAAkD,CAAC;IAC7E,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,4BAA4B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC;IACrG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wEAAwE;AACxE,SAAS,kBAAkB,CAAC,WAA0B,EAAE,MAAc;IACpE,OAAO;QACL,WAAW;QACX,QAAQ,EAAE,KAAK;QACf,gBAAgB,EAAE,MAAM;QACxB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,SAAkB;KACnC,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,2EAA2E;AAC3E,SAAS,wBAAwB;IAC/B,MAAM,UAAU,GAAG;QACjB,mEAAmE;QACnE,aAAa,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,6DAA6D;QAC7D,aAAa,CAAC,IAAI,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxE,8DAA8D;QAC9D,oBAAoB;QACpB,aAAa,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACjE,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,CAAW,CAAC;AACjC,CAAC;AAED,2DAA2D;AAC3D,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,sDAAsD;AACtD,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-runner.d.ts","sourceRoot":"","sources":["../../src/fixture/consumer-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,cAAc,MAAM,iBAAiB,CAAC;AAuCvD,eAAO,MAAM,IAAI,EAAE,OAAO,cAAc,CAAC,IAAkB,CAAC;AAC5D,eAAO,MAAM,MAAM,EAAE,OAAO,cAAc,CAAC,MAAsB,CAAC"}
|