@tonalisk-labs/kit 1.0.0 → 1.0.6
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 +7 -80
- package/dist/testing/src/config-coverage.d.ts.map +1 -1
- package/dist/testing/src/config-coverage.js +3 -2
- package/dist/testing/src/config-coverage.js.map +1 -1
- package/dist/testing/src/fixtures.d.ts +9 -3
- package/dist/testing/src/fixtures.d.ts.map +1 -1
- package/dist/testing/src/fixtures.js +98 -42
- package/dist/testing/src/fixtures.js.map +1 -1
- package/dist/testing/src/floors/node.js +11 -3
- package/dist/testing/src/floors/node.js.map +1 -1
- package/dist/testing/src/stack/browsers.d.ts +13 -3
- package/dist/testing/src/stack/browsers.d.ts.map +1 -1
- package/dist/testing/src/stack/browsers.js +117 -14
- package/dist/testing/src/stack/browsers.js.map +1 -1
- package/dist/testing/src/stack/containers.d.ts +6 -2
- package/dist/testing/src/stack/containers.d.ts.map +1 -1
- package/dist/testing/src/stack/containers.js +8 -1
- package/dist/testing/src/stack/containers.js.map +1 -1
- package/dist/testing/src/stack/control.d.ts +18 -3
- package/dist/testing/src/stack/control.d.ts.map +1 -1
- package/dist/testing/src/stack/control.js +50 -10
- package/dist/testing/src/stack/control.js.map +1 -1
- package/dist/testing/src/stack/gate-member.d.ts +10 -0
- package/dist/testing/src/stack/gate-member.d.ts.map +1 -1
- package/dist/testing/src/stack/gate-member.js +68 -7
- package/dist/testing/src/stack/gate-member.js.map +1 -1
- package/dist/testing/src/stack/gate-server.d.ts +37 -4
- package/dist/testing/src/stack/gate-server.d.ts.map +1 -1
- package/dist/testing/src/stack/gate-server.js +124 -12
- package/dist/testing/src/stack/gate-server.js.map +1 -1
- package/dist/testing/src/stack/hold.d.ts +24 -3
- package/dist/testing/src/stack/hold.d.ts.map +1 -1
- package/dist/testing/src/stack/hold.js +136 -11
- package/dist/testing/src/stack/hold.js.map +1 -1
- package/dist/testing/src/stack/host.d.ts.map +1 -1
- package/dist/testing/src/stack/host.js +26 -6
- package/dist/testing/src/stack/host.js.map +1 -1
- package/dist/testing/src/stack/lock.d.ts +15 -4
- package/dist/testing/src/stack/lock.d.ts.map +1 -1
- package/dist/testing/src/stack/lock.js +47 -18
- package/dist/testing/src/stack/lock.js.map +1 -1
- package/dist/testing/src/stack/preview-child.js +14 -3
- package/dist/testing/src/stack/preview-child.js.map +1 -1
- package/dist/testing/src/stack/runtime-apple.d.ts.map +1 -1
- package/dist/testing/src/stack/runtime-apple.js +16 -0
- package/dist/testing/src/stack/runtime-apple.js.map +1 -1
- package/dist/testing/src/stack/runtime-docker.d.ts +2 -1
- package/dist/testing/src/stack/runtime-docker.d.ts.map +1 -1
- package/dist/testing/src/stack/runtime-docker.js +29 -3
- package/dist/testing/src/stack/runtime-docker.js.map +1 -1
- package/dist/testing/src/stack/runtime.d.ts +10 -0
- package/dist/testing/src/stack/runtime.d.ts.map +1 -1
- package/dist/testing/src/stack/runtime.js +1 -0
- package/dist/testing/src/stack/runtime.js.map +1 -1
- package/dist/testing/src/stack/socks.d.ts +25 -0
- package/dist/testing/src/stack/socks.d.ts.map +1 -0
- package/dist/testing/src/stack/socks.js +195 -0
- package/dist/testing/src/stack/socks.js.map +1 -0
- package/dist/testing/src/stack/stall.d.ts +36 -0
- package/dist/testing/src/stack/stall.d.ts.map +1 -0
- package/dist/testing/src/stack/stall.js +93 -0
- package/dist/testing/src/stack/stall.js.map +1 -0
- package/package.json +4 -4
- package/testing/src/config-coverage.ts +3 -2
- package/testing/src/fixtures.ts +277 -197
- package/testing/src/floors/node.ts +19 -3
- package/testing/src/stack/browsers.ts +129 -15
- package/testing/src/stack/containers.ts +14 -2
- package/testing/src/stack/control.ts +62 -11
- package/testing/src/stack/gate-member.ts +90 -8
- package/testing/src/stack/gate-server.ts +166 -21
- package/testing/src/stack/hold.ts +163 -11
- package/testing/src/stack/host.ts +32 -9
- package/testing/src/stack/lock.ts +61 -21
- package/testing/src/stack/preview-child.ts +21 -4
- package/testing/src/stack/runtime-apple.ts +20 -1
- package/testing/src/stack/runtime-docker.ts +47 -3
- package/testing/src/stack/runtime.ts +11 -0
- package/testing/src/stack/socks.ts +233 -0
- package/testing/src/stack/stall.ts +145 -0
|
@@ -3,11 +3,23 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import { availableParallelism } from 'node:os';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { isObject } from '../unknown.js';
|
|
6
|
-
import { container } from './containers.js';
|
|
6
|
+
import { container, exec, networkOf } from './containers.js';
|
|
7
|
+
import { startSocks } from './socks.js';
|
|
7
8
|
import { LOCAL_CA_DIR, localCaCertificate } from './tls.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
/** The engines the image serves, one browser each: the visual projects' Chromium, and WebKit for
|
|
10
|
+
* the rows macOS can't run it on. */
|
|
11
|
+
const ENGINES = ['chromium', 'webkit'];
|
|
12
|
+
/** Each engine's browser on a port of its own, at a path named for it. */
|
|
13
|
+
const PORTS = { chromium: 3000, webkit: 3001 };
|
|
14
|
+
/** The endpoint of the image's browser for `engine` in `given`, the stack host's variable; none
|
|
15
|
+
* where the variable is unset or names no such engine. */
|
|
16
|
+
export const endpointOf = (engine, given) => {
|
|
17
|
+
const parsed = given === undefined ? undefined : JSON.parse(given);
|
|
18
|
+
const endpoint = isObject(parsed) ? parsed[engine] : undefined;
|
|
19
|
+
return typeof endpoint === 'string' ? endpoint : undefined;
|
|
20
|
+
};
|
|
21
|
+
/** Browser contexts the image serves at once, a seat each, taken by a test for its own time: each
|
|
22
|
+
* engine's one browser is shared by every worker, so a connection costs nothing. */
|
|
11
23
|
export const BROWSER_SEATS = 4;
|
|
12
24
|
/** A test's devices against the `declared` contexts it may have open, its own included: each is
|
|
13
25
|
* counted as it is asked for, so devices asked for together through Promise.all are all counted. */
|
|
@@ -27,8 +39,8 @@ export const deviceBudget = (declared) => {
|
|
|
27
39
|
};
|
|
28
40
|
};
|
|
29
41
|
};
|
|
30
|
-
/** A browser costs about 225 MiB and a context about 460
|
|
31
|
-
*
|
|
42
|
+
/** A browser costs about 225 MiB and a context about 460, so the two browsers and a full pool's
|
|
43
|
+
* contexts come to about 2,290 MiB of these 3,328: a VM keeps what it touched. */
|
|
32
44
|
const MACHINE = { memory: 3328, cpus: availableParallelism() };
|
|
33
45
|
/** The playwright-core the tests run, mounted into the image of the same release. */
|
|
34
46
|
export const playwrightCore = () => {
|
|
@@ -46,32 +58,123 @@ const LOG_FILE = '/tmp/browsers.log';
|
|
|
46
58
|
/** The local CA in the image's store, which WebKit reads, and Node by NODE_EXTRA_CA_CERTS: the
|
|
47
59
|
* server's Node makes a context's own requests, as `route.fetch` and `context.request` do. */
|
|
48
60
|
const CA_FILE = '/usr/local/share/ca-certificates/tonalisk-kit-edge.crt';
|
|
49
|
-
/**
|
|
61
|
+
/** The pipe the host writes the proxy's address to, once it listens, and the IPv6 address the
|
|
62
|
+
* container's network gives it: only then may the browsers launch, as each takes its proxy at its
|
|
63
|
+
* launch. */
|
|
64
|
+
const PROXY_PIPE = '/tmp/proxy';
|
|
65
|
+
/** Launches each engine's browser behind the host's proxy, serving it to every worker. A browser
|
|
66
|
+
* that crashes fails the tests it was serving, as one per worker did, and is launched again at
|
|
67
|
+
* the same address for the workers that follow. On the container's stop, Playwright closes each
|
|
68
|
+
* browser and keeps the process; it exits once both are closed, launching none again. */
|
|
69
|
+
const SERVE = `
|
|
70
|
+
const playwright = require('/playwright-core');
|
|
71
|
+
const engines = ${JSON.stringify(Object.entries(PORTS))};
|
|
72
|
+
const proxy = { server: process.env.PROXY };
|
|
73
|
+
const state = { stopping: false, open: engines.length };
|
|
74
|
+
// A browser launched before its network has given the container its IPv6 address hears the
|
|
75
|
+
// address arrive as a network change, and Chromium fails the navigations it has open
|
|
76
|
+
// (ERR_NETWORK_CHANGED): the browsers launch once it's there, or after 30 s without it.
|
|
77
|
+
const settled = async (left = 300) => {
|
|
78
|
+
const wanted = process.env.SETTLED;
|
|
79
|
+
const addresses = Object.values(require('node:os').networkInterfaces()).flat();
|
|
80
|
+
if (!wanted || left === 0 || addresses.some((one) => one.address === wanted)) return;
|
|
81
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
82
|
+
await settled(left - 1);
|
|
83
|
+
};
|
|
84
|
+
process.once('SIGTERM', () => { state.stopping = true; });
|
|
85
|
+
const failed = (error) => { console.error(error); process.exit(1); };
|
|
86
|
+
const serve = async ([engine, port]) => {
|
|
87
|
+
const server = await playwright[engine].launchServer({ port, host: '0.0.0.0', wsPath: '/' + engine, proxy });
|
|
88
|
+
server.once('close', () => {
|
|
89
|
+
if (state.stopping) {
|
|
90
|
+
state.open -= 1;
|
|
91
|
+
if (state.open === 0) process.exit(0);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
console.log(engine + ' closed, launched again');
|
|
95
|
+
serve([engine, port]).catch(failed);
|
|
96
|
+
});
|
|
97
|
+
console.log(engine + ' serves ' + server.wsEndpoint());
|
|
98
|
+
};
|
|
99
|
+
(async () => {
|
|
100
|
+
await settled();
|
|
101
|
+
for (const entry of engines) await serve(entry);
|
|
102
|
+
})().catch(failed);
|
|
103
|
+
`;
|
|
104
|
+
/** Takes the local CA's certificate into the image's store, waits for the proxy's address, then
|
|
105
|
+
* serves. A pipe the host wrote first is a plain file, which reads as well. */
|
|
50
106
|
const TRUSTED_SERVER = [
|
|
51
107
|
String.raw `printf "%s\n" "$EDGE_CA" > ${CA_FILE}`,
|
|
52
108
|
'update-ca-certificates > /dev/null',
|
|
53
|
-
`
|
|
109
|
+
`{ mkfifo ${PROXY_PIPE} 2> /dev/null || true; }`,
|
|
110
|
+
`{ read -r PROXY && read -r SETTLED; } < ${PROXY_PIPE}`,
|
|
111
|
+
'export PROXY SETTLED',
|
|
112
|
+
`exec node -e "$1" > ${LOG_FILE} 2>&1`,
|
|
54
113
|
].join(' && ');
|
|
55
114
|
/** The image serving `core`'s browsers, trusting the CA in `ca`: a certificate passed in its
|
|
56
115
|
* environment, so no key is ever mounted. */
|
|
57
116
|
export const browserServerSpec = (core, ca) => ({
|
|
58
117
|
image: `mcr.microsoft.com/playwright:v${core.version}-noble`,
|
|
59
|
-
ports:
|
|
60
|
-
ready:
|
|
118
|
+
ports: Object.values(PORTS),
|
|
119
|
+
ready: ENGINES.map((engine) => `${engine} serves`),
|
|
61
120
|
logFile: LOG_FILE,
|
|
62
121
|
env: { EDGE_CA: ca, NODE_EXTRA_CA_CERTS: CA_FILE },
|
|
63
122
|
init: true,
|
|
64
123
|
sharesMemory: true,
|
|
65
124
|
machine: MACHINE,
|
|
66
125
|
files: [core.root, '/playwright-core'],
|
|
67
|
-
command: ['sh', '-c', TRUSTED_SERVER],
|
|
126
|
+
command: ['sh', '-c', TRUSTED_SERVER, 'sh', SERVE],
|
|
68
127
|
});
|
|
128
|
+
/** Starts the host's proxy for the container `id`, on the host's address on its network and for
|
|
129
|
+
* its address alone, and gives the browsers its address. */
|
|
130
|
+
const proxyFor = async (id, signal) => {
|
|
131
|
+
const { own, host, settled = '' } = await networkOf(id);
|
|
132
|
+
const socks = await startSocks({ host, peer: own });
|
|
133
|
+
try {
|
|
134
|
+
const address = `socks5://${host}:${String(socks.port)}`;
|
|
135
|
+
const told = [
|
|
136
|
+
'sh',
|
|
137
|
+
'-c',
|
|
138
|
+
`printf "%s\\n%s\\n" "$1" "$2" > ${PROXY_PIPE}`,
|
|
139
|
+
'sh',
|
|
140
|
+
address,
|
|
141
|
+
settled,
|
|
142
|
+
];
|
|
143
|
+
await exec(id, told, signal);
|
|
144
|
+
return socks;
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
await socks.stop();
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
69
151
|
/** Playwright's browsers in its official Linux image, served to the host's tests so screenshots
|
|
70
152
|
* render the same on every machine, trusting the local CA in `caDir` that signs every edge. */
|
|
71
153
|
export const startBrowserServer = async (signal, caDir = LOCAL_CA_DIR) => {
|
|
72
154
|
const ca = await localCaCertificate(caDir, signal);
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
|
|
155
|
+
const proxied = {};
|
|
156
|
+
const started = async (id) => {
|
|
157
|
+
proxied.socks = await proxyFor(id, signal);
|
|
158
|
+
};
|
|
159
|
+
const stopProxy = async () => {
|
|
160
|
+
if (proxied.socks !== undefined) {
|
|
161
|
+
await proxied.socks.stop();
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const server = await container(browserServerSpec(playwrightCore(), ca), signal, started).catch(async (error) => {
|
|
165
|
+
await stopProxy();
|
|
166
|
+
throw error;
|
|
167
|
+
});
|
|
168
|
+
const endpointFor = (engine) => {
|
|
169
|
+
const { host, port } = server.address(PORTS[engine]);
|
|
170
|
+
return `ws://${host}:${String(port)}/${engine}`;
|
|
171
|
+
};
|
|
172
|
+
return {
|
|
173
|
+
endpoints: { chromium: endpointFor('chromium'), webkit: endpointFor('webkit') },
|
|
174
|
+
stop: async () => {
|
|
175
|
+
await server.stop();
|
|
176
|
+
await stopProxy();
|
|
177
|
+
},
|
|
178
|
+
};
|
|
76
179
|
};
|
|
77
180
|
//# sourceMappingURL=browsers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browsers.js","sourceRoot":"","sources":["../../../../testing/src/stack/browsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"browsers.js","sourceRoot":"","sources":["../../../../testing/src/stack/browsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Service } from './process.ts';
|
|
2
|
-
import type { Address, ContainerSpec, Runtime } from './runtime.ts';
|
|
2
|
+
import type { Address, ContainerSpec, Network, Runtime } from './runtime.ts';
|
|
3
3
|
export interface Container extends Service {
|
|
4
4
|
readonly id: string;
|
|
5
5
|
readonly address: (inner: number) => Address;
|
|
@@ -16,7 +16,11 @@ export declare const leftBehind: (labelled: ReadonlyMap<string, string>, began?:
|
|
|
16
16
|
/** Removes the containers this host's runs left behind once their run was gone: an exit handler
|
|
17
17
|
* removes a run's own, but a SIGKILL lets none run. Another run's, still going, stays. */
|
|
18
18
|
export declare const sweepLeftBehind: (runtime?: Runtime) => Promise<void>;
|
|
19
|
-
|
|
19
|
+
/** A container started from `spec` once it says it's ready; `started` runs as it starts, before
|
|
20
|
+
* that, for a service that waits on something the host gives it. */
|
|
21
|
+
export declare const container: (spec: ContainerSpec, signal: AbortSignal, started?: (id: string) => Promise<void>) => Promise<Container>;
|
|
22
|
+
/** A running container's address on its network, and the host's there. */
|
|
23
|
+
export declare const networkOf: (id: string) => Promise<Network>;
|
|
20
24
|
export declare const exec: (id: string, command: readonly string[], signal: AbortSignal) => Promise<string>;
|
|
21
25
|
/** An exec's command line, for a caller that holds its standard input. */
|
|
22
26
|
export declare const execLine: (id: string, command: readonly string[]) => readonly [string, ...string[]];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/containers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/containers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC9C;AAKD;0FAC0F;AAC1F,eAAO,MAAM,SAAS,SACd,MAAM,GAAG,SAAS,aACd,MAAM,CAAC,QAAQ,KACxB,OASF,CAAC;AAEF,eAAO,MAAM,OAAO,SAAsC,CAAC;AAE3D;2EAC2E;AAC3E,eAAO,MAAM,SAAS,8BAA8B,CAAC;AAErD,2EAA2E;AAC3E,eAAO,MAAM,UAAU,aACX,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAC7B,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,SACxB,MAAM,KACZ,MAAM,EAAsF,CAAC;AAEhG;2FAC2F;AAC3F,eAAO,MAAM,eAAe,aAAmB,OAAO,KAAa,OAAO,CAAC,IAAI,CAK9E,CAAC;AAkCF;qEACqE;AACrE,eAAO,MAAM,SAAS,SACd,aAAa,UACX,WAAW,YACT,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,KACtC,OAAO,CAAC,SAAS,CAsBnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,SAAS,OAAc,MAAM,KAAG,OAAO,CAAC,OAAO,CAAwB,CAAC;AAErF,eAAO,MAAM,IAAI,OACX,MAAM,WACD,SAAS,MAAM,EAAE,UAClB,WAAW,KAClB,OAAO,CAAC,MAAM,CAAsC,CAAC;AAExD,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,OAAQ,MAAM,WAAW,SAAS,MAAM,EAAE,KAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAChE,CAAC"}
|
|
@@ -57,7 +57,9 @@ const addressIn = (id, addresses) => (inner) => {
|
|
|
57
57
|
}
|
|
58
58
|
return found;
|
|
59
59
|
};
|
|
60
|
-
|
|
60
|
+
/** A container started from `spec` once it says it's ready; `started` runs as it starts, before
|
|
61
|
+
* that, for a service that waits on something the host gives it. */
|
|
62
|
+
export const container = async (spec, signal, started) => {
|
|
61
63
|
signal.throwIfAborted();
|
|
62
64
|
await sweptOnce();
|
|
63
65
|
const { id, forget } = await created(spec);
|
|
@@ -66,6 +68,9 @@ export const container = async (spec, signal) => {
|
|
|
66
68
|
forget();
|
|
67
69
|
};
|
|
68
70
|
try {
|
|
71
|
+
if (started !== undefined) {
|
|
72
|
+
await started(id);
|
|
73
|
+
}
|
|
69
74
|
const texts = spec.readyInAnyOrder === true ? spec.ready.map((text) => [text]) : [spec.ready];
|
|
70
75
|
await Promise.all(texts.map(async (text) => RUNTIME.ready(id, { texts: text, logFile: spec.logFile }, signal)));
|
|
71
76
|
return { id, stop, address: addressIn(id, await RUNTIME.addresses(id, spec.ports)) };
|
|
@@ -76,6 +81,8 @@ export const container = async (spec, signal) => {
|
|
|
76
81
|
throw error;
|
|
77
82
|
}
|
|
78
83
|
};
|
|
84
|
+
/** A running container's address on its network, and the host's there. */
|
|
85
|
+
export const networkOf = async (id) => RUNTIME.network(id);
|
|
79
86
|
export const exec = async (id, command, signal) => RUNTIME.exec(id, command, signal);
|
|
80
87
|
/** An exec's command line, for a caller that holds its standard input. */
|
|
81
88
|
export const execLine = (id, command) => RUNTIME.execLine(id, command);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../../../../testing/src/stack/containers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../../../../testing/src/stack/containers.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,19 +9,34 @@ export declare const STACK_ENV = "KIT_STACK";
|
|
|
9
9
|
/** The Linux browser server's key: WebKit rows use it on macOS, whose WebKit guards CryptoKeys with
|
|
10
10
|
* a keychain prompt, and the visual projects' Chromium, so screenshots match on every machine. */
|
|
11
11
|
export declare const LINUX_BROWSERS = "linux-browsers";
|
|
12
|
-
/** The variable WebKit rows and the visual projects read that server's
|
|
12
|
+
/** The variable WebKit rows and the visual projects read that server's endpoints from, by engine,
|
|
13
|
+
* in JSON. */
|
|
13
14
|
export declare const LINUX_ENV = "KIT_LINUX_BROWSERS";
|
|
14
15
|
export type Action = 'start' | 'stop' | 'restart';
|
|
15
16
|
/** Asks the stack host to start or stop a target's services, answering its projects' environment.
|
|
16
17
|
* Plain `node:http`, so no client timeout cuts off a long build: the setup project's bounds it. */
|
|
17
18
|
export declare const control: (action: Action, key: string) => Promise<Record<string, string>>;
|
|
19
|
+
/** The running test's clock, as Playwright keeps its timeout: when it began, and how long it has
|
|
20
|
+
* waited for holds in fixtures of their own timeout, which aren't charged to it. */
|
|
21
|
+
export interface TestClock {
|
|
22
|
+
start: number;
|
|
23
|
+
waited: number;
|
|
24
|
+
}
|
|
25
|
+
/** Starts the running test's clock (fixtures.ts), at `now`. */
|
|
26
|
+
export declare const testBegins: (now?: number) => void;
|
|
27
|
+
/** When a test must end, by Playwright's count: its start, plus the hold waits it isn't charged,
|
|
28
|
+
* plus its timeout; none for a test with no timeout. A hold's server lets a stillness pass while
|
|
29
|
+
* its holders are inside their deadlines; the test moves them as its timeout moves. */
|
|
30
|
+
export declare const deadlineFrom: (timeout: number, clock?: TestClock) => number | undefined;
|
|
31
|
+
/** `wait` for a hold, its time added to the running test's waits, which its deadline is past. */
|
|
32
|
+
export declare const waitedFor: <Value>(wait: () => Promise<Value>) => Promise<Value>;
|
|
18
33
|
/**
|
|
19
34
|
* Holds a target's stack, shared or owned alone, until the returned release is called: the hold
|
|
20
35
|
* is an open request, so a worker that dies releases it by closing its connection.
|
|
21
36
|
*/
|
|
22
37
|
export declare const holdStack: (hold: 'share' | 'own', key: string) => Promise<() => void>;
|
|
23
|
-
/** A seat among the Linux image's browsers for each context the
|
|
24
|
-
*
|
|
38
|
+
/** A seat among the Linux image's browsers for each context the test may have open at once, all
|
|
39
|
+
* taken together and held as a stack hold is, for the test's life. */
|
|
25
40
|
export declare const holdBrowserSeat: (contexts: number) => Promise<() => void>;
|
|
26
41
|
/** A CPU turn, until the returned release; an abort gives up a turn still waiting. */
|
|
27
42
|
export declare const holdTurn: (turns: string, signal?: AbortSignal) => Promise<() => void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/control.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/control.ts"],"names":[],"mappings":"AAQA,oFAAoF;AACpF,eAAO,MAAM,QAAQ,mBAAmB,CAAC;AAEzC,gGAAgG;AAChG,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,oFAAoF;AACpF,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,4EAA4E;AAC5E,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC;mGACmG;AACnG,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAE/C;eACe;AACf,eAAO,MAAM,SAAS,uBAAuB,CAAC;AAE9C,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAelD;oGACoG;AACpG,eAAO,MAAM,OAAO,WAAkB,MAAM,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBzF,CAAC;AAEF;qFACqF;AACrF,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,+DAA+D;AAC/D,eAAO,MAAM,UAAU,SAAS,MAAM,KAAgB,IAGrD,CAAC;AAEF;;wFAEwF;AACxF,eAAO,MAAM,YAAY,YAAa,MAAM,UAAS,SAAS,KAAa,MAAM,GAAG,SACpB,CAAC;AAEjE,iGAAiG;AACjG,eAAO,MAAM,SAAS,GAAU,KAAK,QAAQ,MAAM,OAAO,CAAC,KAAK,CAAC,KAAG,OAAO,CAAC,KAAK,CAOhF,CAAC;AAuBF;;;GAGG;AACH,eAAO,MAAM,SAAS,SAAgB,OAAO,GAAG,KAAK,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,IAAI,CAWpF,CAAC;AAEJ;uEACuE;AACvE,eAAO,MAAM,eAAe,aAAoB,MAAM,KAAG,OAAO,CAAC,MAAM,IAAI,CAcxE,CAAC;AAIJ,sFAAsF;AACtF,eAAO,MAAM,QAAQ,UAAiB,MAAM,WAAW,WAAW,KAAG,OAAO,CAAC,MAAM,IAAI,CACR,CAAC;AAahF,4CAA4C;AAC5C,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,MAAM,IAAI,CAYvD,CAAC;AAEF,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAoBD;4FAC4F;AAC5F,eAAO,MAAM,aAAa,UAAgB,WAAW,KAAiB,OAAO,CAAC,IAAI,CAOjF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,KAAK,SAC9B,MAAM,QACP,MAAM,OAAO,CAAC,KAAK,CAAC,KACzB,OAAO,CAAC,KAAK,CAOf,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { request } from 'node:http';
|
|
2
2
|
import { test } from '@playwright/test';
|
|
3
|
+
import { holdCpuTurn } from './gate-member.js';
|
|
3
4
|
import { WHOLE } from './gate-server.js';
|
|
4
5
|
import { openHold } from './hold.js';
|
|
5
6
|
/** The variable naming the stack host, set by the global setup for every worker. */
|
|
@@ -13,7 +14,8 @@ export const STACK_ENV = 'KIT_STACK';
|
|
|
13
14
|
/** The Linux browser server's key: WebKit rows use it on macOS, whose WebKit guards CryptoKeys with
|
|
14
15
|
* a keychain prompt, and the visual projects' Chromium, so screenshots match on every machine. */
|
|
15
16
|
export const LINUX_BROWSERS = 'linux-browsers';
|
|
16
|
-
/** The variable WebKit rows and the visual projects read that server's
|
|
17
|
+
/** The variable WebKit rows and the visual projects read that server's endpoints from, by engine,
|
|
18
|
+
* in JSON. */
|
|
17
19
|
export const LINUX_ENV = 'KIT_LINUX_BROWSERS';
|
|
18
20
|
const isEnv = (value) => typeof value === 'object' &&
|
|
19
21
|
value !== null &&
|
|
@@ -51,6 +53,48 @@ export const control = async (action, key) => {
|
|
|
51
53
|
call.end();
|
|
52
54
|
return promise;
|
|
53
55
|
};
|
|
56
|
+
/** This worker's running test's clock: a worker runs one test at a time. */
|
|
57
|
+
const running = { start: Date.now(), waited: 0 };
|
|
58
|
+
/** Starts the running test's clock (fixtures.ts), at `now`. */
|
|
59
|
+
export const testBegins = (now = Date.now()) => {
|
|
60
|
+
running.start = now;
|
|
61
|
+
running.waited = 0;
|
|
62
|
+
};
|
|
63
|
+
/** When a test must end, by Playwright's count: its start, plus the hold waits it isn't charged,
|
|
64
|
+
* plus its timeout; none for a test with no timeout. A hold's server lets a stillness pass while
|
|
65
|
+
* its holders are inside their deadlines; the test moves them as its timeout moves. */
|
|
66
|
+
export const deadlineFrom = (timeout, clock = running) => timeout > 0 ? clock.start + clock.waited + timeout : undefined;
|
|
67
|
+
/** `wait` for a hold, its time added to the running test's waits, which its deadline is past. */
|
|
68
|
+
export const waitedFor = async (wait) => {
|
|
69
|
+
const asked = Date.now();
|
|
70
|
+
try {
|
|
71
|
+
return await wait();
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
running.waited += Date.now() - asked;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const holderDeadline = () => {
|
|
78
|
+
try {
|
|
79
|
+
return deadlineFrom(test.info().timeout);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
/** Who asks for a hold, for its server's holder record: the running test, if any, its worker and
|
|
86
|
+
* its process, so a wait past its bound names who held what. */
|
|
87
|
+
const holderName = () => {
|
|
88
|
+
const worker = process.env['TEST_WORKER_INDEX'];
|
|
89
|
+
const where = `${worker === undefined ? '' : `worker ${worker}, `}pid ${String(process.pid)}`;
|
|
90
|
+
try {
|
|
91
|
+
const info = test.info();
|
|
92
|
+
return `${info.project.name} › ${info.title} (${where})`;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return where;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
54
98
|
/**
|
|
55
99
|
* Holds a target's stack, shared or owned alone, until the returned release is called: the hold
|
|
56
100
|
* is an open request, so a worker that dies releases it by closing its connection.
|
|
@@ -58,22 +102,18 @@ export const control = async (action, key) => {
|
|
|
58
102
|
export const holdStack = async (hold, key) => openHold(new URL(`/${hold}/${encodeURIComponent(key)}`, required(HOST_ENV, 'the stack host starts in the global setup')), {
|
|
59
103
|
held: `a ${hold} hold on ${key}`,
|
|
60
104
|
refused: () => `the stack host refused a ${hold} hold on ${key}`,
|
|
61
|
-
});
|
|
62
|
-
/** A seat among the Linux image's browsers for each context the
|
|
63
|
-
*
|
|
105
|
+
}, { who: holderName(), deadline: holderDeadline() });
|
|
106
|
+
/** A seat among the Linux image's browsers for each context the test may have open at once, all
|
|
107
|
+
* taken together and held as a stack hold is, for the test's life. */
|
|
64
108
|
export const holdBrowserSeat = async (contexts) => openHold(new URL(`/browser/${String(contexts)}`, required(HOST_ENV, 'the stack host starts in the global setup')), {
|
|
65
109
|
held: 'seats among the Linux browsers',
|
|
66
110
|
refused: (status) => status === 400
|
|
67
111
|
? `the Linux browsers seat fewer than the ${String(contexts)} browserContexts declared`
|
|
68
112
|
: 'the stack host refused seats among the Linux browsers',
|
|
69
|
-
});
|
|
113
|
+
}, { who: holderName(), deadline: holderDeadline() });
|
|
70
114
|
const runTurns = () => required(CPU_GATE_ENV, 'the global setup joins the CPU gate');
|
|
71
|
-
const TURN = {
|
|
72
|
-
held: 'a CPU turn',
|
|
73
|
-
refused: (status) => `the CPU gate refused a turn (${String(status)}): the run has left it, or lost it`,
|
|
74
|
-
};
|
|
75
115
|
/** A CPU turn, until the returned release; an abort gives up a turn still waiting. */
|
|
76
|
-
export const holdTurn = async (turns, signal) =>
|
|
116
|
+
export const holdTurn = async (turns, signal) => holdCpuTurn(turns, { signal, who: holderName(), deadline: holderDeadline() });
|
|
77
117
|
/** The running test's CPU turn in this worker, which runs one test at a time. */
|
|
78
118
|
const worker = { held: undefined };
|
|
79
119
|
/** One slot, until the returned release. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../../testing/src/stack/control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../../testing/src/stack/control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,oFAAoF;AACpF,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAEzC,gGAAgG;AAChG,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAE3C,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AAEzC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AAErC;mGACmG;AACnG,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C;eACe;AACf,MAAM,CAAC,MAAM,SAAS,GAAG,oBAAoB,CAAC;AAI9C,MAAM,KAAK,GAAG,CAAC,KAAc,EAAmC,EAAE,CAChE,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;AAEnE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,OAAe,EAAU,EAAE;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,cAAc,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;oGACoG;AACpG,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,MAAc,EAAE,GAAW,EAAmC,EAAE;IAC5F,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,2CAA2C,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,MAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAA0B,CAAC;IACrF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;QACzD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,IAAI,GAAY,QAAQ,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AASF,4EAA4E;AAC5E,MAAM,OAAO,GAAc,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAE5D,+DAA+D;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,GAAW,IAAI,CAAC,GAAG,EAAE,EAAQ,EAAE;IAC3D,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;IACpB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF;;wFAEwF;AACxF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,KAAK,GAAc,OAAO,EAAsB,EAAE,CAC9F,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAEjE,iGAAiG;AACjG,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAS,IAA0B,EAAkB,EAAE;IACnF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IACvC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAuB,EAAE;IAC9C,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF;iEACiE;AACjE,MAAM,UAAU,GAAG,GAAW,EAAE;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAqB,EAAE,GAAW,EAAuB,EAAE,CACzF,QAAQ,CACN,IAAI,GAAG,CACL,IAAI,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,EACrC,QAAQ,CAAC,QAAQ,EAAE,2CAA2C,CAAC,CAChE,EACD;IACE,IAAI,EAAE,KAAK,IAAI,YAAY,GAAG,EAAE;IAChC,OAAO,EAAE,GAAG,EAAE,CAAC,4BAA4B,IAAI,YAAY,GAAG,EAAE;CACjE,EACD,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,CAClD,CAAC;AAEJ;uEACuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,QAAgB,EAAuB,EAAE,CAC7E,QAAQ,CACN,IAAI,GAAG,CACL,YAAY,MAAM,CAAC,QAAQ,CAAC,EAAE,EAC9B,QAAQ,CAAC,QAAQ,EAAE,2CAA2C,CAAC,CAChE,EACD;IACE,IAAI,EAAE,gCAAgC;IACtC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,0CAA0C,MAAM,CAAC,QAAQ,CAAC,2BAA2B;QACvF,CAAC,CAAC,uDAAuD;CAC9D,EACD,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,CAClD,CAAC;AAEJ,MAAM,QAAQ,GAAG,GAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,qCAAqC,CAAC,CAAC;AAE7F,sFAAsF;AACtF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAa,EAAE,MAAoB,EAAuB,EAAE,CACzF,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;AAUhF,iFAAiF;AACjF,MAAM,MAAM,GAAmC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAEnE,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,IAAyB,EAAE;IAC1D,MAAM,IAAI,GAAa;QACrB,OAAO,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACnC,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,IAAI,eAAe,EAAE;KAC7B,CAAC;IACF,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC,CAAC;AAQF;mGACmG;AACnG,MAAM,KAAK,GAAG,KAAK,EAAE,IAAc,EAAE,IAAiB,EAAiB,EAAE;IACvE,IAAI,CAAC,OAAO,EAAE,CAAC;IACf,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,QAAQ,EAAE,IAAI,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF;4FAC4F;AAC5F,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,IAAI,GAAgB,IAAI,CAAC,IAAI,EAAE,EAAiB,EAAE;IACpF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,CAAC,OAAO,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,KAAa,EACb,IAA0B,EACV,EAAE;IAClB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -11,4 +11,14 @@ export declare const isAbsent: (error: unknown) => boolean;
|
|
|
11
11
|
/** Joins the gate on `port` as a new run, which joins the next under its name should the gate go,
|
|
12
12
|
* so its tests' turns go on there; `lost` hears why if it can't. */
|
|
13
13
|
export declare const joinGate: (port?: number, lost?: (reason: unknown) => void) => Promise<Membership>;
|
|
14
|
+
/** A CPU turn at `turns` (a run's, or with `/whole`, every slot), until the returned release; an
|
|
15
|
+
* abort gives up a turn still waiting. */
|
|
16
|
+
export declare const holdCpuTurn: (turns: string, asking: {
|
|
17
|
+
readonly signal?: AbortSignal | undefined;
|
|
18
|
+
readonly who: string;
|
|
19
|
+
readonly deadline?: number | undefined;
|
|
20
|
+
}) => Promise<() => void>;
|
|
21
|
+
/** Runs `work` holding every slot of the CPU gate on `port`, joined for it alone, once the gate's
|
|
22
|
+
* queue reaches it: no other run's tests share the cores while it runs. */
|
|
23
|
+
export declare const inWholeTurn: <Value>(work: () => Promise<Value>, who: string, port?: number) => Promise<Value>;
|
|
14
24
|
//# sourceMappingURL=gate-member.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-member.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/gate-member.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gate-member.d.ts","sourceRoot":"","sources":["../../../../testing/src/stack/gate-member.ts"],"names":[],"mappings":"AA8BA,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;6EAC6E;AAC7E,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,OAGgD,CAAC;AAkP3F;qEACqE;AACrE,eAAO,MAAM,QAAQ,yBAEZ,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,KAC/B,OAAO,CAAC,UAAU,CAuBpB,CAAC;AASF;2CAC2C;AAC3C,eAAO,MAAM,WAAW,UACf,MAAM,UACL;IACN,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,KACA,OAAO,CAAC,MAAM,IAAI,CAA2C,CAAC;AAEjE;4EAC4E;AAC5E,eAAO,MAAM,WAAW,GAAU,KAAK,QAC/B,MAAM,OAAO,CAAC,KAAK,CAAC,OACrB,MAAM,oBAEV,OAAO,CAAC,KAAK,CAYf,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { spawn } from 'node:child_process';
|
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { once } from 'node:events';
|
|
4
4
|
import { createServer, request, } from 'node:http';
|
|
5
|
-
import { GATE_MARK, GATE_PORT, GATE_SCRIPT, GATE_VERSION, holdOpen, LAUNCH, SERVES, TAKEN, WHOLE, } from './gate-server.js';
|
|
5
|
+
import { answerDeadline, answerHolders, GATE_MARK, GATE_PORT, GATE_SCRIPT, GATE_VERSION, deadlineOf, holderOf, holdIdOf, holdOpen, LAUNCH, SERVES, TAKEN, WHOLE, } from './gate-server.js';
|
|
6
6
|
import { openHold, statusOf } from './hold.js';
|
|
7
7
|
/** A gate not there, or closing as the join reaches it (refused, reset, or EPIPE mid-write): each
|
|
8
8
|
* is answered by starting a gate, as a gate closes its port as it stops. */
|
|
@@ -137,7 +137,8 @@ const turnAtGate = async (held, asked, gone) => {
|
|
|
137
137
|
},
|
|
138
138
|
};
|
|
139
139
|
try {
|
|
140
|
-
|
|
140
|
+
const { who, deadline, id } = asked;
|
|
141
|
+
return await openHold(url, kind, { signal: gone, who, deadline, id });
|
|
141
142
|
}
|
|
142
143
|
catch (error) {
|
|
143
144
|
if (held.left || !notYet(error)) {
|
|
@@ -147,17 +148,52 @@ const turnAtGate = async (held, asked, gone) => {
|
|
|
147
148
|
return turnAtGate(held, asked, gone);
|
|
148
149
|
}
|
|
149
150
|
};
|
|
151
|
+
/** A turn's moved deadline, passed on to the gate the turn is held at, which a gate too old to
|
|
152
|
+
* know the route refuses: the turn keeps the deadline it was asked with. */
|
|
153
|
+
const passDeadline = (port, path) => {
|
|
154
|
+
const call = request(`http://127.0.0.1:${String(port)}${path}`, { method: 'POST' }, (answer) => {
|
|
155
|
+
answer.resume();
|
|
156
|
+
});
|
|
157
|
+
call.once('error', () => {
|
|
158
|
+
// A gate gone: there is no turn there to move.
|
|
159
|
+
});
|
|
160
|
+
call.end();
|
|
161
|
+
};
|
|
150
162
|
/** Serves the run's turns to its holders, in this process or its workers, at a local URL; the
|
|
151
163
|
* server lets the process end, and stops taking turns as the run leaves. */
|
|
152
164
|
const serveTurns = async (held) => {
|
|
153
165
|
const server = createServer({ requestTimeout: 0 }, (incoming, holder) => {
|
|
154
166
|
incoming.resume();
|
|
155
|
-
const
|
|
167
|
+
const path = incoming.url ?? '';
|
|
168
|
+
if (path === '/holders') {
|
|
169
|
+
answerHolders(holder);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (path.startsWith('/deadline/')) {
|
|
173
|
+
const parts = path.split('/');
|
|
174
|
+
answerDeadline(holder, parts[2] ?? '', parts[3] ?? '');
|
|
175
|
+
passDeadline(held.port, path);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const asked = {
|
|
179
|
+
whole: path === `/cpu/${WHOLE}`,
|
|
180
|
+
holder,
|
|
181
|
+
who: holderOf(incoming),
|
|
182
|
+
deadline: deadlineOf(incoming),
|
|
183
|
+
id: holdIdOf(incoming),
|
|
184
|
+
};
|
|
156
185
|
const turn = { release: () => undefined };
|
|
157
|
-
holdOpen(holder,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
186
|
+
holdOpen(holder, {
|
|
187
|
+
take: async (gone) => {
|
|
188
|
+
turn.release = await turnAtGate(held, asked, gone);
|
|
189
|
+
},
|
|
190
|
+
give: () => {
|
|
191
|
+
turn.release();
|
|
192
|
+
},
|
|
193
|
+
what: asked.whole ? 'every CPU slot' : 'a CPU turn',
|
|
194
|
+
who: asked.who,
|
|
195
|
+
deadline: asked.deadline,
|
|
196
|
+
id: asked.id,
|
|
161
197
|
});
|
|
162
198
|
});
|
|
163
199
|
server.listen(0, '127.0.0.1');
|
|
@@ -195,4 +231,29 @@ export const joinGate = async (port = GATE_PORT, lost) => {
|
|
|
195
231
|
},
|
|
196
232
|
};
|
|
197
233
|
};
|
|
234
|
+
/** What a CPU turn is called, and what a refusal of one says. */
|
|
235
|
+
const TURN = {
|
|
236
|
+
held: 'a CPU turn',
|
|
237
|
+
refused: (status) => `the CPU gate refused a turn (${String(status)}): the run has left it, or lost it`,
|
|
238
|
+
};
|
|
239
|
+
/** A CPU turn at `turns` (a run's, or with `/whole`, every slot), until the returned release; an
|
|
240
|
+
* abort gives up a turn still waiting. */
|
|
241
|
+
export const holdCpuTurn = async (turns, asking) => openHold(new URL(turns), TURN, asking);
|
|
242
|
+
/** Runs `work` holding every slot of the CPU gate on `port`, joined for it alone, once the gate's
|
|
243
|
+
* queue reaches it: no other run's tests share the cores while it runs. */
|
|
244
|
+
export const inWholeTurn = async (work, who, port = GATE_PORT) => {
|
|
245
|
+
const gate = await joinGate(port);
|
|
246
|
+
try {
|
|
247
|
+
const release = await holdCpuTurn(`${gate.turns}/${WHOLE}`, { who });
|
|
248
|
+
try {
|
|
249
|
+
return await work();
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
release();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
gate.leave();
|
|
257
|
+
}
|
|
258
|
+
};
|
|
198
259
|
//# sourceMappingURL=gate-member.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-member.js","sourceRoot":"","sources":["../../../../testing/src/stack/gate-member.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gate-member.js","sourceRoot":"","sources":["../../../../testing/src/stack/gate-member.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAEL,YAAY,EAEZ,OAAO,GAGR,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,EACd,aAAa,EACb,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAiB,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAU9D;6EAC6E;AAC7E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAW,EAAE,CAClD,KAAK,YAAY,KAAK;IACtB,MAAM,IAAI,KAAK;IACf,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AAE3F,MAAM,UAAU,GAAG,KAAK,EAAE,IAAmB,EAA4B,EAAE;IACzE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAmB,CAAC;IAC9E,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAKF,MAAM,OAAO,GAAG,KAAK,EAAE,MAAc,EAAE,GAAW,EAA+B,EAAE;IACjF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,YAAY,EAAE,CAAC;IACpB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,IAAI,KAAK,SAAS;YAChB,CAAC,CAAC,GAAG,MAAM,mCAAmC;YAC9C,CAAC,CAAC,4BAA4B,MAAM,2BAA2B,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;+FAC+F;AAC/F,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAyB,EAAE;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE;QACzE,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;KAC7C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAY,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,mCAAmC,CAAC;KAC1E,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;0FAC0F;AAC1F,MAAM,MAAM,GAAG,EAAE,CAAC;AAElB;2FAC2F;AAC3F,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,GAAW,EAAE,MAAM,GAAG,MAAM,EAAmB,EAAE;IACjF,MAAM,MAAM,GAAG,oBAAoB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,sCAAsC,MAAM,qBAAqB,MAAM,CAAC,MAAM,CAAC,2CAA2C,CAC3H,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC/D,MAAM,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAgBF,2EAA2E;AAC3E,MAAM,MAAM,GAAG,CAAC,IAAU,EAAQ,EAAE;IAClC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,OAAO,CAAC,OAAO,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF,iEAAiE;AACjE,MAAM,GAAG,GAAG,CAAC,IAAU,EAAE,MAAe,EAAQ,EAAE;IAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,IAAI,CAAC,CAAC;AACf,CAAC,CAAC;AAEF;+EAC+E;AAC/E,MAAM,MAAM,GAAG,CAAC,IAAU,EAAQ,EAAE;IAClC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAC5B,CAAC,IAAI,EAAE,EAAE;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;QACjB,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,kFAAkF;AAClF,MAAM,IAAI,GAAG,CAAC,IAAU,EAAQ,EAAE;IAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,kGAAkG;AAClG,MAAM,MAAM,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AAEvF;oGACoG;AACpG,MAAM,UAAU,GAAG,KAAK,EACtB,IAAU,EACV,KAMC,EACD,IAAiB,EACI,EAAE;IACvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,IAAI,GAAa;QACrB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,gCAAgC,MAAM,CAAC,MAAM,CAAC,GAAG;QACtE,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;KACF,CAAC;IACF,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;QACpC,OAAO,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/F,CAAC;QACD,MAAM,OAAO,CAAC;QACd,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC;AAEF;6EAC6E;AAC7E,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,IAAY,EAAQ,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7F,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,+CAA+C;IACjD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,EAAE,CAAC;AACb,CAAC,CAAC;AAEF;6EAC6E;AAC7E,MAAM,UAAU,GAAG,KAAK,EAAE,IAAU,EAAmB,EAAE;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QACtE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,IAAI,KAAK,QAAQ,KAAK,EAAE;YAC/B,MAAM;YACN,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC;YACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;SACvB,CAAC;QACF,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,GAAS,EAAE,CAAC,SAAS,EAAE,CAAC;QAChD,QAAQ,CAAC,MAAM,EAAE;YACf,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACnB,IAAI,CAAC,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,EAAE,GAAG,EAAE;gBACT,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC;YACD,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY;YACnD,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,EAAE,EAAE,KAAK,CAAC,EAAE;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9B,MAAM,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,MAAc,EAAU,EAAE;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF;qEACqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,IAAI,GAAG,SAAS,EAChB,IAAgC,EACX,EAAE;IACvB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,IAAI,GAAS;QACjB,IAAI;QACJ,GAAG;QACH,IAAI;QACJ,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;QAC3B,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;KACjC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO;QACL,KAAK,EAAE,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM;QACvD,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,iEAAiE;AACjE,MAAM,IAAI,GAAa;IACrB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,gCAAgC,MAAM,CAAC,MAAM,CAAC,oCAAoC;CACrF,CAAC;AAEF;2CAC2C;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,KAAa,EACb,MAIC,EACoB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEjE;4EAC4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,IAA0B,EAC1B,GAAW,EACX,IAAI,GAAG,SAAS,EACA,EAAE;IAClB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACH,CAAC,CAAC"}
|