@aetherwing/fcp-drawio 0.2.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.
Files changed (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/dist/adapter.d.ts +38 -0
  4. package/dist/adapter.js +259 -0
  5. package/dist/adapter.js.map +1 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +6 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/layout/elk-layout.d.ts +49 -0
  10. package/dist/layout/elk-layout.js +144 -0
  11. package/dist/layout/elk-layout.js.map +1 -0
  12. package/dist/lib/drawio-cli.d.ts +22 -0
  13. package/dist/lib/drawio-cli.js +88 -0
  14. package/dist/lib/drawio-cli.js.map +1 -0
  15. package/dist/lib/node-types.d.ts +22 -0
  16. package/dist/lib/node-types.js +174 -0
  17. package/dist/lib/node-types.js.map +1 -0
  18. package/dist/lib/stencils/aws.d.ts +2 -0
  19. package/dist/lib/stencils/aws.js +69 -0
  20. package/dist/lib/stencils/aws.js.map +1 -0
  21. package/dist/lib/stencils/azure.d.ts +2 -0
  22. package/dist/lib/stencils/azure.js +54 -0
  23. package/dist/lib/stencils/azure.js.map +1 -0
  24. package/dist/lib/stencils/cisco.d.ts +2 -0
  25. package/dist/lib/stencils/cisco.js +30 -0
  26. package/dist/lib/stencils/cisco.js.map +1 -0
  27. package/dist/lib/stencils/gcp.d.ts +2 -0
  28. package/dist/lib/stencils/gcp.js +38 -0
  29. package/dist/lib/stencils/gcp.js.map +1 -0
  30. package/dist/lib/stencils/ibm.d.ts +2 -0
  31. package/dist/lib/stencils/ibm.js +32 -0
  32. package/dist/lib/stencils/ibm.js.map +1 -0
  33. package/dist/lib/stencils/index.d.ts +10 -0
  34. package/dist/lib/stencils/index.js +33 -0
  35. package/dist/lib/stencils/index.js.map +1 -0
  36. package/dist/lib/stencils/k8s.d.ts +2 -0
  37. package/dist/lib/stencils/k8s.js +32 -0
  38. package/dist/lib/stencils/k8s.js.map +1 -0
  39. package/dist/lib/stencils/types.d.ts +14 -0
  40. package/dist/lib/stencils/types.js +2 -0
  41. package/dist/lib/stencils/types.js.map +1 -0
  42. package/dist/lib/themes.d.ts +8 -0
  43. package/dist/lib/themes.js +32 -0
  44. package/dist/lib/themes.js.map +1 -0
  45. package/dist/model/defaults.d.ts +3 -0
  46. package/dist/model/defaults.js +26 -0
  47. package/dist/model/defaults.js.map +1 -0
  48. package/dist/model/diagram-model.d.ts +110 -0
  49. package/dist/model/diagram-model.js +938 -0
  50. package/dist/model/diagram-model.js.map +1 -0
  51. package/dist/model/event-log.d.ts +30 -0
  52. package/dist/model/event-log.js +112 -0
  53. package/dist/model/event-log.js.map +1 -0
  54. package/dist/model/id.d.ts +9 -0
  55. package/dist/model/id.js +35 -0
  56. package/dist/model/id.js.map +1 -0
  57. package/dist/model/reference-registry.d.ts +33 -0
  58. package/dist/model/reference-registry.js +143 -0
  59. package/dist/model/reference-registry.js.map +1 -0
  60. package/dist/model/spatial.d.ts +20 -0
  61. package/dist/model/spatial.js +59 -0
  62. package/dist/model/spatial.js.map +1 -0
  63. package/dist/parser/parse-op.d.ts +18 -0
  64. package/dist/parser/parse-op.js +430 -0
  65. package/dist/parser/parse-op.js.map +1 -0
  66. package/dist/parser/resolve-ref.d.ts +27 -0
  67. package/dist/parser/resolve-ref.js +232 -0
  68. package/dist/parser/resolve-ref.js.map +1 -0
  69. package/dist/parser/tokenizer.d.ts +6 -0
  70. package/dist/parser/tokenizer.js +7 -0
  71. package/dist/parser/tokenizer.js.map +1 -0
  72. package/dist/serialization/connector-intelligence.d.ts +35 -0
  73. package/dist/serialization/connector-intelligence.js +336 -0
  74. package/dist/serialization/connector-intelligence.js.map +1 -0
  75. package/dist/serialization/deserialize.d.ts +6 -0
  76. package/dist/serialization/deserialize.js +511 -0
  77. package/dist/serialization/deserialize.js.map +1 -0
  78. package/dist/serialization/serialize.d.ts +15 -0
  79. package/dist/serialization/serialize.js +332 -0
  80. package/dist/serialization/serialize.js.map +1 -0
  81. package/dist/server/intent-layer.d.ts +48 -0
  82. package/dist/server/intent-layer.js +1322 -0
  83. package/dist/server/intent-layer.js.map +1 -0
  84. package/dist/server/mcp-server.d.ts +7 -0
  85. package/dist/server/mcp-server.js +26 -0
  86. package/dist/server/mcp-server.js.map +1 -0
  87. package/dist/server/model-map.d.ts +8 -0
  88. package/dist/server/model-map.js +240 -0
  89. package/dist/server/model-map.js.map +1 -0
  90. package/dist/server/query-handler.d.ts +19 -0
  91. package/dist/server/query-handler.js +148 -0
  92. package/dist/server/query-handler.js.map +1 -0
  93. package/dist/server/response-formatter.d.ts +56 -0
  94. package/dist/server/response-formatter.js +351 -0
  95. package/dist/server/response-formatter.js.map +1 -0
  96. package/dist/server/session-handler.d.ts +6 -0
  97. package/dist/server/session-handler.js +127 -0
  98. package/dist/server/session-handler.js.map +1 -0
  99. package/dist/types/index.d.ts +238 -0
  100. package/dist/types/index.js +3 -0
  101. package/dist/types/index.js.map +1 -0
  102. package/dist/verb-specs.d.ts +6 -0
  103. package/dist/verb-specs.js +144 -0
  104. package/dist/verb-specs.js.map +1 -0
  105. package/package.json +39 -0
@@ -0,0 +1,430 @@
1
+ import { tokenize, isKeyValue, parseKeyValue, isArrow, isSelector } from "./tokenizer.js";
2
+ const VERBS = new Set([
3
+ "add", "remove", "define", "connect", "disconnect",
4
+ "style", "label", "badge", "move", "resize", "swap",
5
+ "layout", "orient", "group", "ungroup",
6
+ "layer", "page", "checkpoint", "title", "load",
7
+ ]);
8
+ /**
9
+ * Parse an operation string into a structured ParsedOp.
10
+ *
11
+ * Every operation follows: VERB [TYPE] TARGET [key:value ...]
12
+ * The verb determines how remaining tokens are interpreted.
13
+ */
14
+ export function parseOp(input) {
15
+ const raw = input.trim();
16
+ const tokens = tokenize(raw);
17
+ if (tokens.length === 0) {
18
+ return { error: "empty operation", raw };
19
+ }
20
+ const verb = tokens[0].toLowerCase();
21
+ if (!VERBS.has(verb)) {
22
+ return { error: `unknown verb "${tokens[0]}"`, raw };
23
+ }
24
+ const rest = tokens.slice(1);
25
+ switch (verb) {
26
+ case "add":
27
+ return parseAdd(rest, raw);
28
+ case "remove":
29
+ return parseSimpleTarget(verb, rest, raw);
30
+ case "define":
31
+ return parseDefine(rest, raw);
32
+ case "connect":
33
+ return parseConnect(rest, raw);
34
+ case "disconnect":
35
+ return parseDisconnect(rest, raw);
36
+ case "style":
37
+ return parseTargetWithParams(verb, rest, raw);
38
+ case "label":
39
+ return parseLabel(rest, raw);
40
+ case "badge":
41
+ return parseBadge(rest, raw);
42
+ case "move":
43
+ return parseTargetWithParams("move", rest, raw);
44
+ case "resize":
45
+ return parseTargetWithParams("resize", rest, raw);
46
+ case "swap":
47
+ return parseSwap(rest, raw);
48
+ case "group":
49
+ return parseGroup(rest, raw);
50
+ case "ungroup":
51
+ return parseSimpleTarget("ungroup", rest, raw);
52
+ case "layer":
53
+ return parseSubcommand("layer", rest, raw);
54
+ case "page":
55
+ return parseSubcommand("page", rest, raw);
56
+ case "checkpoint":
57
+ return parseSimpleTarget("checkpoint", rest, raw);
58
+ case "title":
59
+ return parseSimpleTarget("title", rest, raw);
60
+ case "layout":
61
+ return parseTargetWithParams("layout", rest, raw);
62
+ case "orient":
63
+ return parseSimpleTarget("orient", rest, raw);
64
+ case "load":
65
+ return parseSimpleTarget("load", rest, raw);
66
+ default:
67
+ return { error: `unhandled verb "${verb}"`, raw };
68
+ }
69
+ }
70
+ // ── Verb-specific parsers ────────────────────────────────
71
+ /**
72
+ * add TYPE LABEL [key:value]*
73
+ * add LABEL [key:value]* (type inferred from label)
74
+ */
75
+ function parseAdd(tokens, raw) {
76
+ if (tokens.length < 1) {
77
+ return { error: "add requires at least a label", raw };
78
+ }
79
+ const params = new Map();
80
+ const nonParams = [];
81
+ for (const token of tokens) {
82
+ if (isKeyValue(token)) {
83
+ const { key, value } = parseKeyValue(token);
84
+ params.set(key, value);
85
+ }
86
+ else if (isSelector(token)) {
87
+ // selector as target
88
+ nonParams.push(token);
89
+ }
90
+ else {
91
+ nonParams.push(token);
92
+ }
93
+ }
94
+ let type;
95
+ let target;
96
+ if (nonParams.length >= 2) {
97
+ // First non-param could be a type or the label
98
+ type = nonParams[0];
99
+ target = nonParams[1];
100
+ }
101
+ else if (nonParams.length === 1) {
102
+ target = nonParams[0];
103
+ }
104
+ else {
105
+ return { error: "add requires a label", raw };
106
+ }
107
+ return {
108
+ verb: "add",
109
+ raw,
110
+ type,
111
+ target,
112
+ params,
113
+ };
114
+ }
115
+ /**
116
+ * define NAME base:TYPE [theme:THEME] [badge:TEXT] [size:WxH]
117
+ * define theme NAME fill:#HEX stroke:#HEX [font-color:#HEX]
118
+ */
119
+ function parseDefine(tokens, raw) {
120
+ if (tokens.length < 1) {
121
+ return { error: "define requires a name", raw };
122
+ }
123
+ const params = new Map();
124
+ const nonParams = [];
125
+ for (const token of tokens) {
126
+ if (isKeyValue(token)) {
127
+ const { key, value } = parseKeyValue(token);
128
+ params.set(key, value);
129
+ }
130
+ else {
131
+ nonParams.push(token);
132
+ }
133
+ }
134
+ if (nonParams.length === 0) {
135
+ return { error: "define requires a name", raw };
136
+ }
137
+ return {
138
+ verb: "define",
139
+ raw,
140
+ target: nonParams[0],
141
+ targets: nonParams,
142
+ params,
143
+ };
144
+ }
145
+ /**
146
+ * connect REF ARROW REF [ARROW REF]* [key:value]*
147
+ */
148
+ function parseConnect(tokens, raw) {
149
+ const params = new Map();
150
+ const targets = [];
151
+ const arrows = [];
152
+ for (const token of tokens) {
153
+ if (isKeyValue(token)) {
154
+ const { key, value } = parseKeyValue(token);
155
+ params.set(key, value);
156
+ }
157
+ else if (isArrow(token)) {
158
+ arrows.push(token);
159
+ }
160
+ else {
161
+ targets.push(token);
162
+ }
163
+ }
164
+ if (targets.length < 2 || arrows.length < 1) {
165
+ return { error: "connect requires at least REF ARROW REF", raw };
166
+ }
167
+ return {
168
+ verb: "connect",
169
+ raw,
170
+ target: targets[0],
171
+ targets,
172
+ arrows,
173
+ params,
174
+ };
175
+ }
176
+ /**
177
+ * disconnect REF ARROW REF
178
+ */
179
+ function parseDisconnect(tokens, raw) {
180
+ const targets = [];
181
+ const arrows = [];
182
+ for (const token of tokens) {
183
+ if (isArrow(token)) {
184
+ arrows.push(token);
185
+ }
186
+ else if (!isKeyValue(token)) {
187
+ targets.push(token);
188
+ }
189
+ }
190
+ if (targets.length < 2) {
191
+ return { error: "disconnect requires REF ARROW REF", raw };
192
+ }
193
+ return {
194
+ verb: "disconnect",
195
+ raw,
196
+ target: targets[0],
197
+ targets,
198
+ arrows,
199
+ params: new Map(),
200
+ };
201
+ }
202
+ /**
203
+ * label REF "new text"
204
+ * label SRC -> TGT "new text"
205
+ */
206
+ function parseLabel(tokens, raw) {
207
+ if (tokens.length < 2) {
208
+ return { error: "label requires REF and text", raw };
209
+ }
210
+ const params = new Map();
211
+ const nonParams = [];
212
+ const arrows = [];
213
+ for (const token of tokens) {
214
+ if (isKeyValue(token)) {
215
+ const { key, value } = parseKeyValue(token);
216
+ params.set(key, value);
217
+ }
218
+ else if (isArrow(token)) {
219
+ arrows.push(token);
220
+ }
221
+ else {
222
+ nonParams.push(token);
223
+ }
224
+ }
225
+ // Edge form: label A -> B "text"
226
+ if (arrows.length > 0) {
227
+ if (nonParams.length < 3) {
228
+ return { error: 'label edge requires: label SRC -> TGT "text"', raw };
229
+ }
230
+ params.set("text", nonParams[2]);
231
+ return {
232
+ verb: "label",
233
+ raw,
234
+ target: nonParams[0],
235
+ targets: [nonParams[0], nonParams[1]],
236
+ arrows,
237
+ params,
238
+ };
239
+ }
240
+ // Shape form: label REF "text"
241
+ if (nonParams.length < 2) {
242
+ return { error: "label requires REF and text", raw };
243
+ }
244
+ params.set("text", nonParams[1]);
245
+ return {
246
+ verb: "label",
247
+ raw,
248
+ target: nonParams[0],
249
+ params,
250
+ };
251
+ }
252
+ /**
253
+ * badge REF "text" [pos:POSITION]
254
+ */
255
+ function parseBadge(tokens, raw) {
256
+ if (tokens.length < 2) {
257
+ return { error: "badge requires REF and text", raw };
258
+ }
259
+ const params = new Map();
260
+ const nonParams = [];
261
+ for (const token of tokens) {
262
+ if (isKeyValue(token)) {
263
+ const { key, value } = parseKeyValue(token);
264
+ params.set(key, value);
265
+ }
266
+ else {
267
+ nonParams.push(token);
268
+ }
269
+ }
270
+ if (nonParams.length < 2) {
271
+ return { error: "badge requires REF and text", raw };
272
+ }
273
+ params.set("text", nonParams[1]);
274
+ return {
275
+ verb: "badge",
276
+ raw,
277
+ target: nonParams[0],
278
+ params,
279
+ };
280
+ }
281
+ /**
282
+ * swap REF REF
283
+ */
284
+ function parseSwap(tokens, raw) {
285
+ const nonParams = tokens.filter((t) => !isKeyValue(t));
286
+ if (nonParams.length < 2) {
287
+ return { error: "swap requires two REFs", raw };
288
+ }
289
+ return {
290
+ verb: "swap",
291
+ raw,
292
+ target: nonParams[0],
293
+ targets: [nonParams[0], nonParams[1]],
294
+ params: new Map(),
295
+ };
296
+ }
297
+ /**
298
+ * group REF [REF]* as:NAME
299
+ */
300
+ function parseGroup(tokens, raw) {
301
+ const params = new Map();
302
+ const targets = [];
303
+ for (const token of tokens) {
304
+ if (isKeyValue(token)) {
305
+ const { key, value } = parseKeyValue(token);
306
+ params.set(key, value);
307
+ }
308
+ else {
309
+ targets.push(token);
310
+ }
311
+ }
312
+ if (targets.length < 1) {
313
+ return { error: "group requires at least one REF", raw };
314
+ }
315
+ if (!params.has("as")) {
316
+ return { error: 'group requires as:NAME parameter', raw };
317
+ }
318
+ return {
319
+ verb: "group",
320
+ raw,
321
+ target: targets[0],
322
+ targets,
323
+ params,
324
+ };
325
+ }
326
+ /**
327
+ * Generic: VERB TARGET [key:value]*
328
+ * Used for style, move, resize, layout
329
+ */
330
+ function parseTargetWithParams(verb, tokens, raw) {
331
+ if (tokens.length < 1) {
332
+ return { error: `${verb} requires a target`, raw };
333
+ }
334
+ const params = new Map();
335
+ let target;
336
+ let selector;
337
+ for (const token of tokens) {
338
+ if (isKeyValue(token)) {
339
+ const { key, value } = parseKeyValue(token);
340
+ params.set(key, value);
341
+ }
342
+ else if (isSelector(token) && !target) {
343
+ target = token;
344
+ selector = token;
345
+ }
346
+ else if (!target) {
347
+ target = token;
348
+ }
349
+ else {
350
+ // Bare token after target — treat as boolean flag (e.g., bold, italic, no-bold)
351
+ params.set(token, "true");
352
+ }
353
+ }
354
+ if (!target) {
355
+ return { error: `${verb} requires a target`, raw };
356
+ }
357
+ return {
358
+ verb,
359
+ raw,
360
+ target,
361
+ selector,
362
+ params,
363
+ };
364
+ }
365
+ /**
366
+ * Generic simple target: VERB TARGET
367
+ * Used for remove, ungroup, checkpoint, title
368
+ */
369
+ function parseSimpleTarget(verb, tokens, raw) {
370
+ if (tokens.length < 1) {
371
+ return { error: `${verb} requires a target`, raw };
372
+ }
373
+ // Collect params and non-param tokens
374
+ const params = new Map();
375
+ const nonParams = [];
376
+ for (const token of tokens) {
377
+ if (isKeyValue(token)) {
378
+ const { key, value } = parseKeyValue(token);
379
+ params.set(key, value);
380
+ }
381
+ else {
382
+ nonParams.push(token);
383
+ }
384
+ }
385
+ const target = nonParams[0];
386
+ if (!target) {
387
+ return { error: `${verb} requires a target`, raw };
388
+ }
389
+ return {
390
+ verb,
391
+ raw,
392
+ target,
393
+ selector: isSelector(target) ? target : undefined,
394
+ params,
395
+ };
396
+ }
397
+ /**
398
+ * Subcommand: VERB SUBCOMMAND [args]*
399
+ * Used for page and layer operations.
400
+ */
401
+ function parseSubcommand(verb, tokens, raw) {
402
+ if (tokens.length < 1) {
403
+ return { error: `${verb} requires a subcommand`, raw };
404
+ }
405
+ const subcommand = tokens[0].toLowerCase();
406
+ const rest = tokens.slice(1);
407
+ const params = new Map();
408
+ const nonParams = [];
409
+ for (const token of rest) {
410
+ if (isKeyValue(token)) {
411
+ const { key, value } = parseKeyValue(token);
412
+ params.set(key, value);
413
+ }
414
+ else {
415
+ nonParams.push(token);
416
+ }
417
+ }
418
+ return {
419
+ verb,
420
+ raw,
421
+ subcommand,
422
+ target: nonParams[0],
423
+ targets: nonParams.length > 0 ? nonParams : undefined,
424
+ params,
425
+ };
426
+ }
427
+ export function isParseError(result) {
428
+ return "error" in result;
429
+ }
430
+ //# sourceMappingURL=parse-op.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-op.js","sourceRoot":"","sources":["../../src/parser/parse-op.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Shape } from "../types/index.js";
2
+ import type { ReferenceRegistry } from "../model/reference-registry.js";
3
+ import type { DiagramModel } from "../model/diagram-model.js";
4
+ export type ResolveResult = {
5
+ kind: "single";
6
+ shape: Shape;
7
+ } | {
8
+ kind: "multiple";
9
+ shapes: Shape[];
10
+ message: string;
11
+ } | {
12
+ kind: "none";
13
+ message: string;
14
+ suggestedLabel?: string;
15
+ };
16
+ /**
17
+ * 5-level reference resolution cascade.
18
+ *
19
+ * 1. Exact label match (case-sensitive)
20
+ * 2. Case-insensitive match
21
+ * 3. Normalized match (strip hyphens, underscores, spaces)
22
+ * 4. Prefix match
23
+ * 5. Recency match (@recent)
24
+ *
25
+ * Short-circuits at the first level producing exactly one result.
26
+ */
27
+ export declare function resolveRef(ref: string, registry: ReferenceRegistry, model: DiagramModel): ResolveResult;