@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.
- package/LICENSE +21 -0
- package/dist/src/cli/check.d.ts +14 -0
- package/dist/src/cli/check.d.ts.map +1 -0
- package/dist/src/cli/check.js +88 -0
- package/dist/src/cli/check.js.map +1 -0
- package/dist/src/cli/format.d.ts +9 -0
- package/dist/src/cli/format.d.ts.map +1 -0
- package/dist/src/cli/format.js +114 -0
- package/dist/src/cli/format.js.map +1 -0
- package/dist/src/cli/main.d.ts +19 -0
- package/dist/src/cli/main.d.ts.map +1 -0
- package/dist/src/cli/main.js +207 -0
- package/dist/src/cli/main.js.map +1 -0
- package/dist/src/cli/render.d.ts +7 -0
- package/dist/src/cli/render.d.ts.map +1 -0
- package/dist/src/cli/render.js +90 -0
- package/dist/src/cli/render.js.map +1 -0
- package/dist/src/diagnostics.d.ts +32 -0
- package/dist/src/diagnostics.d.ts.map +1 -0
- package/dist/src/diagnostics.js +4 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/index.d.ts +40 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +64 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/language/completion.d.ts +6 -0
- package/dist/src/language/completion.d.ts.map +1 -0
- package/dist/src/language/completion.js +363 -0
- package/dist/src/language/completion.js.map +1 -0
- package/dist/src/language/definitions.d.ts +9 -0
- package/dist/src/language/definitions.d.ts.map +1 -0
- package/dist/src/language/definitions.js +70 -0
- package/dist/src/language/definitions.js.map +1 -0
- package/dist/src/language/diagnosticsService.d.ts +14 -0
- package/dist/src/language/diagnosticsService.d.ts.map +1 -0
- package/dist/src/language/diagnosticsService.js +37 -0
- package/dist/src/language/diagnosticsService.js.map +1 -0
- package/dist/src/language/folding.d.ts +8 -0
- package/dist/src/language/folding.d.ts.map +1 -0
- package/dist/src/language/folding.js +58 -0
- package/dist/src/language/folding.js.map +1 -0
- package/dist/src/language/formatting.d.ts +5 -0
- package/dist/src/language/formatting.d.ts.map +1 -0
- package/dist/src/language/formatting.js +274 -0
- package/dist/src/language/formatting.js.map +1 -0
- package/dist/src/language/highlighting.d.ts +9 -0
- package/dist/src/language/highlighting.d.ts.map +1 -0
- package/dist/src/language/highlighting.js +74 -0
- package/dist/src/language/highlighting.js.map +1 -0
- package/dist/src/language/hover.d.ts +6 -0
- package/dist/src/language/hover.d.ts.map +1 -0
- package/dist/src/language/hover.js +197 -0
- package/dist/src/language/hover.js.map +1 -0
- package/dist/src/language/indentation.d.ts +15 -0
- package/dist/src/language/indentation.d.ts.map +1 -0
- package/dist/src/language/indentation.js +97 -0
- package/dist/src/language/indentation.js.map +1 -0
- package/dist/src/language/index.d.ts +54 -0
- package/dist/src/language/index.d.ts.map +1 -0
- package/dist/src/language/index.js +85 -0
- package/dist/src/language/index.js.map +1 -0
- package/dist/src/language/references.d.ts +12 -0
- package/dist/src/language/references.d.ts.map +1 -0
- package/dist/src/language/references.js +35 -0
- package/dist/src/language/references.js.map +1 -0
- package/dist/src/language/rename.d.ts +18 -0
- package/dist/src/language/rename.d.ts.map +1 -0
- package/dist/src/language/rename.js +53 -0
- package/dist/src/language/rename.js.map +1 -0
- package/dist/src/language/semanticModel.d.ts +21 -0
- package/dist/src/language/semanticModel.d.ts.map +1 -0
- package/dist/src/language/semanticModel.js +43 -0
- package/dist/src/language/semanticModel.js.map +1 -0
- package/dist/src/language/symbols.d.ts +9 -0
- package/dist/src/language/symbols.d.ts.map +1 -0
- package/dist/src/language/symbols.js +160 -0
- package/dist/src/language/symbols.js.map +1 -0
- package/dist/src/language/types.d.ts +49 -0
- package/dist/src/language/types.d.ts.map +1 -0
- package/dist/src/language/types.js +2 -0
- package/dist/src/language/types.js.map +1 -0
- package/dist/src/language/utils.d.ts +24 -0
- package/dist/src/language/utils.d.ts.map +1 -0
- package/dist/src/language/utils.js +154 -0
- package/dist/src/language/utils.js.map +1 -0
- package/dist/src/layout/dagre.d.ts +13 -0
- package/dist/src/layout/dagre.d.ts.map +1 -0
- package/dist/src/layout/dagre.js +229 -0
- package/dist/src/layout/dagre.js.map +1 -0
- package/dist/src/layout/index.d.ts +15 -0
- package/dist/src/layout/index.d.ts.map +1 -0
- package/dist/src/layout/index.js +22 -0
- package/dist/src/layout/index.js.map +1 -0
- package/dist/src/layout/simple.d.ts +20 -0
- package/dist/src/layout/simple.d.ts.map +1 -0
- package/dist/src/layout/simple.js +674 -0
- package/dist/src/layout/simple.js.map +1 -0
- package/dist/src/layout/types.d.ts +65 -0
- package/dist/src/layout/types.d.ts.map +1 -0
- package/dist/src/layout/types.js +2 -0
- package/dist/src/layout/types.js.map +1 -0
- package/dist/src/lexer.d.ts +25 -0
- package/dist/src/lexer.d.ts.map +1 -0
- package/dist/src/lexer.js +280 -0
- package/dist/src/lexer.js.map +1 -0
- package/dist/src/lsp/documents.d.ts +24 -0
- package/dist/src/lsp/documents.d.ts.map +1 -0
- package/dist/src/lsp/documents.js +97 -0
- package/dist/src/lsp/documents.js.map +1 -0
- package/dist/src/lsp/server.d.ts +70 -0
- package/dist/src/lsp/server.d.ts.map +1 -0
- package/dist/src/lsp/server.js +623 -0
- package/dist/src/lsp/server.js.map +1 -0
- package/dist/src/lsp/utils.d.ts +47 -0
- package/dist/src/lsp/utils.d.ts.map +1 -0
- package/dist/src/lsp/utils.js +142 -0
- package/dist/src/lsp/utils.js.map +1 -0
- package/dist/src/parser.d.ts +106 -0
- package/dist/src/parser.d.ts.map +1 -0
- package/dist/src/parser.js +1018 -0
- package/dist/src/parser.js.map +1 -0
- package/dist/src/pipeline.d.ts +51 -0
- package/dist/src/pipeline.d.ts.map +1 -0
- package/dist/src/pipeline.js +65 -0
- package/dist/src/pipeline.js.map +1 -0
- package/dist/src/range.d.ts +24 -0
- package/dist/src/range.d.ts.map +1 -0
- package/dist/src/range.js +20 -0
- package/dist/src/range.js.map +1 -0
- package/dist/src/render/index.d.ts +3 -0
- package/dist/src/render/index.d.ts.map +1 -0
- package/dist/src/render/index.js +3 -0
- package/dist/src/render/index.js.map +1 -0
- package/dist/src/render/shapes.d.ts +20 -0
- package/dist/src/render/shapes.d.ts.map +1 -0
- package/dist/src/render/shapes.js +110 -0
- package/dist/src/render/shapes.js.map +1 -0
- package/dist/src/render/svg.d.ts +19 -0
- package/dist/src/render/svg.d.ts.map +1 -0
- package/dist/src/render/svg.js +227 -0
- package/dist/src/render/svg.js.map +1 -0
- package/dist/src/security/url.d.ts +7 -0
- package/dist/src/security/url.d.ts.map +1 -0
- package/dist/src/security/url.js +27 -0
- package/dist/src/security/url.js.map +1 -0
- package/dist/src/types.d.ts +111 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +16 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/validator.d.ts +47 -0
- package/dist/src/validator.d.ts.map +1 -0
- package/dist/src/validator.js +235 -0
- package/dist/src/validator.js.map +1 -0
- 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":"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"}
|
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
|
+
}
|