@coral-viz/language 0.2.3

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.
Files changed (47) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +5 -0
  3. package/dist/diagnostics.d.ts +81 -0
  4. package/dist/diagnostics.d.ts.map +1 -0
  5. package/dist/diagnostics.js +59 -0
  6. package/dist/diagnostics.js.map +1 -0
  7. package/dist/formats/dot.d.ts +23 -0
  8. package/dist/formats/dot.d.ts.map +1 -0
  9. package/dist/formats/dot.js +541 -0
  10. package/dist/formats/dot.js.map +1 -0
  11. package/dist/formats/index.d.ts +6 -0
  12. package/dist/formats/index.d.ts.map +1 -0
  13. package/dist/formats/index.js +6 -0
  14. package/dist/formats/index.js.map +1 -0
  15. package/dist/formats/mermaid.d.ts +29 -0
  16. package/dist/formats/mermaid.d.ts.map +1 -0
  17. package/dist/formats/mermaid.js +1051 -0
  18. package/dist/formats/mermaid.js.map +1 -0
  19. package/dist/formats/plantuml.d.ts +20 -0
  20. package/dist/formats/plantuml.d.ts.map +1 -0
  21. package/dist/formats/plantuml.js +271 -0
  22. package/dist/formats/plantuml.js.map +1 -0
  23. package/dist/ids.d.ts +36 -0
  24. package/dist/ids.d.ts.map +1 -0
  25. package/dist/ids.js +69 -0
  26. package/dist/ids.js.map +1 -0
  27. package/dist/index.d.ts +11 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +14 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/parser/index.d.ts +13 -0
  32. package/dist/parser/index.d.ts.map +1 -0
  33. package/dist/parser/index.js +415 -0
  34. package/dist/parser/index.js.map +1 -0
  35. package/dist/printer/index.d.ts +47 -0
  36. package/dist/printer/index.d.ts.map +1 -0
  37. package/dist/printer/index.js +392 -0
  38. package/dist/printer/index.js.map +1 -0
  39. package/dist/strings.d.ts +17 -0
  40. package/dist/strings.d.ts.map +1 -0
  41. package/dist/strings.js +48 -0
  42. package/dist/strings.js.map +1 -0
  43. package/dist/types.d.ts +40 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +2 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +64 -0
@@ -0,0 +1,541 @@
1
+ /**
2
+ * Graphviz DOT Importer
3
+ *
4
+ * Converts Graphviz DOT syntax to Graph-IR.
5
+ * Supports: digraph, graph, subgraph/cluster
6
+ *
7
+ * DOT syntax reference:
8
+ * - digraph G { A -> B; }
9
+ * - graph G { A -- B; }
10
+ * - Node attributes: A [label="Label", shape=box];
11
+ * - Edge attributes: A -> B [label="flow"];
12
+ * - Clusters: subgraph cluster_name { ... }
13
+ */
14
+ import { finishParse, parseDiagnostic, } from '../diagnostics.js';
15
+ /** Where the token the stream is looking at begins. */
16
+ function positionAt(stream) {
17
+ return (stream.positions[Math.min(stream.pos, stream.positions.length - 1)] ?? {
18
+ line: 1,
19
+ column: 0,
20
+ offset: 0,
21
+ });
22
+ }
23
+ /**
24
+ * Parse Graphviz DOT syntax into Graph-IR
25
+ */
26
+ export function parseDot(source, options = {}) {
27
+ const trimmed = source.trim();
28
+ if (!trimmed) {
29
+ return finishParse([
30
+ parseDiagnostic({
31
+ severity: 'error',
32
+ code: 'dot.input.unparsed',
33
+ message: 'Empty input',
34
+ position: { line: 1, column: 0, offset: 0 },
35
+ }),
36
+ ]);
37
+ }
38
+ const ctx = {
39
+ nodeMap: new Map(),
40
+ edges: [],
41
+ edgeCounter: 0,
42
+ diagnostics: [],
43
+ graphId: options.graphId || 'dot-graph',
44
+ isDirected: true,
45
+ layoutOptions: {},
46
+ };
47
+ let stream;
48
+ try {
49
+ const { tokens, positions } = tokenize(trimmed);
50
+ stream = { tokens, positions, pos: 0 };
51
+ parseGraph(stream, ctx);
52
+ }
53
+ catch (e) {
54
+ // A tokenizer that runs off the end surfaces as a TypeError; report it as a
55
+ // positioned diagnostic rather than leaking the internal message (R-009 AC-8).
56
+ const raw = e instanceof Error ? e.message : 'Parse error';
57
+ const message = /Cannot read properties of undefined/.test(raw)
58
+ ? 'Unexpected end of input'
59
+ : raw;
60
+ ctx.diagnostics.push(parseDiagnostic({
61
+ severity: 'error',
62
+ code: 'dot.input.unparsed',
63
+ message,
64
+ position: stream ? positionAt(stream) : { line: 1, column: 0, offset: 0 },
65
+ }));
66
+ }
67
+ // Build final node list (top-level nodes only)
68
+ const nodes = [];
69
+ for (const node of ctx.nodeMap.values()) {
70
+ if (!node.parent) {
71
+ nodes.push(node);
72
+ }
73
+ }
74
+ const graph = {
75
+ version: '1.0.0',
76
+ id: ctx.graphId,
77
+ nodes,
78
+ edges: ctx.edges,
79
+ };
80
+ if (options.graphName) {
81
+ graph.name = options.graphName;
82
+ }
83
+ if (Object.keys(ctx.layoutOptions).length > 0) {
84
+ graph.layoutOptions = ctx.layoutOptions;
85
+ }
86
+ return finishParse(ctx.diagnostics, graph);
87
+ }
88
+ /**
89
+ * Strip comments from DOT source before tokenization.
90
+ * Handles // line comments and /* block comments *​/
91
+ */
92
+ function stripComments(source) {
93
+ let result = '';
94
+ let i = 0;
95
+ let inString = false;
96
+ let stringChar = '';
97
+ while (i < source.length) {
98
+ // Track strings to avoid stripping inside them
99
+ if (inString) {
100
+ result += source[i];
101
+ if (source[i] === '\\' && i + 1 < source.length) {
102
+ result += source[i + 1];
103
+ i += 2;
104
+ continue;
105
+ }
106
+ if (source[i] === stringChar) {
107
+ inString = false;
108
+ }
109
+ i++;
110
+ continue;
111
+ }
112
+ if (source[i] === '"' || source[i] === "'") {
113
+ inString = true;
114
+ stringChar = source[i];
115
+ result += source[i];
116
+ i++;
117
+ continue;
118
+ }
119
+ // Line comment: // — blanked rather than removed, so every offset in the
120
+ // cleaned text is still an offset into the original source.
121
+ if (source[i] === '/' && source[i + 1] === '/') {
122
+ while (i < source.length && source[i] !== '\n') {
123
+ result += ' ';
124
+ i++;
125
+ }
126
+ continue;
127
+ }
128
+ // Block comment: /* ... */ — blanked, newlines preserved.
129
+ if (source[i] === '/' && source[i + 1] === '*') {
130
+ result += ' ';
131
+ i += 2;
132
+ while (i < source.length && !(source[i] === '*' && source[i + 1] === '/')) {
133
+ result += source[i] === '\n' ? '\n' : ' ';
134
+ i++;
135
+ }
136
+ if (i < source.length) {
137
+ result += ' ';
138
+ i += 2;
139
+ }
140
+ continue;
141
+ }
142
+ result += source[i];
143
+ i++;
144
+ }
145
+ return result;
146
+ }
147
+ /**
148
+ * Tokenize DOT source
149
+ */
150
+ function tokenize(source) {
151
+ // Strip comments first (blanked in place, so offsets still line up)
152
+ const cleaned = stripComments(source);
153
+ const positions = [];
154
+ const positionOf = (offset) => {
155
+ let line = 1;
156
+ let lineStart = 0;
157
+ for (let j = 0; j < offset; j++) {
158
+ if (cleaned[j] === '\n') {
159
+ line++;
160
+ lineStart = j + 1;
161
+ }
162
+ }
163
+ return { line, column: offset - lineStart, offset };
164
+ };
165
+ let tokenStart = 0;
166
+ const tokens = [];
167
+ let current = '';
168
+ let inString = false;
169
+ let stringChar = '';
170
+ let escaped = false;
171
+ const push = (token, start) => {
172
+ tokens.push(token);
173
+ positions.push(positionOf(start));
174
+ };
175
+ for (let i = 0; i < cleaned.length; i++) {
176
+ const char = cleaned[i];
177
+ if (inString) {
178
+ if (escaped) {
179
+ current += char;
180
+ escaped = false;
181
+ continue;
182
+ }
183
+ if (char === '\\') {
184
+ current += char;
185
+ escaped = true;
186
+ continue;
187
+ }
188
+ current += char;
189
+ if (char === stringChar) {
190
+ push(current, tokenStart);
191
+ current = '';
192
+ inString = false;
193
+ }
194
+ continue;
195
+ }
196
+ if (char === '"' || char === "'") {
197
+ if (current) {
198
+ push(current, tokenStart);
199
+ current = '';
200
+ }
201
+ tokenStart = i;
202
+ inString = true;
203
+ stringChar = char;
204
+ current = char;
205
+ continue;
206
+ }
207
+ if (/\s/.test(char)) {
208
+ if (current) {
209
+ push(current, tokenStart);
210
+ current = '';
211
+ }
212
+ continue;
213
+ }
214
+ // Handle multi-char operators
215
+ if (char === '-' && cleaned[i + 1] === '>') {
216
+ if (current)
217
+ push(current, tokenStart);
218
+ push('->', i);
219
+ current = '';
220
+ i++;
221
+ continue;
222
+ }
223
+ if (char === '-' && cleaned[i + 1] === '-') {
224
+ if (current)
225
+ push(current, tokenStart);
226
+ push('--', i);
227
+ current = '';
228
+ i++;
229
+ continue;
230
+ }
231
+ // Single char delimiters
232
+ if ('{};[],='.includes(char)) {
233
+ if (current) {
234
+ push(current, tokenStart);
235
+ current = '';
236
+ }
237
+ push(char, i);
238
+ continue;
239
+ }
240
+ if (!current)
241
+ tokenStart = i;
242
+ current += char;
243
+ }
244
+ // Check for unterminated string
245
+ if (inString) {
246
+ throw new Error('Unterminated string literal');
247
+ }
248
+ if (current) {
249
+ push(current, tokenStart);
250
+ }
251
+ return { tokens, positions };
252
+ }
253
+ function peek(stream) {
254
+ return stream.tokens[stream.pos];
255
+ }
256
+ function consume(stream) {
257
+ return stream.tokens[stream.pos++];
258
+ }
259
+ function expect(stream, expected) {
260
+ const token = consume(stream);
261
+ if (token !== expected) {
262
+ throw new Error(`Expected '${expected}', got '${token}'`);
263
+ }
264
+ }
265
+ function parseGraph(stream, ctx, parentId) {
266
+ const keyword = consume(stream);
267
+ if (keyword === 'digraph') {
268
+ ctx.isDirected = true;
269
+ }
270
+ else if (keyword === 'graph') {
271
+ ctx.isDirected = false;
272
+ }
273
+ else if (keyword === 'subgraph') {
274
+ // Handled below
275
+ }
276
+ else {
277
+ throw new Error(`Expected 'digraph', 'graph', or 'subgraph', got '${keyword}'`);
278
+ }
279
+ // Get graph name (optional)
280
+ let graphName;
281
+ if (peek(stream) !== '{') {
282
+ graphName = parseId(stream);
283
+ if (keyword !== 'subgraph') {
284
+ ctx.graphId = graphName;
285
+ }
286
+ }
287
+ expect(stream, '{');
288
+ // For subgraphs, create a group node
289
+ let subgraphNode;
290
+ if (keyword === 'subgraph' && graphName) {
291
+ subgraphNode = {
292
+ id: graphName,
293
+ type: 'group',
294
+ label: graphName,
295
+ children: [],
296
+ };
297
+ if (parentId) {
298
+ subgraphNode.parent = parentId;
299
+ }
300
+ ctx.nodeMap.set(graphName, subgraphNode);
301
+ }
302
+ // Parse statements
303
+ while (peek(stream) && peek(stream) !== '}') {
304
+ parseStatement(stream, ctx, subgraphNode?.id, subgraphNode);
305
+ }
306
+ expect(stream, '}');
307
+ }
308
+ function parseStatement(stream, ctx, parentId, parentNode) {
309
+ const token = peek(stream);
310
+ if (!token)
311
+ return;
312
+ // Handle subgraph
313
+ if (token === 'subgraph') {
314
+ parseGraph(stream, ctx, parentId);
315
+ if (peek(stream) === ';')
316
+ consume(stream);
317
+ return;
318
+ }
319
+ // Handle graph attributes (e.g., rankdir=LR)
320
+ if (token === 'graph' || token === 'node' || token === 'edge') {
321
+ consume(stream); // skip keyword
322
+ if (peek(stream) === '[') {
323
+ const attrs = parseAttributes(stream);
324
+ if (token === 'graph') {
325
+ applyGraphAttributes(attrs, ctx, parentNode);
326
+ }
327
+ }
328
+ if (peek(stream) === ';')
329
+ consume(stream);
330
+ return;
331
+ }
332
+ // A punctuation token here is not a statement. It used to fall through into
333
+ // parseId and become a node whose id was ';' (R-009 AC-8).
334
+ if (';,]}='.includes(token) && token.length === 1) {
335
+ ctx.diagnostics.push(parseDiagnostic({
336
+ severity: token === ';' ? 'info' : 'error',
337
+ code: 'dot.token.unparsed',
338
+ message: `Unexpected '${token}'`,
339
+ position: positionAt(stream),
340
+ source: token,
341
+ }));
342
+ consume(stream);
343
+ return;
344
+ }
345
+ // Parse node or edge statement
346
+ const id = parseId(stream);
347
+ // Check for attribute-only statement (graph attribute like label=X or rankdir=LR)
348
+ if (peek(stream) === '=') {
349
+ consume(stream); // =
350
+ const value = parseId(stream);
351
+ applyGraphAttributes({ [id]: value }, ctx, parentNode);
352
+ if (peek(stream) === ';')
353
+ consume(stream);
354
+ return;
355
+ }
356
+ // Check for edge
357
+ if (peek(stream) === '->' || peek(stream) === '--') {
358
+ parseEdgeChain(stream, ctx, id, parentId);
359
+ if (peek(stream) === ';')
360
+ consume(stream);
361
+ return;
362
+ }
363
+ // It's a node declaration
364
+ let attrs = {};
365
+ if (peek(stream) === '[') {
366
+ attrs = parseAttributes(stream);
367
+ }
368
+ ensureNode(ctx, id, attrs, parentId);
369
+ if (peek(stream) === ';')
370
+ consume(stream);
371
+ }
372
+ function parseId(stream) {
373
+ const token = consume(stream);
374
+ // Handle quoted strings — unescape inner content
375
+ if (token.startsWith('"') && token.endsWith('"')) {
376
+ return unescapeString(token.slice(1, -1));
377
+ }
378
+ if (token.startsWith("'") && token.endsWith("'")) {
379
+ return unescapeString(token.slice(1, -1));
380
+ }
381
+ return token;
382
+ }
383
+ function unescapeString(str) {
384
+ let result = '';
385
+ for (let i = 0; i < str.length; i++) {
386
+ if (str[i] === '\\' && i + 1 < str.length) {
387
+ const next = str[i + 1];
388
+ if (next === '"') {
389
+ result += '"';
390
+ i++;
391
+ }
392
+ else if (next === "'") {
393
+ result += "'";
394
+ i++;
395
+ }
396
+ else if (next === 'n') {
397
+ result += '\n';
398
+ i++;
399
+ }
400
+ else if (next === 't') {
401
+ result += '\t';
402
+ i++;
403
+ }
404
+ else if (next === '\\') {
405
+ result += '\\';
406
+ i++;
407
+ }
408
+ else {
409
+ result += str[i];
410
+ }
411
+ }
412
+ else {
413
+ result += str[i];
414
+ }
415
+ }
416
+ return result;
417
+ }
418
+ function parseAttributes(stream) {
419
+ const attrs = {};
420
+ expect(stream, '[');
421
+ while (peek(stream) && peek(stream) !== ']') {
422
+ const key = parseId(stream);
423
+ if (peek(stream) === '=') {
424
+ consume(stream); // =
425
+ const value = parseId(stream);
426
+ attrs[key] = value;
427
+ }
428
+ if (peek(stream) === ',') {
429
+ consume(stream);
430
+ }
431
+ }
432
+ expect(stream, ']');
433
+ return attrs;
434
+ }
435
+ function parseEdgeChain(stream, ctx, firstId, parentId) {
436
+ let currentId = firstId;
437
+ ensureNode(ctx, currentId, {}, parentId);
438
+ while (peek(stream) === '->' || peek(stream) === '--') {
439
+ consume(stream); // arrow
440
+ const nextId = parseId(stream);
441
+ ensureNode(ctx, nextId, {}, parentId);
442
+ let attrs = {};
443
+ if (peek(stream) === '[') {
444
+ attrs = parseAttributes(stream);
445
+ }
446
+ const edge = {
447
+ id: `edge_${++ctx.edgeCounter}`,
448
+ source: currentId,
449
+ target: nextId,
450
+ };
451
+ if (attrs.label) {
452
+ edge.label = attrs.label;
453
+ }
454
+ if (attrs.style) {
455
+ edge.style = parseEdgeStyle(attrs.style);
456
+ }
457
+ ctx.edges.push(edge);
458
+ currentId = nextId;
459
+ }
460
+ // Handle attributes after the chain
461
+ if (peek(stream) === '[') {
462
+ const attrs = parseAttributes(stream);
463
+ // Apply to last edge
464
+ if (ctx.edges.length > 0) {
465
+ const lastEdge = ctx.edges[ctx.edges.length - 1];
466
+ if (attrs.label)
467
+ lastEdge.label = attrs.label;
468
+ if (attrs.style)
469
+ lastEdge.style = parseEdgeStyle(attrs.style);
470
+ }
471
+ }
472
+ }
473
+ function ensureNode(ctx, id, attrs, parentId) {
474
+ if (ctx.nodeMap.has(id)) {
475
+ // Update existing node with new attributes
476
+ const node = ctx.nodeMap.get(id);
477
+ if (attrs.label)
478
+ node.label = attrs.label;
479
+ if (attrs.shape)
480
+ node.type = shapeToType(attrs.shape);
481
+ return;
482
+ }
483
+ const node = {
484
+ id,
485
+ type: shapeToType(attrs.shape),
486
+ label: attrs.label || id,
487
+ };
488
+ if (parentId) {
489
+ node.parent = parentId;
490
+ const parent = ctx.nodeMap.get(parentId);
491
+ if (parent && parent.children) {
492
+ parent.children.push(node);
493
+ }
494
+ }
495
+ ctx.nodeMap.set(id, node);
496
+ }
497
+ function shapeToType(shape) {
498
+ switch (shape) {
499
+ case 'cylinder':
500
+ case 'Mcylinder':
501
+ return 'database';
502
+ case 'ellipse':
503
+ case 'circle':
504
+ case 'doublecircle':
505
+ return 'actor';
506
+ case 'diamond':
507
+ return 'module';
508
+ case 'box':
509
+ case 'rect':
510
+ case 'rectangle':
511
+ case 'square':
512
+ default:
513
+ return 'service';
514
+ }
515
+ }
516
+ function parseEdgeStyle(style) {
517
+ const result = {};
518
+ if (style.includes('dashed')) {
519
+ result.lineStyle = 'dashed';
520
+ }
521
+ else if (style.includes('dotted')) {
522
+ result.lineStyle = 'dotted';
523
+ }
524
+ return result;
525
+ }
526
+ function applyGraphAttributes(attrs, ctx, parentNode) {
527
+ if (attrs.rankdir) {
528
+ const dirMap = {
529
+ TB: 'DOWN',
530
+ BT: 'UP',
531
+ LR: 'RIGHT',
532
+ RL: 'LEFT',
533
+ };
534
+ ctx.layoutOptions.direction = dirMap[attrs.rankdir.toUpperCase()] || 'DOWN';
535
+ }
536
+ // Update subgraph label if we're inside one
537
+ if (attrs.label && parentNode) {
538
+ parentNode.label = attrs.label;
539
+ }
540
+ }
541
+ //# sourceMappingURL=dot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dot.js","sourceRoot":"","sources":["../../src/formats/dot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Format importers for converting external diagram formats to Graph-IR
3
+ */
4
+ export { parseMermaid, type MermaidParseOptions } from './mermaid.js';
5
+ export { parseDot, type DotParseOptions } from './dot.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formats/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Format importers for converting external diagram formats to Graph-IR
3
+ */
4
+ export { parseMermaid } from './mermaid.js';
5
+ export { parseDot } from './dot.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formats/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAA4B,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAwB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Mermaid Diagram Importer
3
+ *
4
+ * Converts Mermaid diagram syntax to Graph-IR.
5
+ *
6
+ * Supported diagram types (Mermaid v11.12.2):
7
+ * - flowchart/graph
8
+ * - sequenceDiagram
9
+ * - classDiagram
10
+ * - stateDiagram / stateDiagram-v2
11
+ * - erDiagram
12
+ * - timeline
13
+ * - block-beta
14
+ * - packet-beta
15
+ * - kanban
16
+ * - architecture-beta
17
+ *
18
+ * See SPECS.md for version tracking and feature status.
19
+ */
20
+ import type { ParseResult } from '../types.js';
21
+ export interface MermaidParseOptions {
22
+ graphId?: string;
23
+ graphName?: string;
24
+ }
25
+ /**
26
+ * Parse Mermaid diagram syntax into Graph-IR
27
+ */
28
+ export declare function parseMermaid(source: string, options?: MermaidParseOptions): ParseResult;
29
+ //# sourceMappingURL=mermaid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../src/formats/mermaid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiCD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAwB,GAChC,WAAW,CA4Eb"}