jssm 5.147.9 → 5.148.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.
@@ -51,6 +51,8 @@ const PROPERTY_KEYWORDS = new Set([
51
51
  'dot_preamble', 'default_size',
52
52
  // per-element style keys
53
53
  'label', 'color', 'shape', 'corners', 'linestyle', 'image', 'url',
54
+ // hyphenated style keys (read as a single compound token by the tokenizer)
55
+ 'background-color', 'text-color', 'border-color', 'edge-color', 'line-style',
54
56
  ]);
55
57
  /**
56
58
  * Keys that still parse but are deprecated. Highlighted with the
@@ -134,8 +136,19 @@ const fslStreamParser = {
134
136
  if (ATOM_START.test(ch)) {
135
137
  let tok = '';
136
138
  let next = stream.peek();
137
- while (next !== undefined && ATOM_BODY.test(next)) {
138
- tok += stream.next();
139
+ while (next !== undefined) {
140
+ if (ATOM_BODY.test(next)) {
141
+ tok += stream.next();
142
+ }
143
+ else if (next === '-' && ATOM_BODY.test(stream.string.slice(stream.pos + 1, stream.pos + 2))) {
144
+ // An interior hyphen (between word chars) joins a compound key like
145
+ // `background-color`; a trailing one (before `>` of `->`, or at EOL)
146
+ // does not. `slice` yields '' past the end, so no nullish branch.
147
+ tok += stream.next();
148
+ }
149
+ else {
150
+ break;
151
+ }
139
152
  next = stream.peek();
140
153
  }
141
154
  if (DEPRECATED_KEYWORDS.has(tok)) {
@@ -18,10 +18,10 @@ Please edit the file it's derived from, instead: `./src/md/readme_base.md`
18
18
 
19
19
 
20
20
 
21
- * Generated for version 5.147.9 at 6/27/2026, 9:09:27 PM
21
+ * Generated for version 5.148.0 at 6/27/2026, 11:13:49 PM
22
22
 
23
23
  -->
24
- # jssm 5.147.9
24
+ # jssm 5.148.0
25
25
 
26
26
  [**Try the live editor**](https://stonecypher.github.io/jssm-viz-demo/graph_explorer.html) ·
27
27
  [Documentation](https://stonecypher.github.io/jssm/docs/) ·
@@ -312,7 +312,7 @@ That decision shows up everywhere downstream:
312
312
  or run `npm run benny` against your own machine.
313
313
 
314
314
  - **More thoroughly tested than any other JavaScript state-machine
315
- library.** 7,527 tests at 100.0% line coverage
315
+ library.** 7,682 tests at 100.0% line coverage
316
316
  ([report](https://coveralls.io/github/StoneCypher/jssm)), plus
317
317
  fuzz testing via `fast-check`, with parser test data across ten natural
318
318
  languages and Emoji.
@@ -445,11 +445,11 @@ If your contribution is missing here, please open an issue.
445
445
 
446
446
  <br/>
447
447
 
448
- ***7,527 tests***, run 82,074 times.
448
+ ***7,682 tests***, run 82,328 times.
449
449
 
450
- - 6,774 specs with 100.0% coverage
451
- - 753 fuzz tests with 69.5% coverage
452
- - 7,277 TypeScript lines - 1.0 tests per line, 11.3 generated tests per line
450
+ - 6,928 specs with 100.0% coverage
451
+ - 754 fuzz tests with 59.4% coverage
452
+ - 8,790 TypeScript lines - 0.9 tests per line, 9.4 generated tests per line
453
453
 
454
454
  [![Actions Status](https://github.com/StoneCypher/jssm/workflows/Node%20CI/badge.svg)](https://github.com/StoneCypher/jssm/actions)
455
455
  [![NPM version](https://img.shields.io/npm/v/jssm.svg)](https://www.npmjs.com/package/jssm)
@@ -16,6 +16,7 @@ declare const shapes: string[], gviz_shapes: string[], named_colors: string[], s
16
16
  from: string;
17
17
  to: string;
18
18
  }[];
19
+ export { fslDiagnostics, fslCompletions, fslSemanticSpans } from './language_service/index.js';
19
20
  import { version, build_time } from './version.js';
20
21
  /**
21
22
  * Internal record holding a single registered event subscription: the