@fazelstudio/floe 1.0.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 (154) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/cli/check.d.ts +14 -0
  3. package/dist/src/cli/check.d.ts.map +1 -0
  4. package/dist/src/cli/check.js +88 -0
  5. package/dist/src/cli/check.js.map +1 -0
  6. package/dist/src/cli/format.d.ts +9 -0
  7. package/dist/src/cli/format.d.ts.map +1 -0
  8. package/dist/src/cli/format.js +114 -0
  9. package/dist/src/cli/format.js.map +1 -0
  10. package/dist/src/cli/main.d.ts +19 -0
  11. package/dist/src/cli/main.d.ts.map +1 -0
  12. package/dist/src/cli/main.js +207 -0
  13. package/dist/src/cli/main.js.map +1 -0
  14. package/dist/src/cli/render.d.ts +7 -0
  15. package/dist/src/cli/render.d.ts.map +1 -0
  16. package/dist/src/cli/render.js +90 -0
  17. package/dist/src/cli/render.js.map +1 -0
  18. package/dist/src/diagnostics.d.ts +32 -0
  19. package/dist/src/diagnostics.d.ts.map +1 -0
  20. package/dist/src/diagnostics.js +4 -0
  21. package/dist/src/diagnostics.js.map +1 -0
  22. package/dist/src/index.d.ts +40 -0
  23. package/dist/src/index.d.ts.map +1 -0
  24. package/dist/src/index.js +64 -0
  25. package/dist/src/index.js.map +1 -0
  26. package/dist/src/language/completion.d.ts +6 -0
  27. package/dist/src/language/completion.d.ts.map +1 -0
  28. package/dist/src/language/completion.js +363 -0
  29. package/dist/src/language/completion.js.map +1 -0
  30. package/dist/src/language/definitions.d.ts +9 -0
  31. package/dist/src/language/definitions.d.ts.map +1 -0
  32. package/dist/src/language/definitions.js +70 -0
  33. package/dist/src/language/definitions.js.map +1 -0
  34. package/dist/src/language/diagnosticsService.d.ts +14 -0
  35. package/dist/src/language/diagnosticsService.d.ts.map +1 -0
  36. package/dist/src/language/diagnosticsService.js +37 -0
  37. package/dist/src/language/diagnosticsService.js.map +1 -0
  38. package/dist/src/language/folding.d.ts +8 -0
  39. package/dist/src/language/folding.d.ts.map +1 -0
  40. package/dist/src/language/folding.js +58 -0
  41. package/dist/src/language/folding.js.map +1 -0
  42. package/dist/src/language/formatting.d.ts +5 -0
  43. package/dist/src/language/formatting.d.ts.map +1 -0
  44. package/dist/src/language/formatting.js +274 -0
  45. package/dist/src/language/formatting.js.map +1 -0
  46. package/dist/src/language/highlighting.d.ts +9 -0
  47. package/dist/src/language/highlighting.d.ts.map +1 -0
  48. package/dist/src/language/highlighting.js +74 -0
  49. package/dist/src/language/highlighting.js.map +1 -0
  50. package/dist/src/language/hover.d.ts +6 -0
  51. package/dist/src/language/hover.d.ts.map +1 -0
  52. package/dist/src/language/hover.js +197 -0
  53. package/dist/src/language/hover.js.map +1 -0
  54. package/dist/src/language/indentation.d.ts +15 -0
  55. package/dist/src/language/indentation.d.ts.map +1 -0
  56. package/dist/src/language/indentation.js +97 -0
  57. package/dist/src/language/indentation.js.map +1 -0
  58. package/dist/src/language/index.d.ts +54 -0
  59. package/dist/src/language/index.d.ts.map +1 -0
  60. package/dist/src/language/index.js +85 -0
  61. package/dist/src/language/index.js.map +1 -0
  62. package/dist/src/language/references.d.ts +12 -0
  63. package/dist/src/language/references.d.ts.map +1 -0
  64. package/dist/src/language/references.js +35 -0
  65. package/dist/src/language/references.js.map +1 -0
  66. package/dist/src/language/rename.d.ts +18 -0
  67. package/dist/src/language/rename.d.ts.map +1 -0
  68. package/dist/src/language/rename.js +53 -0
  69. package/dist/src/language/rename.js.map +1 -0
  70. package/dist/src/language/semanticModel.d.ts +21 -0
  71. package/dist/src/language/semanticModel.d.ts.map +1 -0
  72. package/dist/src/language/semanticModel.js +43 -0
  73. package/dist/src/language/semanticModel.js.map +1 -0
  74. package/dist/src/language/symbols.d.ts +9 -0
  75. package/dist/src/language/symbols.d.ts.map +1 -0
  76. package/dist/src/language/symbols.js +160 -0
  77. package/dist/src/language/symbols.js.map +1 -0
  78. package/dist/src/language/types.d.ts +49 -0
  79. package/dist/src/language/types.d.ts.map +1 -0
  80. package/dist/src/language/types.js +2 -0
  81. package/dist/src/language/types.js.map +1 -0
  82. package/dist/src/language/utils.d.ts +24 -0
  83. package/dist/src/language/utils.d.ts.map +1 -0
  84. package/dist/src/language/utils.js +154 -0
  85. package/dist/src/language/utils.js.map +1 -0
  86. package/dist/src/layout/dagre.d.ts +13 -0
  87. package/dist/src/layout/dagre.d.ts.map +1 -0
  88. package/dist/src/layout/dagre.js +229 -0
  89. package/dist/src/layout/dagre.js.map +1 -0
  90. package/dist/src/layout/index.d.ts +15 -0
  91. package/dist/src/layout/index.d.ts.map +1 -0
  92. package/dist/src/layout/index.js +22 -0
  93. package/dist/src/layout/index.js.map +1 -0
  94. package/dist/src/layout/simple.d.ts +20 -0
  95. package/dist/src/layout/simple.d.ts.map +1 -0
  96. package/dist/src/layout/simple.js +674 -0
  97. package/dist/src/layout/simple.js.map +1 -0
  98. package/dist/src/layout/types.d.ts +65 -0
  99. package/dist/src/layout/types.d.ts.map +1 -0
  100. package/dist/src/layout/types.js +2 -0
  101. package/dist/src/layout/types.js.map +1 -0
  102. package/dist/src/lexer.d.ts +25 -0
  103. package/dist/src/lexer.d.ts.map +1 -0
  104. package/dist/src/lexer.js +280 -0
  105. package/dist/src/lexer.js.map +1 -0
  106. package/dist/src/lsp/documents.d.ts +24 -0
  107. package/dist/src/lsp/documents.d.ts.map +1 -0
  108. package/dist/src/lsp/documents.js +97 -0
  109. package/dist/src/lsp/documents.js.map +1 -0
  110. package/dist/src/lsp/server.d.ts +70 -0
  111. package/dist/src/lsp/server.d.ts.map +1 -0
  112. package/dist/src/lsp/server.js +623 -0
  113. package/dist/src/lsp/server.js.map +1 -0
  114. package/dist/src/lsp/utils.d.ts +47 -0
  115. package/dist/src/lsp/utils.d.ts.map +1 -0
  116. package/dist/src/lsp/utils.js +142 -0
  117. package/dist/src/lsp/utils.js.map +1 -0
  118. package/dist/src/parser.d.ts +106 -0
  119. package/dist/src/parser.d.ts.map +1 -0
  120. package/dist/src/parser.js +1018 -0
  121. package/dist/src/parser.js.map +1 -0
  122. package/dist/src/pipeline.d.ts +51 -0
  123. package/dist/src/pipeline.d.ts.map +1 -0
  124. package/dist/src/pipeline.js +65 -0
  125. package/dist/src/pipeline.js.map +1 -0
  126. package/dist/src/range.d.ts +24 -0
  127. package/dist/src/range.d.ts.map +1 -0
  128. package/dist/src/range.js +20 -0
  129. package/dist/src/range.js.map +1 -0
  130. package/dist/src/render/index.d.ts +3 -0
  131. package/dist/src/render/index.d.ts.map +1 -0
  132. package/dist/src/render/index.js +3 -0
  133. package/dist/src/render/index.js.map +1 -0
  134. package/dist/src/render/shapes.d.ts +20 -0
  135. package/dist/src/render/shapes.d.ts.map +1 -0
  136. package/dist/src/render/shapes.js +110 -0
  137. package/dist/src/render/shapes.js.map +1 -0
  138. package/dist/src/render/svg.d.ts +19 -0
  139. package/dist/src/render/svg.d.ts.map +1 -0
  140. package/dist/src/render/svg.js +227 -0
  141. package/dist/src/render/svg.js.map +1 -0
  142. package/dist/src/security/url.d.ts +7 -0
  143. package/dist/src/security/url.d.ts.map +1 -0
  144. package/dist/src/security/url.js +27 -0
  145. package/dist/src/security/url.js.map +1 -0
  146. package/dist/src/types.d.ts +111 -0
  147. package/dist/src/types.d.ts.map +1 -0
  148. package/dist/src/types.js +16 -0
  149. package/dist/src/types.js.map +1 -0
  150. package/dist/src/validator.d.ts +47 -0
  151. package/dist/src/validator.d.ts.map +1 -0
  152. package/dist/src/validator.js +235 -0
  153. package/dist/src/validator.js.map +1 -0
  154. package/package.json +90 -0
@@ -0,0 +1,235 @@
1
+ import { diag } from "./diagnostics.js";
2
+ import { isValidIdentifier } from "./types.js";
3
+ /**
4
+ * Semantic validator
5
+ *
6
+ * Detects:
7
+ * - invalid direction (E001)
8
+ * - invalid identifiers (E002)
9
+ * - duplicate node declarations (E003)
10
+ * - duplicate direction declarations (E004)
11
+ * - malformed / invalid constructs (E005, E008, etc.)
12
+ *
13
+ * Keeps validation separate from parsing so the core model can be reused
14
+ * without parser errors leaking into semantics.
15
+ */
16
+ export function validate(input) {
17
+ const { diagram, explicitNodes, edges } = input;
18
+ const out = [...input.diagnostics];
19
+ const groups = (input.groups ?? diagram.groups ?? []);
20
+ // ---- 1. Duplicate direction declarations ----
21
+ if (input.directionDeclarations.length > 1) {
22
+ // First one is considered primary, rest are duplicates
23
+ for (let i = 1; i < input.directionDeclarations.length; i++) {
24
+ const dup = input.directionDeclarations[i];
25
+ out.push(diag("error", "E004", `Duplicate direction declaration: direction already set to '${input.directionDeclarations[0].value}'`, dup.range));
26
+ }
27
+ }
28
+ // Also check invalid direction values that may have slipped (parser already flagged E001, but double-check)
29
+ for (const d of input.directionDeclarations) {
30
+ if (!["TB", "BT", "LR", "RL"].includes(d.value)) {
31
+ // Parser already emitted E001/E002, avoid double. Only emit if not already present at same range
32
+ const already = out.some((x) => x.range.start.offset === d.range.start.offset &&
33
+ (x.code === "E001" || x.code === "E002"));
34
+ if (!already) {
35
+ out.push(diag("error", "E001", `Invalid direction '${d.value}'`, d.range));
36
+ }
37
+ }
38
+ }
39
+ // ---- 2. Invalid identifiers ----
40
+ // Explicit nodes
41
+ for (const n of explicitNodes) {
42
+ if (!isValidIdentifier(n.id)) {
43
+ // Avoid duplicate if parser already reported at same range
44
+ const already = out.some((d) => d.range.start.offset === n.range.start.offset &&
45
+ d.code === "E002");
46
+ if (!already) {
47
+ out.push(diag("error", "E002", `Invalid identifier '${n.id}': must match [A-Za-z_][A-Za-z0-9_-]*`, n.range));
48
+ }
49
+ }
50
+ if (n.type !== undefined && !isValidIdentifier(n.type)) {
51
+ const already = out.some((d) => d.code === "E002" && d.message.includes(n.type));
52
+ if (!already) {
53
+ // Find range for type: we stored node range covering brackets, but we can use node range
54
+ out.push(diag("error", "E002", `Invalid node type '${n.type}': must match [A-Za-z_][A-Za-z0-9_-]*`, n.range));
55
+ }
56
+ }
57
+ }
58
+ // Edges sources/targets
59
+ for (const e of edges) {
60
+ if (!isValidIdentifier(e.source)) {
61
+ const already = out.some((d) => d.range.start.offset === e.sourceRange.start.offset &&
62
+ d.code === "E002");
63
+ if (!already) {
64
+ out.push(diag("error", "E002", `Invalid identifier '${e.source}'`, e.sourceRange));
65
+ }
66
+ }
67
+ if (!isValidIdentifier(e.target)) {
68
+ const already = out.some((d) => d.range.start.offset === e.targetRange.start.offset &&
69
+ d.code === "E002");
70
+ if (!already) {
71
+ out.push(diag("error", "E002", `Invalid identifier '${e.target}'`, e.targetRange));
72
+ }
73
+ }
74
+ }
75
+ // ---- 3. Duplicate node declarations ----
76
+ // Map id -> first occurrence range
77
+ const seen = new Map();
78
+ for (const n of explicitNodes) {
79
+ const prev = seen.get(n.id);
80
+ if (prev) {
81
+ // Duplicate declaration
82
+ // Check if types differ? Regardless, it's duplicate explicit declaration
83
+ out.push(diag("error", "E003", `Duplicate node declaration for '${n.id}'`, n.range));
84
+ // Also optionally warn if types differ
85
+ if (prev.type !== n.type) {
86
+ // Keep as same error, not separate warning
87
+ }
88
+ }
89
+ else {
90
+ seen.set(n.id, n);
91
+ }
92
+ }
93
+ // ---- 4. Malformed / invalid constructs ----
94
+ // E.g., check for edges where source === target? Not forbidden in v0.1, allow self-loop, so no error.
95
+ // Check for empty labels already done in parser (E010), but validate again:
96
+ for (const e of edges) {
97
+ if (e.label !== undefined && e.label.trim().length === 0) {
98
+ const range = e.labelRange ?? e.range;
99
+ const already = out.some((d) => d.code === "E010" && d.range.start.offset === range.start.offset);
100
+ if (!already)
101
+ out.push(diag("error", "E010", `Empty edge label`, range));
102
+ }
103
+ // Invalid node types already handled via invalid identifier above; also handle empty type case would have been E008
104
+ // We keep E008 check for explicit nodes where type is empty? Parser already emitted.
105
+ }
106
+ // ---- 5. Groups validation ----
107
+ // Flatten groups for analysis
108
+ const allGroups = [];
109
+ function collectGroups(arr) {
110
+ for (const g of arr) {
111
+ allGroups.push(g);
112
+ if (g.groups && g.groups.length > 0)
113
+ collectGroups(g.groups);
114
+ }
115
+ }
116
+ collectGroups(groups);
117
+ // 5a. Invalid group identifiers and types
118
+ for (const g of allGroups) {
119
+ if (!isValidIdentifier(g.id)) {
120
+ const already = out.some((d) => d.range.start.offset === g.range.start.offset && d.code === "E002");
121
+ if (!already)
122
+ out.push(diag("error", "E002", `Invalid group identifier '${g.id}': must match [A-Za-z_][A-Za-z0-9_-]*`, g.range));
123
+ }
124
+ if (g.type !== undefined && !isValidIdentifier(g.type)) {
125
+ out.push(diag("error", "E002", `Invalid group type '${g.type}': must match [A-Za-z_][A-Za-z0-9_-]*`, g.range));
126
+ }
127
+ // Empty label check? Group label can be empty string? If label is empty after trim, flag E014? But allow.
128
+ }
129
+ // 5b. Duplicate group ids (E011)
130
+ const seenGroups = new Map();
131
+ for (const g of allGroups) {
132
+ const prev = seenGroups.get(g.id);
133
+ if (prev) {
134
+ out.push(diag("error", "E011", `Duplicate group declaration for '${g.id}'`, g.range));
135
+ }
136
+ else {
137
+ seenGroups.set(g.id, g);
138
+ }
139
+ }
140
+ // 5c. Invalid annotation/link targets (E014)
141
+ const nodeIds = new Set();
142
+ for (const n of explicitNodes)
143
+ nodeIds.add(n.id);
144
+ for (const n of diagram.nodes)
145
+ nodeIds.add(n.id);
146
+ const groupIds = new Set(allGroups.map((g) => g.id));
147
+ const allIds = new Set([...nodeIds, ...groupIds]);
148
+ if (input.annotations) {
149
+ for (const ann of input.annotations) {
150
+ if (ann.target !== undefined && !allIds.has(ann.target)) {
151
+ out.push(diag("error", "E014", `Annotation target '${ann.target}' does not exist`, ann.range));
152
+ }
153
+ if (ann.text.trim().length === 0) {
154
+ const already = out.some((d) => d.code === "E014" && d.range.start.offset === ann.range.start.offset);
155
+ if (!already)
156
+ out.push(diag("error", "E014", `Empty annotation text`, ann.range));
157
+ }
158
+ }
159
+ }
160
+ else if (diagram.annotations) {
161
+ for (const ann of diagram.annotations) {
162
+ if (ann.target !== undefined && !allIds.has(ann.target)) {
163
+ out.push(diag("error", "E014", `Annotation target '${ann.target}' does not exist`, ann.range));
164
+ }
165
+ }
166
+ }
167
+ if (input.links) {
168
+ const seenLinkTargets = new Set();
169
+ for (const link of input.links) {
170
+ if (!allIds.has(link.target)) {
171
+ out.push(diag("error", "E014", `Link target '${link.target}' does not exist`, link.range));
172
+ }
173
+ if (!isValidIdentifier(link.target)) {
174
+ out.push(diag("error", "E002", `Invalid link target '${link.target}'`, link.range));
175
+ }
176
+ if (link.url.trim().length === 0) {
177
+ out.push(diag("error", "E014", `Empty link URL for target '${link.target}'`, link.range));
178
+ }
179
+ // Security: block javascript:, data:, vbscript: schemes
180
+ if (/^(javascript|data|vbscript):/i.test(link.url.trim())) {
181
+ out.push(diag("error", "E014", `Unsafe link URL scheme for target '${link.target}': javascript/data urls are not allowed`, link.range));
182
+ }
183
+ if (seenLinkTargets.has(link.target)) {
184
+ const already = out.some((d) => d.code === "E014" && d.message.includes(link.target) && d.range.start.offset === link.range.start.offset);
185
+ if (!already)
186
+ out.push(diag("error", "E014", `Duplicate link for target '${link.target}'`, link.range));
187
+ }
188
+ seenLinkTargets.add(link.target);
189
+ }
190
+ }
191
+ else if (diagram.links) {
192
+ const seenLinkTargets = new Set();
193
+ for (const link of diagram.links) {
194
+ if (!allIds.has(link.target)) {
195
+ out.push(diag("error", "E014", `Link target '${link.target}' does not exist`, link.range));
196
+ }
197
+ if (seenLinkTargets.has(link.target))
198
+ out.push(diag("error", "E014", `Duplicate link for target '${link.target}'`, link.range));
199
+ seenLinkTargets.add(link.target);
200
+ }
201
+ }
202
+ // 5d. Metadata validation (E013)
203
+ // Keys are already validated as IDENT by parser; check empty values and duplicates already? Additional checks:
204
+ for (const g of allGroups) {
205
+ for (const [k, v] of Object.entries(g.metadata ?? {})) {
206
+ if (!isValidIdentifier(k)) {
207
+ out.push(diag("error", "E002", `Invalid metadata key '${k}' in group '${g.id}'`, g.range));
208
+ }
209
+ if (v.trim().length === 0) {
210
+ out.push(diag("error", "E013", `Empty metadata value for key '${k}' in group '${g.id}'`, g.range));
211
+ }
212
+ }
213
+ }
214
+ for (const [k, v] of Object.entries(diagram.metadata ?? {})) {
215
+ if (!isValidIdentifier(k)) {
216
+ out.push(diag("error", "E002", `Invalid metadata key '${k}'`, diagram.directionRange ?? { start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 1, offset: 0 } }));
217
+ }
218
+ if (v.trim().length === 0) {
219
+ out.push(diag("error", "E013", `Empty metadata value for key '${k}'`, diagram.directionRange ?? { start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 1, offset: 0 } }));
220
+ }
221
+ }
222
+ // 5e. Edge kind validation: already ensured parser only produces valid kinds, but check label empty already done
223
+ for (const e of edges) {
224
+ if (e.kind !== "directed" && e.kind !== "undirected") {
225
+ out.push(diag("error", "E005", `Invalid edge kind '${e.kind}' for edge ${e.source} -> ${e.target}`, e.range));
226
+ }
227
+ }
228
+ // Sort diagnostics by offset for stable output
229
+ out.sort((a, b) => a.range.start.offset - b.range.start.offset);
230
+ // Diagram is already built (with deduplicated nodes). Validation does not mutate diagram structure for v0.1,
231
+ // but could filter duplicates if needed. We keep diagram as is.
232
+ // Ensure diagram nodes are deduplicated (parser already did). If validator found duplicates, diagram remains with first occurrence only.
233
+ return { diagram, diagnostics: out };
234
+ }
235
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAkC/C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAsB;IAC7C,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAChD,MAAM,GAAG,GAAiB,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,MAAM,GAAgB,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,CAAgB,CAAC;IAElF,gDAAgD;IAChD,IAAI,KAAK,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,uDAAuD;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CACN,IAAI,CACF,OAAO,EACP,MAAM,EACN,8DAA8D,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAE,CAAC,KAAK,GAAG,EACtG,GAAG,CAAC,KAAK,CACV,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4GAA4G;IAC5G,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAC5C,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,iGAAiG;YACjG,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAC7C,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAC3C,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,iBAAiB;IACjB,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,2DAA2D;YAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAC7C,CAAC,CAAC,IAAI,KAAK,MAAM,CACpB,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CACN,IAAI,CACF,OAAO,EACP,MAAM,EACN,uBAAuB,CAAC,CAAC,EAAE,uCAAuC,EAClE,CAAC,CAAC,KAAK,CACR,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAK,CAAC,CACxD,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,yFAAyF;gBACzF,GAAG,CAAC,IAAI,CACN,IAAI,CACF,OAAO,EACP,MAAM,EACN,sBAAsB,CAAC,CAAC,IAAI,uCAAuC,EACnE,CAAC,CAAC,KAAK,CACR,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;gBACnD,CAAC,CAAC,IAAI,KAAK,MAAM,CACpB,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;gBACnD,CAAC,CAAC,IAAI,KAAK,MAAM,CACpB,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,mCAAmC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,IAAI,EAAE,CAAC;YACT,wBAAwB;YACxB,yEAAyE;YACzE,GAAG,CAAC,IAAI,CACN,IAAI,CACF,OAAO,EACP,MAAM,EACN,mCAAmC,CAAC,CAAC,EAAE,GAAG,EAC1C,CAAC,CAAC,KAAK,CACR,CACF,CAAC;YACF,uCAAuC;YACvC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzB,2CAA2C;YAC7C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,sGAAsG;IACtG,4EAA4E;IAC5E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC;YACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClG,IAAI,CAAC,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,oHAAoH;QACpH,qFAAqF;IACvF,CAAC;IAED,iCAAiC;IACjC,8BAA8B;IAC9B,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,SAAS,aAAa,CAAC,GAAgB;QACrC,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtB,0CAA0C;IAC1C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YACpG,IAAI,CAAC,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,6BAA6B,CAAC,CAAC,EAAE,uCAAuC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnI,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC,IAAI,uCAAuC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACjH,CAAC;QACD,0GAA0G;IAC5G,CAAC;IAED,iCAAiC;IACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,oCAAoC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,aAAa;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;IAE1D,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,sBAAsB,GAAG,CAAC,MAAM,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACjG,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtG,IAAI,CAAC,OAAO;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,sBAAsB,GAAG,CAAC,MAAM,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,IAAI,CAAC,MAAM,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,wBAAwB,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,8BAA8B,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5F,CAAC;YACD,wDAAwD;YACxD,IAAI,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,sCAAsC,IAAI,CAAC,MAAM,yCAAyC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1I,CAAC;YACD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1I,IAAI,CAAC,OAAO;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,8BAA8B,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1G,CAAC;YACD,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,IAAI,CAAC,MAAM,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,8BAA8B,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAChI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,+GAA+G;IAC/G,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,iCAAiC,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACjL,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,iCAAiC,CAAC,GAAG,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACzL,CAAC;IACH,CAAC;IAED,iHAAiH;IACjH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,sBAAuB,CAAS,CAAC,IAAI,cAAc,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACzH,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEhE,6GAA6G;IAC7G,gEAAgE;IAChE,yIAAyI;IAEzI,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AACvC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@fazelstudio/floe",
3
+ "version": "1.0.0",
4
+ "description": "Floe diagram language — lightweight, human-readable, AI-friendly DSL for directed graphs (v1.0 stable)",
5
+ "type": "module",
6
+ "main": "./dist/src/index.js",
7
+ "module": "./dist/src/index.js",
8
+ "types": "./dist/src/index.d.ts",
9
+ "bin": {
10
+ "floe": "./dist/src/cli/main.js"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/src/index.d.ts",
15
+ "import": "./dist/src/index.js"
16
+ },
17
+ "./cli": {
18
+ "types": "./dist/src/cli/main.d.ts",
19
+ "import": "./dist/src/cli/main.js"
20
+ },
21
+ "./lsp": {
22
+ "types": "./dist/src/lsp/server.d.ts",
23
+ "import": "./dist/src/lsp/server.js"
24
+ },
25
+ "./layout": {
26
+ "types": "./dist/src/layout/index.d.ts",
27
+ "import": "./dist/src/layout/index.js"
28
+ },
29
+ "./render": {
30
+ "types": "./dist/src/render/index.d.ts",
31
+ "import": "./dist/src/render/index.js"
32
+ },
33
+ "./pipeline": {
34
+ "types": "./dist/src/pipeline.d.ts",
35
+ "import": "./dist/src/pipeline.js"
36
+ },
37
+ "./language": {
38
+ "types": "./dist/src/language/index.d.ts",
39
+ "import": "./dist/src/language/index.js"
40
+ }
41
+ },
42
+ "files": [
43
+ "dist",
44
+ "README.md",
45
+ "LICENSE",
46
+ "CHANGELOG.md"
47
+ ],
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/fazel-studio/floe.git"
51
+ },
52
+ "homepage": "https://github.com/fazel-studio/floe#readme",
53
+ "bugs": {
54
+ "url": "https://github.com/fazel-studio/floe/issues"
55
+ },
56
+ "author": "Zulfazli (Fazelllyyy) <zulfazlilsm@gmail.com>",
57
+ "packageManager": "bun@1.3.11",
58
+ "publishConfig": {
59
+ "access": "public"
60
+ },
61
+ "scripts": {
62
+ "build": "tsc -p tsconfig.build.json",
63
+ "test": "vitest run",
64
+ "test:watch": "vitest",
65
+ "typecheck": "tsc --noEmit",
66
+ "corpus:check": "vitest run --reporter=verbose",
67
+ "floe": "node ./dist/src/cli/main.js",
68
+ "benchmark": "bun benchmarks/run.ts",
69
+ "bundle:measure": "bun scripts/measure-bundle.ts",
70
+ "fuzz": "vitest run tests/fuzz.test.ts --reporter=verbose"
71
+ },
72
+ "devDependencies": {
73
+ "@types/node": "^26.4.1",
74
+ "typescript": "^5.6.0",
75
+ "vitest": "^2.1.0"
76
+ },
77
+ "keywords": [
78
+ "diagram",
79
+ "dsl",
80
+ "floe",
81
+ "parser",
82
+ "graph",
83
+ "visualization",
84
+ "svg",
85
+ "language",
86
+ "lsp",
87
+ "ai"
88
+ ],
89
+ "license": "MIT"
90
+ }