@cpajs/cpa 0.0.1-alpha-3 → 0.1.0-rc.2
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 +108 -12
- package/dist/client/resources/oauth.d.ts +6 -2
- package/dist/client/resources/oauth.d.ts.map +1 -1
- package/dist/client/resources/oauth.js +28 -8
- package/dist/client/resources/oauth.js.map +1 -1
- package/dist/client/transport.d.ts.map +1 -1
- package/dist/client/transport.js +7 -3
- package/dist/client/transport.js.map +1 -1
- package/dist/server/args.js +1 -1
- package/dist/server/args.js.map +1 -1
- package/dist/server/binary.d.ts +19 -0
- package/dist/server/binary.d.ts.map +1 -1
- package/dist/server/binary.js +35 -1
- package/dist/server/binary.js.map +1 -1
- package/dist/server/config.d.ts +46 -7
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +148 -22
- package/dist/server/config.js.map +1 -1
- package/dist/server/errors.d.ts +4 -2
- package/dist/server/errors.d.ts.map +1 -1
- package/dist/server/errors.js +1 -1
- package/dist/server/errors.js.map +1 -1
- package/dist/server/index.d.ts +18 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +383 -79
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +19 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +10 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/management.d.ts +29 -0
- package/dist/server/management.d.ts.map +1 -0
- package/dist/server/management.js +64 -0
- package/dist/server/management.js.map +1 -0
- package/dist/server/process.d.ts +12 -1
- package/dist/server/process.d.ts.map +1 -1
- package/dist/server/process.js +55 -13
- package/dist/server/process.js.map +1 -1
- package/dist/server/readiness.d.ts +16 -2
- package/dist/server/readiness.d.ts.map +1 -1
- package/dist/server/readiness.js +32 -2
- package/dist/server/readiness.js.map +1 -1
- package/dist/server/targets.d.ts +4 -0
- package/dist/server/targets.d.ts.map +1 -1
- package/dist/server/targets.js +6 -0
- package/dist/server/targets.js.map +1 -1
- package/dist/server/types.d.ts +88 -14
- package/dist/server/types.d.ts.map +1 -1
- package/package.json +31 -24
- package/src/client/resources/oauth.ts +28 -13
- package/src/client/transport.ts +7 -3
- package/src/server/args.ts +1 -1
- package/src/server/binary.ts +46 -1
- package/src/server/config.ts +169 -22
- package/src/server/errors.ts +4 -2
- package/src/server/index.ts +459 -94
- package/src/server/internal.ts +20 -0
- package/src/server/management.ts +89 -0
- package/src/server/process.ts +60 -13
- package/src/server/readiness.ts +38 -3
- package/src/server/targets.ts +8 -0
- package/src/server/types.ts +90 -14
package/dist/server/index.js
CHANGED
|
@@ -3,11 +3,13 @@ import { tmpdir } from 'node:os';
|
|
|
3
3
|
import { join, resolve } from 'node:path';
|
|
4
4
|
import { setTimeout as delay } from 'node:timers/promises';
|
|
5
5
|
import { buildArgs } from './args.js';
|
|
6
|
-
import { resolveBinary } from './binary.js';
|
|
7
|
-
import { inspectConfigFile, writeManagedConfig } from './config.js';
|
|
6
|
+
import { resolveBinary, resolveLauncher } from './binary.js';
|
|
7
|
+
import { inspectConfigFile, readManagedConfig, updateManagedSecret, writeManagedConfig } from './config.js';
|
|
8
8
|
import { CpaStartError } from './errors.js';
|
|
9
|
+
import { keyMatches, resolveManagement } from './management.js';
|
|
9
10
|
import { ManagedProcess } from './process.js';
|
|
10
|
-
import { connectHost, findFreePort, formatOrigin, isPortFree, probeHealth } from './readiness.js';
|
|
11
|
+
import { connectHost, findFreePort, formatOrigin, isLoopbackHost, isPortFree, probeHealth } from './readiness.js';
|
|
12
|
+
import { internalCommand } from './internal.js';
|
|
11
13
|
import { createRedactor } from './redact.js';
|
|
12
14
|
export { candidateTargets, currentPlatform, detectLibc, resolveBinary } from './binary.js';
|
|
13
15
|
export { CpaBinaryError, CpaStartError } from './errors.js';
|
|
@@ -18,7 +20,6 @@ const DEFAULT_STOP_TIMEOUT_MS = 10_000;
|
|
|
18
20
|
const PROBE_INTERVAL_MS = 100;
|
|
19
21
|
const PROBE_TIMEOUT_MS = 1_000;
|
|
20
22
|
const DYNAMIC_PORT_ATTEMPTS = 3;
|
|
21
|
-
const ADDRESS_IN_USE = /address already in use|only one usage of each socket address/i;
|
|
22
23
|
function validate(options) {
|
|
23
24
|
if (options.config !== undefined && options.configPath !== undefined) {
|
|
24
25
|
throw new CpaStartError('invalid-options', 'config and configPath are mutually exclusive.');
|
|
@@ -33,8 +34,34 @@ function validate(options) {
|
|
|
33
34
|
if (port !== undefined && (!Number.isInteger(port) || port < 0 || port > 65_535)) {
|
|
34
35
|
throw new CpaStartError('invalid-options', `Invalid port ${String(port)}.`);
|
|
35
36
|
}
|
|
37
|
+
if (options.management !== undefined && options.managementKey !== undefined) {
|
|
38
|
+
throw new CpaStartError('invalid-options', 'management and managementKey are mutually exclusive; managementKey is the deprecated alias for management.key.');
|
|
39
|
+
}
|
|
40
|
+
if (options.management !== undefined &&
|
|
41
|
+
(typeof options.management.key !== 'string' || options.management.key.trim() === '')) {
|
|
42
|
+
throw new CpaStartError('invalid-options', 'management.key must not be empty.');
|
|
43
|
+
}
|
|
44
|
+
if (typeof options.managementKey === 'string' && options.managementKey.trim() === '') {
|
|
45
|
+
throw new CpaStartError('invalid-options', 'managementKey must not be empty.');
|
|
46
|
+
}
|
|
47
|
+
if (options.management?.viaEnvironment !== true && options.env?.MANAGEMENT_PASSWORD !== undefined) {
|
|
48
|
+
throw new CpaStartError('invalid-options', 'Do not set MANAGEMENT_PASSWORD in env: cpajs only passes it to CPA for management: { key, viaEnvironment: true }, because upstream treats it as enabling remote management.');
|
|
49
|
+
}
|
|
50
|
+
const requestedKey = options.management?.key ?? options.managementKey;
|
|
51
|
+
if (requestedKey === undefined)
|
|
52
|
+
return;
|
|
53
|
+
if (options.configPath !== undefined) {
|
|
54
|
+
if (options.management?.viaEnvironment !== true) {
|
|
55
|
+
throw new CpaStartError('invalid-options', 'management.key cannot be combined with configPath because cpajs must not edit your config file. Put management.secret-key in the file, or use management.viaEnvironment: true to pass the key through MANAGEMENT_PASSWORD (which also enables remote management).');
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const configuredSecret = options.config?.management?.['secret-key'];
|
|
60
|
+
if (typeof configuredSecret === 'string' && configuredSecret.trim() !== '') {
|
|
61
|
+
throw new CpaStartError('invalid-options', 'management.key conflicts with config.management["secret-key"]. Keep one key: either let cpajs hash management.key into the managed config, or set config.management["secret-key"] yourself.');
|
|
62
|
+
}
|
|
36
63
|
}
|
|
37
|
-
function buildEnv(options) {
|
|
64
|
+
function buildEnv(options, management) {
|
|
38
65
|
const env = { ...process.env };
|
|
39
66
|
for (const [key, value] of Object.entries(options.env ?? {})) {
|
|
40
67
|
if (value === undefined)
|
|
@@ -42,8 +69,13 @@ function buildEnv(options) {
|
|
|
42
69
|
else
|
|
43
70
|
env[key] = value;
|
|
44
71
|
}
|
|
45
|
-
|
|
46
|
-
|
|
72
|
+
// MANAGEMENT_PASSWORD reaches CPA only through management.viaEnvironment. Upstream
|
|
73
|
+
// accepts it as an extra plaintext key and forces remote management on, so one
|
|
74
|
+
// inherited from the parent environment must never leak in.
|
|
75
|
+
if (management.viaEnvironment)
|
|
76
|
+
env.MANAGEMENT_PASSWORD = management.key;
|
|
77
|
+
else
|
|
78
|
+
delete env.MANAGEMENT_PASSWORD;
|
|
47
79
|
if (options.home !== undefined)
|
|
48
80
|
env.HOME_JWT = options.home.jwt;
|
|
49
81
|
return env;
|
|
@@ -54,8 +86,64 @@ function configListen(options) {
|
|
|
54
86
|
const port = options.port ?? (typeof server.port === 'number' ? server.port : 0);
|
|
55
87
|
return { host, port };
|
|
56
88
|
}
|
|
57
|
-
function abortError(signal, output) {
|
|
58
|
-
return new CpaStartError('aborted',
|
|
89
|
+
function abortError(signal, output, message = 'startServer was aborted.') {
|
|
90
|
+
return new CpaStartError('aborted', message, { output, cause: signal.reason });
|
|
91
|
+
}
|
|
92
|
+
/** Spawns CPA and waits for `/healthz`, stopping the child if it does not become ready. */
|
|
93
|
+
async function launchProcess(options) {
|
|
94
|
+
let proc;
|
|
95
|
+
try {
|
|
96
|
+
proc = new ManagedProcess(options.binaryPath, options.args, {
|
|
97
|
+
supervised: options.supervised,
|
|
98
|
+
cwd: options.stateDir,
|
|
99
|
+
env: options.env,
|
|
100
|
+
redact: options.redact,
|
|
101
|
+
onLog: options.onLog,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch (cause) {
|
|
105
|
+
// Node reports spawn failures through the 'error' event; Bun throws synchronously.
|
|
106
|
+
const error = new CpaStartError('spawn-failed', `Failed to spawn ${options.binaryPath}: ${options.redact(cause.message)}`, {
|
|
107
|
+
cause,
|
|
108
|
+
});
|
|
109
|
+
return { kind: 'failed', error, result: undefined };
|
|
110
|
+
}
|
|
111
|
+
const outcome = await waitUntilReady(proc, options.origin, options.deadline, options.signal);
|
|
112
|
+
if (outcome === 'ready')
|
|
113
|
+
return { kind: 'ready', proc };
|
|
114
|
+
// Not ready: make sure the process is gone before deciding what to report.
|
|
115
|
+
const exit = await proc.stop(0);
|
|
116
|
+
const output = proc.output();
|
|
117
|
+
if (outcome === 'aborted')
|
|
118
|
+
return { kind: 'failed', error: abortError(options.signal, output, options.abortMessage), result: exit };
|
|
119
|
+
if (outcome === 'timeout') {
|
|
120
|
+
const error = new CpaStartError('timeout', `CLIProxyAPI did not become ready within ${options.startupTimeoutMs} ms.`, { output });
|
|
121
|
+
return { kind: 'failed', error, result: exit };
|
|
122
|
+
}
|
|
123
|
+
if (proc.spawnError) {
|
|
124
|
+
const error = new CpaStartError('spawn-failed', `Failed to spawn ${options.binaryPath}: ${options.redact(proc.spawnError.message)}`, {
|
|
125
|
+
output,
|
|
126
|
+
cause: proc.spawnError,
|
|
127
|
+
});
|
|
128
|
+
return { kind: 'failed', error, result: exit };
|
|
129
|
+
}
|
|
130
|
+
// CPA exits with code 0 when its bind fails, so the output cannot tell a
|
|
131
|
+
// port conflict apart from any other early exit. Probe the port instead.
|
|
132
|
+
// This is best-effort: the port can be taken or freed between the child's
|
|
133
|
+
// bind attempt and this check.
|
|
134
|
+
if (!(await isPortFree(options.host, options.port))) {
|
|
135
|
+
// A dynamically picked port can be taken between probing and binding; try another.
|
|
136
|
+
if (options.allowRetry)
|
|
137
|
+
return { kind: 'retry' };
|
|
138
|
+
const error = new CpaStartError('port-in-use', options.portMessage, {
|
|
139
|
+
output,
|
|
140
|
+
exitCode: exit.code,
|
|
141
|
+
signal: exit.signal,
|
|
142
|
+
});
|
|
143
|
+
return { kind: 'failed', error, result: exit };
|
|
144
|
+
}
|
|
145
|
+
const error = new CpaStartError('exited', `CLIProxyAPI exited before becoming ready (code ${String(exit.code)}, signal ${String(exit.signal)}).`, { output, exitCode: exit.code, signal: exit.signal });
|
|
146
|
+
return { kind: 'failed', error, result: exit };
|
|
59
147
|
}
|
|
60
148
|
/**
|
|
61
149
|
* Starts the official CLIProxyAPI binary and resolves once `/healthz` answers.
|
|
@@ -68,95 +156,173 @@ export async function startServer(options = {}) {
|
|
|
68
156
|
const { signal } = options;
|
|
69
157
|
if (signal?.aborted)
|
|
70
158
|
throw abortError(signal, '');
|
|
71
|
-
const
|
|
159
|
+
const management = await resolveManagement(options);
|
|
160
|
+
const command = options[internalCommand];
|
|
161
|
+
const binary = command === undefined
|
|
162
|
+
? resolveBinary(options.binaryPath === undefined ? {} : { binaryPath: options.binaryPath })
|
|
163
|
+
: { path: command.path };
|
|
164
|
+
// What actually gets spawned: CPA wrapped in cpa-launcher when available, so CPA
|
|
165
|
+
// cannot outlive this process (see binary.ts and the launcher/ sources).
|
|
166
|
+
const program = command?.path ?? binary.path;
|
|
167
|
+
const launcher = options.launcher === false ? undefined : command !== undefined ? command.launcher : resolveLauncher(binary.path);
|
|
168
|
+
const spawnPath = launcher?.path ?? program;
|
|
169
|
+
const supervised = launcher?.mode === 'supervise';
|
|
170
|
+
const prefixArgs = [
|
|
171
|
+
...(launcher === undefined ? [] : [...(supervised ? ['--supervise', '--watch-stdin'] : []), '--', program]),
|
|
172
|
+
...(command?.args ?? []),
|
|
173
|
+
];
|
|
174
|
+
// Validate everything that can be validated before creating any resource, so a
|
|
175
|
+
// rejected option never leaves a temporary state directory behind.
|
|
176
|
+
const env = buildEnv(options, management);
|
|
177
|
+
// Exec mode checks this after PR_SET_PDEATHSIG to catch a parent that died first.
|
|
178
|
+
if (launcher?.mode === 'exec')
|
|
179
|
+
env.CPAJS_PARENT_PID = String(process.pid);
|
|
180
|
+
const extraArgs = buildArgs(options);
|
|
181
|
+
if (launcher === undefined && options.launcher !== false && command === undefined && process.platform !== 'win32') {
|
|
182
|
+
options.onLog?.({
|
|
183
|
+
stream: 'stderr',
|
|
184
|
+
line: `cpajs: notice: no cpa-launcher found for ${binary.path}; CPA will keep running if this process is killed. Pass launcher: false to silence this.`,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
72
187
|
const ownsStateDir = options.stateDir === undefined;
|
|
73
188
|
const stateDir = ownsStateDir ? await mkdtemp(join(tmpdir(), 'cpajs-')) : resolve(options.stateDir);
|
|
74
189
|
if (!ownsStateDir)
|
|
75
190
|
await mkdir(stateDir, { recursive: true });
|
|
76
191
|
const cleanup = async () => {
|
|
192
|
+
// Windows releases file handles a little later than POSIX; keep retrying
|
|
193
|
+
// instead of leaving a temporary directory behind.
|
|
77
194
|
if (ownsStateDir)
|
|
78
|
-
await rm(stateDir, { recursive: true, force: true, maxRetries:
|
|
195
|
+
await rm(stateDir, { recursive: true, force: true, maxRetries: 10, retryDelay: 100 });
|
|
79
196
|
};
|
|
80
197
|
const startupTimeoutMs = options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
|
|
81
198
|
const deadline = Date.now() + startupTimeoutMs;
|
|
82
|
-
const
|
|
83
|
-
|
|
199
|
+
const managedSecret = management.secretKeyHash === undefined
|
|
200
|
+
? undefined
|
|
201
|
+
: { secretKeyHash: management.secretKeyHash, allowRemote: management.allowRemote };
|
|
202
|
+
let warnedRemote = false;
|
|
203
|
+
let reservation;
|
|
204
|
+
let wroteConfig = false;
|
|
205
|
+
let announcedReuse = false;
|
|
84
206
|
try {
|
|
85
207
|
for (let attempt = 1;; attempt++) {
|
|
86
208
|
let prepared;
|
|
87
209
|
let dynamicPort = false;
|
|
88
210
|
if (options.configPath !== undefined) {
|
|
89
211
|
prepared = await inspectConfigFile(options.configPath);
|
|
212
|
+
if (management.key !== undefined && prepared.management.hasSecret) {
|
|
213
|
+
throw new CpaStartError('invalid-options', 'management.key conflicts with the management.secret-key in configPath. Keep one key: remove management.key or remove secret-key from the file.');
|
|
214
|
+
}
|
|
90
215
|
}
|
|
91
216
|
else {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
217
|
+
// The file belongs to CPA after the first start: management API writes and
|
|
218
|
+
// CPA's own normalisation must survive later starts.
|
|
219
|
+
const existing = options.overwriteConfig || wroteConfig ? undefined : await readManagedConfig(stateDir);
|
|
220
|
+
if (existing) {
|
|
221
|
+
prepared = existing;
|
|
222
|
+
// A reused file keeps everything CPA persisted, but the key passed to this
|
|
223
|
+
// start must still work: rewrite only the management fields when they differ.
|
|
224
|
+
if (managedSecret !== undefined &&
|
|
225
|
+
(existing.management.allowRemote !== managedSecret.allowRemote ||
|
|
226
|
+
!(await keyMatches(management.key, existing.management.secretKey)))) {
|
|
227
|
+
await updateManagedSecret(existing.configPath, managedSecret);
|
|
228
|
+
prepared = (await readManagedConfig(stateDir));
|
|
229
|
+
options.onLog?.({
|
|
230
|
+
stream: 'stdout',
|
|
231
|
+
line: `Updated management.secret-key / allow-remote in ${existing.configPath} for the management key of this start.`,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
if (!announcedReuse) {
|
|
235
|
+
announcedReuse = true;
|
|
236
|
+
options.onLog?.({
|
|
237
|
+
stream: 'stdout',
|
|
238
|
+
line: `Keeping existing config at ${existing.configPath}; pass overwriteConfig: true to replace it.`,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
const listen = configListen(options);
|
|
244
|
+
if (listen.port === 0) {
|
|
245
|
+
reservation = await findFreePort(listen.host);
|
|
246
|
+
listen.port = reservation.port;
|
|
247
|
+
dynamicPort = true;
|
|
248
|
+
}
|
|
249
|
+
prepared = await writeManagedConfig(options.config ?? {}, stateDir, listen, managedSecret);
|
|
250
|
+
wroteConfig = true;
|
|
96
251
|
}
|
|
97
|
-
prepared = await writeManagedConfig(options.config ?? {}, stateDir, listen);
|
|
98
252
|
}
|
|
99
253
|
const { host, port, tls } = prepared.listen;
|
|
100
|
-
|
|
254
|
+
if (!warnedRemote) {
|
|
255
|
+
warnedRemote = true;
|
|
256
|
+
const target = host === '' ? 'all interfaces' : host;
|
|
257
|
+
const exposed = !isLoopbackHost(host);
|
|
258
|
+
if (management.viaEnvironment) {
|
|
259
|
+
options.onLog?.({
|
|
260
|
+
stream: 'stderr',
|
|
261
|
+
line: 'cpajs: warning: management.viaEnvironment passes the key through MANAGEMENT_PASSWORD, which upstream compares in plaintext and which always enables remote management' +
|
|
262
|
+
(exposed ? `; the server binds ${target}, so the management API is reachable from non-loopback clients.` : '.'),
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
else if (prepared.management.allowRemote && exposed) {
|
|
266
|
+
options.onLog?.({
|
|
267
|
+
stream: 'stderr',
|
|
268
|
+
line: `cpajs: warning: management.allow-remote is true and the server binds ${target}, so the management API is reachable from non-loopback clients.`,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const redact = createRedactor([management.key, options.home?.jwt, ...prepared.secrets, ...(options.redact ?? [])]);
|
|
101
273
|
if (!dynamicPort && !(await isPortFree(host, port))) {
|
|
102
274
|
throw new CpaStartError('port-in-use', `Port ${port} on ${host || 'all interfaces'} is already in use.`);
|
|
103
275
|
}
|
|
104
276
|
const origin = formatOrigin(tls ? 'https' : 'http', connectHost(host), port);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
277
|
+
// Release the dynamic-port reservation as late as possible so the gap
|
|
278
|
+
// before CPA binds stays small.
|
|
279
|
+
const held = reservation;
|
|
280
|
+
reservation = undefined;
|
|
281
|
+
await held?.release();
|
|
282
|
+
const result = await launchProcess({
|
|
283
|
+
binaryPath: spawnPath,
|
|
284
|
+
supervised,
|
|
285
|
+
args: [...prefixArgs, '-config', prepared.configPath, ...extraArgs],
|
|
286
|
+
stateDir,
|
|
287
|
+
env,
|
|
288
|
+
redact,
|
|
289
|
+
onLog: options.onLog,
|
|
290
|
+
host,
|
|
291
|
+
port,
|
|
292
|
+
origin,
|
|
293
|
+
deadline,
|
|
294
|
+
signal,
|
|
295
|
+
startupTimeoutMs,
|
|
296
|
+
portMessage: `Port ${port} on ${host || 'all interfaces'} is already in use.`,
|
|
297
|
+
allowRetry: dynamicPort && attempt < DYNAMIC_PORT_ATTEMPTS,
|
|
298
|
+
abortMessage: 'startServer was aborted.',
|
|
299
|
+
});
|
|
300
|
+
if (result.kind === 'ready') {
|
|
301
|
+
return createHandle(result.proc, {
|
|
124
302
|
binaryPath: binary.path,
|
|
303
|
+
spawnPath,
|
|
304
|
+
supervised,
|
|
305
|
+
prefixArgs,
|
|
125
306
|
configPath: prepared.configPath,
|
|
307
|
+
listen: prepared.listen,
|
|
308
|
+
origin,
|
|
126
309
|
stateDir,
|
|
127
|
-
|
|
310
|
+
env,
|
|
311
|
+
extraArgs,
|
|
312
|
+
redact,
|
|
313
|
+
onLog: options.onLog,
|
|
314
|
+
startupTimeoutMs,
|
|
128
315
|
stopTimeoutMs: options.stopTimeoutMs ?? DEFAULT_STOP_TIMEOUT_MS,
|
|
129
316
|
cleanup,
|
|
130
317
|
});
|
|
131
318
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (outcome === 'aborted')
|
|
136
|
-
throw abortError(signal, output);
|
|
137
|
-
if (outcome === 'timeout') {
|
|
138
|
-
throw new CpaStartError('timeout', `CLIProxyAPI did not become ready within ${startupTimeoutMs} ms.`, { output });
|
|
139
|
-
}
|
|
140
|
-
if (proc.spawnError) {
|
|
141
|
-
throw new CpaStartError('spawn-failed', `Failed to spawn ${binary.path}: ${redact(proc.spawnError.message)}`, {
|
|
142
|
-
output,
|
|
143
|
-
cause: proc.spawnError,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
if (ADDRESS_IN_USE.test(output)) {
|
|
147
|
-
// A dynamically picked port can be taken between probing and binding; try another.
|
|
148
|
-
if (dynamicPort && attempt < DYNAMIC_PORT_ATTEMPTS)
|
|
149
|
-
continue;
|
|
150
|
-
throw new CpaStartError('port-in-use', `Port ${port} on ${host || 'all interfaces'} is already in use.`, {
|
|
151
|
-
output,
|
|
152
|
-
exitCode: exit.code,
|
|
153
|
-
signal: exit.signal,
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
throw new CpaStartError('exited', `CLIProxyAPI exited before becoming ready (code ${String(exit.code)}, signal ${String(exit.signal)}).`, { output, exitCode: exit.code, signal: exit.signal });
|
|
319
|
+
if (result.kind === 'retry')
|
|
320
|
+
continue;
|
|
321
|
+
throw result.error;
|
|
157
322
|
}
|
|
158
323
|
}
|
|
159
324
|
catch (error) {
|
|
325
|
+
await reservation?.release();
|
|
160
326
|
await cleanup();
|
|
161
327
|
throw error;
|
|
162
328
|
}
|
|
@@ -186,30 +352,168 @@ async function waitUntilReady(proc, origin, deadline, signal) {
|
|
|
186
352
|
}
|
|
187
353
|
}
|
|
188
354
|
}
|
|
189
|
-
function createHandle(
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
355
|
+
function createHandle(initialProc, info) {
|
|
356
|
+
let currentProc = initialProc;
|
|
357
|
+
let state = 'running';
|
|
358
|
+
let restartTask;
|
|
359
|
+
let restartController;
|
|
360
|
+
let stopTask;
|
|
361
|
+
let resolveExited;
|
|
362
|
+
let finalizePromise;
|
|
363
|
+
const exited = new Promise((resolve) => {
|
|
364
|
+
resolveExited = resolve;
|
|
193
365
|
});
|
|
194
|
-
|
|
366
|
+
const settle = (result) => {
|
|
367
|
+
if (finalizePromise)
|
|
368
|
+
return finalizePromise;
|
|
369
|
+
state = 'stopped';
|
|
370
|
+
liveServers.delete(handle);
|
|
371
|
+
finalizePromise = (async () => {
|
|
372
|
+
try {
|
|
373
|
+
await info.cleanup();
|
|
374
|
+
}
|
|
375
|
+
finally {
|
|
376
|
+
resolveExited(result);
|
|
377
|
+
}
|
|
378
|
+
})();
|
|
379
|
+
return finalizePromise;
|
|
380
|
+
};
|
|
381
|
+
const watch = (proc) => {
|
|
382
|
+
void proc.exited.then((result) => {
|
|
383
|
+
if (proc !== currentProc || state !== 'running')
|
|
384
|
+
return;
|
|
385
|
+
void settle(result).catch(() => { });
|
|
386
|
+
});
|
|
387
|
+
};
|
|
388
|
+
watch(initialProc);
|
|
389
|
+
const restart = (restartOptions = {}) => {
|
|
390
|
+
if (state === 'stopped' || state === 'stopping') {
|
|
391
|
+
return Promise.reject(new CpaStartError('stopped', 'Cannot restart a stopped server.'));
|
|
392
|
+
}
|
|
393
|
+
if (restartTask)
|
|
394
|
+
return restartTask;
|
|
395
|
+
state = 'restarting';
|
|
396
|
+
const controller = new AbortController();
|
|
397
|
+
restartController = controller;
|
|
398
|
+
const signal = restartOptions.signal
|
|
399
|
+
? AbortSignal.any([restartOptions.signal, controller.signal])
|
|
400
|
+
: controller.signal;
|
|
401
|
+
restartTask = (async () => {
|
|
402
|
+
const previous = currentProc;
|
|
403
|
+
const previousExit = await previous.stop(restartOptions.timeoutMs ?? info.stopTimeoutMs);
|
|
404
|
+
if (signal.aborted) {
|
|
405
|
+
await settle(previousExit);
|
|
406
|
+
throw abortError(signal, previous.output(), 'restart was aborted.');
|
|
407
|
+
}
|
|
408
|
+
// Reuse the original port, dynamic or not. The old listener is gone, and
|
|
409
|
+
// Go sets SO_REUSEADDR on Unix, so TIME_WAIT does not block the bind.
|
|
410
|
+
// Windows relies on its default (Go does not set SO_REUSEADDR there);
|
|
411
|
+
// either way another process holding the port is reported, never swapped.
|
|
412
|
+
const { host, port } = info.listen;
|
|
413
|
+
if (!(await isPortFree(host, port))) {
|
|
414
|
+
await settle(previousExit);
|
|
415
|
+
throw new CpaStartError('port-in-use', `Port ${port} on ${host || 'all interfaces'} is already in use.`);
|
|
416
|
+
}
|
|
417
|
+
// Reuse the config file as CPA left it. Rewriting it here would discard
|
|
418
|
+
// changes made through the management API during the previous run (#13).
|
|
419
|
+
const result = await launchProcess({
|
|
420
|
+
binaryPath: info.spawnPath,
|
|
421
|
+
supervised: info.supervised,
|
|
422
|
+
args: [...info.prefixArgs, '-config', info.configPath, ...info.extraArgs],
|
|
423
|
+
stateDir: info.stateDir,
|
|
424
|
+
env: info.env,
|
|
425
|
+
redact: info.redact,
|
|
426
|
+
onLog: info.onLog,
|
|
427
|
+
host,
|
|
428
|
+
port,
|
|
429
|
+
origin: info.origin,
|
|
430
|
+
deadline: Date.now() + info.startupTimeoutMs,
|
|
431
|
+
signal,
|
|
432
|
+
startupTimeoutMs: info.startupTimeoutMs,
|
|
433
|
+
portMessage: `Port ${port} on ${host || 'all interfaces'} is already in use.`,
|
|
434
|
+
allowRetry: false,
|
|
435
|
+
abortMessage: 'restart was aborted.',
|
|
436
|
+
});
|
|
437
|
+
if (result.kind !== 'ready') {
|
|
438
|
+
const failure = result;
|
|
439
|
+
await settle(failure.result ?? previousExit);
|
|
440
|
+
throw failure.error;
|
|
441
|
+
}
|
|
442
|
+
currentProc = result.proc;
|
|
443
|
+
watch(result.proc);
|
|
444
|
+
state = 'running';
|
|
445
|
+
// The process may have exited between the readiness probe and this point.
|
|
446
|
+
if (result.proc.exitResult)
|
|
447
|
+
void settle(result.proc.exitResult).catch(() => { });
|
|
448
|
+
})().finally(() => {
|
|
449
|
+
restartTask = undefined;
|
|
450
|
+
restartController = undefined;
|
|
451
|
+
if (state === 'restarting')
|
|
452
|
+
state = 'running';
|
|
453
|
+
});
|
|
454
|
+
return restartTask;
|
|
455
|
+
};
|
|
456
|
+
const stop = (stopOptions = {}) => {
|
|
457
|
+
stopTask ??= (async () => {
|
|
458
|
+
if (state !== 'stopped')
|
|
459
|
+
state = 'stopping';
|
|
460
|
+
restartController?.abort(new Error('server stopped'));
|
|
461
|
+
if (restartTask) {
|
|
462
|
+
try {
|
|
463
|
+
await restartTask;
|
|
464
|
+
}
|
|
465
|
+
catch {
|
|
466
|
+
// An aborted restart always rejects; stop() still has to finish.
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
await settle(await currentProc.stop(stopOptions.timeoutMs ?? info.stopTimeoutMs));
|
|
470
|
+
return exited;
|
|
471
|
+
})();
|
|
472
|
+
return stopTask;
|
|
473
|
+
};
|
|
474
|
+
const handle = {
|
|
195
475
|
origin: info.origin,
|
|
196
476
|
baseUrl: `${info.origin}/v1`,
|
|
197
|
-
host: info.host,
|
|
198
|
-
port: info.port,
|
|
199
|
-
pid: proc.child.pid,
|
|
477
|
+
host: info.listen.host,
|
|
478
|
+
port: info.listen.port,
|
|
200
479
|
binaryPath: info.binaryPath,
|
|
201
480
|
configPath: info.configPath,
|
|
202
481
|
stateDir: info.stateDir,
|
|
203
|
-
|
|
204
|
-
|
|
482
|
+
get pid() {
|
|
483
|
+
return currentProc.child.pid;
|
|
484
|
+
},
|
|
485
|
+
get process() {
|
|
486
|
+
return currentProc.child;
|
|
487
|
+
},
|
|
205
488
|
get recentLogs() {
|
|
206
|
-
return [...
|
|
489
|
+
return [...currentProc.recentLogs];
|
|
207
490
|
},
|
|
208
491
|
exited,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
return exited;
|
|
212
|
-
},
|
|
492
|
+
stop,
|
|
493
|
+
restart,
|
|
213
494
|
};
|
|
495
|
+
liveServers.add(handle);
|
|
496
|
+
return handle;
|
|
497
|
+
}
|
|
498
|
+
// Handles that have started and not settled yet, for stopAllServers().
|
|
499
|
+
const liveServers = new Set();
|
|
500
|
+
/**
|
|
501
|
+
* Stops every server started by this process and still running, using each
|
|
502
|
+
* handle's `stop()` (so temporary state directories are removed too).
|
|
503
|
+
*
|
|
504
|
+
* The library does not install signal handlers. A host that should not leave
|
|
505
|
+
* CPA processes behind on SIGTERM/SIGINT calls this from its own handler:
|
|
506
|
+
*
|
|
507
|
+
* ```ts
|
|
508
|
+
* for (const signal of ['SIGINT', 'SIGTERM'] as const) {
|
|
509
|
+
* process.once(signal, async () => {
|
|
510
|
+
* await stopAllServers();
|
|
511
|
+
* process.exit(0);
|
|
512
|
+
* });
|
|
513
|
+
* }
|
|
514
|
+
* ```
|
|
515
|
+
*/
|
|
516
|
+
export async function stopAllServers(options = {}) {
|
|
517
|
+
return Promise.all([...liveServers].map((server) => server.stop(options)));
|
|
214
518
|
}
|
|
215
519
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAuB,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,cAAc,GAAG,+DAA+D,CAAC;AAEvF,SAAS,QAAQ,CAAC,OAA2B;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrE,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,+CAA+C,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,yEAAyE,CAAC,CAAC;IACxH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACpD,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,6BAA6B,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAA2B;IAC3C,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;;YACpC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;QAAE,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IACzF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,OAA+B;IACnD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAuC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB,EAAE,MAAc;IACrD,OAAO,IAAI,aAAa,CAAC,SAAS,EAAE,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAO,GAAuB,EAAE;IAChE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACzG,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;IACrG,IAAI,CAAC,YAAY;QAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACxC,IAAI,YAAY;YAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,CAAC;QACH,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;YAClC,IAAI,QAAwB,CAAC;YAC7B,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACrC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC9C,WAAW,GAAG,IAAI,CAAC;gBACrB,CAAC;gBACD,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1H,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB,CAAC,CAAC;YAC3G,CAAC;YAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7E,IAAI,IAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,EAAE;oBACrF,GAAG,EAAE,QAAQ;oBACb,GAAG;oBACH,MAAM;oBACN,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,mFAAmF;gBACnF,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,mBAAmB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5H,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrE,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;gBACxB,OAAO,YAAY,CAAC,IAAI,EAAE;oBACxB,MAAM;oBACN,IAAI;oBACJ,IAAI;oBACJ,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,QAAQ;oBACR,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,uBAAuB;oBAC/D,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAED,2EAA2E;YAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,UAAU,CAAC,MAAO,EAAE,MAAM,CAAC,CAAC;YAC7D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,IAAI,aAAa,CAAC,SAAS,EAAE,2CAA2C,gBAAgB,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACpH,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,mBAAmB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE;oBAC5G,MAAM;oBACN,KAAK,EAAE,IAAI,CAAC,UAAU;iBACvB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,mFAAmF;gBACnF,IAAI,WAAW,IAAI,OAAO,GAAG,qBAAqB;oBAAE,SAAS;gBAC7D,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB,EAAE;oBACvG,MAAM;oBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,aAAa,CACrB,QAAQ,EACR,kDAAkD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EACtG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,MAA+B;IAE/B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACzB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,SAAS,CAAC;QACtC,IAAI,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC5B,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,IAAI,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACrE,kFAAkF;YAClF,OAAO,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QACxD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,IAAoB,EACpB,IAUC;IAED,MAAM,MAAM,GAAwB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACpE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAI;QACpB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,OAAO,EAAE,IAAI,CAAC,KAAK;QACnB,IAAI,UAAU;YACZ,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM;QACN,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE;YACzB,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7D,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAuB,MAAM,aAAa,CAAC;AACjI,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAA2B,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AACxI,OAAO,EAAE,eAAe,EAAwB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,SAAS,QAAQ,CAAC,OAA2B;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrE,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,+CAA+C,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,yEAAyE,CAAC,CAAC;IACxH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACpD,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,6BAA6B,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,gHAAgH,CACjH,CAAC;IACJ,CAAC;IACD,IACE,OAAO,CAAC,UAAU,KAAK,SAAS;QAChC,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EACpF,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrF,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAClG,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,6KAA6K,CAC9K,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;IACtE,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO;IACvC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,mQAAmQ,CACpQ,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC;IACpE,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3E,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,6LAA6L,CAC9L,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAA2B,EAAE,UAA8B;IAC3E,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;;YACpC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,mFAAmF;IACnF,+EAA+E;IAC/E,4DAA4D;IAC5D,IAAI,UAAU,CAAC,cAAc;QAAE,GAAG,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC;;QACnE,OAAO,GAAG,CAAC,mBAAmB,CAAC;IACpC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,OAA+B;IACnD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAuC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB,EAAE,MAAc,EAAE,OAAO,GAAG,0BAA0B;IAC3F,OAAO,IAAI,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACjF,CAAC;AA8BD,2FAA2F;AAC3F,KAAK,UAAU,aAAa,CAAC,OAAsB;IACjD,IAAI,IAAoB,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE;YAC1D,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,GAAG,EAAE,OAAO,CAAC,QAAQ;YACrB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mFAAmF;QACnF,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,cAAc,EAAE,mBAAmB,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,EAAE,EAAE;YACpI,KAAK;SACN,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7F,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAExD,2EAA2E;IAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,MAAO,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACrI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,2CAA2C,OAAO,CAAC,gBAAgB,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAClI,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,cAAc,EAAE,mBAAmB,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE;YACnI,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,+BAA+B;IAC/B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACpD,mFAAmF;QACnF,IAAI,OAAO,CAAC,UAAU;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE;YAClE,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,aAAa,CAC7B,QAAQ,EACR,kDAAkD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EACtG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CACrD,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAO,GAAuB,EAAE;IAChE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,OAAO,GAAI,OAAmD,CAAC,eAAe,CAAC,CAAC;IACtF,MAAM,MAAM,GACV,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3F,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7B,iFAAiF;IACjF,yEAAyE;IACzE,MAAM,OAAO,GAAG,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IAC7C,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnH,MAAM,SAAS,GAAG,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC;IAC5C,MAAM,UAAU,GAAG,QAAQ,EAAE,IAAI,KAAK,WAAW,CAAC;IAClD,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3G,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;KACzB,CAAC;IACF,+EAA+E;IAC/E,mEAAmE;IACnE,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,kFAAkF;IAClF,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM;QAAE,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClH,OAAO,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,4CAA4C,MAAM,CAAC,IAAI,0FAA0F;SACxJ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;IACrG,IAAI,CAAC,YAAY;QAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACxC,yEAAyE;QACzE,mDAAmD;QACnD,IAAI,YAAY;YAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1G,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,MAAM,aAAa,GACjB,UAAU,CAAC,aAAa,KAAK,SAAS;QACpC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC;IACvF,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,IAAI,WAAwC,CAAC;IAC7C,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC;QACH,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;YAClC,IAAI,QAAwB,CAAC;YAC7B,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACrC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACvD,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;oBAClE,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,gJAAgJ,CACjJ,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,2EAA2E;gBAC3E,qDAAqD;gBACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,IAAI,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACxG,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,GAAG,QAAQ,CAAC;oBACpB,2EAA2E;oBAC3E,8EAA8E;oBAC9E,IACE,aAAa,KAAK,SAAS;wBAC3B,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,KAAK,aAAa,CAAC,WAAW;4BAC5D,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,GAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EACtE,CAAC;wBACD,MAAM,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;wBAC9D,QAAQ,GAAG,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAE,CAAC;wBAChD,OAAO,CAAC,KAAK,EAAE,CAAC;4BACd,MAAM,EAAE,QAAQ;4BAChB,IAAI,EAAE,mDAAmD,QAAQ,CAAC,UAAU,wCAAwC;yBACrH,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,cAAc,GAAG,IAAI,CAAC;wBACtB,OAAO,CAAC,KAAK,EAAE,CAAC;4BACd,MAAM,EAAE,QAAQ;4BAChB,IAAI,EAAE,8BAA8B,QAAQ,CAAC,UAAU,6CAA6C;yBACrG,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBACtB,WAAW,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBAC9C,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;wBAC/B,WAAW,GAAG,IAAI,CAAC;oBACrB,CAAC;oBACD,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;oBAC3F,WAAW,GAAG,IAAI,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrD,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;oBAC9B,OAAO,CAAC,KAAK,EAAE,CAAC;wBACd,MAAM,EAAE,QAAQ;wBAChB,IAAI,EACF,uKAAuK;4BACvK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,MAAM,iEAAiE,CAAC,CAAC,CAAC,GAAG,CAAC;qBAClH,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;oBACtD,OAAO,CAAC,KAAK,EAAE,CAAC;wBACd,MAAM,EAAE,QAAQ;wBAChB,IAAI,EAAE,wEAAwE,MAAM,iEAAiE;qBACtJ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACnH,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB,CAAC,CAAC;YAC3G,CAAC;YAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7E,sEAAsE;YACtE,gCAAgC;YAChC,MAAM,IAAI,GAAG,WAAW,CAAC;YACzB,WAAW,GAAG,SAAS,CAAC;YACxB,MAAM,IAAI,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,UAAU,EAAE,SAAS;gBACrB,UAAU;gBACV,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC;gBACnE,QAAQ;gBACR,GAAG;gBACH,MAAM;gBACN,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI;gBACJ,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,MAAM;gBACN,gBAAgB;gBAChB,WAAW,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB;gBAC7E,UAAU,EAAE,WAAW,IAAI,OAAO,GAAG,qBAAqB;gBAC1D,YAAY,EAAE,0BAA0B;aACzC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;oBAC/B,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,SAAS;oBACT,UAAU;oBACV,UAAU;oBACV,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,MAAM;oBACN,QAAQ;oBACR,GAAG;oBACH,SAAS;oBACT,MAAM;oBACN,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,gBAAgB;oBAChB,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,uBAAuB;oBAC/D,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;gBAAE,SAAS;YACtC,MAAM,MAAM,CAAC,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,EAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,MAA+B;IAE/B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACzB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,SAAS,CAAC;QACtC,IAAI,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC5B,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,IAAI,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACrE,kFAAkF;YAClF,OAAO,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QACxD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAuBD,SAAS,YAAY,CAAC,WAA2B,EAAE,IAAgB;IACjE,IAAI,WAAW,GAAG,WAAW,CAAC;IAC9B,IAAI,KAAK,GAAsD,SAAS,CAAC;IACzE,IAAI,WAAsC,CAAC;IAC3C,IAAI,iBAA8C,CAAC;IACnD,IAAI,QAAyC,CAAC;IAC9C,IAAI,aAA4C,CAAC;IACjD,IAAI,eAA0C,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE;QACjD,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAiB,EAAE;QACnD,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;QAC5C,KAAK,GAAG,SAAS,CAAC;QAClB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,eAAe,GAAG,CAAC,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACT,aAAa,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,IAAoB,EAAQ,EAAE;QAC3C,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC/B,IAAI,IAAI,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YACxD,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,KAAK,CAAC,WAAW,CAAC,CAAC;IAEnB,MAAM,OAAO,GAAG,CAAC,cAAc,GAAmB,EAAE,EAAiB,EAAE;QACrE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YAChD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC;QAEpC,KAAK,GAAG,YAAY,CAAC;QACrB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,iBAAiB,GAAG,UAAU,CAAC;QAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM;YAClC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAEtB,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;YACxB,MAAM,QAAQ,GAAG,WAAW,CAAC;YAC7B,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;YACzF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;YACtE,CAAC;YAED,yEAAyE;YACzE,sEAAsE;YACtE,sEAAsE;YACtE,0EAA0E;YAC1E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACpC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB,CAAC,CAAC;YAC3G,CAAC;YAED,wEAAwE;YACxE,yEAAyE;YACzE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,UAAU,EAAE,IAAI,CAAC,SAAS;gBAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;gBACzE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI;gBACJ,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB;gBAC5C,MAAM;gBACN,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,WAAW,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB;gBAC7E,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,sBAAsB;aACrC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAmD,CAAC;gBACpE,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC;gBAC7C,MAAM,OAAO,CAAC,KAAK,CAAC;YACtB,CAAC;YAED,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,KAAK,GAAG,SAAS,CAAC;YAClB,0EAA0E;YAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU;gBAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,WAAW,GAAG,SAAS,CAAC;YACxB,iBAAiB,GAAG,SAAS,CAAC;YAC9B,IAAI,KAAK,KAAK,YAAY;gBAAE,KAAK,GAAG,SAAS,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,WAAW,GAAgB,EAAE,EAAuB,EAAE;QAClE,QAAQ,KAAK,CAAC,KAAK,IAAI,EAAE;YACvB,IAAI,KAAK,KAAK,SAAS;gBAAE,KAAK,GAAG,UAAU,CAAC;YAC5C,iBAAiB,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACtD,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,WAAW,CAAC;gBACpB,CAAC;gBAAC,MAAM,CAAC;oBACP,iEAAiE;gBACnE,CAAC;YACH,CAAC;YACD,MAAM,MAAM,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAc;QACxB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK;QAC5B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACtB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,GAAG;YACL,OAAO,WAAW,CAAC,KAAK,CAAC,GAAI,CAAC;QAChC,CAAC;QACD,IAAI,OAAO;YACT,OAAO,WAAW,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,UAAU;YACZ,OAAO,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QACD,MAAM;QACN,IAAI;QACJ,OAAO;KACR,CAAC;IACF,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AACvE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAa,CAAC;AAEzC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAO,GAAgB,EAAE;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ResolvedLauncher } from './binary.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Test-only hooks. Nothing here is exported from the public entry points.
|
|
4
|
+
*
|
|
5
|
+
* `internalCommand` overrides how the CPA process is launched: the lifecycle
|
|
6
|
+
* tests run a Node fixture through `process.execPath` because Windows does not
|
|
7
|
+
* honour the fixture's shebang line. A Symbol key keeps it out of the typed
|
|
8
|
+
* options and out of reach of plain-object options from JavaScript callers.
|
|
9
|
+
*/
|
|
10
|
+
export declare const internalCommand: unique symbol;
|
|
11
|
+
export interface InternalCommand {
|
|
12
|
+
/** Executable to spawn instead of the resolved CPA binary. */
|
|
13
|
+
path: string;
|
|
14
|
+
/** Arguments placed before `-config <file>`. */
|
|
15
|
+
args: readonly string[];
|
|
16
|
+
/** Launcher to wrap the command in; omitted means none (tests opt in explicitly). */
|
|
17
|
+
launcher?: ResolvedLauncher;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/server/internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,eAAkC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-only hooks. Nothing here is exported from the public entry points.
|
|
3
|
+
*
|
|
4
|
+
* `internalCommand` overrides how the CPA process is launched: the lifecycle
|
|
5
|
+
* tests run a Node fixture through `process.execPath` because Windows does not
|
|
6
|
+
* honour the fixture's shebang line. A Symbol key keeps it out of the typed
|
|
7
|
+
* options and out of reach of plain-object options from JavaScript callers.
|
|
8
|
+
*/
|
|
9
|
+
export const internalCommand = Symbol('cpajs.internalCommand');
|
|
10
|
+
//# sourceMappingURL=internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/server/internal.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC"}
|