ctxpool 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui.js ADDED
@@ -0,0 +1,556 @@
1
+ import { createServer } from "node:http";
2
+ import { createReadStream, existsSync, readFileSync, statSync } from "node:fs";
3
+ import { spawnSync } from "node:child_process";
4
+ import { dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { buildAgentContext, buildTeamTimelineExport, createContextPack, deriveContextBlocks, renderContextPackOutput } from "./handoff.js";
7
+ import { openStore } from "./store.js";
8
+ const MAX_FILE_VIEW_BYTES = 512 * 1024;
9
+ const MAX_JSON_BODY_BYTES = 1024 * 1024;
10
+ export function isValidContextPackBody(body) {
11
+ return Boolean(parseContextPackBody(body));
12
+ }
13
+ export async function startUi(options = {}) {
14
+ const host = options.host || "127.0.0.1";
15
+ const requestedPort = options.port ?? 4377;
16
+ const ports = options.port ? [requestedPort] : Array.from({ length: 11 }, (_, index) => requestedPort + index);
17
+ for (const port of ports) {
18
+ const server = createUiServer();
19
+ const result = await listen(server, host, port);
20
+ if (result.ok) {
21
+ console.log(`ContextPool UI running at http://${host}:${port}`);
22
+ return;
23
+ }
24
+ server.close();
25
+ if (options.port || result.code !== "EADDRINUSE") {
26
+ throw new Error(`Unable to start ContextPool UI on ${host}:${port}: ${result.code}`);
27
+ }
28
+ }
29
+ throw new Error(`Unable to start ContextPool UI. Ports ${ports[0]}-${ports[ports.length - 1]} are already in use.`);
30
+ }
31
+ function createUiServer() {
32
+ return createServer(async (req, res) => {
33
+ try {
34
+ await route(req, res);
35
+ }
36
+ catch (error) {
37
+ sendJson(res, 500, { error: error instanceof Error ? error.message : "Unknown error" });
38
+ }
39
+ });
40
+ }
41
+ function listen(server, host, port) {
42
+ return new Promise((resolve) => {
43
+ server.once("error", (error) => {
44
+ resolve({ ok: false, code: error.code || error.message });
45
+ });
46
+ server.listen(port, host, () => {
47
+ server.removeAllListeners("error");
48
+ resolve({ ok: true });
49
+ });
50
+ });
51
+ }
52
+ async function route(req, res) {
53
+ const url = new URL(req.url || "/", "http://127.0.0.1");
54
+ const method = req.method || "GET";
55
+ if (isMutatingMethod(method) && !isLocalRequest(req)) {
56
+ return sendJson(res, 403, { error: "ContextPool UI only accepts local mutating requests" });
57
+ }
58
+ if (url.pathname === "/api/tasks") {
59
+ const store = await openStore();
60
+ try {
61
+ return sendJson(res, 200, { tasks: store.listTasks() });
62
+ }
63
+ finally {
64
+ store.close();
65
+ }
66
+ }
67
+ if (url.pathname === "/api/handoffs") {
68
+ const store = await openStore();
69
+ try {
70
+ return sendJson(res, 200, { handoffs: store.listHandoffPackets(url.searchParams.get("task") || undefined) });
71
+ }
72
+ finally {
73
+ store.close();
74
+ }
75
+ }
76
+ if (url.pathname === "/api/context-blocks") {
77
+ const task = url.searchParams.get("task") || undefined;
78
+ const store = await openStore();
79
+ try {
80
+ const handoffs = store.listHandoffPackets(task);
81
+ const blocks = handoffs.flatMap(deriveContextBlocks);
82
+ return sendJson(res, 200, { blocks });
83
+ }
84
+ finally {
85
+ store.close();
86
+ }
87
+ }
88
+ if (url.pathname === "/api/context-packs") {
89
+ const store = await openStore();
90
+ try {
91
+ if (req.method === "GET")
92
+ return sendJson(res, 200, { packs: store.listContextPacks() });
93
+ if (req.method !== "POST")
94
+ return sendJson(res, 405, { error: "Use GET or POST" });
95
+ const body = await readJsonBody(req);
96
+ const name = typeof body.name === "string" ? body.name : "Untitled context pack";
97
+ const blocks = Array.isArray(body.blocks) ? body.blocks : [];
98
+ const includeRawTranscript = body.includeRawTranscript === true;
99
+ const explicitPack = parseContextPackBody(body);
100
+ const pack = explicitPack || createContextPack(name, blocks, { includeRawTranscript });
101
+ return sendJson(res, 200, { pack: store.saveContextPack({ ...pack, updatedAt: new Date().toISOString() }) });
102
+ }
103
+ finally {
104
+ store.close();
105
+ }
106
+ }
107
+ if (url.pathname.startsWith("/api/context-packs/") && url.pathname.endsWith("/export")) {
108
+ const id = decodeURIComponent(url.pathname.replace("/api/context-packs/", "").replace("/export", ""));
109
+ if (!id)
110
+ return sendJson(res, 400, { error: "Missing context pack id" });
111
+ const store = await openStore();
112
+ try {
113
+ const pack = store.getContextPackById(id);
114
+ if (!pack)
115
+ return sendJson(res, 404, { error: "Context pack not found" });
116
+ const output = renderContextPackOutput(pack);
117
+ return url.searchParams.get("format") === "markdown" ? sendText(res, output.markdown) : sendJson(res, 200, output);
118
+ }
119
+ finally {
120
+ store.close();
121
+ }
122
+ }
123
+ if (url.pathname.startsWith("/api/context-packs/")) {
124
+ const id = decodeURIComponent(url.pathname.replace("/api/context-packs/", ""));
125
+ if (!id)
126
+ return sendJson(res, 400, { error: "Missing context pack id" });
127
+ const store = await openStore();
128
+ try {
129
+ if (req.method === "GET") {
130
+ const pack = store.getContextPackById(id);
131
+ return sendJson(res, pack ? 200 : 404, pack ? { pack } : { error: "Context pack not found" });
132
+ }
133
+ if (req.method === "DELETE") {
134
+ return sendJson(res, store.deleteContextPack(id) ? 200 : 404, { ok: true });
135
+ }
136
+ if (req.method !== "PUT")
137
+ return sendJson(res, 405, { error: "Use GET, PUT, or DELETE" });
138
+ const body = await readJsonBody(req);
139
+ const pack = parseContextPackBody(body);
140
+ if (!pack || pack.id !== id)
141
+ return sendJson(res, 400, { error: "Invalid context pack body" });
142
+ return sendJson(res, 200, { pack: store.saveContextPack({ ...pack, updatedAt: new Date().toISOString() }) });
143
+ }
144
+ finally {
145
+ store.close();
146
+ }
147
+ }
148
+ if (url.pathname.startsWith("/api/handoffs/") && url.pathname.endsWith("/agent-context")) {
149
+ const id = decodeURIComponent(url.pathname.replace("/api/handoffs/", "").replace("/agent-context", ""));
150
+ if (!id)
151
+ return sendJson(res, 400, { error: "Missing handoff id" });
152
+ const store = await openStore();
153
+ try {
154
+ const handoff = store.getHandoffById(id);
155
+ if (!handoff)
156
+ return sendJson(res, 404, { error: "Handoff not found" });
157
+ const context = buildAgentContext(handoff);
158
+ return url.searchParams.get("format") === "json" ? sendJson(res, 200, context) : sendText(res, context.markdown);
159
+ }
160
+ finally {
161
+ store.close();
162
+ }
163
+ }
164
+ if (url.pathname.startsWith("/api/handoffs/") && url.pathname.endsWith("/team-export")) {
165
+ const id = decodeURIComponent(url.pathname.replace("/api/handoffs/", "").replace("/team-export", ""));
166
+ if (!id)
167
+ return sendJson(res, 400, { error: "Missing handoff id" });
168
+ const store = await openStore();
169
+ try {
170
+ const handoff = store.getHandoffById(id);
171
+ if (!handoff)
172
+ return sendJson(res, 404, { error: "Handoff not found" });
173
+ const includeRawTranscript = url.searchParams.get("includeRawTranscript") === "true";
174
+ return sendJson(res, 200, buildTeamTimelineExport(handoff, { includeRawTranscript }));
175
+ }
176
+ finally {
177
+ store.close();
178
+ }
179
+ }
180
+ if (url.pathname.startsWith("/api/handoffs/")) {
181
+ const id = decodeURIComponent(url.pathname.replace("/api/handoffs/", ""));
182
+ if (!id)
183
+ return sendJson(res, 400, { error: "Missing handoff id" });
184
+ const store = await openStore();
185
+ try {
186
+ const handoff = store.getHandoffById(id);
187
+ return sendJson(res, handoff ? 200 : 404, handoff ? { handoff } : { error: "Handoff not found" });
188
+ }
189
+ finally {
190
+ store.close();
191
+ }
192
+ }
193
+ if (url.pathname === "/api/latest") {
194
+ const store = await openStore();
195
+ try {
196
+ const handoff = store.getLatestHandoff(url.searchParams.get("task") || undefined);
197
+ return sendJson(res, handoff ? 200 : 404, handoff ? { handoff } : { error: "No handoff found" });
198
+ }
199
+ finally {
200
+ store.close();
201
+ }
202
+ }
203
+ if (url.pathname === "/api/files/view") {
204
+ if (req.method !== "GET")
205
+ return sendJson(res, 405, { ok: false, error: "Use GET" });
206
+ const repoPath = url.searchParams.get("repoPath") || "";
207
+ const filePath = url.searchParams.get("path") || "";
208
+ if (!(await isKnownRepoPath(repoPath)))
209
+ return sendJson(res, 403, { ok: false, error: "Repository path is not in saved handoffs" });
210
+ const result = readRepoFileForView(repoPath, filePath);
211
+ return sendJson(res, result.ok ? 200 : fileViewStatus(result.error), result);
212
+ }
213
+ if (url.pathname === "/api/files/open") {
214
+ if (req.method !== "POST")
215
+ return sendJson(res, 405, { error: "Use POST" });
216
+ const body = await readJsonBody(req);
217
+ const repoPath = typeof body.repoPath === "string" ? body.repoPath : "";
218
+ const filePath = typeof body.path === "string" ? body.path : "";
219
+ const line = typeof body.line === "number" ? body.line : undefined;
220
+ const mode = body.mode === "reveal" ? "reveal" : "open";
221
+ if (!(await isKnownRepoPath(repoPath)))
222
+ return sendJson(res, 403, { ok: false, error: "Repository path is not in saved handoffs" });
223
+ const safe = resolveSafeRepoPath(repoPath, filePath);
224
+ if (!safe.ok)
225
+ return sendJson(res, 400, { ok: false, error: safe.error });
226
+ if (!existsSync(safe.path))
227
+ return sendJson(res, 404, { ok: false, error: "File does not exist on disk" });
228
+ return sendJson(res, 200, openLocalFile(safe.path, line, mode));
229
+ }
230
+ if (trySendStaticAsset(url.pathname, res))
231
+ return;
232
+ if (url.pathname === "/" || isHandoffPage(url.pathname))
233
+ return sendWebApp(res);
234
+ sendJson(res, 404, { error: "Not found" });
235
+ }
236
+ function isHandoffPage(pathname) {
237
+ const parts = pathname.split("/").filter(Boolean);
238
+ return parts.length === 2 && parts[0] === "handoffs" && parts[1].length > 0;
239
+ }
240
+ function sendJson(res, status, data) {
241
+ res.writeHead(status, { "content-type": "application/json; charset=utf-8" });
242
+ res.end(JSON.stringify(data, null, 2));
243
+ }
244
+ function sendText(res, text) {
245
+ res.writeHead(200, { "content-type": "text/plain; charset=utf-8" });
246
+ res.end(text);
247
+ }
248
+ function sendHtml(res, html) {
249
+ res.writeHead(200, { "content-type": "text/html; charset=utf-8" });
250
+ res.end(html);
251
+ }
252
+ function isMutatingMethod(method) {
253
+ return method === "POST" || method === "PUT" || method === "PATCH" || method === "DELETE";
254
+ }
255
+ export function isLocalRequest(req) {
256
+ const host = normalizeHost(req.headers.host);
257
+ const origin = typeof req.headers.origin === "string" ? req.headers.origin : "";
258
+ if (!host || !isLocalHostname(host.hostname))
259
+ return false;
260
+ if (!origin)
261
+ return true;
262
+ try {
263
+ const parsed = new URL(origin);
264
+ return isLocalHostname(parsed.hostname) && (!parsed.port || !host.port || parsed.port === host.port);
265
+ }
266
+ catch {
267
+ return false;
268
+ }
269
+ }
270
+ function normalizeHost(value) {
271
+ const raw = Array.isArray(value) ? value[0] : value;
272
+ if (!raw)
273
+ return undefined;
274
+ try {
275
+ const parsed = new URL(`http://${raw}`);
276
+ return { hostname: parsed.hostname, port: parsed.port };
277
+ }
278
+ catch {
279
+ return undefined;
280
+ }
281
+ }
282
+ function isLocalHostname(hostname) {
283
+ return hostname === "127.0.0.1" || hostname === "localhost" || hostname === "::1" || hostname === "[::1]";
284
+ }
285
+ async function isKnownRepoPath(repoPath) {
286
+ if (!repoPath)
287
+ return false;
288
+ const requested = resolve(repoPath);
289
+ const store = await openStore();
290
+ try {
291
+ return store.listHandoffPackets().some((handoff) => resolve(handoff.repo.repoPath) === requested);
292
+ }
293
+ finally {
294
+ store.close();
295
+ }
296
+ }
297
+ function sendWebApp(res) {
298
+ const indexPath = join(webDistDir(), "index.html");
299
+ if (existsSync(indexPath))
300
+ return sendHtml(res, readFileSync(indexPath, "utf8"));
301
+ return sendHtml(res, `<!doctype html><html><head><title>ContextPool</title><style>body{font-family:ui-sans-serif,system-ui;margin:40px;color:#09090b}code{background:#f4f4f5;padding:2px 4px;border-radius:4px}</style></head><body><h1>ContextPool UI assets are not built</h1><p>Run <code>npm run build:web</code> or <code>npm run build</code>, then restart <code>ctxpool ui</code>.</p></body></html>`);
302
+ }
303
+ function trySendStaticAsset(pathname, res) {
304
+ const extension = extname(pathname);
305
+ if (!extension)
306
+ return false;
307
+ const root = webDistDir();
308
+ const requested = resolve(root, `.${decodeURIComponent(pathname)}`);
309
+ const rel = relative(root, requested);
310
+ if (rel.startsWith("..") || isAbsolute(rel) || !existsSync(requested))
311
+ return false;
312
+ const stats = statSync(requested);
313
+ if (!stats.isFile())
314
+ return false;
315
+ res.writeHead(200, { "content-type": contentType(extension) });
316
+ createReadStream(requested).pipe(res);
317
+ return true;
318
+ }
319
+ function webDistDir() {
320
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
321
+ return resolve(moduleDir, "..", "dist-web");
322
+ }
323
+ function contentType(extension) {
324
+ switch (extension) {
325
+ case ".html":
326
+ return "text/html; charset=utf-8";
327
+ case ".js":
328
+ return "text/javascript; charset=utf-8";
329
+ case ".css":
330
+ return "text/css; charset=utf-8";
331
+ case ".svg":
332
+ return "image/svg+xml";
333
+ case ".png":
334
+ return "image/png";
335
+ case ".jpg":
336
+ case ".jpeg":
337
+ return "image/jpeg";
338
+ case ".webp":
339
+ return "image/webp";
340
+ default:
341
+ return "application/octet-stream";
342
+ }
343
+ }
344
+ export function readRepoFileForView(repoPath, filePath) {
345
+ const safe = resolveSafeRepoPath(repoPath, filePath);
346
+ if (!safe.ok)
347
+ return { ok: false, error: safe.error };
348
+ if (!existsSync(safe.path))
349
+ return { ok: false, path: filePath, error: "File does not exist on disk" };
350
+ const stats = statSync(safe.path);
351
+ if (!stats.isFile())
352
+ return { ok: false, path: filePath, error: "Path is not a file" };
353
+ if (stats.size > MAX_FILE_VIEW_BYTES) {
354
+ return { ok: false, path: filePath, size: stats.size, error: `File is larger than ${MAX_FILE_VIEW_BYTES} bytes` };
355
+ }
356
+ const buffer = readFileSync(safe.path);
357
+ if (isBinaryFile(filePath, buffer))
358
+ return { ok: false, path: filePath, size: stats.size, error: "Binary files cannot be previewed" };
359
+ const redacted = redactSensitivePreview(filePath, buffer.toString("utf8"));
360
+ return {
361
+ ok: true,
362
+ path: filePath,
363
+ absolutePath: safe.path,
364
+ size: stats.size,
365
+ language: languageForPath(filePath),
366
+ content: redacted.content,
367
+ truncated: false,
368
+ redacted: redacted.redacted
369
+ };
370
+ }
371
+ function fileViewStatus(error) {
372
+ if (/outside|Missing|Repository/.test(error))
373
+ return 400;
374
+ if (/does not exist/.test(error))
375
+ return 404;
376
+ if (/larger|Binary|not a file/.test(error))
377
+ return 415;
378
+ return 400;
379
+ }
380
+ async function readJsonBody(req) {
381
+ const chunks = [];
382
+ let size = 0;
383
+ for await (const chunk of req) {
384
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
385
+ size += buffer.length;
386
+ if (size > MAX_JSON_BODY_BYTES)
387
+ throw new Error(`JSON body exceeds ${MAX_JSON_BODY_BYTES} bytes`);
388
+ chunks.push(buffer);
389
+ }
390
+ if (chunks.length === 0)
391
+ return {};
392
+ try {
393
+ return JSON.parse(Buffer.concat(chunks).toString("utf8"));
394
+ }
395
+ catch {
396
+ return {};
397
+ }
398
+ }
399
+ function parseContextPackBody(body) {
400
+ if (typeof body.id !== "string" || typeof body.name !== "string" || !Array.isArray(body.items))
401
+ return undefined;
402
+ const now = new Date().toISOString();
403
+ const items = body.items.filter(isContextPackItem);
404
+ if (items.length !== body.items.length)
405
+ return undefined;
406
+ return {
407
+ id: body.id,
408
+ name: body.name,
409
+ createdAt: typeof body.createdAt === "string" ? body.createdAt : now,
410
+ updatedAt: typeof body.updatedAt === "string" ? body.updatedAt : now,
411
+ includeRawTranscript: body.includeRawTranscript === true,
412
+ items
413
+ };
414
+ }
415
+ function isContextPackItem(value) {
416
+ if (!value || typeof value !== "object")
417
+ return false;
418
+ const item = value;
419
+ return (typeof item.id === "string" &&
420
+ typeof item.blockId === "string" &&
421
+ typeof item.order === "number" &&
422
+ typeof item.enabled === "boolean" &&
423
+ isContextBlock(item.block));
424
+ }
425
+ function isContextBlock(value) {
426
+ if (!value || typeof value !== "object")
427
+ return false;
428
+ const block = value;
429
+ const provenance = block.provenance;
430
+ return (typeof block.id === "string" &&
431
+ typeof block.sourceHandoffId === "string" &&
432
+ typeof block.sourceTask === "string" &&
433
+ typeof block.sourceCreatedAt === "string" &&
434
+ isContextBlockCategory(block.category) &&
435
+ typeof block.title === "string" &&
436
+ typeof block.text === "string" &&
437
+ typeof block.estimatedChars === "number" &&
438
+ Boolean(provenance) &&
439
+ isProvenanceKind(provenance?.kind) &&
440
+ isConfidence(provenance?.confidence) &&
441
+ typeof provenance?.source === "string");
442
+ }
443
+ function isContextBlockCategory(value) {
444
+ return (value === "intent" ||
445
+ value === "instruction" ||
446
+ value === "decision" ||
447
+ value === "constraint" ||
448
+ value === "verification" ||
449
+ value === "risk" ||
450
+ value === "next-action" ||
451
+ value === "changed-file" ||
452
+ value === "transcript");
453
+ }
454
+ function isProvenanceKind(value) {
455
+ return value === "user-authored" || value === "transcript-derived" || value === "diff-derived" || value === "command-derived" || value === "ai-inferred";
456
+ }
457
+ function isConfidence(value) {
458
+ return value === "high" || value === "medium" || value === "low";
459
+ }
460
+ export function resolveSafeRepoPath(repoPath, filePath) {
461
+ if (!repoPath || !filePath)
462
+ return { ok: false, error: "Missing repoPath or path" };
463
+ const repo = resolve(repoPath);
464
+ if (!existsSync(repo))
465
+ return { ok: false, error: "Repository path does not exist" };
466
+ if (isAbsolute(filePath)) {
467
+ const absoluteRelative = relative(repo, resolve(filePath));
468
+ if (absoluteRelative.startsWith("..") || isAbsolute(absoluteRelative))
469
+ return { ok: false, error: "File is outside the repository" };
470
+ return { ok: true, path: resolve(filePath) };
471
+ }
472
+ const fullPath = resolve(repo, filePath);
473
+ const rel = relative(repo, fullPath);
474
+ if (rel.startsWith("..") || isAbsolute(rel))
475
+ return { ok: false, error: "File is outside the repository" };
476
+ return { ok: true, path: fullPath };
477
+ }
478
+ function isBinaryFile(path, buffer) {
479
+ if (/\.(png|jpe?g|gif|webp|ico|pdf|zip|gz|tar|tgz|woff2?|ttf|otf|mp4|mov|mp3|wasm|sqlite|db)$/i.test(path))
480
+ return true;
481
+ const sample = buffer.subarray(0, Math.min(buffer.length, 8192));
482
+ return sample.includes(0);
483
+ }
484
+ function languageForPath(path) {
485
+ switch (extname(path).toLowerCase()) {
486
+ case ".ts":
487
+ return "typescript";
488
+ case ".tsx":
489
+ return "tsx";
490
+ case ".js":
491
+ case ".mjs":
492
+ case ".cjs":
493
+ return "javascript";
494
+ case ".jsx":
495
+ return "jsx";
496
+ case ".json":
497
+ return "json";
498
+ case ".css":
499
+ return "css";
500
+ case ".html":
501
+ return "html";
502
+ case ".md":
503
+ case ".mdx":
504
+ return "markdown";
505
+ case ".sql":
506
+ return "sql";
507
+ case ".py":
508
+ return "python";
509
+ case ".go":
510
+ return "go";
511
+ case ".rs":
512
+ return "rust";
513
+ case ".yml":
514
+ case ".yaml":
515
+ return "yaml";
516
+ case ".toml":
517
+ return "toml";
518
+ case ".sh":
519
+ return "shell";
520
+ default:
521
+ return "text";
522
+ }
523
+ }
524
+ function redactSensitivePreview(path, content) {
525
+ if (!/(^|\/)\.env(?:\.|$)|\.env\./i.test(path))
526
+ return { content, redacted: false };
527
+ let redacted = false;
528
+ const next = content.replace(/^(\s*(?:[A-Z0-9_]*(?:KEY|TOKEN|SECRET|PASSWORD|DATABASE_URL|URL|DSN)[A-Z0-9_]*)\s*=\s*)(.+)$/gim, (_match, prefix, value) => {
529
+ if (!value || value.trim() === "" || value.trim().startsWith("#"))
530
+ return `${prefix}${value}`;
531
+ redacted = true;
532
+ return `${prefix}[redacted]`;
533
+ });
534
+ return { content: next, redacted };
535
+ }
536
+ function openLocalFile(path, line, mode) {
537
+ const editor = process.env.CTXPOOL_EDITOR;
538
+ const editorTarget = line ? `${path}:${line}` : path;
539
+ const candidates = mode === "reveal"
540
+ ? process.platform === "darwin"
541
+ ? [{ cmd: "open", args: ["-R", path], method: "open -R" }]
542
+ : [{ cmd: "xdg-open", args: [dirname(path)], method: "xdg-open parent" }]
543
+ : [
544
+ ...(editor ? [{ cmd: editor, args: [editorTarget], method: "CTXPOOL_EDITOR" }] : []),
545
+ { cmd: "code", args: ["-g", editorTarget], method: "code -g" },
546
+ { cmd: "cursor", args: ["-g", editorTarget], method: "cursor -g" },
547
+ ...(process.platform === "darwin" ? [{ cmd: "open", args: [path], method: "open" }] : [{ cmd: "xdg-open", args: [path], method: "xdg-open" }])
548
+ ];
549
+ for (const candidate of candidates) {
550
+ const result = spawnSync(candidate.cmd, candidate.args, { stdio: "ignore" });
551
+ if (!result.error && (result.status === 0 || result.status === null))
552
+ return { ok: true, method: candidate.method };
553
+ }
554
+ return { ok: false, error: "No local opener succeeded" };
555
+ }
556
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC3I,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,mBAAmB,GAAG,GAAG,GAAG,IAAI,CAAC;AACvC,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC;AAyBxC,MAAM,UAAU,sBAAsB,CAAC,IAA6B;IAClE,OAAO,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAAqB,EAAE;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;IAE/G,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;AACtH,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CAAC,MAAuC,EAAE,IAAY,EAAE,IAAY;IACjF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;YACpD,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAoB,EAAE,GAAmB;IAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;IAEnC,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,qBAAqB,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACrD,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,oBAAoB,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK;gBAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACzF,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACnF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC;YACjF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,MAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC;YAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,YAAY,IAAI,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACvF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvF,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI;gBAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACrH,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACnD,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAC1C,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK;gBAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAC1F,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC/F,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzF,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO;gBAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnH,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACvF,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO;gBAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACxE,MAAM,oBAAoB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,MAAM,CAAC;YACrF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,uBAAuB,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACpG,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC;YAClF,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACnG,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC,CAAC;QACpI,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACxD,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC,CAAC;QACpI,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAC3G,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;QAAE,OAAO;IAClD,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IAEhF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IAClE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAC7E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,IAAY;IACjD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACpE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,IAAY;IACjD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;IACnE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAqC;IAClE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IACvG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAoC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,OAAO,CAAC;AAC5G,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC;IACpG,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAmB;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF,OAAO,QAAQ,CACb,GAAG,EACH,wXAAwX,CACzX,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,GAAmB;IAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACpF,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,KAAK,CAAC;IAClC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/D,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,0BAA0B,CAAC;QACpC,KAAK,KAAK;YACR,OAAO,gCAAgC,CAAC;QAC1C,KAAK,MAAM;YACT,OAAO,yBAAyB,CAAC;QACnC,KAAK,MAAM;YACT,OAAO,eAAe,CAAC;QACzB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,YAAY,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,YAAY,CAAC;QACtB;YACE,OAAO,0BAA0B,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,QAAgB;IACpE,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAEvG,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IACvF,IAAI,KAAK,CAAC,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,uBAAuB,mBAAmB,QAAQ,EAAE,CAAC;IACpH,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IAEtI,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI,CAAC,IAAI;QACvB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;QACnC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACzD,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC7C,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACvD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAoB;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC;QACtB,IAAI,IAAI,GAAG,mBAAmB;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,mBAAmB,QAAQ,CAAC,CAAC;QAClG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAA6B;IACzD,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACzD,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;QACpE,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;QACpE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,KAAK,IAAI;QACxD,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,OAAO,CACL,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;QAC3B,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAChC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAC9B,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS;QACjC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,KAAK,GAAG,KAAgC,CAAC;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAiD,CAAC;IAC3E,OAAO,CACL,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ;QACzC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ;QACzC,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;QACxC,OAAO,CAAC,UAAU,CAAC;QACnB,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC;QAClC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC;QACpC,OAAO,UAAU,EAAE,MAAM,KAAK,QAAQ,CACvC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,CACL,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,aAAa;QACvB,KAAK,KAAK,UAAU;QACpB,KAAK,KAAK,YAAY;QACtB,KAAK,KAAK,cAAc;QACxB,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,aAAa;QACvB,KAAK,KAAK,cAAc;QACxB,KAAK,KAAK,YAAY,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,oBAAoB,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,iBAAiB,IAAI,KAAK,KAAK,aAAa,CAAC;AAC3J,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,KAAK,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,QAAgB;IACpE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;IACrF,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,gBAAgB,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;QACrI,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;IAC3G,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,MAAc;IAChD,IAAI,2FAA2F,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxH,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACpC,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,UAAU,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;QACd,KAAK,KAAK;YACR,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK;YACR,OAAO,OAAO,CAAC;QACjB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,OAAe;IAC3D,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACpF,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,iGAAiG,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE;QACxK,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC;QAC9F,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,GAAG,MAAM,YAAY,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,IAAwB,EAAE,IAAuB;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,UAAU,GACd,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC7B,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC1D,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC3E,CAAC,CAAC;YACE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YAC9D,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;YAClE,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;SAC/I,CAAC;IAER,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IACtH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;AAC3D,CAAC"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare function slugify(value: string): string;
2
+ export declare function hashText(value: string): string;
3
+ export declare function runOptional(cmd: string, args: string[], cwd?: string): string;
4
+ export declare function unique(values: string[]): string[];
5
+ export declare function limit(values: string[], count: number): string[];
6
+ export declare function findRecentFiles(root: string, maxFiles?: number): string[];