@fazelstudio/floe 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +199 -0
  3. package/dist/src/cli/check.d.ts.map +1 -1
  4. package/dist/src/cli/check.js +1 -1
  5. package/dist/src/cli/check.js.map +1 -1
  6. package/dist/src/cli/format.d.ts.map +1 -1
  7. package/dist/src/cli/format.js +4 -35
  8. package/dist/src/cli/format.js.map +1 -1
  9. package/dist/src/cli/main.d.ts +0 -16
  10. package/dist/src/cli/main.d.ts.map +1 -1
  11. package/dist/src/cli/main.js +0 -7
  12. package/dist/src/cli/main.js.map +1 -1
  13. package/dist/src/cli/render.d.ts.map +1 -1
  14. package/dist/src/cli/render.js +0 -15
  15. package/dist/src/cli/render.js.map +1 -1
  16. package/dist/src/diagnostics.d.ts +4 -18
  17. package/dist/src/diagnostics.d.ts.map +1 -1
  18. package/dist/src/diagnostics.js.map +1 -1
  19. package/dist/src/index.d.ts +7 -9
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/language/completion.d.ts +1 -2
  23. package/dist/src/language/completion.d.ts.map +1 -1
  24. package/dist/src/language/completion.js.map +1 -1
  25. package/dist/src/language/definitions.d.ts +6 -3
  26. package/dist/src/language/definitions.d.ts.map +1 -1
  27. package/dist/src/language/definitions.js.map +1 -1
  28. package/dist/src/language/diagnosticsService.d.ts +4 -5
  29. package/dist/src/language/diagnosticsService.d.ts.map +1 -1
  30. package/dist/src/language/diagnosticsService.js.map +1 -1
  31. package/dist/src/language/folding.d.ts +2 -3
  32. package/dist/src/language/folding.d.ts.map +1 -1
  33. package/dist/src/language/folding.js.map +1 -1
  34. package/dist/src/language/formatting.d.ts +2 -3
  35. package/dist/src/language/formatting.d.ts.map +1 -1
  36. package/dist/src/language/formatting.js.map +1 -1
  37. package/dist/src/language/highlighting.d.ts +2 -3
  38. package/dist/src/language/highlighting.d.ts.map +1 -1
  39. package/dist/src/language/highlighting.js.map +1 -1
  40. package/dist/src/language/hover.d.ts +4 -2
  41. package/dist/src/language/hover.d.ts.map +1 -1
  42. package/dist/src/language/hover.js.map +1 -1
  43. package/dist/src/language/indentation.d.ts +4 -7
  44. package/dist/src/language/indentation.d.ts.map +1 -1
  45. package/dist/src/language/indentation.js.map +1 -1
  46. package/dist/src/language/index.d.ts +45 -17
  47. package/dist/src/language/index.d.ts.map +1 -1
  48. package/dist/src/language/index.js.map +1 -1
  49. package/dist/src/language/references.d.ts +3 -4
  50. package/dist/src/language/references.d.ts.map +1 -1
  51. package/dist/src/language/references.js.map +1 -1
  52. package/dist/src/language/rename.d.ts +43 -15
  53. package/dist/src/language/rename.d.ts.map +1 -1
  54. package/dist/src/language/rename.js.map +1 -1
  55. package/dist/src/language/semanticModel.d.ts +14 -19
  56. package/dist/src/language/semanticModel.d.ts.map +1 -1
  57. package/dist/src/language/semanticModel.js.map +1 -1
  58. package/dist/src/language/symbols.d.ts +2 -3
  59. package/dist/src/language/symbols.d.ts.map +1 -1
  60. package/dist/src/language/symbols.js.map +1 -1
  61. package/dist/src/language/types.d.ts +0 -44
  62. package/dist/src/language/types.d.ts.map +1 -1
  63. package/dist/src/language/utils.d.ts +20 -18
  64. package/dist/src/language/utils.d.ts.map +1 -1
  65. package/dist/src/language/utils.js.map +1 -1
  66. package/dist/src/layout/dagre.d.ts +2 -2
  67. package/dist/src/layout/dagre.d.ts.map +1 -1
  68. package/dist/src/layout/dagre.js +14 -55
  69. package/dist/src/layout/dagre.js.map +1 -1
  70. package/dist/src/layout/index.d.ts +1 -9
  71. package/dist/src/layout/index.d.ts.map +1 -1
  72. package/dist/src/layout/index.js +1 -10
  73. package/dist/src/layout/index.js.map +1 -1
  74. package/dist/src/layout/simple.d.ts +1 -1
  75. package/dist/src/layout/simple.d.ts.map +1 -1
  76. package/dist/src/layout/simple.js +20 -166
  77. package/dist/src/layout/simple.js.map +1 -1
  78. package/dist/src/layout/types.d.ts +0 -1
  79. package/dist/src/layout/types.d.ts.map +1 -1
  80. package/dist/src/lexer.d.ts +0 -3
  81. package/dist/src/lexer.d.ts.map +1 -1
  82. package/dist/src/lexer.js +13 -54
  83. package/dist/src/lexer.js.map +1 -1
  84. package/dist/src/lsp/documents.d.ts +8 -17
  85. package/dist/src/lsp/documents.d.ts.map +1 -1
  86. package/dist/src/lsp/documents.js.map +1 -1
  87. package/dist/src/lsp/server.d.ts +138 -63
  88. package/dist/src/lsp/server.d.ts.map +1 -1
  89. package/dist/src/lsp/server.js.map +1 -1
  90. package/dist/src/lsp/utils.d.ts +13 -20
  91. package/dist/src/lsp/utils.d.ts.map +1 -1
  92. package/dist/src/lsp/utils.js.map +1 -1
  93. package/dist/src/parser.d.ts +94 -68
  94. package/dist/src/parser.d.ts.map +1 -1
  95. package/dist/src/parser.js.map +1 -1
  96. package/dist/src/pipeline.d.ts +0 -20
  97. package/dist/src/pipeline.d.ts.map +1 -1
  98. package/dist/src/pipeline.js +2 -28
  99. package/dist/src/pipeline.js.map +1 -1
  100. package/dist/src/range.d.ts +2 -5
  101. package/dist/src/range.d.ts.map +1 -1
  102. package/dist/src/range.js +0 -7
  103. package/dist/src/range.js.map +1 -1
  104. package/dist/src/render/shapes.d.ts +0 -8
  105. package/dist/src/render/shapes.d.ts.map +1 -1
  106. package/dist/src/render/shapes.js +13 -60
  107. package/dist/src/render/shapes.js.map +1 -1
  108. package/dist/src/render/svg.d.ts +0 -9
  109. package/dist/src/render/svg.d.ts.map +1 -1
  110. package/dist/src/render/svg.js +18 -83
  111. package/dist/src/render/svg.js.map +1 -1
  112. package/dist/src/security/url.d.ts +2 -2
  113. package/dist/src/security/url.d.ts.map +1 -1
  114. package/dist/src/security/url.js.map +1 -1
  115. package/dist/src/types.d.ts +3 -45
  116. package/dist/src/types.d.ts.map +1 -1
  117. package/dist/src/types.js +0 -5
  118. package/dist/src/types.js.map +1 -1
  119. package/dist/src/validator.d.ts +4 -33
  120. package/dist/src/validator.d.ts.map +1 -1
  121. package/dist/src/validator.js +4 -2
  122. package/dist/src/validator.js.map +1 -1
  123. package/package.json +1 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ All notable changes to Floe follow [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
+
5
+ ## [1.0.0] - 2026-09-05
6
+
7
+ Initial stable open source release.
8
+
9
+ ### Added
10
+ - Stable language `v1.0` — frozen grammar documented in `docs/00-language-freeze.md` and `SPEC.md`; `direction`, `node [type] "label"`, `edge -> / -- : label`, `group { }` (nested), `meta`, `note`, `link`
11
+ - Renderer-independent IR — `FloeDiagram`, `FloeNode`, `FloeEdge` (`kind: directed | undirected`), `FloeGroup`, `FloeAnnotation`, `FloeLink`, `Range` with stable diagnostics `E001`–`E014`
12
+ - Deterministic layout `SimpleLayoutEngine` (zero-deps) and SVG renderer `renderSvg` / `renderFloe` with `escapeXml` / `escapeId` and URL sanitization `src/security/url.ts`
13
+ - Editor-independent language services — `diagnostics`, `completion`, `hover`, `symbols`, `definition`, `references`, `rename`, `formatting`, `highlighting`, `indentation`, `folding`
14
+ - CLI `floe check | format | render | lsp` (exit codes 0/1/2, `--json`, `--write`, `-o`) and LSP server (`src/lsp/server.ts`) reusing language services
15
+ - Comprehensive corpus `corpus/basic`, `labels`, `nodes`, `groups`, `direction`, `metadata`, `invalid`, `edge-cases`, `large` plus examples `examples/*.floe`
16
+ - Tests — `bun run test` 387 tests (parser, validator, language, layout, render, CLI, LSP, security, fuzz, corpus)
17
+ - Benchmarks `benchmarks/run.ts` → `benchmarks/results.json` and bundle sizes `scripts/measure-bundle.ts` → `benchmarks/bundle-size.json`
18
+ - Documentation `docs/` — Introduction, Syntax, Language Specification, Semantic Model, Rendering, Layout, Validation, Formatting, AI Generation, Editor Integration, CLI, LSP, API, Examples, Security, Versioning, Package Strategy
19
+
20
+ ### Security
21
+ - Untrusted `.floe` input never executed; SVG output sanitized, `javascript:`/`data:` URLs flagged as `E014`.
package/README.md ADDED
@@ -0,0 +1,199 @@
1
+ <p align="center">
2
+ <img src="assets/floe.svg" width="128" height="128" alt="Floe" />
3
+ </p>
4
+
5
+ # Floe — Diagram DSL
6
+
7
+ Lightweight, human-readable, AI-friendly diagram language. Files are `.floe`.
8
+
9
+ > **v1.0 Stable** — language frozen, see `docs/00-language-freeze.md` and `SPEC.md` for source of truth. All v1.0 checklist items are complete.
10
+
11
+ ## Scope v1.0 — Stable
12
+
13
+ Implemented (v0.1–v1.0):
14
+
15
+ - `.floe` source format and frozen language specification (`SPEC.md`, `docs/00-language-freeze.md`)
16
+ - Lexer + grammar-based parser with source ranges and error recovery (never crashes) — fuzz tested
17
+ - Renderer-independent semantic model / IR (nodes, edges, groups, metadata, annotations, links) — reviewed
18
+ - Diagnostics with stable codes (`E001`–`E014`) + `E014` for unsafe URLs
19
+ - Deterministic layout (`SimpleLayoutEngine` — zero-dep) and SVG renderer (`renderSvg`, `renderFloe`) — escaped, sanitized
20
+ - Language services (editor-independent): diagnostics, completion, hover, go-to-definition, references, rename, formatting, symbols, highlighting, folding, indentation, folding ranges
21
+ - CLI: `floe check`, `floe format`, `floe render` (scriptable, correct exit codes 0/1/2)
22
+ - LSP: editor-independent Language Server (diagnostics, completion, hover, definition, references, rename, formatting, symbols, folding) reusing core services
23
+ - Comprehensive corpus: `basic/`, `labels/`, `nodes/`, `groups/`, `direction/`, `metadata/`, `invalid/`, `edge-cases/`, `large/` + legacy
24
+ - Performance benchmarks (`benchmarks/run.ts`) + bundle sizes (`scripts/measure-bundle.ts`) — actual measurements only
25
+ - Security review (`docs/security.md`) — SVG escaping, URL sanitization, no `eval`
26
+ - Documentation suite (`docs/`) — Introduction, Syntax, Semantic Model, Rendering, Layout, Validation, Formatting, AI Generation, Editor, CLI, LSP, API, Examples + AI reference
27
+ - Package strategy (`docs/package-strategy.md`) — only `@fazelstudio/floe` + `@fazelstudio/codemirror-lang-floe` for v1.0
28
+ - Versioning policy (`docs/versioning.md`) — SemVer after 1.0, breaking changes require major + migration
29
+
30
+ Not in v1.0: VS Code extension (architecture ready, separate repo).
31
+
32
+ ## Install & Build (Bun — recommended, faster)
33
+
34
+ ```bash
35
+ bun install
36
+ bun run build
37
+ bun run test
38
+ bun run typecheck
39
+ # npm still works: npm install / npm run build / npm test
40
+ ```
41
+
42
+ ## CLI (v1.0)
43
+
44
+ ```bash
45
+ # Validate
46
+ floe check diagram.floe # exit 0 OK, 1 errors, 2 usage
47
+ floe check diagram.floe --json # JSON for CI
48
+
49
+ # Format (canonical)
50
+ floe format diagram.floe # print to stdout
51
+ floe format diagram.floe --write # overwrite in place
52
+ floe format diagram.floe --check # CI: exit 1 if not formatted
53
+
54
+ # Render to SVG (deterministic, safe)
55
+ floe render diagram.floe # SVG to stdout
56
+ floe render diagram.floe -o out.svg # write file
57
+
58
+ # LSP (stdio) for editors
59
+ floe lsp --stdio
60
+ # Architecture: Editor → LSP → Floe Language Services → Parser/Semantic Model
61
+ # Works with VS Code, Neovim, Zed, Helix, any LSP client (no editor-specific semantics)
62
+ ```
63
+
64
+ ## LSP (v1.0)
65
+
66
+ Editor-independent Language Server reusing `src/language/*`:
67
+
68
+ - diagnostics (publishDiagnostics)
69
+ - completion
70
+ - hover
71
+ - go-to-definition
72
+ - references
73
+ - rename
74
+ - formatting
75
+ - symbols (documentSymbol)
76
+
77
+ Run: `bun ./dist/src/cli/main.js lsp` or `floe lsp` (also `node ./dist/src/cli/main.js`)
78
+
79
+ ```bash
80
+ bun run build
81
+ bun ./dist/src/lsp/server.js # or via CLI / node
82
+ ```
83
+
84
+ ## Usage
85
+
86
+ ```ts
87
+ import { parseFloe } from "@fazelstudio/floe";
88
+ import { renderFloe } from "@fazelstudio/floe/pipeline";
89
+
90
+ const { diagram, diagnostics } = parseFloe(`
91
+ direction LR
92
+ // auth flow
93
+ User -> Login
94
+ Login -> Dashboard : success
95
+ Login -> Error : invalid
96
+ User [person]
97
+ `);
98
+
99
+ if (diagnostics.some(d => d.severity === "error")) {
100
+ console.log(diagnostics);
101
+ } else {
102
+ console.log(diagram.direction); // "LR"
103
+ console.log(diagram.nodes); // [{ id: "User", type: "person", ... }, ...]
104
+ console.log(diagram.edges); // [{ source: "Login", target: "Dashboard", label: "success", ... }]
105
+ const { svg } = renderFloe(`
106
+ direction LR
107
+ User -> Login
108
+ Login -> Dashboard : success
109
+ `);
110
+ console.log(svg); // deterministic SVG
111
+ }
112
+
113
+ // Raw parse without validation (if needed)
114
+ import { parseRaw } from "@fazelstudio/floe";
115
+ const raw = parseRaw(source);
116
+ ```
117
+
118
+ ## Identifier Rules
119
+
120
+ See `SPEC.md §4`. TL;DR: `^[A-Za-z_][A-Za-z0-9_-]*$`, no spaces, no Unicode, no leading digit.
121
+
122
+ ## Diagnostics Codes
123
+
124
+ `E001` invalid direction, `E002` invalid identifier, `E003` duplicate node, `E004` duplicate direction, `E005` malformed/unexpected, `E006` incomplete, `E007` invalid character, `E008` invalid node type, `E009` missing edge target, `E010` empty label.
125
+
126
+ All diagnostics carry `range { start: { line, column, offset }, end: ... }`.
127
+
128
+ ## Project Structure
129
+
130
+ ```
131
+ src/
132
+ range.ts # Position/Range
133
+ diagnostics.ts # Diagnostic + codes (E001–E014)
134
+ types.ts # IR (FloeDiagram, FloeNode, FloeEdge, etc.)
135
+ lexer.ts # lexical grammar
136
+ parser.ts # recursive-descent parser with recovery
137
+ validator.ts # semantic validation (separate phase)
138
+ index.ts # public stable API (parseFloe, parseRaw, isValid)
139
+ language/ # editor-independent services (completion, hover, etc.)
140
+ layout/ # deterministic layout engines (Simple + Dagre)
141
+ render/ # SVG renderer (escaped, safe)
142
+ cli/ # CLI: check, format, render
143
+ lsp/ # LSP server (reuses language services)
144
+ security/ # URL sanitization
145
+ SPEC.md # language spec (source of truth)
146
+ docs/ # v1.0 docs: Introduction, Syntax, Semantic Model, Rendering, Layout, Validation, Formatting, AI Gen, Editor, CLI, LSP, API, Examples, Freeze, Versioning, Security, Package
147
+ corpus/
148
+ basic/ labels/ nodes/ groups/ direction/ metadata/ invalid/ edge-cases/ large/ # comprehensive (v1.0)
149
+ valid/ invalid/ # legacy flat (kept for compat)
150
+ examples/ # runnable .floe examples
151
+ benchmarks/ # performance & bundle-size results
152
+ tests/ # parser, validator, language, render, lsp, cli, security, fuzz, corpus-comprehensive
153
+ ```
154
+
155
+ ## Runtime Compatibility
156
+
157
+ | Runtime | Status | Notes |
158
+ |---------|--------|-------|
159
+ | Node.js | ✅ Tested | v18+; `npm test` 194 passed, `node ./dist/src/cli/main.js check/format/render/lsp` OK |
160
+ | Browser | ✅ Core only | `src/index.ts:1` pure TS, no `fs`/`eval`; no bundler test but no Node imports |
161
+ | Bun | ✅ Tested | v1.3.11; `bun -e` core ok, `bun ./dist/src/cli/main.js check/format/render` OK |
162
+ | Deno | ✅ Tested | v2.9.6; `deno run --allow-read src/index.ts` core PASS, `deno run --allow-read --allow-write --allow-env dist/src/cli/main.js check/format/render/lsp` OK (2026-09-05 Win32) |
163
+
164
+ All except browser bundle are tested and claimed. Core is universal pure JS.
165
+
166
+ ## Tests
167
+
168
+ ```bash
169
+ bun run test # or npm test
170
+ # 387 tests, includes fuzz (1000+ random), corpus-comprehensive (basic/labels/nodes/groups/direction/metadata/invalid/edge-cases/large), security, CLI, LSP, codemirror
171
+ bun run benchmark # actual performance numbers → benchmarks/results.json
172
+ bun run bundle:measure # actual bundle sizes per package → benchmarks/bundle-size.json
173
+ ```
174
+
175
+ Covers: basic edges, multiple edges, edge labels, explicit node types, comments, directions, whitespace, empty files, duplicate declarations, invalid syntax, incomplete syntax, invalid identifiers, source ranges, never-crash, fuzz (no crash/hang/memory), large diagrams (500–2000 nodes), security, CLI/LSP/CodeMirror.
176
+
177
+ ## Architecture Rules
178
+
179
+ Core (`src/` without `cli/` and `lsp/`) has zero dependencies on CodeMirror, React, Vue, DOM, SVG, Canvas, Dagre, ELK, LSP. Pure language only. CLI and LSP are separate entry points that reuse core.
180
+
181
+ ## Security
182
+
183
+ - `.floe` files are treated as **untrusted**. Never uses `eval`/`new Function` or equivalent.
184
+ - Generated SVG escapes `& < > " '` and sanitizes `id` attributes; no `<script>`, event handlers, or `javascript:` vectors from user content.
185
+ - See `tests/security.test.ts` for untrusted-input coverage.
186
+
187
+ ## Editor Compatibility
188
+
189
+ Architecture is editor-agnostic:
190
+
191
+ ```
192
+ Editor (VS Code / Neovim / Zed / Helix)
193
+ ↓ LSP (stdio, JSON-RPC)
194
+ Floe Language Services (src/language/*)
195
+
196
+ Parser / Semantic Model
197
+ ```
198
+
199
+ No editor-specific semantic implementation exists; all intelligence is in `src/language/*` and reused by LSP.
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/check.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAGpE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CAWhF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CA6DzE"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/check.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAGpE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CAWhF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CAyDzE"}
@@ -25,7 +25,7 @@ export function runCheck(files, opts = {}) {
25
25
  return 2;
26
26
  }
27
27
  let overallHasErrors = false;
28
- let overallOutput = [];
28
+ const overallOutput = [];
29
29
  for (const f of files) {
30
30
  const resolved = path.resolve(f);
31
31
  if (!fs.existsSync(resolved)) {
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAcxC,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,CAAa;IAC1D,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACvC,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAqB,EAAE;IACjE,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAClE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAe,EAAE,OAAqB,EAAE;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,aAAa,GAAkB,EAAE,CAAC;IAEtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACzC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,MAAM,CAAC,SAAS;gBAAE,gBAAgB,GAAG,IAAI,CAAC;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;YAC1C,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC,CAAC;YACH,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC5E,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;gBAC/E,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAChB,IAAI,QAAQ,GAAG,CAAC;wBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,QAAQ,YAAY,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;;wBAC5G,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,SAAS,aAAa,CAAC,CAAC;gBACxD,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACtC,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;wBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;wBAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/cli/format.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAyG3E;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/cli/format.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAmE3E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -1,20 +1,17 @@
1
1
  import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
- import { format, isFormatted } from "../language/formatting.js";
4
- import { parseFloe } from "../index.js";
3
+ import { format } from "../language/formatting.js";
5
4
  export function runFormat(files, opts = {}) {
6
5
  if (files.length === 0) {
7
6
  console.error("floe format: no input files");
8
7
  console.error("Usage: floe format <file.floe> [--write] [--check]");
9
8
  return 2;
10
9
  }
11
- // Mutually exclusive: --write and --check should not both be set? Allow but prioritize check?
12
10
  if (opts.write && opts.check) {
13
11
  console.error("floe format: --write and --check are mutually exclusive");
14
12
  return 2;
15
13
  }
16
14
  let hasUnformatted = false;
17
- let hasErrors = false;
18
15
  for (const f of files) {
19
16
  const resolved = path.resolve(f);
20
17
  if (!fs.existsSync(resolved)) {
@@ -30,7 +27,6 @@ export function runFormat(files, opts = {}) {
30
27
  console.error(`Cannot read file '${f}': ${msg}`);
31
28
  return 2;
32
29
  }
33
- // Validate that format never throws on malformed input (security: no crash)
34
30
  let formatted;
35
31
  try {
36
32
  formatted = format(source);
@@ -45,19 +41,8 @@ export function runFormat(files, opts = {}) {
45
41
  if (needsFormat) {
46
42
  hasUnformatted = true;
47
43
  const rel = path.relative(process.cwd(), resolved);
48
- if (opts.json) {
49
- // json output for check mode
50
- }
51
- else {
44
+ if (!opts.json)
52
45
  console.error(`✖ ${rel}: not formatted`);
53
- }
54
- }
55
- else {
56
- if (!opts.json) {
57
- const rel = path.relative(process.cwd(), resolved);
58
- // quiet on success? Only print if not json?
59
- // For CI, we want quiet success. So no output unless not formatted.
60
- }
61
46
  }
62
47
  continue;
63
48
  }
@@ -75,40 +60,24 @@ export function runFormat(files, opts = {}) {
75
60
  return 2;
76
61
  }
77
62
  }
78
- else {
79
- // Already formatted, no write
80
- if (!opts.json) {
81
- // no output? Could be verbose
82
- }
83
- }
84
63
  continue;
85
64
  }
86
- // Default: stdout (scriptable). If multiple files, separate with header?
87
65
  if (files.length === 1) {
88
- // Single file -> raw formatted to stdout
89
66
  process.stdout.write(formatted);
90
67
  }
91
68
  else {
92
69
  const rel = path.relative(process.cwd(), resolved);
93
- // For multiple files to stdout, add filename header for scriptability? But spec says scriptable, so we should output each?
94
- // We'll output with header comment per file for clarity, but that would break piping.
95
- // Instead, if multiple files and stdout mode, we print each file's formatted content separated by newline and header to stderr
96
70
  console.error(`== ${rel} ==`);
97
71
  process.stdout.write(formatted);
98
72
  if (!formatted.endsWith("\n"))
99
73
  process.stdout.write("\n");
100
74
  }
101
75
  }
102
- if (opts.check) {
76
+ if (opts.check)
103
77
  return hasUnformatted ? 1 : 0;
104
- }
105
- // For write/stdout, exit 0 unless there were read errors (already returned)
106
- // Should we exit 1 if original file had parse errors? Formatting should still succeed but maybe warn.
107
- // We keep exit 0 for formatting success, to allow CI to use --check for validation.
108
78
  return 0;
109
79
  }
110
- // For testing: check if file is formatted
111
80
  export function checkIsFormatted(source) {
112
- return isFormatted(source);
81
+ return format(source) === source;
113
82
  }
114
83
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/cli/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/cli/format.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,3 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * Floe CLI
4
- * Commands:
5
- * floe check <file.floe> [--json] [--quiet]
6
- * floe format <file.floe> [--write] [--check]
7
- * floe render <file.floe> [-o output.svg]
8
- * floe lsp [--stdio] (starts LSP server)
9
- *
10
- * Keep CLI behavior scriptable for CI with appropriate exit codes:
11
- * 0 success
12
- * 1 validation / check failure
13
- * 2 usage / file not found error
14
- *
15
- * Treat .floe files as untrusted: never eval, ensure SVG cannot execute code.
16
- * This CLI never uses eval and delegates to safe core.
17
- */
18
2
  export {};
19
3
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/cli/main.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/cli/main.ts"],"names":[],"mappings":""}
@@ -78,7 +78,6 @@ function parseArgs(argv) {
78
78
  const args = argv.slice(2);
79
79
  if (args.length === 0)
80
80
  return { files: [], opts: {} };
81
- // Handle global flags
82
81
  if (args[0] === "--help" || args[0] === "-h" || args[0] === "help") {
83
82
  return { command: "help", files: [], opts: {} };
84
83
  }
@@ -155,7 +154,6 @@ async function main() {
155
154
  printVersion();
156
155
  process.exit(0);
157
156
  }
158
- // Allow help per command
159
157
  if (opts.help) {
160
158
  printHelp();
161
159
  process.exit(0);
@@ -180,11 +178,8 @@ async function main() {
180
178
  }
181
179
  case "lsp":
182
180
  case "lsp-server": {
183
- // Start LSP server
184
- // Dynamic import to avoid loading LSP code unless needed (keeps core Node/browser separation)
185
181
  const { startLspServer } = await import("../lsp/server.js");
186
182
  await startLspServer({ stdio: true });
187
- // startLspServer runs indefinitely until shutdown
188
183
  return;
189
184
  }
190
185
  default: {
@@ -195,11 +190,9 @@ async function main() {
195
190
  }
196
191
  process.exit(exitCode);
197
192
  }
198
- // Ensure unhandled errors are reported with exit 1 (no crash with empty exit)
199
193
  main().catch((e) => {
200
194
  const msg = e instanceof Error ? e.message : String(e);
201
195
  console.error(`floe: internal error: ${msg}`);
202
- // Do not print stack for user-facing errors unless debug? Keep simple
203
196
  if (process.env.FLOE_DEBUG)
204
197
  console.error(e instanceof Error ? e.stack : "");
205
198
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/cli/main.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+C5B,CAAC,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAEtD,sBAAsB;IACtB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAwB,EAAE,CAAC;IAErC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,QAAQ,OAAO,uBAAuB,CAAC,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,OAAO,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,qBAAqB,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,yBAAyB;IACzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACvE,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7F,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM;QACR,CAAC;QACD,KAAK,KAAK,CAAC;QACX,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,mBAAmB;YACnB,8FAA8F;YAC9F,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC5D,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,kDAAkD;YAClD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,GAAG,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAC9C,sEAAsE;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/cli/render.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAmF3E"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/cli/render.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CA6D3E"}
@@ -28,7 +28,6 @@ export function runRender(files, opts = {}) {
28
28
  console.error(`Cannot read file '${f}': ${msg}`);
29
29
  return 2;
30
30
  }
31
- // Parse to check diagnostics but still render best-effort (per spec: never crash)
32
31
  let svg;
33
32
  let hasParseErrors = false;
34
33
  try {
@@ -36,7 +35,6 @@ export function runRender(files, opts = {}) {
36
35
  hasParseErrors = parseResult.diagnostics.some((d) => d.severity === "error");
37
36
  if (hasParseErrors)
38
37
  hadErrors = true;
39
- // Render via pipeline (deterministic, never throws on malformed input)
40
38
  const result = renderFloe(source);
41
39
  svg = result.svg;
42
40
  }
@@ -45,12 +43,9 @@ export function runRender(files, opts = {}) {
45
43
  console.error(`floe render: failed to render '${f}': ${msg}`);
46
44
  return 1;
47
45
  }
48
- // Security: ensure svg is properly escaped (render already does) and not containing executable vectors
49
- // We do not inject any untrusted content as raw; svg is derived via escaped paths.
50
46
  if (opts.output) {
51
47
  const outPath = path.resolve(opts.output);
52
48
  try {
53
- // Ensure directory exists
54
49
  const dir = path.dirname(outPath);
55
50
  if (!fs.existsSync(dir))
56
51
  fs.mkdirSync(dir, { recursive: true });
@@ -66,9 +61,6 @@ export function runRender(files, opts = {}) {
66
61
  }
67
62
  }
68
63
  else {
69
- // stdout (scriptable)
70
- // If json mode? Not needed but we support emitting svg via stdout only.
71
- // Print svg to stdout; warnings to stderr
72
64
  if (hasParseErrors && !opts.json) {
73
65
  const rel = path.relative(process.cwd(), resolved);
74
66
  console.error(`warning: ${rel} has parse errors, rendered best-effort SVG`);
@@ -78,13 +70,6 @@ export function runRender(files, opts = {}) {
78
70
  process.stdout.write("\n");
79
71
  }
80
72
  }
81
- // For CI: exit 1 if any file had parse errors? Or 0 still? Spec says appropriate exit codes and scriptable.
82
- // We will exit 1 if any input had errors, to allow CI to fail on invalid diagrams, but still produce SVG.
83
- // This is useful: `floe render` can be used in CI to validate rendering.
84
- // If caller wants to ignore errors, they can check SVG existence anyway.
85
- // We make decision: if any file had errors, exit 1, else 0. But produce SVG regardless.
86
- // For scriptable use, they can do `floe render good.floe || echo failed`
87
- // Document this behavior.
88
73
  return hadErrors ? 1 : 0;
89
74
  }
90
75
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/cli/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/cli/render.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,11 @@
1
1
  import type { Range } from "./range.js";
2
- /**
3
- * Diagnostic severity
4
- */
5
2
  export type Severity = "error" | "warning" | "info";
6
3
  /**
7
4
  * Stable diagnostic codes
8
- *
9
- * E001 - invalid direction
10
- * E002 - invalid identifier
11
- * E003 - duplicate node declaration
12
- * E004 - duplicate direction declaration
13
- * E005 - malformed statement / unexpected token
14
- * E006 - missing / incomplete statement
15
- * E007 - invalid character
16
- * E008 - invalid node type
17
- * E009 - missing edge target
18
- * E010 - empty label
19
- * E011 - duplicate group declaration
20
- * E012 - unclosed group / missing brace
21
- * E013 - invalid metadata declaration
22
- * E014 - invalid annotation or link (unknown target, empty text)
5
+ * v0.1: E001-E010
6
+ * v1 additions preserved as optional for layout/render comparison (surviving dist has E001-E014):
7
+ * E011 duplicate group, E012 unclosed group, E013 invalid metadata, E014 invalid annotation/link
8
+ * v0.2 checkpoint retains v0.1 set as primary, superset allowed for compatibility with surviving artifacts.
23
9
  */
24
10
  export type DiagnosticCode = "E001" | "E002" | "E003" | "E004" | "E005" | "E006" | "E007" | "E008" | "E009" | "E010" | "E011" | "E012" | "E013" | "E014";
25
11
  export interface Diagnostic {
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,wBAAgB,IAAI,CAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GACX,UAAU,CAEZ"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AACpD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AACX,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;CACd;AACD,wBAAgB,IAAI,CAClB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GACX,UAAU,CAEZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAgDA,MAAM,UAAU,IAAI,CAClB,QAAkB,EAClB,IAAoB,EACpB,OAAe,EACf,KAAY;IAEZ,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,IAAI,CAClB,QAAkB,EAClB,IAAoB,EACpB,OAAe,EACf,KAAY;IAEZ,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC"}
@@ -8,15 +8,11 @@
8
8
  * Stability: exports listed under "Stable Public API" in docs/api.md are semver-stable.
9
9
  * Exports marked @internal are deprecated and may be hidden in 2.0 — prefer stable wrappers.
10
10
  */
11
- export type { Position, Range } from "./range.js";
12
11
  export { rangeToString } from "./range.js";
13
- export type { Diagnostic, DiagnosticCode, Severity } from "./diagnostics.js";
14
- export type { Direction, FloeDiagram, FloeNode, FloeEdge, FloeGroup, FloeAnnotation, FloeLink, EdgeKind, ParseResult, } from "./types.js";
15
12
  export { DEFAULT_DIRECTION, DIRECTIONS, IDENTIFIER_RE, isValidIdentifier, } from "./types.js";
16
- export { Lexer, tokenize, type Token, type TokenType } from "./lexer.js";
13
+ export { Lexer, tokenize } from "./lexer.js";
17
14
  export { Parser, parse as parseRaw, parseRaw as parseRawFloe } from "./parser.js";
18
- export { validate, type ValidationInput, type ValidationResult } from "./validator.js";
19
- import type { ParseResult } from "./types.js";
15
+ export { validate } from "./validator.js";
20
16
  /**
21
17
  * @stable
22
18
  * Parse Floe source with full pipeline:
@@ -27,14 +23,16 @@ import type { ParseResult } from "./types.js";
27
23
  * Never throws on malformed input — returns diagnostics instead.
28
24
  * This is the recommended entry point (stable).
29
25
  */
30
- export declare function parseFloe(source: string): ParseResult;
26
+ export declare function parseFloe(source: any): {
27
+ diagram: any;
28
+ diagnostics: any[];
29
+ };
31
30
  /**
32
31
  * Alias: `parse` is the validated entry as well for ergonomics.
33
32
  * For raw (without validation) use `parseRaw` / `parseRawFloe`.
34
33
  */
35
34
  export declare const parse: typeof parseFloe;
36
- export declare function isValid(source: string): boolean;
35
+ export declare function isValid(source: any): boolean;
37
36
  export { getHighlightTokens, getHighlightingInfo, getCompletions, getDiagnostics, getDiagnosticsWithSource, lint, getHover, getSymbols, getFlatSymbols, getDefinition, getDefinitionForWord, getReferences, getReferencesForWord, rename, renameWord, applyEdits, format, isFormatted, getIndentForLine, getIndentationInfo, getIndentationColumn, DEFAULT_INDENT, getFoldingRanges, getFoldingInfo, buildSemanticModel, getSemanticModel, } from "./language/index.js";
38
- export type { CompletionItem, HoverInfo, SymbolKind, SymbolInformation, Location, TextEdit, FoldingRange, HighlightToken, FormattingOptions, SemanticModel, } from "./language/index.js";
39
37
  export { FloeLanguageService, floeLanguageService } from "./language/index.js";
40
38
  //# sourceMappingURL=index.d.ts.map