@untangle-code/context-artifacts 0.0.0-stage → 0.1.1
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/LICENSE +661 -0
- package/NOTICE +90 -0
- package/README.md +247 -2
- package/THIRD_PARTY_LICENSES.md +24 -0
- package/dist/adapters/asyncapi.d.ts +20 -0
- package/dist/adapters/asyncapi.d.ts.map +1 -0
- package/dist/adapters/asyncapi.js +95 -0
- package/dist/adapters/asyncapi.js.map +1 -0
- package/dist/adapters/docker.d.ts +43 -0
- package/dist/adapters/docker.d.ts.map +1 -0
- package/dist/adapters/docker.js +97 -0
- package/dist/adapters/docker.js.map +1 -0
- package/dist/adapters/kubernetes.d.ts +22 -0
- package/dist/adapters/kubernetes.d.ts.map +1 -0
- package/dist/adapters/kubernetes.js +56 -0
- package/dist/adapters/kubernetes.js.map +1 -0
- package/dist/adapters/markdown.d.ts +35 -0
- package/dist/adapters/markdown.d.ts.map +1 -0
- package/dist/adapters/markdown.js +36 -0
- package/dist/adapters/markdown.js.map +1 -0
- package/dist/adapters/openapi.d.ts +21 -0
- package/dist/adapters/openapi.d.ts.map +1 -0
- package/dist/adapters/openapi.js +101 -0
- package/dist/adapters/openapi.js.map +1 -0
- package/dist/adapters/protobuf.d.ts +34 -0
- package/dist/adapters/protobuf.d.ts.map +1 -0
- package/dist/adapters/protobuf.js +221 -0
- package/dist/adapters/protobuf.js.map +1 -0
- package/dist/adapters/shared.d.ts +65 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/shared.js +95 -0
- package/dist/adapters/shared.js.map +1 -0
- package/dist/adapters/sql.d.ts +104 -0
- package/dist/adapters/sql.d.ts.map +1 -0
- package/dist/adapters/sql.js +427 -0
- package/dist/adapters/sql.js.map +1 -0
- package/dist/adapters/terraform.d.ts +40 -0
- package/dist/adapters/terraform.d.ts.map +1 -0
- package/dist/adapters/terraform.js +186 -0
- package/dist/adapters/terraform.js.map +1 -0
- package/dist/adapters/text.d.ts +24 -0
- package/dist/adapters/text.d.ts.map +1 -0
- package/dist/adapters/text.js +31 -0
- package/dist/adapters/text.js.map +1 -0
- package/dist/config-validation.d.ts +18 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/config-validation.js +30 -0
- package/dist/config-validation.js.map +1 -0
- package/dist/coverage.d.ts +114 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +0 -0
- package/dist/coverage.js.map +1 -0
- package/dist/ids.d.ts +12 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/ids.js +42 -0
- package/dist/ids.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +51 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +86 -0
- package/dist/registry.js.map +1 -0
- package/dist/staleness.d.ts +44 -0
- package/dist/staleness.d.ts.map +1 -0
- package/dist/staleness.js +35 -0
- package/dist/staleness.js.map +1 -0
- package/dist/text/delimiter-balance.d.ts +95 -0
- package/dist/text/delimiter-balance.d.ts.map +1 -0
- package/dist/text/delimiter-balance.js +209 -0
- package/dist/text/delimiter-balance.js.map +1 -0
- package/dist/text/line-index.d.ts +61 -0
- package/dist/text/line-index.d.ts.map +1 -0
- package/dist/text/line-index.js +75 -0
- package/dist/text/line-index.js.map +1 -0
- package/dist/text/yaml-lite.d.ts +73 -0
- package/dist/text/yaml-lite.d.ts.map +1 -0
- package/dist/text/yaml-lite.js +486 -0
- package/dist/text/yaml-lite.js.map +1 -0
- package/package.json +61 -3
- package/src/adapters/__golden__/adr-0001-sections.json +68 -0
- package/src/adapters/__golden__/app-compose-services.json +24 -0
- package/src/adapters/__golden__/app-image-stages.json +24 -0
- package/src/adapters/__golden__/infra-main-sections.json +46 -0
- package/src/adapters/__golden__/orders-events-operations.json +24 -0
- package/src/adapters/__golden__/orders-proto-sections.json +57 -0
- package/src/adapters/__golden__/orders-schema-statements.json +68 -0
- package/src/adapters/__golden__/users-api-operations.json +46 -0
- package/src/adapters/__golden__/web-manifests-resources.json +24 -0
- package/src/adapters/asyncapi.ts +147 -0
- package/src/adapters/docker.ts +170 -0
- package/src/adapters/kubernetes.ts +103 -0
- package/src/adapters/markdown.ts +88 -0
- package/src/adapters/openapi.ts +156 -0
- package/src/adapters/protobuf.ts +286 -0
- package/src/adapters/shared.ts +151 -0
- package/src/adapters/sql.ts +555 -0
- package/src/adapters/terraform.ts +261 -0
- package/src/adapters/text.ts +72 -0
- package/src/config-validation.ts +41 -0
- package/src/coverage.ts +336 -0
- package/src/ids.ts +57 -0
- package/src/index.ts +105 -0
- package/src/registry.ts +155 -0
- package/src/staleness.ts +69 -0
- package/src/text/delimiter-balance.ts +295 -0
- package/src/text/line-index.ts +108 -0
- package/src/text/yaml-lite.ts +565 -0
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal block-style YAML subset parser.
|
|
3
|
+
*
|
|
4
|
+
* No YAML/JSON library is added here deliberately (see README
|
|
5
|
+
* "Entscheidungen"): this package's assigned paths cannot touch the
|
|
6
|
+
* workspace root lockfile, so pulling in an external dependency mid-wave
|
|
7
|
+
* would require an edit no other agent could safely race against. Instead
|
|
8
|
+
* this module implements exactly the YAML subset OpenAPI/AsyncAPI/
|
|
9
|
+
* Kubernetes/Compose documents actually use in practice: block mappings
|
|
10
|
+
* and sequences via indentation, single-line flow collections (`{a: 1}`,
|
|
11
|
+
* `[a, b]`), plain/single/double-quoted scalars, `|`/`>` block scalars,
|
|
12
|
+
* `#` comments, and `---`/`...` document separators. NOT supported:
|
|
13
|
+
* anchors/aliases, tags, multi-line flow collections, complex mapping
|
|
14
|
+
* keys. A document using one of those fails to parse — `parseYamlNode`
|
|
15
|
+
* throws `YamlParseError`, which every adapter using this module catches
|
|
16
|
+
* and turns into a visible degrade (architecture.md §22.2: "Parserfehler
|
|
17
|
+
* degradieren auf Textanalyse"), never a crash.
|
|
18
|
+
*/
|
|
19
|
+
export class YamlParseError extends Error {
|
|
20
|
+
line;
|
|
21
|
+
constructor(message, line) {
|
|
22
|
+
super(`line ${line}: ${message}`);
|
|
23
|
+
this.line = line;
|
|
24
|
+
this.name = "YamlParseError";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Splits raw content into `---`-separated document spans (Kubernetes
|
|
29
|
+
* manifests, spec.md §19 "je Dokument eine Ressource"). A leading `---` is
|
|
30
|
+
* just the start of the first document, not an empty document before it. A
|
|
31
|
+
* trailing `...` end-marker line is treated the same as `---` for the
|
|
32
|
+
* purpose of ending a document.
|
|
33
|
+
*/
|
|
34
|
+
export function splitYamlDocuments(content) {
|
|
35
|
+
const lines = content.split("\n");
|
|
36
|
+
const spans = [];
|
|
37
|
+
let start = 0; // 0-based index into `lines`
|
|
38
|
+
const flush = (endExclusive) => {
|
|
39
|
+
const body = lines.slice(start, endExclusive).join("\n");
|
|
40
|
+
if (body.trim().length > 0) {
|
|
41
|
+
spans.push({ startLine: start + 1, endLine: endExclusive, text: body });
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
45
|
+
if (/^---\s*$/.test(lines[i] ?? "") || /^\.\.\.\s*$/.test(lines[i] ?? "")) {
|
|
46
|
+
flush(i);
|
|
47
|
+
start = i + 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
flush(lines.length);
|
|
51
|
+
return spans;
|
|
52
|
+
}
|
|
53
|
+
function stripTrailingComment(text) {
|
|
54
|
+
let inSingle = false;
|
|
55
|
+
let inDouble = false;
|
|
56
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
57
|
+
const c = text[i];
|
|
58
|
+
if (inSingle) {
|
|
59
|
+
if (c === "'")
|
|
60
|
+
inSingle = false;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (inDouble) {
|
|
64
|
+
if (c === '"' && text[i - 1] !== "\\")
|
|
65
|
+
inDouble = false;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (c === "'") {
|
|
69
|
+
inSingle = true;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (c === '"') {
|
|
73
|
+
inDouble = true;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (c === "#" && (i === 0 || /\s/.test(text[i - 1] ?? ""))) {
|
|
77
|
+
return text.slice(0, i).replace(/\s+$/, "");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return text;
|
|
81
|
+
}
|
|
82
|
+
function prepareLines(text, lineOffset) {
|
|
83
|
+
const rawLines = text.split("\n");
|
|
84
|
+
const prepared = [];
|
|
85
|
+
for (const [index, rawLine] of rawLines.entries()) {
|
|
86
|
+
const lineNumber = lineOffset + index + 1;
|
|
87
|
+
if (rawLine.trim().length === 0)
|
|
88
|
+
continue;
|
|
89
|
+
const leadingMatch = /^[ ]*/.exec(rawLine);
|
|
90
|
+
const indent = leadingMatch ? leadingMatch[0].length : 0;
|
|
91
|
+
if (/^[ ]*\t/.test(rawLine)) {
|
|
92
|
+
throw new YamlParseError("tab characters are not allowed in indentation", lineNumber);
|
|
93
|
+
}
|
|
94
|
+
const withoutIndent = rawLine.slice(indent);
|
|
95
|
+
if (withoutIndent.startsWith("#"))
|
|
96
|
+
continue; // full-line comment
|
|
97
|
+
const stripped = stripTrailingComment(withoutIndent).replace(/[ \t]+$/, "");
|
|
98
|
+
if (stripped.length === 0)
|
|
99
|
+
continue; // comment-only line
|
|
100
|
+
prepared.push({ number: lineNumber, indent, text: stripped });
|
|
101
|
+
}
|
|
102
|
+
return prepared;
|
|
103
|
+
}
|
|
104
|
+
function parseScalarText(raw, line) {
|
|
105
|
+
const text = raw.trim();
|
|
106
|
+
if (text.length === 0 || text === "~" || text === "null" || text === "Null" || text === "NULL") {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
if (text.startsWith('"') && text.endsWith('"') && text.length >= 2) {
|
|
110
|
+
return unescapeDoubleQuoted(text.slice(1, -1), line);
|
|
111
|
+
}
|
|
112
|
+
if (text.startsWith("'") && text.endsWith("'") && text.length >= 2) {
|
|
113
|
+
return text.slice(1, -1).replace(/''/g, "'");
|
|
114
|
+
}
|
|
115
|
+
if (text === "true" || text === "True" || text === "TRUE")
|
|
116
|
+
return true;
|
|
117
|
+
if (text === "false" || text === "False" || text === "FALSE")
|
|
118
|
+
return false;
|
|
119
|
+
if (/^-?\d+$/.test(text))
|
|
120
|
+
return Number.parseInt(text, 10);
|
|
121
|
+
if (/^-?\d+\.\d+$/.test(text))
|
|
122
|
+
return Number.parseFloat(text);
|
|
123
|
+
return text;
|
|
124
|
+
}
|
|
125
|
+
function unescapeDoubleQuoted(text, line) {
|
|
126
|
+
let result = "";
|
|
127
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
128
|
+
const c = text[i];
|
|
129
|
+
if (c === "\\") {
|
|
130
|
+
const next = text[i + 1];
|
|
131
|
+
if (next === undefined) {
|
|
132
|
+
throw new YamlParseError("dangling escape at end of double-quoted scalar", line);
|
|
133
|
+
}
|
|
134
|
+
const map = { n: "\n", t: "\t", r: "\r", '"': '"', "\\": "\\" };
|
|
135
|
+
result += map[next] ?? next;
|
|
136
|
+
i += 1;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
result += c;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
/** Finds the top-level (unquoted, unbracketed) `:` that separates a mapping key from its value. */
|
|
145
|
+
function findKeyColon(text, line) {
|
|
146
|
+
let inSingle = false;
|
|
147
|
+
let inDouble = false;
|
|
148
|
+
let depth = 0;
|
|
149
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
150
|
+
const c = text[i];
|
|
151
|
+
if (inSingle) {
|
|
152
|
+
if (c === "'")
|
|
153
|
+
inSingle = false;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (inDouble) {
|
|
157
|
+
if (c === '"' && text[i - 1] !== "\\")
|
|
158
|
+
inDouble = false;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (c === "'") {
|
|
162
|
+
inSingle = true;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (c === '"') {
|
|
166
|
+
inDouble = true;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (c === "{" || c === "[") {
|
|
170
|
+
depth += 1;
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (c === "}" || c === "]") {
|
|
174
|
+
depth -= 1;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (c === ":" && depth === 0 && (i + 1 === text.length || /\s/.test(text[i + 1] ?? ""))) {
|
|
178
|
+
return i;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
throw new YamlParseError(`expected a mapping "key:" or a sequence "- item", got "${text}"`, line);
|
|
182
|
+
}
|
|
183
|
+
function parseKeyText(rawKey) {
|
|
184
|
+
const key = rawKey.trim();
|
|
185
|
+
if (key.startsWith('"') && key.endsWith('"') && key.length >= 2)
|
|
186
|
+
return key.slice(1, -1);
|
|
187
|
+
if (key.startsWith("'") && key.endsWith("'") && key.length >= 2)
|
|
188
|
+
return key.slice(1, -1);
|
|
189
|
+
return key;
|
|
190
|
+
}
|
|
191
|
+
function skipFlowSpace(cursor) {
|
|
192
|
+
while (cursor.pos < cursor.text.length && /\s/.test(cursor.text[cursor.pos] ?? "")) {
|
|
193
|
+
cursor.pos += 1;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function parseFlowValue(cursor) {
|
|
197
|
+
skipFlowSpace(cursor);
|
|
198
|
+
const c = cursor.text[cursor.pos];
|
|
199
|
+
if (c === "{")
|
|
200
|
+
return parseFlowMap(cursor);
|
|
201
|
+
if (c === "[")
|
|
202
|
+
return parseFlowSeq(cursor);
|
|
203
|
+
return parseFlowScalar(cursor);
|
|
204
|
+
}
|
|
205
|
+
function parseFlowScalar(cursor) {
|
|
206
|
+
const start = cursor.pos;
|
|
207
|
+
if (cursor.text[cursor.pos] === '"' || cursor.text[cursor.pos] === "'") {
|
|
208
|
+
const quote = cursor.text[cursor.pos];
|
|
209
|
+
cursor.pos += 1;
|
|
210
|
+
let raw = quote;
|
|
211
|
+
while (cursor.pos < cursor.text.length && cursor.text[cursor.pos] !== quote) {
|
|
212
|
+
if (cursor.text[cursor.pos] === "\\" && quote === '"') {
|
|
213
|
+
raw += cursor.text.slice(cursor.pos, cursor.pos + 2);
|
|
214
|
+
cursor.pos += 2;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
raw += cursor.text[cursor.pos] ?? "";
|
|
218
|
+
cursor.pos += 1;
|
|
219
|
+
}
|
|
220
|
+
raw += quote;
|
|
221
|
+
cursor.pos += 1;
|
|
222
|
+
return {
|
|
223
|
+
kind: "scalar",
|
|
224
|
+
startLine: cursor.line,
|
|
225
|
+
endLine: cursor.line,
|
|
226
|
+
value: parseScalarText(raw, cursor.line),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
while (cursor.pos < cursor.text.length && !",]}".includes(cursor.text[cursor.pos] ?? "")) {
|
|
230
|
+
cursor.pos += 1;
|
|
231
|
+
}
|
|
232
|
+
const raw = cursor.text.slice(start, cursor.pos).trim();
|
|
233
|
+
return {
|
|
234
|
+
kind: "scalar",
|
|
235
|
+
startLine: cursor.line,
|
|
236
|
+
endLine: cursor.line,
|
|
237
|
+
value: parseScalarText(raw, cursor.line),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function parseFlowSeq(cursor) {
|
|
241
|
+
const startLine = cursor.line;
|
|
242
|
+
cursor.pos += 1; // consume '['
|
|
243
|
+
const items = [];
|
|
244
|
+
skipFlowSpace(cursor);
|
|
245
|
+
while (cursor.pos < cursor.text.length && cursor.text[cursor.pos] !== "]") {
|
|
246
|
+
items.push(parseFlowValue(cursor));
|
|
247
|
+
skipFlowSpace(cursor);
|
|
248
|
+
if (cursor.text[cursor.pos] === ",") {
|
|
249
|
+
cursor.pos += 1;
|
|
250
|
+
skipFlowSpace(cursor);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (cursor.text[cursor.pos] !== "]") {
|
|
254
|
+
throw new YamlParseError("unterminated flow sequence (missing ']')", cursor.line);
|
|
255
|
+
}
|
|
256
|
+
cursor.pos += 1;
|
|
257
|
+
return { kind: "seq", startLine, endLine: cursor.line, items };
|
|
258
|
+
}
|
|
259
|
+
function parseFlowMap(cursor) {
|
|
260
|
+
const startLine = cursor.line;
|
|
261
|
+
cursor.pos += 1; // consume '{'
|
|
262
|
+
const entries = [];
|
|
263
|
+
skipFlowSpace(cursor);
|
|
264
|
+
while (cursor.pos < cursor.text.length && cursor.text[cursor.pos] !== "}") {
|
|
265
|
+
const keyStart = cursor.pos;
|
|
266
|
+
while (cursor.pos < cursor.text.length && cursor.text[cursor.pos] !== ":") {
|
|
267
|
+
cursor.pos += 1;
|
|
268
|
+
}
|
|
269
|
+
const key = parseKeyText(cursor.text.slice(keyStart, cursor.pos));
|
|
270
|
+
if (cursor.text[cursor.pos] !== ":") {
|
|
271
|
+
throw new YamlParseError("expected ':' in flow mapping entry", cursor.line);
|
|
272
|
+
}
|
|
273
|
+
cursor.pos += 1;
|
|
274
|
+
const value = parseFlowValue(cursor);
|
|
275
|
+
entries.push({ key, keyLine: cursor.line, value });
|
|
276
|
+
skipFlowSpace(cursor);
|
|
277
|
+
if (cursor.text[cursor.pos] === ",") {
|
|
278
|
+
cursor.pos += 1;
|
|
279
|
+
skipFlowSpace(cursor);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (cursor.text[cursor.pos] !== "}") {
|
|
283
|
+
throw new YamlParseError("unterminated flow mapping (missing '}')", cursor.line);
|
|
284
|
+
}
|
|
285
|
+
cursor.pos += 1;
|
|
286
|
+
return { kind: "map", startLine, endLine: cursor.line, entries };
|
|
287
|
+
}
|
|
288
|
+
function parseFlow(text, line) {
|
|
289
|
+
const cursor = { text, pos: 0, line };
|
|
290
|
+
const node = parseFlowValue(cursor);
|
|
291
|
+
skipFlowSpace(cursor);
|
|
292
|
+
if (cursor.pos !== text.length) {
|
|
293
|
+
throw new YamlParseError("trailing content after flow collection (multi-line flow is not supported)", line);
|
|
294
|
+
}
|
|
295
|
+
return node;
|
|
296
|
+
}
|
|
297
|
+
function parseBlock(lines, startIndex, indent) {
|
|
298
|
+
const first = lines[startIndex];
|
|
299
|
+
if (first === undefined) {
|
|
300
|
+
throw new YamlParseError("unexpected end of document", lines[startIndex - 1]?.number ?? 0);
|
|
301
|
+
}
|
|
302
|
+
if (first.text === "-" || first.text.startsWith("- ")) {
|
|
303
|
+
return parseSequence(lines, startIndex, indent);
|
|
304
|
+
}
|
|
305
|
+
return parseMapping(lines, startIndex, indent);
|
|
306
|
+
}
|
|
307
|
+
function parseSequence(lines, startIndex, indent) {
|
|
308
|
+
const items = [];
|
|
309
|
+
let i = startIndex;
|
|
310
|
+
const startLine = lines[startIndex].number;
|
|
311
|
+
let endLine = startLine;
|
|
312
|
+
while (i < lines.length) {
|
|
313
|
+
const line = lines[i];
|
|
314
|
+
if (line === undefined ||
|
|
315
|
+
line.indent !== indent ||
|
|
316
|
+
!(line.text === "-" || line.text.startsWith("- "))) {
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
const rest = line.text === "-" ? "" : line.text.slice(2);
|
|
320
|
+
if (rest.trim().length === 0) {
|
|
321
|
+
i += 1;
|
|
322
|
+
const next = lines[i];
|
|
323
|
+
if (next !== undefined && next.indent > indent) {
|
|
324
|
+
const nested = parseBlock(lines, i, next.indent);
|
|
325
|
+
items.push(nested.node);
|
|
326
|
+
endLine = nested.node.endLine;
|
|
327
|
+
i = nested.nextIndex;
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
items.push({ kind: "scalar", startLine: line.number, endLine: line.number, value: null });
|
|
331
|
+
endLine = line.number;
|
|
332
|
+
}
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
if (rest.trimStart().startsWith("{") || rest.trimStart().startsWith("[")) {
|
|
336
|
+
const node = parseFlow(rest.trim(), line.number);
|
|
337
|
+
items.push(node);
|
|
338
|
+
endLine = node.endLine;
|
|
339
|
+
i += 1;
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
// "- key: value" (mapping shorthand) — rewrite as a mapping continued by
|
|
343
|
+
// any following lines indented to align with where "key" started.
|
|
344
|
+
const virtualIndent = indent + (line.text.length - rest.length);
|
|
345
|
+
const isMapEntry = looksLikeMapKey(rest);
|
|
346
|
+
if (isMapEntry) {
|
|
347
|
+
const rewritten = [
|
|
348
|
+
{ number: line.number, indent: virtualIndent, text: rest },
|
|
349
|
+
...lines.slice(i + 1),
|
|
350
|
+
];
|
|
351
|
+
const nested = parseMapping(rewritten, 0, virtualIndent);
|
|
352
|
+
items.push(nested.node);
|
|
353
|
+
endLine = nested.node.endLine;
|
|
354
|
+
i = i + nested.nextIndex; // rewritten[0] === original index i
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
const scalar = parseScalarNode(rest, line.number);
|
|
358
|
+
items.push(scalar);
|
|
359
|
+
endLine = scalar.endLine;
|
|
360
|
+
i += 1;
|
|
361
|
+
}
|
|
362
|
+
return { node: { kind: "seq", startLine, endLine, items }, nextIndex: i };
|
|
363
|
+
}
|
|
364
|
+
function looksLikeMapKey(text) {
|
|
365
|
+
try {
|
|
366
|
+
findKeyColon(text, 0);
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
function parseScalarNode(rest, line) {
|
|
374
|
+
const trimmed = rest.trim();
|
|
375
|
+
if (trimmed.startsWith("|") || trimmed.startsWith(">")) {
|
|
376
|
+
// A block scalar indicator with no following indented lines here just
|
|
377
|
+
// degrades to an empty string — the multi-line case is handled in
|
|
378
|
+
// parseMapping, which owns the following-lines lookahead.
|
|
379
|
+
return { kind: "scalar", startLine: line, endLine: line, value: "" };
|
|
380
|
+
}
|
|
381
|
+
return { kind: "scalar", startLine: line, endLine: line, value: parseScalarText(trimmed, line) };
|
|
382
|
+
}
|
|
383
|
+
function parseMapping(lines, startIndex, indent) {
|
|
384
|
+
const entries = [];
|
|
385
|
+
let i = startIndex;
|
|
386
|
+
const startLine = lines[startIndex].number;
|
|
387
|
+
let endLine = startLine;
|
|
388
|
+
while (i < lines.length) {
|
|
389
|
+
const line = lines[i];
|
|
390
|
+
if (line === undefined ||
|
|
391
|
+
line.indent !== indent ||
|
|
392
|
+
line.text === "-" ||
|
|
393
|
+
line.text.startsWith("- ")) {
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
const colonIndex = findKeyColon(line.text, line.number);
|
|
397
|
+
const key = parseKeyText(line.text.slice(0, colonIndex));
|
|
398
|
+
const rawValue = line.text.slice(colonIndex + 1).trim();
|
|
399
|
+
if (rawValue.length === 0) {
|
|
400
|
+
i += 1;
|
|
401
|
+
const next = lines[i];
|
|
402
|
+
if (next !== undefined && next.indent > indent) {
|
|
403
|
+
const nested = parseBlock(lines, i, next.indent);
|
|
404
|
+
entries.push({ key, keyLine: line.number, value: nested.node });
|
|
405
|
+
endLine = nested.node.endLine;
|
|
406
|
+
i = nested.nextIndex;
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
entries.push({
|
|
410
|
+
key,
|
|
411
|
+
keyLine: line.number,
|
|
412
|
+
value: { kind: "scalar", startLine: line.number, endLine: line.number, value: null },
|
|
413
|
+
});
|
|
414
|
+
endLine = line.number;
|
|
415
|
+
}
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
if (rawValue.startsWith("|") || rawValue.startsWith(">")) {
|
|
419
|
+
const folded = rawValue.startsWith(">");
|
|
420
|
+
i += 1;
|
|
421
|
+
const blockIndent = lines[i]?.indent;
|
|
422
|
+
const collected = [];
|
|
423
|
+
let lastLine = line.number;
|
|
424
|
+
while (i < lines.length &&
|
|
425
|
+
blockIndent !== undefined &&
|
|
426
|
+
(lines[i]?.indent ?? -1) >= blockIndent) {
|
|
427
|
+
const current = lines[i];
|
|
428
|
+
collected.push(current.text);
|
|
429
|
+
lastLine = current.number;
|
|
430
|
+
i += 1;
|
|
431
|
+
}
|
|
432
|
+
const value = folded ? collected.join(" ") : collected.join("\n");
|
|
433
|
+
entries.push({
|
|
434
|
+
key,
|
|
435
|
+
keyLine: line.number,
|
|
436
|
+
value: { kind: "scalar", startLine: line.number, endLine: lastLine, value },
|
|
437
|
+
});
|
|
438
|
+
endLine = lastLine;
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
if (rawValue.startsWith("{") || rawValue.startsWith("[")) {
|
|
442
|
+
const node = parseFlow(rawValue, line.number);
|
|
443
|
+
entries.push({ key, keyLine: line.number, value: node });
|
|
444
|
+
endLine = node.endLine;
|
|
445
|
+
i += 1;
|
|
446
|
+
continue;
|
|
447
|
+
}
|
|
448
|
+
const scalar = parseScalarNode(rawValue, line.number);
|
|
449
|
+
entries.push({ key, keyLine: line.number, value: scalar });
|
|
450
|
+
endLine = scalar.endLine;
|
|
451
|
+
i += 1;
|
|
452
|
+
}
|
|
453
|
+
return { node: { kind: "map", startLine, endLine, entries }, nextIndex: i };
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Parses one YAML document's full text (e.g. one `splitYamlDocuments()`
|
|
457
|
+
* span) into a `YamlNode` tree. Line numbers on every node are 1-based
|
|
458
|
+
* WITHIN `text` — add `lineOffset` (a span's `startLine - 1`) yourself when
|
|
459
|
+
* mapping back to the original multi-document file. Returns `null` for a
|
|
460
|
+
* document that is empty or comments-only. Throws `YamlParseError` (never
|
|
461
|
+
* any other error type) on anything outside the supported subset.
|
|
462
|
+
*/
|
|
463
|
+
export function parseYamlNode(text, lineOffset = 0) {
|
|
464
|
+
const lines = prepareLines(text, lineOffset);
|
|
465
|
+
if (lines.length === 0)
|
|
466
|
+
return null;
|
|
467
|
+
const result = parseBlock(lines, 0, lines[0].indent);
|
|
468
|
+
if (result.nextIndex !== lines.length) {
|
|
469
|
+
const trailing = lines[result.nextIndex];
|
|
470
|
+
throw new YamlParseError("unexpected indentation / trailing content at document top level", trailing?.number ?? lines.at(-1).number);
|
|
471
|
+
}
|
|
472
|
+
return result.node;
|
|
473
|
+
}
|
|
474
|
+
// --- Small walk helpers used by adapters. ---
|
|
475
|
+
export function mapGet(node, key) {
|
|
476
|
+
if (node === undefined || node === null || node.kind !== "map")
|
|
477
|
+
return undefined;
|
|
478
|
+
return node.entries.find((entry) => entry.key === key)?.value;
|
|
479
|
+
}
|
|
480
|
+
export function scalarString(node) {
|
|
481
|
+
if (node === undefined || node === null || node.kind !== "scalar" || node.value === null) {
|
|
482
|
+
return undefined;
|
|
483
|
+
}
|
|
484
|
+
return String(node.value);
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=yaml-lite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-lite.js","sourceRoot":"","sources":["../../src/text/yaml-lite.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@untangle-code/context-artifacts",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "Untangle context artifact adapters: Markdown/ADR, SQL schema, OpenAPI/AsyncAPI, Protobuf, Terraform/HCL, Kubernetes YAML, Docker/Compose and a safe text fallback, aggregated behind one ArtifactAdapter registry (spec.md §19, architecture.md §20).",
|
|
7
|
+
"license": "AGPL-3.0-only",
|
|
8
|
+
"homepage": "https://github.com/lboel/untangle",
|
|
9
|
+
"bugs": {
|
|
10
|
+
"url": "https://github.com/lboel/untangle/issues"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/lboel/untangle.git",
|
|
15
|
+
"directory": "packages/context-artifacts"
|
|
16
|
+
},
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": "^22.13.0 || >=24.0.0"
|
|
22
|
+
},
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"default": "./dist/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"!dist/**/*.test.*",
|
|
32
|
+
"!dist/**/test-helpers.*",
|
|
33
|
+
"!dist/**/test-support.*",
|
|
34
|
+
"!dist/**/test-support/**",
|
|
35
|
+
"!dist/**/testing/**",
|
|
36
|
+
"!dist/**/__tests__/**",
|
|
37
|
+
"src",
|
|
38
|
+
"!src/**/*.test.ts",
|
|
39
|
+
"!src/**/test-helpers.ts",
|
|
40
|
+
"!src/**/test-support.ts",
|
|
41
|
+
"!src/**/test-support/**",
|
|
42
|
+
"!src/**/testing/**",
|
|
43
|
+
"LICENSE",
|
|
44
|
+
"NOTICE",
|
|
45
|
+
"README.md",
|
|
46
|
+
"THIRD_PARTY_LICENSES.md"
|
|
47
|
+
],
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@untangle-code/domain": "0.1.1",
|
|
50
|
+
"@untangle-code/observability": "0.1.1"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "22.19.7",
|
|
54
|
+
"typescript": "5.9.3",
|
|
55
|
+
"vitest": "3.2.7",
|
|
56
|
+
"@untangle-code/testkit": "0.1.1"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "node ../../scripts/tsc-build.mjs tsconfig.json",
|
|
60
|
+
"typecheck": "tsc -p tsconfig.typecheck.json",
|
|
61
|
+
"test": "vitest run",
|
|
62
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
63
|
+
}
|
|
6
64
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"content": "# ADR 0001: Use SQLite\n\n",
|
|
4
|
+
"kind": "markdown_section",
|
|
5
|
+
"range": {
|
|
6
|
+
"endByte": 24,
|
|
7
|
+
"endLine": 2,
|
|
8
|
+
"startByte": 0,
|
|
9
|
+
"startLine": 1
|
|
10
|
+
},
|
|
11
|
+
"title": "ADR 0001: Use SQLite"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"content": "## Status\n\nAccepted\n\n",
|
|
15
|
+
"kind": "markdown_section",
|
|
16
|
+
"range": {
|
|
17
|
+
"endByte": 45,
|
|
18
|
+
"endLine": 6,
|
|
19
|
+
"startByte": 24,
|
|
20
|
+
"startLine": 3
|
|
21
|
+
},
|
|
22
|
+
"title": "ADR 0001: Use SQLite › Status"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"content": "## Context\n\nWe need a small embedded database for local-first storage.\n\n",
|
|
26
|
+
"kind": "markdown_section",
|
|
27
|
+
"range": {
|
|
28
|
+
"endByte": 117,
|
|
29
|
+
"endLine": 10,
|
|
30
|
+
"startByte": 45,
|
|
31
|
+
"startLine": 7
|
|
32
|
+
},
|
|
33
|
+
"title": "ADR 0001: Use SQLite › Context"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"content": "### Alternatives Considered\n\n- Postgres — too heavy for a single-user desktop app.\n- MySQL — same concern, plus an extra service to run.\n\n",
|
|
37
|
+
"kind": "markdown_section",
|
|
38
|
+
"range": {
|
|
39
|
+
"endByte": 259,
|
|
40
|
+
"endLine": 15,
|
|
41
|
+
"startByte": 117,
|
|
42
|
+
"startLine": 11
|
|
43
|
+
},
|
|
44
|
+
"title": "ADR 0001: Use SQLite › Context › Alternatives Considered"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"content": "## Decision\n\nWe will use SQLite via better-sqlite3.\n\n```ts\n// a fenced code block containing a fake \"## heading\" that must NOT be sectioned\nconst notAHeading = \"## not a real heading\";\n```\n\n",
|
|
48
|
+
"kind": "markdown_section",
|
|
49
|
+
"range": {
|
|
50
|
+
"endByte": 449,
|
|
51
|
+
"endLine": 24,
|
|
52
|
+
"startByte": 259,
|
|
53
|
+
"startLine": 16
|
|
54
|
+
},
|
|
55
|
+
"title": "ADR 0001: Use SQLite › Decision"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"content": "## Consequences\n\nSimpler ops, less horizontal scale.\n",
|
|
59
|
+
"kind": "markdown_section",
|
|
60
|
+
"range": {
|
|
61
|
+
"endByte": 502,
|
|
62
|
+
"endLine": 28,
|
|
63
|
+
"startByte": 449,
|
|
64
|
+
"startLine": 25
|
|
65
|
+
},
|
|
66
|
+
"title": "ADR 0001: Use SQLite › Consequences"
|
|
67
|
+
}
|
|
68
|
+
]
|