@bragi-gmbh/codebus 1.4.0 → 1.6.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/ci-hooks/ci-hooks.js +126 -0
- package/dist/ci-hooks/ci-hooks.js.map +1 -0
- package/dist/commands/agent.js +137 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/as.js +1 -1
- package/dist/commands/as.js.map +1 -1
- package/dist/commands/ask.js +1 -1
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/ci-findings.js +129 -0
- package/dist/commands/ci-findings.js.map +1 -0
- package/dist/commands/ci-reply.js +117 -0
- package/dist/commands/ci-reply.js.map +1 -0
- package/dist/commands/ci-steer-escalate.js +65 -0
- package/dist/commands/ci-steer-escalate.js.map +1 -0
- package/dist/commands/cli-mcp-correlation.js +131 -0
- package/dist/commands/cli-mcp-correlation.js.map +1 -0
- package/dist/commands/connector-attach-detach.js +542 -0
- package/dist/commands/connector-attach-detach.js.map +1 -0
- package/dist/commands/connector.js +513 -0
- package/dist/commands/connector.js.map +1 -0
- package/dist/commands/correlation.js +194 -0
- package/dist/commands/correlation.js.map +1 -0
- package/dist/commands/decision.js +63 -0
- package/dist/commands/decision.js.map +1 -1
- package/dist/commands/digest.js +14 -3
- package/dist/commands/digest.js.map +1 -1
- package/dist/commands/do.js +127 -0
- package/dist/commands/do.js.map +1 -0
- package/dist/commands/factory-attention.js +106 -0
- package/dist/commands/factory-attention.js.map +1 -0
- package/dist/commands/factory-context-read.js +171 -0
- package/dist/commands/factory-context-read.js.map +1 -0
- package/dist/commands/factory-interventions.js +102 -0
- package/dist/commands/factory-interventions.js.map +1 -0
- package/dist/commands/factory.js +187 -0
- package/dist/commands/factory.js.map +1 -1
- package/dist/commands/graph-pull.js +130 -0
- package/dist/commands/graph-pull.js.map +1 -0
- package/dist/commands/graph.js +5 -1
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/inbox.js +7 -7
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/ingest.js +1 -1
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/install.js +1160 -55
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/integration-ledger.js +81 -0
- package/dist/commands/integration-ledger.js.map +1 -0
- package/dist/commands/knowledge.js +178 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/links.js +1 -1
- package/dist/commands/links.js.map +1 -1
- package/dist/commands/morning.js +50 -1
- package/dist/commands/morning.js.map +1 -1
- package/dist/commands/plan-compiler.js +260 -0
- package/dist/commands/plan-compiler.js.map +1 -0
- package/dist/commands/plan-lint.js +275 -0
- package/dist/commands/plan-lint.js.map +1 -0
- package/dist/commands/plan-score.js +203 -0
- package/dist/commands/plan-score.js.map +1 -0
- package/dist/commands/plan.js +481 -15
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/product-validity.js +168 -0
- package/dist/commands/product-validity.js.map +1 -0
- package/dist/commands/question.js +1 -1
- package/dist/commands/question.js.map +1 -1
- package/dist/commands/read-policy.js +131 -0
- package/dist/commands/read-policy.js.map +1 -0
- package/dist/commands/read.js +1 -1
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/repo.js +106 -8
- package/dist/commands/repo.js.map +1 -1
- package/dist/commands/repository-protection.js +209 -0
- package/dist/commands/repository-protection.js.map +1 -0
- package/dist/commands/resolve.js +2 -2
- package/dist/commands/resolve.js.map +1 -1
- package/dist/commands/self-healing.js +26 -0
- package/dist/commands/self-healing.js.map +1 -0
- package/dist/commands/send.js +1 -1
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/serial-merge.js +303 -0
- package/dist/commands/serial-merge.js.map +1 -0
- package/dist/commands/session.js +1 -1
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/task.js +92 -1
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/verify.js +77 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/config/self-healing-analysis.json +158 -0
- package/dist/errors.js +18 -4
- package/dist/errors.js.map +1 -1
- package/dist/execution/client.js +53 -0
- package/dist/execution/client.js.map +1 -0
- package/dist/execution/local.js +24 -0
- package/dist/execution/local.js.map +1 -0
- package/dist/execution/ssh.js +38 -0
- package/dist/execution/ssh.js.map +1 -0
- package/dist/graph.js +78 -16
- package/dist/graph.js.map +1 -1
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -1
- package/dist/json-lite.js +248 -0
- package/dist/json-lite.js.map +1 -0
- package/dist/knowledge-drift.js +40 -0
- package/dist/knowledge-drift.js.map +1 -0
- package/dist/lint/parallelism.js +414 -0
- package/dist/lint/parallelism.js.map +1 -0
- package/dist/mail-latency.js +11 -1
- package/dist/mail-latency.js.map +1 -1
- package/dist/mcp-ci-findings.js +31 -0
- package/dist/mcp-ci-findings.js.map +1 -0
- package/dist/mcp-correlation.js +290 -0
- package/dist/mcp-correlation.js.map +1 -0
- package/dist/mcp-factory-context-read.js +81 -0
- package/dist/mcp-factory-context-read.js.map +1 -0
- package/dist/mcp-registry.js +128 -1
- package/dist/mcp-registry.js.map +1 -1
- package/dist/mcp.js +94 -5
- package/dist/mcp.js.map +1 -1
- package/dist/openrouter-reservation-guard.js +97 -0
- package/dist/openrouter-reservation-guard.js.map +1 -0
- package/dist/self-healing-analysis-loader.js +150 -0
- package/dist/self-healing-analysis-loader.js.map +1 -0
- package/dist/sender.js +11 -9
- package/dist/sender.js.map +1 -1
- package/dist/toml-lite.js +546 -0
- package/dist/toml-lite.js.map +1 -0
- package/dist/version-check.js +23 -7
- package/dist/version-check.js.map +1 -1
- package/package.json +5 -3
package/dist/sender.js
CHANGED
|
@@ -10,38 +10,40 @@
|
|
|
10
10
|
// leaks the surface suffix into human-facing output AND makes the SAME person
|
|
11
11
|
// look like different authors depending on which surface sent the message.
|
|
12
12
|
//
|
|
13
|
-
// Owner decision (locked): a HUMAN sender (the
|
|
13
|
+
// Owner decision (locked): a HUMAN sender (the ingest snapshot has a non-null
|
|
14
14
|
// person_id) displays the PERSON slug only (e.g. `nihviid`); a MACHINE agent
|
|
15
15
|
// (person_id NULL — codex workers, connectors, service principals) keeps
|
|
16
16
|
// showing its agent slug, as today. No surface suffix is ever shown for a human.
|
|
17
17
|
//
|
|
18
18
|
// Resolution happens in the data layer via ONE nested PostgREST embed
|
|
19
|
-
// (SENDER_EMBED)
|
|
19
|
+
// (SENDER_EMBED) over the 0088 ingest snapshot: no RPC returns a sender slug
|
|
20
20
|
// string today, and every sender-render site already runs a PostgREST select we
|
|
21
21
|
// can extend with a single nested embed. That keeps the CLI surfaces (read,
|
|
22
22
|
// inbox, session start) and the MCP inbox tool in lockstep off the same helper.
|
|
23
|
-
// Nested embed for a message's
|
|
23
|
+
// Nested embed for a message's ingest-time sender columns.
|
|
24
24
|
// agents:from_agent_id(...) -> the sender agent (alias `agents`)
|
|
25
25
|
// person:people!person_id(slug) -> agents.person_id -> people(slug)
|
|
26
|
+
// person:people!from_person_id(slug) -> the immutable message principal snapshot
|
|
26
27
|
// The explicit `!person_id` FK hint is REQUIRED: agents has TWO foreign keys to
|
|
27
28
|
// people (person_id and owner_person_id, 0040), so an unqualified embed is
|
|
28
29
|
// ambiguous and PostgREST rejects it (PGRST201).
|
|
29
|
-
export const SENDER_EMBED = "agents:from_agent_id(slug, person:people!person_id(slug))";
|
|
30
|
+
export const SENDER_EMBED = "agents:from_agent_id(slug, person:people!person_id(slug)), person:people!from_person_id(slug)";
|
|
30
31
|
function one(v) {
|
|
31
32
|
return Array.isArray(v) ? (v[0] ?? null) : (v ?? null);
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
35
|
* Human-facing display name for a message sender.
|
|
35
36
|
*
|
|
36
|
-
* - HUMAN sender (
|
|
37
|
-
* - MACHINE agent
|
|
38
|
-
* -
|
|
39
|
-
* back to the agent slug — never crashes or blanks.
|
|
37
|
+
* - HUMAN sender (the ingest snapshot has a person with a slug) -> PERSON slug.
|
|
38
|
+
* - MACHINE agent or deleted snapshot -> AGENT slug.
|
|
39
|
+
* - Legacy rows without the 0088 scalar retain the old live-agent fallback.
|
|
40
40
|
* - Nothing resolvable at all -> "?" (last-resort, matches prior read.ts).
|
|
41
41
|
*/
|
|
42
42
|
export function senderDisplay(row) {
|
|
43
43
|
const agent = one(row?.agents);
|
|
44
|
-
const
|
|
44
|
+
const snapshot = one(row?.person);
|
|
45
|
+
const hasSnapshot = !!row && Object.prototype.hasOwnProperty.call(row, "from_person_id");
|
|
46
|
+
const person = snapshot ?? (hasSnapshot ? null : one(agent?.person));
|
|
45
47
|
const personSlug = person?.slug?.trim();
|
|
46
48
|
if (personSlug)
|
|
47
49
|
return personSlug;
|
package/dist/sender.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../src/sender.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,qBAAqB;AACrB,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"sender.js","sourceRoot":"","sources":["../src/sender.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,qBAAqB;AACrB,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,yEAAyE;AACzE,iFAAiF;AACjF,EAAE;AACF,sEAAsE;AACtE,6EAA6E;AAC7E,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAEhF,2DAA2D;AAC3D,wEAAwE;AACxE,uEAAuE;AACvE,mFAAmF;AACnF,gFAAgF;AAChF,2EAA2E;AAC3E,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG,+FAA+F,CAAC;AAsB5H,SAAS,GAAG,CAAI,CAAc;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAiC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* toml-lite — a deliberately NARROW TOML lexical scanner. NOT a general TOML
|
|
3
|
+
* parser: it exists only to answer, safely, the two questions install.ts's
|
|
4
|
+
* Codex MCP registration needs answered about `~/.codex/config.toml` (a file
|
|
5
|
+
* we never own outright — Codex configs carry other hand-written
|
|
6
|
+
* `mcp_servers` sections we must never corrupt):
|
|
7
|
+
*
|
|
8
|
+
* 1. findTopLevelTableBlock() — does a GENUINE top-level table with the
|
|
9
|
+
* given dotted key (e.g. ["mcp_servers","codebus"]) exist, and if so
|
|
10
|
+
* what is its raw text span? "Genuine" means: the `[...]` header sits
|
|
11
|
+
* at the true start of a physical line (so a header-shaped fragment
|
|
12
|
+
* inside a `#` comment can never match — a comment line's first
|
|
13
|
+
* non-whitespace character is `#`, never `[`) AND doesn't fall inside a
|
|
14
|
+
* multi-line string literal elsewhere in the file (checked against a
|
|
15
|
+
* real string/comment lexical scan, not a raw substring search).
|
|
16
|
+
* 2. parseSimpleTomlTable() — what are that table's simple
|
|
17
|
+
* `key = "string"` / `key = ["string", ...]` assignments? Any line
|
|
18
|
+
* inside the block that ISN'T one of those two exact shapes (a nested
|
|
19
|
+
* table, an inline table, a multi-line value, a bare number/boolean/
|
|
20
|
+
* date, a dotted key, …) makes the whole table "not safely
|
|
21
|
+
* reasoned about" — the function returns null, and callers treat that
|
|
22
|
+
* the same as "hand-edited/unrecognized" (leave it alone) rather than
|
|
23
|
+
* guessing. This is intentionally conservative: it only ever proves
|
|
24
|
+
* structure it's certain about; unfamiliar structure fails CLOSED, in
|
|
25
|
+
* the direction of not touching the user's file.
|
|
26
|
+
*
|
|
27
|
+
* Security-audit context: a prior version of this file's caller located
|
|
28
|
+
* `[mcp_servers.codebus]` with a raw `text.indexOf("[mcp_servers.codebus]")`
|
|
29
|
+
* substring search. That is unsound both ways: it matches the same text
|
|
30
|
+
* sitting inside an unrelated table's COMMENT (silently corrupting that
|
|
31
|
+
* other table's real fields), and it MISSES a real header written with
|
|
32
|
+
* different whitespace or quoting (risking a duplicate, invalid table on
|
|
33
|
+
* append). This module replaces that with lexically-aware matching for
|
|
34
|
+
* exactly the shapes we need to reason about.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Single left-to-right pass classifying every string literal and comment in
|
|
38
|
+
* the text. Deliberately simple: it does not validate escape sequences or
|
|
39
|
+
* TOML's exact closing-quote-count rules for multi-line strings (e.g. up to
|
|
40
|
+
* two extra quote chars allowed inside `"""..."""`) — it just finds the next
|
|
41
|
+
* matching delimiter. Getting a boundary slightly wrong inside a value we
|
|
42
|
+
* don't otherwise understand only ever affects OUR OWN safety checks, never
|
|
43
|
+
* the file itself (we do not rewrite based on assumptions here beyond "is
|
|
44
|
+
* this index inside a string/comment").
|
|
45
|
+
*/
|
|
46
|
+
function scanTomlLexicalRanges(text) {
|
|
47
|
+
const strings = [];
|
|
48
|
+
const comments = [];
|
|
49
|
+
const n = text.length;
|
|
50
|
+
let i = 0;
|
|
51
|
+
while (i < n) {
|
|
52
|
+
const c = text[i];
|
|
53
|
+
if (c === "#") {
|
|
54
|
+
const start = i;
|
|
55
|
+
while (i < n && text[i] !== "\n")
|
|
56
|
+
i++;
|
|
57
|
+
comments.push([start, i]);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (text.startsWith('"""', i)) {
|
|
61
|
+
// Multi-line BASIC string — DOES process escapes, so an escaped
|
|
62
|
+
// `\"""` right before the true closing delimiter must not end the
|
|
63
|
+
// string early (sol round-2 finding #3). A naive `indexOf('"""')`
|
|
64
|
+
// would stop there, misclassifying everything after as "outside the
|
|
65
|
+
// string" — including, in the worst case, a header-shaped fragment
|
|
66
|
+
// that's actually still inside this value.
|
|
67
|
+
const start = i;
|
|
68
|
+
i += 3;
|
|
69
|
+
while (i < n) {
|
|
70
|
+
if (text[i] === "\\") {
|
|
71
|
+
i += 2;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (text.startsWith('"""', i)) {
|
|
75
|
+
i += 3;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
i++;
|
|
79
|
+
}
|
|
80
|
+
strings.push([start, i]);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (text.startsWith("'''", i)) {
|
|
84
|
+
// Multi-line LITERAL string — no escapes at all, so a plain substring
|
|
85
|
+
// search for the closing delimiter is correct here.
|
|
86
|
+
const start = i;
|
|
87
|
+
i += 3;
|
|
88
|
+
const end = text.indexOf("'''", i);
|
|
89
|
+
i = end === -1 ? n : end + 3;
|
|
90
|
+
strings.push([start, i]);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (c === '"') {
|
|
94
|
+
const start = i;
|
|
95
|
+
i++;
|
|
96
|
+
while (i < n && text[i] !== "\n") {
|
|
97
|
+
if (text[i] === "\\") {
|
|
98
|
+
i += 2;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (text[i] === '"') {
|
|
102
|
+
i++;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
i++;
|
|
106
|
+
}
|
|
107
|
+
strings.push([start, i]);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (c === "'") {
|
|
111
|
+
// TOML literal strings have no escapes at all — the first `'` closes it.
|
|
112
|
+
const start = i;
|
|
113
|
+
i++;
|
|
114
|
+
while (i < n && text[i] !== "\n" && text[i] !== "'")
|
|
115
|
+
i++;
|
|
116
|
+
if (i < n && text[i] === "'")
|
|
117
|
+
i++;
|
|
118
|
+
strings.push([start, i]);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
i++;
|
|
122
|
+
}
|
|
123
|
+
return { strings, comments };
|
|
124
|
+
}
|
|
125
|
+
/** Ranges are produced in strictly increasing start order — linear scan is fine for our file sizes. */
|
|
126
|
+
function isInsideRanges(idx, ranges) {
|
|
127
|
+
for (const [s, e] of ranges) {
|
|
128
|
+
if (idx >= s && idx < e)
|
|
129
|
+
return true;
|
|
130
|
+
if (idx < s)
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
/** First index in [from,to) equal to `char` that isn't inside any excluded range. */
|
|
136
|
+
function findFirstUnexcluded(text, from, to, char, excluded) {
|
|
137
|
+
for (let idx = from; idx < to; idx++) {
|
|
138
|
+
if (text[idx] === char && !isInsideRanges(idx, excluded))
|
|
139
|
+
return idx;
|
|
140
|
+
}
|
|
141
|
+
return -1;
|
|
142
|
+
}
|
|
143
|
+
// ── Dotted-key parsing (for table headers) ─────────────────────────────────
|
|
144
|
+
/**
|
|
145
|
+
* Decodes a TOML basic (double-quoted) string's escape sequences per the
|
|
146
|
+
* TOML v1.0 spec: `\b \t \n \f \r \" \\ \uXXXX \UXXXXXXXX`. Deliberately
|
|
147
|
+
* narrow — not a general TOML string grammar, just these fixed escapes —
|
|
148
|
+
* but complete for them, unlike delegating to `JSON.parse` (sol round-4
|
|
149
|
+
* finding #2): JSON only supports `\uXXXX` (4-hex), NOT TOML's `\UXXXXXXXX`
|
|
150
|
+
* (8-hex, for code points beyond the BMP), so a validly-escaped header
|
|
151
|
+
* segment using `\U` was invisible to `parseDottedKey` entirely — the
|
|
152
|
+
* lexer would conclude "no match" for a header that, decoded, IS
|
|
153
|
+
* `mcp_servers.codebus`, and append a duplicate table right next to it.
|
|
154
|
+
* `String.fromCodePoint` handles the UTF-16 surrogate-pair conversion for
|
|
155
|
+
* an astral (>U+FFFF) code point correctly on its own — no manual surrogate
|
|
156
|
+
* math needed. `raw` includes the surrounding quotes. Returns null on any
|
|
157
|
+
* unrecognized or malformed/truncated escape — callers must treat that as
|
|
158
|
+
* "can't decode this segment," never guess at what it might mean.
|
|
159
|
+
*/
|
|
160
|
+
function decodeTomlBasicString(raw) {
|
|
161
|
+
if (raw.length < 2 || raw[0] !== '"' || raw[raw.length - 1] !== '"')
|
|
162
|
+
return null;
|
|
163
|
+
const inner = raw.slice(1, -1);
|
|
164
|
+
let out = "";
|
|
165
|
+
let i = 0;
|
|
166
|
+
while (i < inner.length) {
|
|
167
|
+
const c = inner[i];
|
|
168
|
+
if (c !== "\\") {
|
|
169
|
+
out += c;
|
|
170
|
+
i++;
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const next = inner[i + 1];
|
|
174
|
+
if (next === undefined)
|
|
175
|
+
return null; // trailing backslash — malformed
|
|
176
|
+
switch (next) {
|
|
177
|
+
case "b":
|
|
178
|
+
out += "\b";
|
|
179
|
+
i += 2;
|
|
180
|
+
break;
|
|
181
|
+
case "t":
|
|
182
|
+
out += "\t";
|
|
183
|
+
i += 2;
|
|
184
|
+
break;
|
|
185
|
+
case "n":
|
|
186
|
+
out += "\n";
|
|
187
|
+
i += 2;
|
|
188
|
+
break;
|
|
189
|
+
case "f":
|
|
190
|
+
out += "\f";
|
|
191
|
+
i += 2;
|
|
192
|
+
break;
|
|
193
|
+
case "r":
|
|
194
|
+
out += "\r";
|
|
195
|
+
i += 2;
|
|
196
|
+
break;
|
|
197
|
+
case '"':
|
|
198
|
+
out += '"';
|
|
199
|
+
i += 2;
|
|
200
|
+
break;
|
|
201
|
+
case "\\":
|
|
202
|
+
out += "\\";
|
|
203
|
+
i += 2;
|
|
204
|
+
break;
|
|
205
|
+
case "u": {
|
|
206
|
+
const hex = inner.slice(i + 2, i + 6);
|
|
207
|
+
if (!/^[0-9A-Fa-f]{4}$/.test(hex))
|
|
208
|
+
return null;
|
|
209
|
+
out += String.fromCharCode(parseInt(hex, 16));
|
|
210
|
+
i += 6;
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case "U": {
|
|
214
|
+
const hex = inner.slice(i + 2, i + 10);
|
|
215
|
+
if (!/^[0-9A-Fa-f]{8}$/.test(hex))
|
|
216
|
+
return null;
|
|
217
|
+
const codePoint = parseInt(hex, 16);
|
|
218
|
+
if (codePoint > 0x10ffff)
|
|
219
|
+
return null; // beyond the valid Unicode range
|
|
220
|
+
out += String.fromCodePoint(codePoint); // correctly emits a surrogate pair if codePoint > 0xFFFF
|
|
221
|
+
i += 10;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
default:
|
|
225
|
+
return null; // unrecognized escape
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return out;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Parses the inside-the-brackets text of a table header (e.g.
|
|
232
|
+
* `mcp_servers.codebus` or ` mcp_servers . "codebus" ` or an escaped form
|
|
233
|
+
* like `"mcp_servers"."code\U00000062us"`) into its dotted key segments,
|
|
234
|
+
* unquoting AND unescaping quoted segments (via decodeTomlBasicString for
|
|
235
|
+
* basic strings) so an escaped spelling is correctly recognized as equal to
|
|
236
|
+
* its literal form. A literal (single-quoted) segment has NO escapes at all
|
|
237
|
+
* per the TOML spec, so it's used verbatim. Returns null for anything it
|
|
238
|
+
* isn't confident about (empty segment, unmatched/unparseable/unsupported
|
|
239
|
+
* escape, disallowed bare-key chars) — such a header simply never matches a
|
|
240
|
+
* dotted-key lookup, which is safe: the worst case is "not found," never a
|
|
241
|
+
* wrong match.
|
|
242
|
+
*
|
|
243
|
+
* Known, accepted limitation: a quoted segment containing a literal `.` is
|
|
244
|
+
* not handled (this naive version splits on every `.` first). That only
|
|
245
|
+
* risks a rare false negative for exotic keys neither of our own writers
|
|
246
|
+
* nor Codex's own real configs use for `mcp_servers.codebus` — not one of
|
|
247
|
+
* the drift shapes this module exists to catch.
|
|
248
|
+
*/
|
|
249
|
+
function parseDottedKey(raw) {
|
|
250
|
+
const parts = raw.split(".");
|
|
251
|
+
const result = [];
|
|
252
|
+
for (const part of parts) {
|
|
253
|
+
const trimmed = part.trim();
|
|
254
|
+
if (trimmed.length === 0)
|
|
255
|
+
return null;
|
|
256
|
+
if (trimmed.startsWith('"') && trimmed.endsWith('"') && trimmed.length >= 2) {
|
|
257
|
+
const decoded = decodeTomlBasicString(trimmed);
|
|
258
|
+
if (decoded === null)
|
|
259
|
+
return null;
|
|
260
|
+
result.push(decoded);
|
|
261
|
+
}
|
|
262
|
+
else if (trimmed.startsWith("'") && trimmed.endsWith("'") && trimmed.length >= 2) {
|
|
263
|
+
result.push(trimmed.slice(1, -1)); // literal string: no escape processing at all
|
|
264
|
+
}
|
|
265
|
+
else if (/^[A-Za-z0-9_-]+$/.test(trimmed)) {
|
|
266
|
+
result.push(trimmed);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Finds every genuine top-level `[a.b.c]` table header in the text.
|
|
276
|
+
* "Genuine" = the `[` is the first non-whitespace character of its physical
|
|
277
|
+
* line (so a `#`-comment line, whose first non-whitespace char is `#`, can
|
|
278
|
+
* never produce a match here — no substring search involved) AND that
|
|
279
|
+
* position doesn't fall inside a string literal recorded by
|
|
280
|
+
* scanTomlLexicalRanges (guards the rarer case of a multi-line string
|
|
281
|
+
* elsewhere in the file containing header-shaped text). Array-of-tables
|
|
282
|
+
* (`[[...]]`) headers never match the regex below (the second `[` breaks
|
|
283
|
+
* the "no nested brackets" character class) and are correctly ignored — we
|
|
284
|
+
* don't use or expect them for `mcp_servers.*`.
|
|
285
|
+
*/
|
|
286
|
+
// A leading U+FEFF (byte-order mark) some editors — notably on Windows —
|
|
287
|
+
// prepend to the file. It can only ever appear at absolute position 0, so
|
|
288
|
+
// this only ever matters for a header on the very first line (sol round-2
|
|
289
|
+
// finding #3: a BOM-prefixed header was previously missed entirely, since
|
|
290
|
+
// `[ \t]*` doesn't match U+FEFF). Built via `new RegExp` with an explicit
|
|
291
|
+
// \uFEFF escape rather than embedding the literal character in source,
|
|
292
|
+
// which editors/tools can silently mishandle or strip.
|
|
293
|
+
//
|
|
294
|
+
// The trailing `\r?` (Luna/PR#110 finding) tolerates a CRLF line ending
|
|
295
|
+
// (Windows-written files, or any editor configured for it). JS regex `$`
|
|
296
|
+
// in multiline mode only asserts "right before a bare \n (or EOF)" — it
|
|
297
|
+
// does NOT treat `\r\n` as one unit, so without this, a header like
|
|
298
|
+
// `[mcp_servers.codebus]\r\n` never matched at all on a CRLF file:
|
|
299
|
+
// findTopLevelTableBlock() would report the table absent, falling through
|
|
300
|
+
// to the loose mightReferenceOurTable() sniff and being treated as
|
|
301
|
+
// "unrecognized" (safe — leave-alone, never corrupts — but breaks the
|
|
302
|
+
// intended self-heal/idempotent-matching on any CRLF file). `.` (used in
|
|
303
|
+
// `(#.*)?`) never matches a line terminator either, so the comment group
|
|
304
|
+
// already stops cleanly before a trailing `\r` — appending `\r?` here is
|
|
305
|
+
// enough, no need to touch the comment group itself. Consuming the `\r`
|
|
306
|
+
// INTO the match (rather than excluding it) also keeps HeaderMatch.lineEnd
|
|
307
|
+
// pointing at the index of the line's `\n` consistently for both line-
|
|
308
|
+
// ending styles.
|
|
309
|
+
const TOP_LEVEL_HEADER_RE = new RegExp("^\\uFEFF?[ \\t]*\\[([^[\\]\\n]*)\\][ \\t]*(#.*)?\\r?$", "gm");
|
|
310
|
+
function findAllTopLevelHeaders(text) {
|
|
311
|
+
const { strings } = scanTomlLexicalRanges(text);
|
|
312
|
+
const headerRe = new RegExp(TOP_LEVEL_HEADER_RE.source, TOP_LEVEL_HEADER_RE.flags); // fresh lastIndex per call
|
|
313
|
+
const matches = [];
|
|
314
|
+
let m;
|
|
315
|
+
while ((m = headerRe.exec(text)) !== null) {
|
|
316
|
+
if (isInsideRanges(m.index, strings))
|
|
317
|
+
continue;
|
|
318
|
+
matches.push({
|
|
319
|
+
lineStart: m.index,
|
|
320
|
+
lineEnd: m.index + m[0].length,
|
|
321
|
+
dottedKey: parseDottedKey(m[1]),
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
return matches;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Locate a genuine top-level table by its dotted key. Null if not present —
|
|
328
|
+
* OR if a second, genuinely separate occurrence of the SAME dotted key
|
|
329
|
+
* exists anywhere else in the file (Luna/PR#110 finding). Two
|
|
330
|
+
* `[mcp_servers.codebus]` headers is invalid/ambiguous TOML (a real parser
|
|
331
|
+
* may reject the file outright, or resolve the two differently — TOML's own
|
|
332
|
+
* spec forbids redefining a table); silently returning the FIRST match and
|
|
333
|
+
* treating the second as irrelevant would patch only one, report success,
|
|
334
|
+
* and leave a stale/duplicate table sitting right next to the "fixed" one.
|
|
335
|
+
* Deliberately returns null (rather than a distinct third outcome) here:
|
|
336
|
+
* install.ts's caller already has an established fallback for exactly this
|
|
337
|
+
* shape of ambiguity — findTopLevelTableBlock() returning null when
|
|
338
|
+
* mightReferenceOurTable() still finds a trace of the marker in the text is
|
|
339
|
+
* already read as "unrecognized, leave it alone, needs a human" (sol
|
|
340
|
+
* round-2 finding #3) rather than "genuinely absent, safe to append a fresh
|
|
341
|
+
* section" — and a second real header is exactly such a trace, so this
|
|
342
|
+
* reuses that fail-closed path instead of inventing a parallel one.
|
|
343
|
+
*/
|
|
344
|
+
export function findTopLevelTableBlock(text, dottedKey) {
|
|
345
|
+
const headers = findAllTopLevelHeaders(text);
|
|
346
|
+
const matchingIndices = [];
|
|
347
|
+
for (let idx = 0; idx < headers.length; idx++) {
|
|
348
|
+
const h = headers[idx];
|
|
349
|
+
if (h.dottedKey && h.dottedKey.length === dottedKey.length && h.dottedKey.every((k, i) => k === dottedKey[i])) {
|
|
350
|
+
matchingIndices.push(idx);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
if (matchingIndices.length !== 1)
|
|
354
|
+
return null; // 0 = genuinely absent; 2+ = duplicate, fail closed
|
|
355
|
+
const idx = matchingIndices[0];
|
|
356
|
+
const h = headers[idx];
|
|
357
|
+
const blockStart = Math.min(h.lineEnd + 1, text.length);
|
|
358
|
+
const blockEnd = idx + 1 < headers.length ? headers[idx + 1].lineStart : text.length;
|
|
359
|
+
return { headerStart: h.lineStart, blockStart, blockEnd };
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Tokenizes a table body into one record per physical line: blank/comment
|
|
363
|
+
* lines get key=null; `key = value` lines get the key, the RAW value span
|
|
364
|
+
* (excluding a trailing comment), and the value parsed IF it's a plain JSON-
|
|
365
|
+
* compatible double-quoted string or an array of such strings (our own
|
|
366
|
+
* writer only ever emits those two shapes via JSON.stringify — a TOML
|
|
367
|
+
* basic string's escaping is a compatible subset of JSON's for the plain
|
|
368
|
+
* ASCII file paths we deal with). Any other line shape (nested/inline
|
|
369
|
+
* table, TOML literal string, number, boolean, date, dotted key, a
|
|
370
|
+
* multi-line value, …) returns null for the WHOLE table — callers must
|
|
371
|
+
* treat that as "can't safely reason about this table", not attempt a
|
|
372
|
+
* partial edit.
|
|
373
|
+
*/
|
|
374
|
+
function tokenizeSimpleTomlBody(blockText) {
|
|
375
|
+
// Only STRING ranges are used to guard the '=' and '#' searches below — a
|
|
376
|
+
// "comment" range, by definition, starts AT its own '#' character, so
|
|
377
|
+
// excluding comment ranges here would make that very '#' un-findable
|
|
378
|
+
// (it would always test as "inside its own range").
|
|
379
|
+
const { strings } = scanTomlLexicalRanges(blockText);
|
|
380
|
+
const n = blockText.length;
|
|
381
|
+
const lines = [];
|
|
382
|
+
// Luna/PR#110 finding: a duplicate `key = ` line within the SAME table
|
|
383
|
+
// body is invalid TOML (the spec forbids redefining a key), but this
|
|
384
|
+
// tokenizer used to just let a later line silently win in the returned
|
|
385
|
+
// map (and replaceSimpleTomlValues would then rewrite EVERY occurrence to
|
|
386
|
+
// the same new value, papering over — not fixing — the fact that the
|
|
387
|
+
// source file has two authoritative values for one key). Tracked here,
|
|
388
|
+
// case-sensitively (TOML bare/quoted keys are), and — matching this
|
|
389
|
+
// function's own established contract ("any line we can't safely reason
|
|
390
|
+
// about invalidates the WHOLE table, not just that one line") — a
|
|
391
|
+
// duplicate makes the whole body return null: "unrecognized, don't touch."
|
|
392
|
+
const seenKeys = new Set();
|
|
393
|
+
let lineStart = 0;
|
|
394
|
+
while (lineStart <= n) {
|
|
395
|
+
let lineEnd = blockText.indexOf("\n", lineStart);
|
|
396
|
+
if (lineEnd === -1)
|
|
397
|
+
lineEnd = n;
|
|
398
|
+
const trimmed = blockText.slice(lineStart, lineEnd).trim();
|
|
399
|
+
if (trimmed === "" || trimmed.startsWith("#")) {
|
|
400
|
+
lines.push({ lineStart, lineEnd, key: null, valueStart: lineEnd, valueEnd: lineEnd, value: undefined });
|
|
401
|
+
lineStart = lineEnd + 1;
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
if (trimmed.startsWith("["))
|
|
405
|
+
return null; // a nested table header — shouldn't happen; bail safe if it does
|
|
406
|
+
const eqIdx = findFirstUnexcluded(blockText, lineStart, lineEnd, "=", strings);
|
|
407
|
+
if (eqIdx === -1)
|
|
408
|
+
return null; // not a `key = value` line — unsupported shape
|
|
409
|
+
const rawKey = blockText.slice(lineStart, eqIdx).trim();
|
|
410
|
+
let key;
|
|
411
|
+
if (/^[A-Za-z0-9_-]+$/.test(rawKey)) {
|
|
412
|
+
key = rawKey;
|
|
413
|
+
}
|
|
414
|
+
else if ((rawKey.startsWith('"') && rawKey.endsWith('"') && rawKey.length >= 2) ||
|
|
415
|
+
(rawKey.startsWith("'") && rawKey.endsWith("'") && rawKey.length >= 2)) {
|
|
416
|
+
key = rawKey.slice(1, -1);
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
return null; // dotted or otherwise-unsupported key shape
|
|
420
|
+
}
|
|
421
|
+
if (seenKeys.has(key))
|
|
422
|
+
return null; // duplicate key within this table — invalid TOML, fail closed
|
|
423
|
+
seenKeys.add(key);
|
|
424
|
+
const commentIdx = findFirstUnexcluded(blockText, eqIdx + 1, lineEnd, "#", strings);
|
|
425
|
+
const rawValueEnd = commentIdx === -1 ? lineEnd : commentIdx;
|
|
426
|
+
// Trim whitespace around the value by scanning for the first/last
|
|
427
|
+
// non-whitespace offsets directly (avoids ambiguity from `.indexOf` on a
|
|
428
|
+
// char that could recur inside the value itself).
|
|
429
|
+
let vs = eqIdx + 1;
|
|
430
|
+
while (vs < rawValueEnd && /\s/.test(blockText[vs]))
|
|
431
|
+
vs++;
|
|
432
|
+
let ve = rawValueEnd;
|
|
433
|
+
while (ve > vs && /\s/.test(blockText[ve - 1]))
|
|
434
|
+
ve--;
|
|
435
|
+
let value;
|
|
436
|
+
const raw = blockText.slice(vs, ve);
|
|
437
|
+
if (raw.length > 0 && (raw[0] === '"' || raw[0] === "[")) {
|
|
438
|
+
try {
|
|
439
|
+
const parsed = JSON.parse(raw);
|
|
440
|
+
if (typeof parsed === "string")
|
|
441
|
+
value = parsed;
|
|
442
|
+
else if (Array.isArray(parsed) && parsed.every((x) => typeof x === "string"))
|
|
443
|
+
value = parsed;
|
|
444
|
+
}
|
|
445
|
+
catch {
|
|
446
|
+
/* leave undefined — unsupported value shape */
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
if (value === undefined)
|
|
450
|
+
return null; // unsupported value shape (number/bool/date/literal-string/inline-table/…)
|
|
451
|
+
lines.push({ lineStart, lineEnd, key, valueStart: vs, valueEnd: ve, value });
|
|
452
|
+
lineStart = lineEnd + 1;
|
|
453
|
+
}
|
|
454
|
+
return lines;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Returns the table body's simple key→value map, or null if any line inside
|
|
458
|
+
* it isn't one of the supported simple shapes (see tokenizeSimpleTomlBody).
|
|
459
|
+
* Includes EVERY key found, not just ones the caller expects — this is how
|
|
460
|
+
* callers detect an unexpected extra key (e.g. a hand-added `env`) as part
|
|
461
|
+
* of deciding whether a table is safely CodeBus-owned.
|
|
462
|
+
*/
|
|
463
|
+
export function parseSimpleTomlTable(blockText) {
|
|
464
|
+
const lines = tokenizeSimpleTomlBody(blockText);
|
|
465
|
+
if (lines === null)
|
|
466
|
+
return null;
|
|
467
|
+
const result = {};
|
|
468
|
+
for (const line of lines) {
|
|
469
|
+
if (line.key !== null && line.value !== undefined)
|
|
470
|
+
result[line.key] = line.value;
|
|
471
|
+
}
|
|
472
|
+
return result;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Rewrites ONLY the value portion of `key = value` lines whose key appears
|
|
476
|
+
* in `replacements`, leaving every other byte of the block — blank lines,
|
|
477
|
+
* comments, unrelated keys, trailing per-line comments, whitespace — exactly
|
|
478
|
+
* as it was. Caller must have already confirmed (via parseSimpleTomlTable)
|
|
479
|
+
* that the block tokenizes cleanly; returns null otherwise so a caller can
|
|
480
|
+
* fail closed instead of guessing.
|
|
481
|
+
*/
|
|
482
|
+
export function replaceSimpleTomlValues(blockText, replacements) {
|
|
483
|
+
const lines = tokenizeSimpleTomlBody(blockText);
|
|
484
|
+
if (lines === null)
|
|
485
|
+
return null;
|
|
486
|
+
let out = "";
|
|
487
|
+
let cursor = 0;
|
|
488
|
+
for (const line of lines) {
|
|
489
|
+
if (line.key !== null && Object.prototype.hasOwnProperty.call(replacements, line.key)) {
|
|
490
|
+
const newValue = replacements[line.key];
|
|
491
|
+
const encoded = Array.isArray(newValue) ? `[${newValue.map((v) => JSON.stringify(v)).join(", ")}]` : JSON.stringify(newValue);
|
|
492
|
+
out += blockText.slice(cursor, line.valueStart) + encoded;
|
|
493
|
+
cursor = line.valueEnd;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
out += blockText.slice(cursor);
|
|
497
|
+
return out;
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Replaces `\uXXXX` and `\UXXXXXXXX` escapes with their literal characters
|
|
501
|
+
* ANYWHERE in the text, ignoring every other escape and all unescaped
|
|
502
|
+
* content — a crude, best-effort widening used ONLY by
|
|
503
|
+
* mightReferenceOurTable() below, never by anything that actually parses or
|
|
504
|
+
* edits the file. A malformed/out-of-range escape is left exactly as-is
|
|
505
|
+
* (this is a sniff, not a validator: under-decoding just means the sniff's
|
|
506
|
+
* regex might miss it, which is the same "safe absence conclusion" risk
|
|
507
|
+
* mightReferenceOurTable already exists to shrink, not a new hazard).
|
|
508
|
+
*/
|
|
509
|
+
function crudelyWidenUnicodeEscapes(text) {
|
|
510
|
+
return text
|
|
511
|
+
.replace(/\\u([0-9A-Fa-f]{4})/g, (m, hex) => String.fromCharCode(parseInt(hex, 16)))
|
|
512
|
+
.replace(/\\U([0-9A-Fa-f]{8})/g, (m, hex) => {
|
|
513
|
+
const codePoint = parseInt(hex, 16);
|
|
514
|
+
return codePoint <= 0x10ffff ? String.fromCodePoint(codePoint) : m;
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Cheap, deliberately LOOSE sniff test: does ANYTHING in the text look even
|
|
519
|
+
* vaguely like it could be introducing an `mcp_servers.codebus` table —
|
|
520
|
+
* including forms findTopLevelTableBlock() doesn't structurally support
|
|
521
|
+
* (array-of-tables `[[mcp_servers.codebus]]`, a header form our lexer
|
|
522
|
+
* failed to fully validate, an edge case neither of us anticipated) —
|
|
523
|
+
* INCLUDING an escaped spelling like `[[mcp_servers."codebus"]]` (sol
|
|
524
|
+
* round-4 finding #2: the literal words "mcp_servers"/"codebus" don't
|
|
525
|
+
* appear as consecutive characters in an escaped header, so the regex alone
|
|
526
|
+
* would miss it; this widens the text first via crudelyWidenUnicodeEscapes
|
|
527
|
+
* so an escaped spelling is decoded to its literal one before matching)?
|
|
528
|
+
*
|
|
529
|
+
* Why this exists (sol round-2 finding #3): findTopLevelTableBlock()
|
|
530
|
+
* returning null is supposed to mean "genuinely absent," and install.ts
|
|
531
|
+
* treats that as safe to APPEND a fresh section. But null is *also* what a
|
|
532
|
+
* structurally-unsupported-but-real header produces (e.g. array-of-tables),
|
|
533
|
+
* and appending our own `[mcp_servers.codebus]` next to one of those risks
|
|
534
|
+
* invalid/duplicate/conflicting TOML. This loose regex — unanchored,
|
|
535
|
+
* tolerant of quoting and whitespace, matching even a single or double
|
|
536
|
+
* bracket — is used ONLY to upgrade that ambiguous "null" into "unrecognized,
|
|
537
|
+
* needs a human to look" rather than "absent, safe to append." It is NOT
|
|
538
|
+
* used for anything that actually gets parsed or edited; a false positive
|
|
539
|
+
* here only costs an extra "please check manually" message, never a wrong
|
|
540
|
+
* edit — the safe direction to err in.
|
|
541
|
+
*/
|
|
542
|
+
export function mightReferenceOurTable(text) {
|
|
543
|
+
const widened = crudelyWidenUnicodeEscapes(text);
|
|
544
|
+
return /\[\s*\[?\s*['"]?mcp_servers['"]?\s*\.\s*['"]?codebus['"]?\s*\]?\s*\]/.test(widened);
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=toml-lite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toml-lite.js","sourceRoot":"","sources":["../src/toml-lite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAcH;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAY,EAAE,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9B,gEAAgE;YAChE,kEAAkE;YAClE,kEAAkE;YAClE,oEAAoE;YACpE,mEAAmE;YACnE,2CAA2C;YAC3C,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,CAAC,IAAI,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACb,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBACjD,CAAC,EAAE,CAAC;YACN,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9B,sEAAsE;YACtE,oDAAoD;YACpD,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,CAAC,IAAI,CAAC,CAAC;YACP,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAC3C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,CAAC,EAAE,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBACpC,CAAC,EAAE,CAAC;YACN,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,yEAAyE;YACzE,MAAM,KAAK,GAAG,CAAC,CAAC;YAChB,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,uGAAuG;AACvG,SAAS,cAAc,CAAC,GAAW,EAAE,MAAe;IAClD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,GAAG,GAAG,CAAC;YAAE,MAAM;IACrB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,SAAS,mBAAmB,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU,EAAE,IAAY,EAAE,QAAiB;IAClG,KAAK,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC;YAAE,OAAO,GAAG,CAAC;IACvE,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACjF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,GAAG,IAAI,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;QACtE,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,GAAG;gBAAE,GAAG,IAAI,IAAI,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;YACrC,KAAK,GAAG;gBAAE,GAAG,IAAI,IAAI,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;YACrC,KAAK,GAAG;gBAAE,GAAG,IAAI,IAAI,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;YACrC,KAAK,GAAG;gBAAE,GAAG,IAAI,IAAI,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;YACrC,KAAK,GAAG;gBAAE,GAAG,IAAI,IAAI,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;YACrC,KAAK,GAAG;gBAAE,GAAG,IAAI,GAAG,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;YACpC,KAAK,IAAI;gBAAE,GAAG,IAAI,IAAI,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;YACtC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC/C,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9C,CAAC,IAAI,CAAC,CAAC;gBACP,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACpC,IAAI,SAAS,GAAG,QAAQ;oBAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;gBACxE,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,yDAAyD;gBACjG,CAAC,IAAI,EAAE,CAAC;gBACR,MAAM;YACR,CAAC;YACD;gBACE,OAAO,IAAI,CAAC,CAAC,sBAAsB;QACvC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5E,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACnF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;QACnF,CAAC;aAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD;;;;;;;;;;;GAWG;AACH,yEAAyE;AACzE,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,uEAAuE;AACvE,uDAAuD;AACvD,EAAE;AACF,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AACxE,oEAAoE;AACpE,mEAAmE;AACnE,0EAA0E;AAC1E,mEAAmE;AACnE,sEAAsE;AACtE,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AACxE,2EAA2E;AAC3E,uEAAuE;AACvE,iBAAiB;AACjB,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,uDAAuD,EAAE,IAAI,CAAC,CAAC;AAEtG,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,2BAA2B;IAC/G,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1C,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC;YAAE,SAAS;QAC/C,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,CAAC,CAAC,KAAK;YAClB,OAAO,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;YAC9B,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAWD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,SAAmB;IACtE,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9G,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,oDAAoD;IACnG,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACrF,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC5D,CAAC;AAeD;;;;;;;;;;;;GAYG;AACH,SAAS,sBAAsB,CAAC,SAAiB;IAC/C,0EAA0E;IAC1E,sEAAsE;IACtE,qEAAqE;IACrE,oDAAoD;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;IAC3B,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,uEAAuE;IACvE,qEAAqE;IACrE,uEAAuE;IACvE,0EAA0E;IAC1E,qEAAqE;IACrE,uEAAuE;IACvE,oEAAoE;IACpE,wEAAwE;IACxE,kEAAkE;IAClE,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAE3D,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACxG,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,iEAAiE;QAE3G,MAAM,KAAK,GAAG,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/E,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,+CAA+C;QAE9E,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,GAAkB,CAAC;QACvB,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,GAAG,GAAG,MAAM,CAAC;QACf,CAAC;aAAM,IACL,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACtE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,EACtE,CAAC;YACD,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,CAAC,4CAA4C;QAC3D,CAAC;QACD,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,8DAA8D;QAClG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElB,MAAM,UAAU,GAAG,mBAAmB,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACpF,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7D,kEAAkE;QAClE,yEAAyE;QACzE,kDAAkD;QAClD,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QACnB,OAAO,EAAE,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAAE,EAAE,EAAE,CAAC;QAC1D,IAAI,EAAE,GAAG,WAAW,CAAC;QACrB,OAAO,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAAE,EAAE,EAAE,CAAC;QAErD,IAAI,KAAoC,CAAC;QACzC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ;oBAAE,KAAK,GAAG,MAAM,CAAC;qBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;oBAAE,KAAK,GAAG,MAAM,CAAC;YAC/F,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;QACH,CAAC;QACD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,CAAC,2EAA2E;QAEjH,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,KAAK,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,MAAM,GAAsC,EAAE,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IACnF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAiB,EACjB,YAA+C;IAE/C,MAAM,KAAK,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtF,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC9H,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;YAC1D,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;IACH,CAAC;IACD,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,0BAA0B,CAAC,IAAY;IAC9C,OAAO,IAAI;SACR,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;SACnF,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpC,OAAO,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,sEAAsE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9F,CAAC"}
|