@nickmeriano/task 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -7
- package/dist/check.d.ts +42 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +364 -0
- package/dist/check.js.map +1 -0
- package/dist/check.test.d.ts +9 -0
- package/dist/check.test.d.ts.map +1 -0
- package/dist/check.test.js +209 -0
- package/dist/check.test.js.map +1 -0
- package/dist/claim.d.ts +56 -3
- package/dist/claim.d.ts.map +1 -1
- package/dist/claim.js +164 -9
- package/dist/claim.js.map +1 -1
- package/dist/claim.test.js +168 -14
- package/dist/claim.test.js.map +1 -1
- package/dist/cli.js +504 -93
- package/dist/cli.js.map +1 -1
- package/dist/file-store.d.ts +41 -15
- package/dist/file-store.d.ts.map +1 -1
- package/dist/file-store.js +197 -99
- package/dist/file-store.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/overview.d.ts +43 -0
- package/dist/overview.d.ts.map +1 -0
- package/dist/overview.js +53 -0
- package/dist/overview.js.map +1 -0
- package/dist/overview.test.d.ts +8 -0
- package/dist/overview.test.d.ts.map +1 -0
- package/dist/overview.test.js +47 -0
- package/dist/overview.test.js.map +1 -0
- package/dist/promote.test.d.ts +14 -0
- package/dist/promote.test.d.ts.map +1 -0
- package/dist/promote.test.js +106 -0
- package/dist/promote.test.js.map +1 -0
- package/dist/search.d.ts +32 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +66 -0
- package/dist/search.js.map +1 -0
- package/dist/search.test.d.ts +2 -0
- package/dist/search.test.d.ts.map +1 -0
- package/dist/search.test.js +53 -0
- package/dist/search.test.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -2
- package/dist/server.js.map +1 -1
- package/dist/store.d.ts +16 -50
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +0 -368
- package/dist/store.js.map +1 -1
- package/dist/store.test.d.ts +1 -2
- package/dist/store.test.d.ts.map +1 -1
- package/dist/store.test.js +77 -48
- package/dist/store.test.js.map +1 -1
- package/dist/ticket-doc.d.ts +55 -2
- package/dist/ticket-doc.d.ts.map +1 -1
- package/dist/ticket-doc.js +177 -7
- package/dist/ticket-doc.js.map +1 -1
- package/dist/types.d.ts +67 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +97 -31
- package/src/check.test.ts +271 -0
- package/src/check.ts +454 -0
- package/src/claim.test.ts +202 -14
- package/src/claim.ts +194 -10
- package/src/cli.ts +510 -89
- package/src/file-store.ts +217 -111
- package/src/index.ts +4 -2
- package/src/overview.test.ts +51 -0
- package/src/overview.ts +90 -0
- package/src/promote.test.ts +131 -0
- package/src/search.test.ts +64 -0
- package/src/search.ts +91 -0
- package/src/server.ts +11 -2
- package/src/store.test.ts +89 -57
- package/src/store.ts +18 -431
- package/src/ticket-doc.ts +210 -10
- package/src/types.ts +71 -14
- package/ui/dist/assets/{index-oJzomUDL.js → index-BJmOsOdR.js} +76 -76
- package/ui/dist/assets/index-BoqQlqSU.css +1 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-CXW8uT5f.css +0 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `task check` exists for the write paths the CLI never sees — git merges and
|
|
3
|
+
* hand-edits — so its tests are those: files written slightly wrong, links
|
|
4
|
+
* whose target one branch deleted, tickets a merge duplicated into the board
|
|
5
|
+
* *and* the archive. Plus the sharp edge fixed alongside it: unknown
|
|
6
|
+
* frontmatter keys now survive a rewrite instead of being dropped.
|
|
7
|
+
*/
|
|
8
|
+
import assert from "node:assert/strict";
|
|
9
|
+
import { test } from "node:test";
|
|
10
|
+
import { mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
11
|
+
import { tmpdir } from "node:os";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { checkBoards } from "./check.js";
|
|
14
|
+
import { initProject } from "./file-store.js";
|
|
15
|
+
import { parseTicket, serializeTicket } from "./ticket-doc.js";
|
|
16
|
+
function tempRoot() {
|
|
17
|
+
const dir = mkdtempSync(join(tmpdir(), "task-check-"));
|
|
18
|
+
process.on("exit", () => rmSync(dir, { recursive: true, force: true }));
|
|
19
|
+
return dir;
|
|
20
|
+
}
|
|
21
|
+
test("a board the CLI wrote is clean", () => {
|
|
22
|
+
const root = tempRoot();
|
|
23
|
+
const store = initProject(root, { name: "clean", prefix: "CLN" });
|
|
24
|
+
store.createGoal({ title: "Ship it", description: "the why" });
|
|
25
|
+
const a = store.create({ title: "First", description: "with a body", goal: "ship-it" });
|
|
26
|
+
const b = store.create({ title: "Second", status: "backlog", tags: ["x"] });
|
|
27
|
+
store.link(b.number, "blocked_by", a.number);
|
|
28
|
+
store.addComment(a.number, "hello", "claude");
|
|
29
|
+
store.update(a.number, { status: "done" });
|
|
30
|
+
store.archive(a.number);
|
|
31
|
+
const result = checkBoards(root, false);
|
|
32
|
+
assert.deepEqual(result.issues, []);
|
|
33
|
+
assert.equal(result.boards, 1);
|
|
34
|
+
assert.equal(result.files, 4); // two tickets + one comment + one goal
|
|
35
|
+
});
|
|
36
|
+
test("finds what merges and hand-edits leave behind, and --fix repairs the mechanical part", () => {
|
|
37
|
+
const root = tempRoot();
|
|
38
|
+
const store = initProject(root, { name: "rough", prefix: "RGH" });
|
|
39
|
+
const a = store.create({ title: "Kept", status: "todo" });
|
|
40
|
+
const b = store.create({ title: "Points at a ghost", status: "todo" });
|
|
41
|
+
store.create({ title: "Broken later", status: "todo" });
|
|
42
|
+
// A dangling reference: link b to a ticket, then lose the ticket the way a
|
|
43
|
+
// merge would — the directory vanishes without the store's delete cascade.
|
|
44
|
+
store.link(b.number, "blocked_by", a.number);
|
|
45
|
+
const ticketPath = (n) => join(root, ".task", "tickets", String(n), "ticket.md");
|
|
46
|
+
const bText = readFileSync(ticketPath(b.number), "utf8");
|
|
47
|
+
writeFileSync(ticketPath(b.number), bText.replace("blocked_by: [1]", "blocked_by: [1, 99, 99]"));
|
|
48
|
+
// A hand-edit that still parses but isn't canonical (bare goal string).
|
|
49
|
+
store.createGoal({ title: "Launch" });
|
|
50
|
+
const cText = readFileSync(ticketPath(3), "utf8");
|
|
51
|
+
writeFileSync(ticketPath(3), cText.replace("status: todo", "status: todo\ngoal: launch"));
|
|
52
|
+
// A file that doesn't parse at all.
|
|
53
|
+
mkdirSync(join(root, ".task", "tickets", "4"));
|
|
54
|
+
writeFileSync(ticketPath(4), "---\nstatus: todoo\nposition: 0\ncreated: x\nupdated: x\n---\n\n# Bad status\n");
|
|
55
|
+
const found = checkBoards(root, false);
|
|
56
|
+
const messages = found.issues.map((issue) => issue.message);
|
|
57
|
+
assert.ok(messages.some((m) => /RGH-99, which doesn't exist/.test(m)), "dangling ref reported");
|
|
58
|
+
assert.ok(messages.some((m) => /not in canonical form/.test(m)), "drift reported");
|
|
59
|
+
assert.ok(messages.some((m) => /invalid status "todoo"/.test(m)), "parse error reported");
|
|
60
|
+
assert.ok(messages.some((m) => /not a valid timestamp/.test(m)) === false, "unparseable file isn't double-reported");
|
|
61
|
+
const fixed = checkBoards(root, true);
|
|
62
|
+
assert.ok(fixed.fixed.length >= 2, "fix rewrote the repairable files");
|
|
63
|
+
// The dangling ref is pruned, the real one kept; the drift is normalized.
|
|
64
|
+
assert.match(readFileSync(ticketPath(b.number), "utf8"), /blocked_by: \[1\]\n/);
|
|
65
|
+
assert.match(readFileSync(ticketPath(3), "utf8"), /goal: "launch"/);
|
|
66
|
+
// What remains is exactly what needs a human: the unparseable file.
|
|
67
|
+
const after = checkBoards(root, false);
|
|
68
|
+
assert.deepEqual(after.issues.filter((issue) => issue.fixable), []);
|
|
69
|
+
assert.equal(after.issues.length, 1);
|
|
70
|
+
assert.match(after.issues[0].message, /invalid status/);
|
|
71
|
+
});
|
|
72
|
+
test("merge artifacts across the archive are reported, never auto-fixed", () => {
|
|
73
|
+
const root = tempRoot();
|
|
74
|
+
const store = initProject(root, { name: "dup", prefix: "DUP" });
|
|
75
|
+
const t = store.create({ title: "Archived on one branch" });
|
|
76
|
+
store.update(t.number, { status: "done" });
|
|
77
|
+
store.archive(t.number);
|
|
78
|
+
// The other branch kept editing it — the merge keeps both directories.
|
|
79
|
+
mkdirSync(join(root, ".task", "tickets", String(t.number)), { recursive: true });
|
|
80
|
+
writeFileSync(join(root, ".task", "tickets", String(t.number), "ticket.md"), readFileSync(join(root, ".task", "archive", String(t.number), "ticket.md")));
|
|
81
|
+
const result = checkBoards(root, true);
|
|
82
|
+
assert.ok(result.issues.some((issue) => /also exists in tickets\//.test(issue.message)));
|
|
83
|
+
assert.deepEqual(result.fixed, []);
|
|
84
|
+
});
|
|
85
|
+
test("a ticket parked in the archive while still open is flagged", () => {
|
|
86
|
+
const root = tempRoot();
|
|
87
|
+
const store = initProject(root, { name: "arc", prefix: "ARC" });
|
|
88
|
+
const t = store.create({ title: "Half archived", status: "todo" });
|
|
89
|
+
renameSync(join(root, ".task", "tickets", String(t.number)), (mkdirSync(join(root, ".task", "archive"), { recursive: true }),
|
|
90
|
+
join(root, ".task", "archive", String(t.number))));
|
|
91
|
+
const result = checkBoards(root, false);
|
|
92
|
+
assert.ok(result.issues.some((issue) => /archived but still todo/.test(issue.message)));
|
|
93
|
+
});
|
|
94
|
+
test("unknown frontmatter keys are reported — and survive a rewrite round-trip", () => {
|
|
95
|
+
const root = tempRoot();
|
|
96
|
+
const store = initProject(root, { name: "extra", prefix: "EXT" });
|
|
97
|
+
const t = store.create({ title: "Carries a custom field", status: "todo" });
|
|
98
|
+
const path = join(root, ".task", "tickets", String(t.number), "ticket.md");
|
|
99
|
+
writeFileSync(path, readFileSync(path, "utf8").replace("status: todo", 'status: todo\nowner: "nick"'));
|
|
100
|
+
const result = checkBoards(root, false);
|
|
101
|
+
assert.ok(result.issues.some((issue) => /unknown frontmatter key "owner"/.test(issue.message)));
|
|
102
|
+
// The sharp edge this fixed: an ordinary update used to drop the key.
|
|
103
|
+
store.update(t.number, { title: "Renamed" });
|
|
104
|
+
const text = readFileSync(path, "utf8");
|
|
105
|
+
assert.match(text, /owner: "nick"/);
|
|
106
|
+
assert.match(text, /# Renamed/);
|
|
107
|
+
// And the parse carries it explicitly.
|
|
108
|
+
assert.deepEqual(parseTicket(text, "test").extras, [["owner", '"nick"']]);
|
|
109
|
+
// Round-trip is bytes-stable, so check won't flag the rewritten file.
|
|
110
|
+
assert.equal(serializeTicket(parseTicket(text, "test")), text);
|
|
111
|
+
assert.deepEqual(checkBoards(root, false).issues.map((issue) => issue.message), [
|
|
112
|
+
'unknown frontmatter key "owner" — preserved on rewrite, but nothing reads it',
|
|
113
|
+
]);
|
|
114
|
+
});
|
|
115
|
+
test("the pre-0.8 milestone key is flagged by name, and --fix is the migration", () => {
|
|
116
|
+
const root = tempRoot();
|
|
117
|
+
const store = initProject(root, { name: "old", prefix: "OLD" });
|
|
118
|
+
const t = store.create({ title: "From an old board", status: "todo" });
|
|
119
|
+
const path = join(root, ".task", "tickets", String(t.number), "ticket.md");
|
|
120
|
+
writeFileSync(path, readFileSync(path, "utf8").replace("status: todo", 'status: todo\nmilestone: "launch"'));
|
|
121
|
+
const found = checkBoards(root, false);
|
|
122
|
+
const migration = found.issues.find((issue) => /`milestone:` is now `goal:`/.test(issue.message));
|
|
123
|
+
assert.ok(migration?.fixable, "migration flagged as fixable");
|
|
124
|
+
// The old key parses as the goal, so the ref lint also fires until the goal
|
|
125
|
+
// file exists — stated with both ways out, never auto-pruned.
|
|
126
|
+
assert.ok(found.issues.some((issue) => /goal "launch" doesn't exist/.test(issue.message) && !issue.fixable));
|
|
127
|
+
store.createGoal({ title: "Launch" });
|
|
128
|
+
checkBoards(root, true);
|
|
129
|
+
const text = readFileSync(path, "utf8");
|
|
130
|
+
assert.match(text, /goal: "launch"/);
|
|
131
|
+
assert.doesNotMatch(text, /milestone/);
|
|
132
|
+
assert.deepEqual(checkBoards(root, false).issues, []);
|
|
133
|
+
});
|
|
134
|
+
test("goal files are linted, and drift in them is fixable", () => {
|
|
135
|
+
const root = tempRoot();
|
|
136
|
+
const store = initProject(root, { name: "gol", prefix: "GOL" });
|
|
137
|
+
store.createGoal({ title: "Tidy", description: "fine" });
|
|
138
|
+
// A hand-dropped goal: parseable, bad timestamp, non-canonical spacing, and
|
|
139
|
+
// a slug the CLI would never mint.
|
|
140
|
+
writeFileSync(join(root, ".task", "goals", "Bad Slug.md"), "---\ncreated: not-a-date\nupdated: 2026-08-15T17:00:00.000Z\n---\n# Handmade\n\nbody\n");
|
|
141
|
+
const result = checkBoards(root, false);
|
|
142
|
+
const messages = result.issues.map((issue) => issue.message);
|
|
143
|
+
assert.ok(messages.some((m) => /not a valid goal slug/.test(m)));
|
|
144
|
+
assert.ok(messages.some((m) => /created is not a valid timestamp/.test(m)));
|
|
145
|
+
assert.ok(result.issues.some((issue) => issue.fixable), "spacing drift is fixable");
|
|
146
|
+
checkBoards(root, true);
|
|
147
|
+
assert.match(readFileSync(join(root, ".task", "goals", "Bad Slug.md"), "utf8"), /---\n\n# Handmade/);
|
|
148
|
+
});
|
|
149
|
+
test("comment files are linted too", () => {
|
|
150
|
+
const root = tempRoot();
|
|
151
|
+
const store = initProject(root, { name: "com", prefix: "COM" });
|
|
152
|
+
const t = store.create({ title: "Talked about" });
|
|
153
|
+
store.addComment(t.number, "fine", "claude");
|
|
154
|
+
const dir = join(root, ".task", "tickets", String(t.number), "comments");
|
|
155
|
+
// A hand-dropped comment: parseable, wrong created, non-canonical spacing.
|
|
156
|
+
writeFileSync(join(dir, "2026-08-15T170000-other.md"), '---\nauthor: "other"\ncreated: not-a-date\n---\nbody\n');
|
|
157
|
+
const result = checkBoards(root, false);
|
|
158
|
+
assert.ok(result.issues.some((issue) => /created is not a valid timestamp/.test(issue.message)));
|
|
159
|
+
});
|
|
160
|
+
test("config lints: legacy claimPrefix migrates, boards is root-only, prefixes must agree", () => {
|
|
161
|
+
const root = tempRoot();
|
|
162
|
+
initProject(root, { name: "cfg", prefix: "CFG" });
|
|
163
|
+
const rootConfig = join(root, ".task", "config.json");
|
|
164
|
+
const raw = JSON.parse(readFileSync(rootConfig, "utf8"));
|
|
165
|
+
raw.claimPrefix = "claude/task/";
|
|
166
|
+
raw.boards = ["CFG", "SUB"];
|
|
167
|
+
writeFileSync(rootConfig, `${JSON.stringify(raw, null, 2)}\n`);
|
|
168
|
+
// A nested board that disagrees on the namespace and carries its own
|
|
169
|
+
// boards list — both are repo-level decisions the root board owns.
|
|
170
|
+
mkdirSync(join(root, "pkg"), { recursive: true });
|
|
171
|
+
initProject(join(root, "pkg"), { name: "sub", prefix: "SUB" });
|
|
172
|
+
const subConfig = join(root, "pkg", ".task", "config.json");
|
|
173
|
+
const subRaw = JSON.parse(readFileSync(subConfig, "utf8"));
|
|
174
|
+
subRaw.boards = ["SUB"];
|
|
175
|
+
subRaw.claims = { branchPrefix: "task/claim/" };
|
|
176
|
+
writeFileSync(subConfig, `${JSON.stringify(subRaw, null, 2)}\n`);
|
|
177
|
+
const found = checkBoards(root, false);
|
|
178
|
+
const messages = found.issues.map((issue) => issue.message);
|
|
179
|
+
assert.ok(messages.some((m) => /`claimPrefix` is now `claims\.branchPrefix`/.test(m)));
|
|
180
|
+
assert.ok(messages.some((m) => /"boards" is root-only/.test(m)));
|
|
181
|
+
assert.ok(messages.some((m) => /disagrees with the root board's "claude\/task\/"/.test(m)));
|
|
182
|
+
// --fix migrates the legacy key in place; the human decisions remain.
|
|
183
|
+
const fixed = checkBoards(root, true);
|
|
184
|
+
assert.ok(fixed.fixed.includes(".task/config.json"));
|
|
185
|
+
const migrated = JSON.parse(readFileSync(rootConfig, "utf8"));
|
|
186
|
+
assert.equal(migrated.claimPrefix, undefined);
|
|
187
|
+
assert.equal(migrated.claims?.branchPrefix, "claude/task/");
|
|
188
|
+
assert.deepEqual(migrated.boards, ["CFG", "SUB"]);
|
|
189
|
+
assert.equal(migrated.prefix, "CFG");
|
|
190
|
+
const remaining = checkBoards(root, false).issues.map((issue) => issue.message);
|
|
191
|
+
assert.ok(!remaining.some((m) => /`claimPrefix` is now/.test(m)), "nag gone after migration");
|
|
192
|
+
assert.ok(remaining.some((m) => /"boards" is root-only/.test(m)), "root-only lint stays");
|
|
193
|
+
assert.ok(remaining.some((m) => /disagrees with the root board's/.test(m)), "mismatch stays");
|
|
194
|
+
});
|
|
195
|
+
test("an existing claims.branchPrefix wins over the legacy key on migration", () => {
|
|
196
|
+
const root = tempRoot();
|
|
197
|
+
initProject(root, { name: "dup", prefix: "DUP" });
|
|
198
|
+
const configPath = join(root, ".task", "config.json");
|
|
199
|
+
const raw = JSON.parse(readFileSync(configPath, "utf8"));
|
|
200
|
+
raw.claimPrefix = "old/ns/";
|
|
201
|
+
raw.claims = { branchPrefix: "new/ns/", maxOpenCount: 2 };
|
|
202
|
+
writeFileSync(configPath, `${JSON.stringify(raw, null, 2)}\n`);
|
|
203
|
+
checkBoards(root, true);
|
|
204
|
+
const migrated = JSON.parse(readFileSync(configPath, "utf8"));
|
|
205
|
+
assert.equal(migrated.claimPrefix, undefined);
|
|
206
|
+
assert.equal(migrated.claims?.branchPrefix, "new/ns/");
|
|
207
|
+
assert.equal(migrated.claims?.maxOpenCount, 2);
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=check.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.test.js","sourceRoot":"","sources":["../src/check.test.ts"],"names":[],"mappings":"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"}
|
package/dist/claim.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* against `origin`. PR/session awareness belongs to whatever drives the claim
|
|
10
10
|
* (the implement-task skill, a human).
|
|
11
11
|
*/
|
|
12
|
-
import type
|
|
12
|
+
import { type Store } from "./store.ts";
|
|
13
13
|
import type { ProjectConfig, Task } from "./types.ts";
|
|
14
14
|
/**
|
|
15
15
|
* The branch namespace claims live under when the board doesn't configure
|
|
@@ -22,11 +22,26 @@ import type { ProjectConfig, Task } from "./types.ts";
|
|
|
22
22
|
*/
|
|
23
23
|
export declare const DEFAULT_CLAIM_PREFIX = "task/claim/";
|
|
24
24
|
/**
|
|
25
|
-
* The board's claim namespace
|
|
25
|
+
* The board's configured claim namespace before validation or defaulting —
|
|
26
|
+
* `claims.branchPrefix`, falling back to the pre-0.8 top-level `claimPrefix`
|
|
27
|
+
* (still read for one release so a version bump can't strand in-flight
|
|
28
|
+
* claims; `task check` nags, `--fix` migrates). Exported for `task check`,
|
|
29
|
+
* which wants the raw value to lint without the throw below.
|
|
30
|
+
*/
|
|
31
|
+
export declare function configuredBranchPrefix(config: ProjectConfig): string | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* The board's claim namespace: configured branch prefix (a trailing slash is
|
|
26
34
|
* implied) or the default. Validated here because it becomes a git ref and an
|
|
27
35
|
* ls-remote glob — a malformed value must fail the claim, not corrupt it.
|
|
28
36
|
*/
|
|
29
37
|
export declare function claimNamespace(config: ProjectConfig): string;
|
|
38
|
+
/**
|
|
39
|
+
* The repo-wide cap on open claims: `claims.maxOpenCount` read from the
|
|
40
|
+
* *root* board's config (the outermost `.task/` above `root`), never the
|
|
41
|
+
* nearest one — a WIP cap each board could set for itself is no cap at all.
|
|
42
|
+
* Absent, unparseable or nonsensical values all mean "no cap".
|
|
43
|
+
*/
|
|
44
|
+
export declare function openClaimCap(root: string): number | undefined;
|
|
30
45
|
/** { prefix: "TAS" }, 21 → "task/claim/tas-21" (or under the configured namespace). */
|
|
31
46
|
export declare function claimBranch(config: ProjectConfig, number: number): string;
|
|
32
47
|
/**
|
|
@@ -45,6 +60,10 @@ export interface ClaimResult {
|
|
|
45
60
|
branch: string;
|
|
46
61
|
base: string;
|
|
47
62
|
}
|
|
63
|
+
export interface ClaimOptions {
|
|
64
|
+
/** Claim past the root board's `claims.maxOpenCount` cap. */
|
|
65
|
+
force?: boolean;
|
|
66
|
+
}
|
|
48
67
|
/**
|
|
49
68
|
* Claim `number`: validate, branch off origin's default branch, flip the
|
|
50
69
|
* ticket to in_progress as the branch's first commit, and push. The push
|
|
@@ -54,7 +73,7 @@ export interface ClaimResult {
|
|
|
54
73
|
* someone pre-created without a claim commit can't be hijacked by a plain
|
|
55
74
|
* fast-forward. Leaves the winner checked out on the claim branch.
|
|
56
75
|
*/
|
|
57
|
-
export declare function claim(store: Store, number: number): ClaimResult;
|
|
76
|
+
export declare function claim(store: Store, number: number, options?: ClaimOptions): ClaimResult;
|
|
58
77
|
export interface ReleaseResult {
|
|
59
78
|
branch: string;
|
|
60
79
|
/** Whether a branch was actually there to delete, per side. */
|
|
@@ -73,4 +92,38 @@ export declare function release(store: Store, number: number): ReleaseResult;
|
|
|
73
92
|
* (one ls-remote for the whole namespace). The top entry is next up.
|
|
74
93
|
*/
|
|
75
94
|
export declare function claimableTasks(store: Store): Task[];
|
|
95
|
+
export interface PromoteResult {
|
|
96
|
+
task: Task;
|
|
97
|
+
/** Claim-time gates still in the way — promoted, but not claimable yet. */
|
|
98
|
+
holds: string[];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* `task promote` — the human "build this" call, as a verb: `backlog` → `todo`.
|
|
102
|
+
* No quality gate: planning happens at claim time (the worker's plan tick),
|
|
103
|
+
* so a one-line backlog ticket is promotable. Blocked and needs-human are
|
|
104
|
+
* claim-time facts that `claim`/`--claimable` already enforce live, so
|
|
105
|
+
* promoting a blocked ticket is legitimate sequencing ("build this once
|
|
106
|
+
* NIC-11 lands") — reported as a hold, never refused. Writes the ticket like
|
|
107
|
+
* `update` does; committing is the caller's job.
|
|
108
|
+
*/
|
|
109
|
+
export declare function promote(store: Store, number: number): PromoteResult;
|
|
110
|
+
/**
|
|
111
|
+
* The boards `claim --next` and `list --claimable` select over, in priority
|
|
112
|
+
* order. Resolution: an explicit `--board` list > the root board's top-level
|
|
113
|
+
* `boards` key > the nearest board alone. The list is *selection scope*, not
|
|
114
|
+
* permission — `task claim <id>` works on any board regardless — and it's
|
|
115
|
+
* read from the repo's root board only, so a vendored board can't opt itself
|
|
116
|
+
* into a repo's automation by shipping a config.
|
|
117
|
+
*/
|
|
118
|
+
export declare function selectionBoards(cwd: string, prefixes?: string[]): Store[];
|
|
119
|
+
/**
|
|
120
|
+
* `task claim --next`: walk the selection scope in priority order and claim
|
|
121
|
+
* the first ticket that sticks. Losing a race for one ticket (another worker
|
|
122
|
+
* pushed its branch first) means *try the next*, so every ClaimError inside
|
|
123
|
+
* the loop is a skip — which is why the repo-level preconditions (dirty tree,
|
|
124
|
+
* malformed prefix, WIP cap) are asserted up front, where they still mean
|
|
125
|
+
* "stop and fix something" (exit 2) instead of draining the queue to a bogus
|
|
126
|
+
* "nothing claimable". Returns null when the queue really is empty (exit 1).
|
|
127
|
+
*/
|
|
128
|
+
export declare function claimNext(stores: Store[], options?: ClaimOptions): ClaimResult | null;
|
|
76
129
|
//# sourceMappingURL=claim.d.ts.map
|
package/dist/claim.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAKL,KAAK,KAAK,EACX,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAErD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,gBAAgB,CAAA;AAKjD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAU5D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO7D;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;gBACxB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS;CAIzD;AA6CD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAQxE;AA4BD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAiG3F;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CA6BnE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,CAOnD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,2EAA2E;IAC3E,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAgBnE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CA+BzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,GAAG,IAAI,CA6BzF"}
|
package/dist/claim.js
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { spawnSync } from "node:child_process";
|
|
13
13
|
import { join } from "node:path";
|
|
14
|
-
import { FileStore, TICKETS_DIR } from "./file-store.js";
|
|
14
|
+
import { FileStore, TICKETS_DIR, openBoard } from "./file-store.js";
|
|
15
|
+
import { boardConfig, findBoardsByPrefix, findRoot, findScopeRoot, } from "./store.js";
|
|
15
16
|
/**
|
|
16
17
|
* The branch namespace claims live under when the board doesn't configure
|
|
17
18
|
* one. Deliberately vendor-neutral: repos whose workers are Claude Code cloud
|
|
@@ -25,18 +26,43 @@ export const DEFAULT_CLAIM_PREFIX = "task/claim/";
|
|
|
25
26
|
/** Slash-terminated path segments of ref-safe characters. */
|
|
26
27
|
const CLAIM_PREFIX_SHAPE = /^([A-Za-z0-9._-]+\/)+$/;
|
|
27
28
|
/**
|
|
28
|
-
* The board's claim namespace
|
|
29
|
+
* The board's configured claim namespace before validation or defaulting —
|
|
30
|
+
* `claims.branchPrefix`, falling back to the pre-0.8 top-level `claimPrefix`
|
|
31
|
+
* (still read for one release so a version bump can't strand in-flight
|
|
32
|
+
* claims; `task check` nags, `--fix` migrates). Exported for `task check`,
|
|
33
|
+
* which wants the raw value to lint without the throw below.
|
|
34
|
+
*/
|
|
35
|
+
export function configuredBranchPrefix(config) {
|
|
36
|
+
return config.claims?.branchPrefix ?? config.claimPrefix;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The board's claim namespace: configured branch prefix (a trailing slash is
|
|
29
40
|
* implied) or the default. Validated here because it becomes a git ref and an
|
|
30
41
|
* ls-remote glob — a malformed value must fail the claim, not corrupt it.
|
|
31
42
|
*/
|
|
32
43
|
export function claimNamespace(config) {
|
|
33
|
-
const raw = config
|
|
44
|
+
const raw = configuredBranchPrefix(config) ?? DEFAULT_CLAIM_PREFIX;
|
|
34
45
|
const prefix = raw.endsWith("/") ? raw : `${raw}/`;
|
|
35
46
|
if (!CLAIM_PREFIX_SHAPE.test(prefix) || prefix.includes("..") || /(^|\/)\./.test(prefix)) {
|
|
36
|
-
throw new ClaimError(`invalid
|
|
47
|
+
throw new ClaimError(`invalid claims.branchPrefix in .task/config.json: ${JSON.stringify(raw)} — use slash-separated segments like "task/claim/" or "claude/task/"`, "invalid");
|
|
37
48
|
}
|
|
38
49
|
return prefix;
|
|
39
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* The repo-wide cap on open claims: `claims.maxOpenCount` read from the
|
|
53
|
+
* *root* board's config (the outermost `.task/` above `root`), never the
|
|
54
|
+
* nearest one — a WIP cap each board could set for itself is no cap at all.
|
|
55
|
+
* Absent, unparseable or nonsensical values all mean "no cap".
|
|
56
|
+
*/
|
|
57
|
+
export function openClaimCap(root) {
|
|
58
|
+
try {
|
|
59
|
+
const cap = boardConfig(findScopeRoot(root)).claims?.maxOpenCount;
|
|
60
|
+
return typeof cap === "number" && Number.isInteger(cap) && cap > 0 ? cap : undefined;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
40
66
|
/** { prefix: "TAS" }, 21 → "task/claim/tas-21" (or under the configured namespace). */
|
|
41
67
|
export function claimBranch(config, number) {
|
|
42
68
|
return `${claimNamespace(config)}${config.prefix.toLowerCase()}-${number}`;
|
|
@@ -123,6 +149,20 @@ function assertClaimable(store, task, number) {
|
|
|
123
149
|
throw new ClaimError(`${id} is blocked by ${blockers.join(", ")} — not claimable`, "invalid");
|
|
124
150
|
}
|
|
125
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* The WIP-cap gate every claim passes through: while `maxOpenCount` claim
|
|
154
|
+
* branches exist on origin, claiming more is refused (exit 2 — the fix is to
|
|
155
|
+
* finish or release one, not to pick a different ticket). Existence on origin
|
|
156
|
+
* is the definition of "open": a claim branch dies at merge or release, so a
|
|
157
|
+
* lingering merged branch counts — deliberate pressure to clean it up. The
|
|
158
|
+
* cap applies to humans and agents alike; `--force` is the escape.
|
|
159
|
+
*/
|
|
160
|
+
function assertUnderCap(openClaims, root, namespace) {
|
|
161
|
+
const cap = openClaimCap(root);
|
|
162
|
+
if (cap !== undefined && openClaims.size >= cap) {
|
|
163
|
+
throw new ClaimError(`${openClaims.size} claim branch${openClaims.size === 1 ? "" : "es"} already open under ${namespace} — at the root board's maxOpenCount cap (${cap}); finish or \`task claim --release\` one, or pass --force`, "invalid");
|
|
164
|
+
}
|
|
165
|
+
}
|
|
126
166
|
/**
|
|
127
167
|
* Claim `number`: validate, branch off origin's default branch, flip the
|
|
128
168
|
* ticket to in_progress as the branch's first commit, and push. The push
|
|
@@ -132,9 +172,11 @@ function assertClaimable(store, task, number) {
|
|
|
132
172
|
* someone pre-created without a claim commit can't be hijacked by a plain
|
|
133
173
|
* fast-forward. Leaves the winner checked out on the claim branch.
|
|
134
174
|
*/
|
|
135
|
-
export function claim(store, number) {
|
|
175
|
+
export function claim(store, number, options = {}) {
|
|
176
|
+
// Unreachable since openBoard refuses pre-0.6 boards, kept as the narrowing
|
|
177
|
+
// that lets the rest of this function assume text-canonical semantics.
|
|
136
178
|
if (!(store instanceof FileStore)) {
|
|
137
|
-
throw new ClaimError("claiming needs a text-format board — run `task migrate`
|
|
179
|
+
throw new ClaimError("claiming needs a text-format board — run `npx @nickmeriano/task@0.6 migrate` once", "invalid");
|
|
138
180
|
}
|
|
139
181
|
const cwd = store.root;
|
|
140
182
|
const branch = claimBranch(store.config, number);
|
|
@@ -142,7 +184,11 @@ export function claim(store, number) {
|
|
|
142
184
|
// The local-branch check comes before ticket validation on purpose: on the
|
|
143
185
|
// claim branch itself the ticket reads in_progress, and "already claimed"
|
|
144
186
|
// (exit 1, move on) is the truthful answer there — not a validation failure.
|
|
145
|
-
|
|
187
|
+
// -uno everywhere a claim reads the tree: only *tracked* modifications block
|
|
188
|
+
// a branch switch. Untracked files ride along untouched — and the release
|
|
189
|
+
// flow deliberately leaves one (the reason comment), so counting them would
|
|
190
|
+
// wedge the release-then-claim-next loop this exists for.
|
|
191
|
+
const tree = git(cwd, "status", "--porcelain", "-uno");
|
|
146
192
|
if (tree.status !== 0) {
|
|
147
193
|
throw new ClaimError(`not a git repository: ${cwd}`, "invalid");
|
|
148
194
|
}
|
|
@@ -154,9 +200,16 @@ export function claim(store, number) {
|
|
|
154
200
|
throw new ClaimError("working tree is dirty — commit or stash before claiming, the claim switches branches", "invalid");
|
|
155
201
|
}
|
|
156
202
|
gitMust(cwd, "fetch", "--quiet", "origin");
|
|
157
|
-
|
|
203
|
+
// One ls-remote answers both gates: is this ticket taken, and is the repo
|
|
204
|
+
// at its WIP cap. "Already claimed" wins — that's exit 1 (pick the next
|
|
205
|
+
// ticket), where the cap is exit 2 (fix something).
|
|
206
|
+
const namespace = claimNamespace(store.config);
|
|
207
|
+
const openClaims = remoteClaims(cwd, namespace);
|
|
208
|
+
if (openClaims.has(branch)) {
|
|
158
209
|
throw new ClaimError(`${id} is already claimed — ${branch} exists on origin`, "claimed");
|
|
159
210
|
}
|
|
211
|
+
if (!options.force)
|
|
212
|
+
assertUnderCap(openClaims, cwd, namespace);
|
|
160
213
|
const base = defaultBase(cwd);
|
|
161
214
|
// So a failed claim can put the checkout back exactly where it was —
|
|
162
215
|
// a branch name usually, a bare sha when HEAD was detached.
|
|
@@ -200,7 +253,7 @@ export function release(store, number) {
|
|
|
200
253
|
const branch = claimBranch(store.config, number);
|
|
201
254
|
const onBranch = git(cwd, "symbolic-ref", "--quiet", "--short", "HEAD").stdout === branch;
|
|
202
255
|
if (onBranch) {
|
|
203
|
-
const tree = gitMust(cwd, "status", "--porcelain");
|
|
256
|
+
const tree = gitMust(cwd, "status", "--porcelain", "-uno");
|
|
204
257
|
if (tree !== "") {
|
|
205
258
|
throw new ClaimError(`working tree on ${branch} is dirty — commit elsewhere or discard before releasing`, "invalid");
|
|
206
259
|
}
|
|
@@ -234,4 +287,106 @@ export function claimableTasks(store) {
|
|
|
234
287
|
.filter((t) => openBlockers(store, t).length === 0)
|
|
235
288
|
.filter((t) => !claimed.has(claimBranch(store.config, t.number)));
|
|
236
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* `task promote` — the human "build this" call, as a verb: `backlog` → `todo`.
|
|
292
|
+
* No quality gate: planning happens at claim time (the worker's plan tick),
|
|
293
|
+
* so a one-line backlog ticket is promotable. Blocked and needs-human are
|
|
294
|
+
* claim-time facts that `claim`/`--claimable` already enforce live, so
|
|
295
|
+
* promoting a blocked ticket is legitimate sequencing ("build this once
|
|
296
|
+
* NIC-11 lands") — reported as a hold, never refused. Writes the ticket like
|
|
297
|
+
* `update` does; committing is the caller's job.
|
|
298
|
+
*/
|
|
299
|
+
export function promote(store, number) {
|
|
300
|
+
const task = store.get(number);
|
|
301
|
+
const id = store.displayId(number);
|
|
302
|
+
if (!task)
|
|
303
|
+
throw new ClaimError(`no such task: ${id}`, "invalid");
|
|
304
|
+
if (task.status !== "backlog") {
|
|
305
|
+
throw new ClaimError(`${id} is ${task.status} — only backlog tickets can be promoted`, "invalid");
|
|
306
|
+
}
|
|
307
|
+
const updated = store.update(number, { status: "todo" });
|
|
308
|
+
const holds = [];
|
|
309
|
+
if (updated.needsHuman)
|
|
310
|
+
holds.push("flagged needs-human");
|
|
311
|
+
const blockers = openBlockers(store, updated);
|
|
312
|
+
if (blockers.length)
|
|
313
|
+
holds.push(`blocked by ${blockers.join(", ")}`);
|
|
314
|
+
return { task: updated, holds };
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* The boards `claim --next` and `list --claimable` select over, in priority
|
|
318
|
+
* order. Resolution: an explicit `--board` list > the root board's top-level
|
|
319
|
+
* `boards` key > the nearest board alone. The list is *selection scope*, not
|
|
320
|
+
* permission — `task claim <id>` works on any board regardless — and it's
|
|
321
|
+
* read from the repo's root board only, so a vendored board can't opt itself
|
|
322
|
+
* into a repo's automation by shipping a config.
|
|
323
|
+
*/
|
|
324
|
+
export function selectionBoards(cwd, prefixes) {
|
|
325
|
+
const scope = findScopeRoot(cwd);
|
|
326
|
+
let wanted = prefixes?.length ? prefixes : undefined;
|
|
327
|
+
if (!wanted) {
|
|
328
|
+
try {
|
|
329
|
+
const boards = boardConfig(scope).boards;
|
|
330
|
+
if (Array.isArray(boards) && boards.length > 0)
|
|
331
|
+
wanted = boards.map(String);
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
// No readable root board — same answer as no boards list.
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (!wanted) {
|
|
338
|
+
const nearest = findRoot(cwd);
|
|
339
|
+
if (!nearest) {
|
|
340
|
+
throw new ClaimError("no .task directory found in this directory or any parent — run `task init` first", "invalid");
|
|
341
|
+
}
|
|
342
|
+
return [openBoard(nearest)];
|
|
343
|
+
}
|
|
344
|
+
return wanted.map((prefix) => {
|
|
345
|
+
const matches = findBoardsByPrefix(scope, prefix);
|
|
346
|
+
if (matches.length === 1)
|
|
347
|
+
return openBoard(matches[0].root);
|
|
348
|
+
throw new ClaimError(matches.length === 0
|
|
349
|
+
? `no board with prefix ${prefix.toUpperCase()} in this repo — check --board and the root board's "boards" list`
|
|
350
|
+
: `prefix ${prefix.toUpperCase()} is ambiguous — boards at: ${matches.map((m) => m.id).join(", ")}`, "invalid");
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* `task claim --next`: walk the selection scope in priority order and claim
|
|
355
|
+
* the first ticket that sticks. Losing a race for one ticket (another worker
|
|
356
|
+
* pushed its branch first) means *try the next*, so every ClaimError inside
|
|
357
|
+
* the loop is a skip — which is why the repo-level preconditions (dirty tree,
|
|
358
|
+
* malformed prefix, WIP cap) are asserted up front, where they still mean
|
|
359
|
+
* "stop and fix something" (exit 2) instead of draining the queue to a bogus
|
|
360
|
+
* "nothing claimable". Returns null when the queue really is empty (exit 1).
|
|
361
|
+
*/
|
|
362
|
+
export function claimNext(stores, options = {}) {
|
|
363
|
+
const first = stores[0];
|
|
364
|
+
const tree = git(first.root, "status", "--porcelain", "-uno");
|
|
365
|
+
if (tree.status !== 0) {
|
|
366
|
+
throw new ClaimError(`not a git repository: ${first.root}`, "invalid");
|
|
367
|
+
}
|
|
368
|
+
if (tree.stdout !== "") {
|
|
369
|
+
throw new ClaimError("working tree is dirty — commit or stash before claiming, the claim switches branches", "invalid");
|
|
370
|
+
}
|
|
371
|
+
for (const store of stores)
|
|
372
|
+
claimNamespace(store.config);
|
|
373
|
+
if (!options.force) {
|
|
374
|
+
const namespace = claimNamespace(first.config);
|
|
375
|
+
assertUnderCap(remoteClaims(first.root, namespace), first.root, namespace);
|
|
376
|
+
}
|
|
377
|
+
for (const store of stores) {
|
|
378
|
+
for (const task of claimableTasks(store)) {
|
|
379
|
+
try {
|
|
380
|
+
return claim(store, task.number, options);
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
// Claimed out from under us, or changed since listing — next in line.
|
|
384
|
+
if (error instanceof ClaimError)
|
|
385
|
+
continue;
|
|
386
|
+
throw error;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return null;
|
|
391
|
+
}
|
|
237
392
|
//# sourceMappingURL=claim.js.map
|
package/dist/claim.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,aAAa,GAEd,MAAM,YAAY,CAAA;AAGnB;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAA;AAEjD,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG,wBAAwB,CAAA;AAEnD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAqB;IAC1D,OAAO,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,MAAM,CAAC,WAAW,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,MAAM,GAAG,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAA;IAClE,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;IAClD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,UAAU,CAClB,qDAAqD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sEAAsE,EAC9I,SAAS,CACV,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAA;QACjE,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,MAAqB,EAAE,MAAc;IAC/D,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,MAAM,EAAE,CAAA;AAC5E,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAuB;IACpC,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAQD,SAAS,GAAG,CAAC,GAAW,EAAE,GAAG,IAAc;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAChE,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,MAAM,CAAC,KAAK,CAAA;IACpC,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;QAC1B,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACpC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;KACrC,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,OAAO,CAAC,GAAW,EAAE,GAAG,IAAc;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAA;IAC5E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;IACzE,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,uBAAuB,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5F,OAAO,UAAU,IAAI,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAA;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,SAAiB;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,SAAS,GAAG,CAAC,CAAA;IAC3E,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,MAAc;IACrD,OAAO,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;AACtE,CAAC;AAED,8EAA8E;AAC9E,SAAS,YAAY,CAAC,KAAY,EAAE,IAAU;IAC5C,OAAO,IAAI,CAAC,SAAS;SAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAa,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;SACtF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AACrB,CAAC;AAED,yEAAyE;AACzE,SAAS,eAAe,CAAC,KAAY,EAAE,IAAiB,EAAE,MAAc;IACtE,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACjE,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,MAAM,qCAAqC,EAAE,SAAS,CAAC,CAAA;IAC/F,CAAC;IACD,IAAI,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,gCAAgC,EAAE,SAAS,CAAC,CAAA;IAC3F,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC1C,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,kBAAkB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;IAC/F,CAAC;AACH,CAAC;AAaD;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,UAAuB,EAAE,IAAY,EAAE,SAAiB;IAC9E,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAChD,MAAM,IAAI,UAAU,CAClB,GAAG,UAAU,CAAC,IAAI,gBAAgB,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,uBAAuB,SAAS,4CAA4C,GAAG,4DAA4D,EAC9M,SAAS,CACV,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,KAAK,CAAC,KAAY,EAAE,MAAc,EAAE,UAAwB,EAAE;IAC5E,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,CAAC,CAAC,KAAK,YAAY,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,UAAU,CAClB,mFAAmF,EACnF,SAAS,CACV,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAA;IACtB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAElC,2EAA2E;IAC3E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,0DAA0D;IAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,yBAAyB,GAAG,EAAE,EAAE,SAAS,CAAC,CAAA;IACjE,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,UAAU,CAClB,GAAG,EAAE,yBAAyB,MAAM,yDAAyD,EAAE,KAAK,EACpG,SAAS,CACV,CAAA;IACH,CAAC;IAED,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAClB,sFAAsF,EACtF,SAAS,CACV,CAAA;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;IAC1C,0EAA0E;IAC1E,wEAAwE;IACxE,oDAAoD;IACpD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IAC/C,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,yBAAyB,MAAM,mBAAmB,EAAE,SAAS,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;IAE9D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;IAC7B,qEAAqE;IACrE,4DAA4D;IAC5D,MAAM,QAAQ,GACZ,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM;QAC7D,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;IACnC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAEvD,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;QACzC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC,CAAA;IAED,IAAI,CAAC;QACH,wEAAwE;QACxE,0EAA0E;QAC1E,6BAA6B;QAC7B,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;QACjD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;QAC/C,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC3E,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,uBAAuB,EAAE,gBAAgB,CAAC,CAAA;IACpF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,EAAE,CAAA;QACN,MAAM,KAAK,CAAA;IACb,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CACd,GAAG,EACH,MAAM,EACN,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,iCAAiC,MAAM,GAAG,CAC3C,CAAA;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,EAAE,CAAA;QACN,IAAI,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,yBAAyB,MAAM,6BAA6B,EAAE,SAAS,CAAC,CAAA;QACpG,CAAC;QACD,MAAM,IAAI,UAAU,CAClB,GAAG,EAAE,aAAa,MAAM,+CAA+C,IAAI,CAAC,MAAM,IAAI,oBAAoB,EAAE,EAC5G,SAAS,CACV,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACnD,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAAY,EAAE,MAAc;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAA;IACtB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhD,MAAM,QAAQ,GACZ,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAA;IAC1E,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;QAC1D,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,UAAU,CAClB,mBAAmB,MAAM,0DAA0D,EACnF,SAAS,CACV,CAAA;QACH,CAAC;QACD,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAC3C,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,KAAK,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpF,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAA;IACtE,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC9C,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IACzE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACtE,OAAO,KAAK;SACT,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;SAClD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AACrE,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,KAAY,EAAE,MAAc;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACjE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAClB,GAAG,EAAE,OAAO,IAAI,CAAC,MAAM,yCAAyC,EAChE,SAAS,CACV,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACxD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,OAAO,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC7C,IAAI,QAAQ,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACpE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,QAAmB;IAC9D,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAA;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC7E,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,UAAU,CAClB,kFAAkF,EAClF,SAAS,CACV,CAAA;QACH,CAAC;QACD,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC3D,MAAM,IAAI,UAAU,CAClB,OAAO,CAAC,MAAM,KAAK,CAAC;YAClB,CAAC,CAAC,wBAAwB,MAAM,CAAC,WAAW,EAAE,kEAAkE;YAChH,CAAC,CAAC,UAAU,MAAM,CAAC,WAAW,EAAE,8BAA8B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACrG,SAAS,CACV,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,UAAwB,EAAE;IACnE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;IAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,yBAAyB,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAClB,sFAAsF,EACtF,SAAS,CACV,CAAA;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACxD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC9C,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC5E,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,OAAO,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,sEAAsE;gBACtE,IAAI,KAAK,YAAY,UAAU;oBAAE,SAAQ;gBACzC,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|