issue-flow 0.12.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -274
- package/dist/agent-OX3KPHE4.js +30 -0
- package/dist/{analyze-OEET7KGE.js → analyze-WIND2SEB.js} +31 -16
- package/dist/analyze-WIND2SEB.js.map +1 -0
- package/dist/{apply-ZIA3C52S.js → apply-JNOI2LR4.js} +18 -7
- package/dist/{apply-ZIA3C52S.js.map → apply-JNOI2LR4.js.map} +1 -1
- package/dist/bench-B4VZON7E.js +910 -0
- package/dist/bench-B4VZON7E.js.map +1 -0
- package/dist/{chunk-FADTCQGM.js → chunk-2IQ6M4ZE.js} +94 -32
- package/dist/chunk-2IQ6M4ZE.js.map +1 -0
- package/dist/chunk-3BWZO4YI.js +141 -0
- package/dist/chunk-3BWZO4YI.js.map +1 -0
- package/dist/chunk-3WFZETIM.js +163 -0
- package/dist/chunk-3WFZETIM.js.map +1 -0
- package/dist/chunk-67YIU2VB.js +362 -0
- package/dist/chunk-67YIU2VB.js.map +1 -0
- package/dist/{chunk-QCPGHBSZ.js → chunk-6BENHR2I.js} +63 -21
- package/dist/chunk-6BENHR2I.js.map +1 -0
- package/dist/{chunk-BYZDPR7N.js → chunk-6QYMSNVA.js} +194 -235
- package/dist/chunk-6QYMSNVA.js.map +1 -0
- package/dist/{chunk-Y5ZDJ4PJ.js → chunk-76MMPJ53.js} +20 -10
- package/dist/chunk-76MMPJ53.js.map +1 -0
- package/dist/chunk-7Z4Y3VKM.js +26 -0
- package/dist/chunk-7Z4Y3VKM.js.map +1 -0
- package/dist/{chunk-3QHK4YQA.js → chunk-B72RQZBV.js} +346 -119
- package/dist/chunk-B72RQZBV.js.map +1 -0
- package/dist/chunk-BEZ5BA5U.js +625 -0
- package/dist/chunk-BEZ5BA5U.js.map +1 -0
- package/dist/chunk-BRCNQXYQ.js +74 -0
- package/dist/chunk-BRCNQXYQ.js.map +1 -0
- package/dist/chunk-CGKLE6WR.js +1203 -0
- package/dist/chunk-CGKLE6WR.js.map +1 -0
- package/dist/chunk-CRGIQFUQ.js +83 -0
- package/dist/chunk-CRGIQFUQ.js.map +1 -0
- package/dist/{chunk-NS6R37II.js → chunk-F6TOYSYY.js} +141 -12
- package/dist/chunk-F6TOYSYY.js.map +1 -0
- package/dist/chunk-G5EK2XRN.js +25 -0
- package/dist/chunk-G5EK2XRN.js.map +1 -0
- package/dist/chunk-HAKDLR6N.js +134 -0
- package/dist/chunk-HAKDLR6N.js.map +1 -0
- package/dist/chunk-J3SOTUVI.js +298 -0
- package/dist/chunk-J3SOTUVI.js.map +1 -0
- package/dist/chunk-JN6D3MY6.js +30 -0
- package/dist/chunk-JN6D3MY6.js.map +1 -0
- package/dist/{chunk-LAFNLLQP.js → chunk-KMRFRXIT.js} +5 -5
- package/dist/chunk-KT7JKOXB.js +72 -0
- package/dist/chunk-KT7JKOXB.js.map +1 -0
- package/dist/chunk-L6HSKTQE.js +77 -0
- package/dist/chunk-L6HSKTQE.js.map +1 -0
- package/dist/chunk-LBGHI4S2.js +1264 -0
- package/dist/chunk-LBGHI4S2.js.map +1 -0
- package/dist/chunk-LEW4QM74.js +180 -0
- package/dist/chunk-LEW4QM74.js.map +1 -0
- package/dist/{chunk-FJP3UQGD.js → chunk-LFEQIZLB.js} +115 -20
- package/dist/chunk-LFEQIZLB.js.map +1 -0
- package/dist/chunk-OOVG2KBY.js +77 -0
- package/dist/chunk-OOVG2KBY.js.map +1 -0
- package/dist/{chunk-56KS3TFQ.js → chunk-OR43364P.js} +115 -160
- package/dist/chunk-OR43364P.js.map +1 -0
- package/dist/chunk-P3LRUNC6.js +16 -0
- package/dist/chunk-P3LRUNC6.js.map +1 -0
- package/dist/{chunk-TSOLWK7Y.js → chunk-PBTA3QQX.js} +8 -7
- package/dist/{chunk-TSOLWK7Y.js.map → chunk-PBTA3QQX.js.map} +1 -1
- package/dist/{chunk-MJULIKQU.js → chunk-PHW2YV6N.js} +23 -47
- package/dist/chunk-PHW2YV6N.js.map +1 -0
- package/dist/{chunk-73ATPIYX.js → chunk-PZTWU277.js} +36 -71
- package/dist/chunk-PZTWU277.js.map +1 -0
- package/dist/{chunk-M5UCXTIT.js → chunk-QD4VOILZ.js} +22 -18
- package/dist/chunk-QD4VOILZ.js.map +1 -0
- package/dist/chunk-QJ5UZAH5.js +2718 -0
- package/dist/chunk-QJ5UZAH5.js.map +1 -0
- package/dist/chunk-QK7WUO7A.js +283 -0
- package/dist/chunk-QK7WUO7A.js.map +1 -0
- package/dist/{chunk-A4SLHOW7.js → chunk-QZVKRDJY.js} +27 -19
- package/dist/chunk-QZVKRDJY.js.map +1 -0
- package/dist/chunk-REO3PXXO.js +71 -0
- package/dist/chunk-REO3PXXO.js.map +1 -0
- package/dist/{chunk-EZATO3DW.js → chunk-RVO7L4FX.js} +594 -17
- package/dist/chunk-RVO7L4FX.js.map +1 -0
- package/dist/{chunk-XQUSIEKA.js → chunk-SZMHCEYV.js} +63 -14
- package/dist/chunk-SZMHCEYV.js.map +1 -0
- package/dist/chunk-TYRNTSPJ.js +243 -0
- package/dist/chunk-TYRNTSPJ.js.map +1 -0
- package/dist/chunk-UJ3L2MS7.js +238 -0
- package/dist/chunk-UJ3L2MS7.js.map +1 -0
- package/dist/chunk-V7MO5EDS.js +120 -0
- package/dist/chunk-V7MO5EDS.js.map +1 -0
- package/dist/chunk-WB2X37MO.js +415 -0
- package/dist/chunk-WB2X37MO.js.map +1 -0
- package/dist/{chunk-NTMMF5UD.js → chunk-X44FKNKP.js} +525 -252
- package/dist/chunk-X44FKNKP.js.map +1 -0
- package/dist/chunk-XEYH6ZZI.js +289 -0
- package/dist/chunk-XEYH6ZZI.js.map +1 -0
- package/dist/cli.js +267 -44
- package/dist/cli.js.map +1 -1
- package/dist/{config-PRJGWW7J.js → config-HMFMCY2M.js} +31 -5
- package/dist/contract-JH2WBIO6.js +8 -0
- package/dist/conventions-NJF2OPVQ.js +146 -0
- package/dist/conventions-NJF2OPVQ.js.map +1 -0
- package/dist/diagnostics-THH42ZMP.js +23 -0
- package/dist/execute-KFNNZZHI.js +35 -0
- package/dist/{generate-EGB4KV2B.js → generate-FW5C6NP7.js} +37 -20
- package/dist/{generate-EGB4KV2B.js.map → generate-FW5C6NP7.js.map} +1 -1
- package/dist/git-W72QQ6GT.js +33 -0
- package/dist/init-HTN4V67Q.js +24 -0
- package/dist/{operations-BYT626KQ.js → operations-BCFOBH42.js} +27 -15
- package/dist/{operations-BYT626KQ.js.map → operations-BCFOBH42.js.map} +1 -1
- package/dist/permissions-4AKNQZHK.js +18 -0
- package/dist/plan-SIZLGA4V.js +34 -0
- package/dist/{policy-6S4GFC76.js → policy-DT6Q6ZVM.js} +20 -6
- package/dist/policy-DT6Q6ZVM.js.map +1 -0
- package/dist/pr-OMWCGUOW.js +39 -0
- package/dist/pr-review-N24CZPKR.js +32 -0
- package/dist/pr-review-N24CZPKR.js.map +1 -0
- package/dist/prd-5OFTZAHJ.js +33 -0
- package/dist/prd-5OFTZAHJ.js.map +1 -0
- package/dist/ps-RFORTCUD.js +93 -0
- package/dist/ps-RFORTCUD.js.map +1 -0
- package/dist/recorder-KCCPMKQG.js +32 -0
- package/dist/recorder-KCCPMKQG.js.map +1 -0
- package/dist/registry-GLPXOMFG.js +15 -0
- package/dist/registry-GLPXOMFG.js.map +1 -0
- package/dist/{resume-PPCNQVVV.js → resume-M5RLKP4I.js} +55 -34
- package/dist/{resume-PPCNQVVV.js.map → resume-M5RLKP4I.js.map} +1 -1
- package/dist/review-YM4JAABY.js +35 -0
- package/dist/review-YM4JAABY.js.map +1 -0
- package/dist/routing-NNT5WKGX.js +94 -0
- package/dist/routing-NNT5WKGX.js.map +1 -0
- package/dist/run-PZUKHPQK.js +54 -0
- package/dist/run-PZUKHPQK.js.map +1 -0
- package/dist/session-publisher-T7EI3CIP.js +11 -0
- package/dist/session-publisher-T7EI3CIP.js.map +1 -0
- package/dist/{state-manager-2EDVDBAR.js → state-manager-GQH32C44.js} +4 -2
- package/dist/state-manager-GQH32C44.js.map +1 -0
- package/dist/usage-V2CHE5PY.js +177 -0
- package/dist/usage-V2CHE5PY.js.map +1 -0
- package/dist/{web-EF5WIIGG.js → web-EA3KGNFN.js} +45 -30
- package/dist/web-EA3KGNFN.js.map +1 -0
- package/package.json +6 -2
- package/prompts/execute.md +7 -8
- package/prompts/plan.md +4 -5
- package/prompts/pr.md +2 -2
- package/web/AGENTS.md +152 -13
- package/web/public/app.css +380 -109
- package/web/public/app.js +525 -25
- package/web/public/index.html +68 -1
- package/dist/analyze-OEET7KGE.js.map +0 -1
- package/dist/chunk-3QHK4YQA.js.map +0 -1
- package/dist/chunk-42PJFMAR.js +0 -605
- package/dist/chunk-42PJFMAR.js.map +0 -1
- package/dist/chunk-4JSOYE4G.js +0 -368
- package/dist/chunk-4JSOYE4G.js.map +0 -1
- package/dist/chunk-56KS3TFQ.js.map +0 -1
- package/dist/chunk-73ATPIYX.js.map +0 -1
- package/dist/chunk-A4SLHOW7.js.map +0 -1
- package/dist/chunk-BAUPQXPE.js +0 -173
- package/dist/chunk-BAUPQXPE.js.map +0 -1
- package/dist/chunk-BYZDPR7N.js.map +0 -1
- package/dist/chunk-CD5ULRVC.js +0 -615
- package/dist/chunk-CD5ULRVC.js.map +0 -1
- package/dist/chunk-DIDUVL6O.js +0 -1365
- package/dist/chunk-DIDUVL6O.js.map +0 -1
- package/dist/chunk-EZATO3DW.js.map +0 -1
- package/dist/chunk-FADTCQGM.js.map +0 -1
- package/dist/chunk-FJP3UQGD.js.map +0 -1
- package/dist/chunk-LWRSMTTZ.js +0 -18
- package/dist/chunk-LWRSMTTZ.js.map +0 -1
- package/dist/chunk-M5UCXTIT.js.map +0 -1
- package/dist/chunk-M66SJHQQ.js +0 -206
- package/dist/chunk-M66SJHQQ.js.map +0 -1
- package/dist/chunk-MJULIKQU.js.map +0 -1
- package/dist/chunk-NS6R37II.js.map +0 -1
- package/dist/chunk-NTMMF5UD.js.map +0 -1
- package/dist/chunk-QCPGHBSZ.js.map +0 -1
- package/dist/chunk-XQUSIEKA.js.map +0 -1
- package/dist/chunk-Y5ZDJ4PJ.js.map +0 -1
- package/dist/execute-XBNVL753.js +0 -18
- package/dist/init-AJHCXJBP.js +0 -10
- package/dist/plan-QOZ3RIO6.js +0 -21
- package/dist/policy-6S4GFC76.js.map +0 -1
- package/dist/pr-EBBHD2ZX.js +0 -26
- package/dist/pr-review-VVMW5PO4.js +0 -20
- package/dist/prd-JQSZF7PR.js +0 -21
- package/dist/review-3F6MARWH.js +0 -19
- package/dist/run-RXE5GDQO.js +0 -36
- package/dist/web-EF5WIIGG.js.map +0 -1
- /package/dist/{config-PRJGWW7J.js.map → agent-OX3KPHE4.js.map} +0 -0
- /package/dist/{chunk-LAFNLLQP.js.map → chunk-KMRFRXIT.js.map} +0 -0
- /package/dist/{execute-XBNVL753.js.map → config-HMFMCY2M.js.map} +0 -0
- /package/dist/{init-AJHCXJBP.js.map → contract-JH2WBIO6.js.map} +0 -0
- /package/dist/{plan-QOZ3RIO6.js.map → diagnostics-THH42ZMP.js.map} +0 -0
- /package/dist/{pr-EBBHD2ZX.js.map → execute-KFNNZZHI.js.map} +0 -0
- /package/dist/{pr-review-VVMW5PO4.js.map → git-W72QQ6GT.js.map} +0 -0
- /package/dist/{prd-JQSZF7PR.js.map → init-HTN4V67Q.js.map} +0 -0
- /package/dist/{review-3F6MARWH.js.map → permissions-4AKNQZHK.js.map} +0 -0
- /package/dist/{run-RXE5GDQO.js.map → plan-SIZLGA4V.js.map} +0 -0
- /package/dist/{state-manager-2EDVDBAR.js.map → pr-OMWCGUOW.js.map} +0 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/verify/contract.ts
|
|
4
|
+
import { existsSync } from "fs";
|
|
5
|
+
import { readFile } from "fs/promises";
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
var DISCOVERABLE = ["typecheck", "lint", "test"];
|
|
8
|
+
async function discoverFromMakefile(cwd) {
|
|
9
|
+
const makePath = join(cwd, "Makefile");
|
|
10
|
+
if (!existsSync(makePath)) return [];
|
|
11
|
+
let text;
|
|
12
|
+
try {
|
|
13
|
+
text = await readFile(makePath, "utf-8");
|
|
14
|
+
} catch {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const checks = [];
|
|
18
|
+
for (const id of DISCOVERABLE) {
|
|
19
|
+
const pattern = new RegExp(`^${id}\\s*:`, "m");
|
|
20
|
+
if (pattern.test(text)) {
|
|
21
|
+
checks.push({ id, run: `make ${id}`, fatal: true });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return checks;
|
|
25
|
+
}
|
|
26
|
+
async function discoverFromComposer(cwd) {
|
|
27
|
+
const composerPath = join(cwd, "composer.json");
|
|
28
|
+
if (!existsSync(composerPath)) return [];
|
|
29
|
+
try {
|
|
30
|
+
const raw = JSON.parse(await readFile(composerPath, "utf-8"));
|
|
31
|
+
if (!isRecord(raw) || !isRecord(raw.scripts)) return [];
|
|
32
|
+
if (typeof raw.scripts.test === "string") {
|
|
33
|
+
return [{ id: "test", run: "composer test", fatal: true }];
|
|
34
|
+
}
|
|
35
|
+
} catch {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
function isRecord(value) {
|
|
41
|
+
return typeof value === "object" && value !== null;
|
|
42
|
+
}
|
|
43
|
+
async function resolveContract(input) {
|
|
44
|
+
if (input.declared !== void 0 && input.declared !== null) {
|
|
45
|
+
return { checks: input.declared, source: input.declared.length === 0 ? "empty" : "declared" };
|
|
46
|
+
}
|
|
47
|
+
const fromPackage = await discoverFromPackage(input.cwd);
|
|
48
|
+
if (fromPackage.length > 0) return { checks: fromPackage, source: "discovered" };
|
|
49
|
+
const fromMake = await discoverFromMakefile(input.cwd);
|
|
50
|
+
if (fromMake.length > 0) return { checks: fromMake, source: "discovered" };
|
|
51
|
+
const fromComposer = await discoverFromComposer(input.cwd);
|
|
52
|
+
if (fromComposer.length > 0) return { checks: fromComposer, source: "discovered" };
|
|
53
|
+
return { checks: [], source: "empty" };
|
|
54
|
+
}
|
|
55
|
+
async function discoverFromPackage(cwd) {
|
|
56
|
+
const pkgPath = join(cwd, "package.json");
|
|
57
|
+
if (!existsSync(pkgPath)) return [];
|
|
58
|
+
let scripts = {};
|
|
59
|
+
try {
|
|
60
|
+
const raw = JSON.parse(await readFile(pkgPath, "utf-8"));
|
|
61
|
+
if (isRecord(raw) && isRecord(raw.scripts)) scripts = raw.scripts;
|
|
62
|
+
} catch {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
const checks = [];
|
|
66
|
+
for (const id of DISCOVERABLE) {
|
|
67
|
+
if (typeof scripts[id] === "string") {
|
|
68
|
+
checks.push({ id, run: id === "test" ? "npm test" : `npm run ${id}`, fatal: true });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return checks;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export {
|
|
75
|
+
resolveContract
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=chunk-L6HSKTQE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/verify/contract.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { AcceptanceCheck, AcceptanceContract } from './types.js';\n\nconst DISCOVERABLE = ['typecheck', 'lint', 'test'] as const;\n\nasync function discoverFromMakefile(cwd: string): Promise<AcceptanceCheck[]> {\n const makePath = join(cwd, 'Makefile');\n if (!existsSync(makePath)) return [];\n let text: string;\n try {\n text = await readFile(makePath, 'utf-8');\n } catch {\n return [];\n }\n const checks: AcceptanceCheck[] = [];\n for (const id of DISCOVERABLE) {\n const pattern = new RegExp(`^${id}\\\\s*:`, 'm');\n if (pattern.test(text)) {\n checks.push({ id, run: `make ${id}`, fatal: true });\n }\n }\n return checks;\n}\n\nasync function discoverFromComposer(cwd: string): Promise<AcceptanceCheck[]> {\n const composerPath = join(cwd, 'composer.json');\n if (!existsSync(composerPath)) return [];\n try {\n const raw: unknown = JSON.parse(await readFile(composerPath, 'utf-8'));\n if (!isRecord(raw) || !isRecord(raw.scripts)) return [];\n if (typeof raw.scripts.test === 'string') {\n return [{ id: 'test', run: 'composer test', fatal: true }];\n }\n } catch {\n return [];\n }\n return [];\n}\n\nexport interface ResolveContractInput {\n cwd: string;\n declared?: AcceptanceCheck[] | null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport async function resolveContract(input: ResolveContractInput): Promise<AcceptanceContract> {\n if (input.declared !== undefined && input.declared !== null) {\n return { checks: input.declared, source: input.declared.length === 0 ? 'empty' : 'declared' };\n }\n\n const fromPackage = await discoverFromPackage(input.cwd);\n if (fromPackage.length > 0) return { checks: fromPackage, source: 'discovered' };\n const fromMake = await discoverFromMakefile(input.cwd);\n if (fromMake.length > 0) return { checks: fromMake, source: 'discovered' };\n const fromComposer = await discoverFromComposer(input.cwd);\n if (fromComposer.length > 0) return { checks: fromComposer, source: 'discovered' };\n return { checks: [], source: 'empty' };\n}\n\nasync function discoverFromPackage(cwd: string): Promise<AcceptanceCheck[]> {\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) return [];\n let scripts: Record<string, unknown> = {};\n try {\n const raw: unknown = JSON.parse(await readFile(pkgPath, 'utf-8'));\n if (isRecord(raw) && isRecord(raw.scripts)) scripts = raw.scripts;\n } catch {\n return [];\n }\n\n const checks: AcceptanceCheck[] = [];\n for (const id of DISCOVERABLE) {\n if (typeof scripts[id] === 'string') {\n checks.push({ id, run: id === 'test' ? 'npm test' : `npm run ${id}`, fatal: true });\n }\n }\n return checks;\n}\n"],"mappings":";;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAGrB,IAAM,eAAe,CAAC,aAAa,QAAQ,MAAM;AAEjD,eAAe,qBAAqB,KAAyC;AAC3E,QAAM,WAAW,KAAK,KAAK,UAAU;AACrC,MAAI,CAAC,WAAW,QAAQ,EAAG,QAAO,CAAC;AACnC,MAAI;AACJ,MAAI;AACF,WAAO,MAAM,SAAS,UAAU,OAAO;AAAA,EACzC,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACA,QAAM,SAA4B,CAAC;AACnC,aAAW,MAAM,cAAc;AAC7B,UAAM,UAAU,IAAI,OAAO,IAAI,EAAE,SAAS,GAAG;AAC7C,QAAI,QAAQ,KAAK,IAAI,GAAG;AACtB,aAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,EAAE,IAAI,OAAO,KAAK,CAAC;AAAA,IACpD;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,qBAAqB,KAAyC;AAC3E,QAAM,eAAe,KAAK,KAAK,eAAe;AAC9C,MAAI,CAAC,WAAW,YAAY,EAAG,QAAO,CAAC;AACvC,MAAI;AACF,UAAM,MAAe,KAAK,MAAM,MAAM,SAAS,cAAc,OAAO,CAAC;AACrE,QAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,EAAG,QAAO,CAAC;AACtD,QAAI,OAAO,IAAI,QAAQ,SAAS,UAAU;AACxC,aAAO,CAAC,EAAE,IAAI,QAAQ,KAAK,iBAAiB,OAAO,KAAK,CAAC;AAAA,IAC3D;AAAA,EACF,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACA,SAAO,CAAC;AACV;AAOA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,eAAsB,gBAAgB,OAA0D;AAC9F,MAAI,MAAM,aAAa,UAAa,MAAM,aAAa,MAAM;AAC3D,WAAO,EAAE,QAAQ,MAAM,UAAU,QAAQ,MAAM,SAAS,WAAW,IAAI,UAAU,WAAW;AAAA,EAC9F;AAEA,QAAM,cAAc,MAAM,oBAAoB,MAAM,GAAG;AACvD,MAAI,YAAY,SAAS,EAAG,QAAO,EAAE,QAAQ,aAAa,QAAQ,aAAa;AAC/E,QAAM,WAAW,MAAM,qBAAqB,MAAM,GAAG;AACrD,MAAI,SAAS,SAAS,EAAG,QAAO,EAAE,QAAQ,UAAU,QAAQ,aAAa;AACzE,QAAM,eAAe,MAAM,qBAAqB,MAAM,GAAG;AACzD,MAAI,aAAa,SAAS,EAAG,QAAO,EAAE,QAAQ,cAAc,QAAQ,aAAa;AACjF,SAAO,EAAE,QAAQ,CAAC,GAAG,QAAQ,QAAQ;AACvC;AAEA,eAAe,oBAAoB,KAAyC;AAC1E,QAAM,UAAU,KAAK,KAAK,cAAc;AACxC,MAAI,CAAC,WAAW,OAAO,EAAG,QAAO,CAAC;AAClC,MAAI,UAAmC,CAAC;AACxC,MAAI;AACF,UAAM,MAAe,KAAK,MAAM,MAAM,SAAS,SAAS,OAAO,CAAC;AAChE,QAAI,SAAS,GAAG,KAAK,SAAS,IAAI,OAAO,EAAG,WAAU,IAAI;AAAA,EAC5D,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,SAA4B,CAAC;AACnC,aAAW,MAAM,cAAc;AAC7B,QAAI,OAAO,QAAQ,EAAE,MAAM,UAAU;AACnC,aAAO,KAAK,EAAE,IAAI,KAAK,OAAO,SAAS,aAAa,WAAW,EAAE,IAAI,OAAO,KAAK,CAAC;AAAA,IACpF;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|