jssm 5.152.0 → 5.153.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/README.md CHANGED
@@ -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.152.0 at 6/28/2026, 3:43:56 PM
21
+ * Generated for version 5.153.0 at 6/28/2026, 6:29:10 PM
22
22
 
23
23
  -->
24
- # jssm 5.152.0
24
+ # jssm 5.153.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,760 tests at 100.0% line coverage
315
+ library.** 7,769 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,760 tests***, run 82,406 times.
448
+ ***7,769 tests***, run 82,415 times.
449
449
 
450
- - 7,006 specs with 100.0% coverage
451
- - 754 fuzz tests with 55.4% coverage
452
- - 9,346 TypeScript lines - 0.8 tests per line, 8.8 generated tests per line
450
+ - 7,015 specs with 100.0% coverage
451
+ - 754 fuzz tests with 55.5% coverage
452
+ - 9,374 TypeScript lines - 0.8 tests per line, 8.8 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)
@@ -444,7 +444,7 @@
444
444
  "kind": "variable",
445
445
  "name": "FSL_COLOR_KEYS",
446
446
  "default": "new Set([ 'color', 'text-color', 'background-color', 'border-color', 'edge-color', ])",
447
- "description": "Attribute keys whose value is a color, mirroring the editor's `COLOR_KEYS`\r\n(language_service). The value token following one of these (plus its `:`) is\r\ntagged `color` and rendered with a swatch, matching the editor overlay."
447
+ "description": "Attribute keys whose value is a color, mirroring the editor's `COLOR_KEYS`\n(language_service). The value token following one of these (plus its `:`) is\ntagged `color` and rendered with a swatch, matching the editor overlay."
448
448
  },
449
449
  {
450
450
  "kind": "function",
@@ -462,7 +462,7 @@
462
462
  }
463
463
  }
464
464
  ],
465
- "description": "Tokenize FSL source into `{cls, text}` runs for syntax highlighting. A pure,\r\nregex-driven scanner — never parses, so it cannot throw on malformed input.\r\n`cls` is null for uncategorized text (punctuation, identifiers, whitespace).\r\n\r\nBeyond the lexical classes it tracks one bit of structural context: an\r\nidentifier immediately before a `:` is retro-tagged `key` (an attribute key,\r\nunless it is already a `keyword`), and the value token after a color key's\r\ncolon — or any hex literal — is tagged `color`. The context never spans a\r\n`;`, so a value can't leak past its statement."
465
+ "description": "Tokenize FSL source into `{cls, text}` runs for syntax highlighting. A pure,\nregex-driven scanner — never parses, so it cannot throw on malformed input.\n`cls` is null for uncategorized text (punctuation, identifiers, whitespace).\n\nBeyond the lexical classes it tracks one bit of structural context: an\nidentifier immediately before a `:` is retro-tagged `key` (an attribute key,\nunless it is already a `keyword`), and the value token after a color key's\ncolon — or any hex literal — is tagged `color`. The context never spans a\n`;`, so a value can't leak past its statement."
466
466
  },
467
467
  {
468
468
  "kind": "function",
@@ -480,7 +480,7 @@
480
480
  }
481
481
  }
482
482
  ],
483
- "description": "Highlight FSL source to an HTML string of `<span class=\"fsl-tok-…\">` runs.\r\nA `color` token is preceded by an inline `<span class=\"fsl-swatch\">` whose\r\nbackground is the literal color text (a CSS-valid named color or hex), giving\r\nthe docs the same swatch the editor overlay shows. Color text is a hex or\r\nidentifier run, so it is a safe `background:` value."
483
+ "description": "Highlight FSL source to an HTML string of `<span class=\"fsl-tok-…\">` runs.\nA `color` token is preceded by an inline `<span class=\"fsl-swatch\">` whose\nbackground is the literal color text (a CSS-valid named color or hex), giving\nthe docs the same swatch the editor overlay shows. Color text is a hex or\nidentifier run, so it is a safe `background:` value."
484
484
  },
485
485
  {
486
486
  "kind": "function",
@@ -558,7 +558,7 @@
558
558
  "declarations": [
559
559
  {
560
560
  "kind": "class",
561
- "description": "`<fsl-docs>` — the language-docs content engine: drill-in nav over the bundled\r\ncurriculum (Getting Started / About State Machines / Tutorials / Example\r\nMachines / Index / Search), a markdown page renderer, and \"load into editor\"\r\nfor tagged FSL examples. Content-only; slot it into `<fsl-help>`.",
561
+ "description": "`<fsl-docs>` — the language-docs content engine: drill-in nav over the bundled\ncurriculum (Getting Started / About State Machines / Tutorials / Example\nMachines / Index / Search), a markdown page renderer, and \"load into editor\"\nfor tagged FSL examples. Content-only; slot it into `<fsl-help>`.",
562
562
  "name": "FslDocs",
563
563
  "members": [
564
564
  {
@@ -3065,7 +3065,7 @@
3065
3065
  }
3066
3066
  }
3067
3067
  ],
3068
- "description": "URL-safe base64 (RFC 4648 §5) of raw bytes: standard base64 with `+`→`-`,\n`/`→`_`, and trailing `=` padding stripped."
3068
+ "description": "URL-safe base64 (RFC 4648 §5) of raw bytes: standard base64 with `+`→`-`,\r\n`/`→`_`, and trailing `=` padding stripped."
3069
3069
  },
3070
3070
  {
3071
3071
  "kind": "function",
@@ -3137,7 +3137,7 @@
3137
3137
  }
3138
3138
  }
3139
3139
  ],
3140
- "description": "Encode FSL to a `<scheme><payload>` segment value (the part after `key=`).\nDEFLATE is used (scheme `1`) only when it is strictly shorter than the raw\nbytes (scheme `0`)."
3140
+ "description": "Encode FSL to a `<scheme><payload>` segment value (the part after `key=`).\r\nDEFLATE is used (scheme `1`) only when it is strictly shorter than the raw\r\nbytes (scheme `0`)."
3141
3141
  },
3142
3142
  {
3143
3143
  "kind": "function",
@@ -3155,7 +3155,7 @@
3155
3155
  }
3156
3156
  }
3157
3157
  ],
3158
- "description": "Inverse of encode_machine: decode a `<scheme><payload>` segment back\nto FSL. Async because inflate is async."
3158
+ "description": "Inverse of encode_machine: decode a `<scheme><payload>` segment back\r\nto FSL. Async because inflate is async."
3159
3159
  },
3160
3160
  {
3161
3161
  "kind": "function",
@@ -3209,7 +3209,7 @@
3209
3209
  }
3210
3210
  }
3211
3211
  ],
3212
- "description": "Return a new fragment body (no leading `#`) with `key`'s segment set to\n`value`, preserving every other segment and its order; appends if absent."
3212
+ "description": "Return a new fragment body (no leading `#`) with `key`'s segment set to\r\n`value`, preserving every other segment and its order; appends if absent."
3213
3213
  },
3214
3214
  {
3215
3215
  "kind": "function",
@@ -3227,7 +3227,7 @@
3227
3227
  }
3228
3228
  }
3229
3229
  ],
3230
- "description": "The fragment key an element owns: its `uhash` attribute if set, else its\n`id`, else `null` (does not participate in URL sync). The single source of\nthis rule, shared by the toolbar export and the sync controller."
3230
+ "description": "The fragment key an element owns: its `uhash` attribute if set, else its\r\n`id`, else `null` (does not participate in URL sync). The single source of\r\nthis rule, shared by the toolbar export and the sync controller."
3231
3231
  },
3232
3232
  {
3233
3233
  "kind": "function",
@@ -3266,7 +3266,7 @@
3266
3266
  }
3267
3267
  }
3268
3268
  ],
3269
- "description": "A shareable URL for `fsl` under `key`, merging into `currentHash` so sibling\nmachines' segments survive. Browser-defaulted (`location`) but injectable for\ntests."
3269
+ "description": "A shareable URL for `fsl` under `key`, merging into `currentHash` so sibling\r\nmachines' segments survive. Browser-defaulted (`location`) but injectable for\r\ntests."
3270
3270
  },
3271
3271
  {
3272
3272
  "kind": "function",
@@ -3408,7 +3408,7 @@
3408
3408
  },
3409
3409
  {
3410
3410
  "kind": "class",
3411
- "description": "Binds an `<fsl-instance>` to a segment of the URL fragment: restores from it\non connect and writes back (debounced, via `history.replaceState`) whenever\nthe machine is rebuilt. Inert when the host has no key (permalink_key_for\nreturns `null`), so an `fsl-instance` without an `id`/`uhash` never touches\n`location`.\n\nEcho guard: `_last` holds the segment most recently read or written, so a\nrestore→rebuild→write cycle and a self-induced `hashchange` are both no-ops.",
3411
+ "description": "Binds an `<fsl-instance>` to a segment of the URL fragment: restores from it\r\non connect and writes back (debounced, via `history.replaceState`) whenever\r\nthe machine is rebuilt. Inert when the host has no key (permalink_key_for\r\nreturns `null`), so an `fsl-instance` without an `id`/`uhash` never touches\r\n`location`.\r\n\r\nEcho guard: `_last` holds the segment most recently read or written, so a\r\nrestore→rebuild→write cycle and a self-induced `hashchange` are both no-ops.",
3412
3412
  "name": "FslPermalinkSync",
3413
3413
  "members": [
3414
3414
  {
@@ -888,7 +888,19 @@ function peg$parse(input, options) {
888
888
  node.loc = location();
889
889
  }
890
890
  return node;
891
- }, peg$c1573 = peg$otherExpectation("arrange declaration"), peg$currPos = 0, peg$savedPos = 0, peg$posDetailsCache = [{ line: 1, column: 1 }], peg$maxFailPos = 0, peg$maxFailExpected = [], peg$silentFails = 0, peg$result;
891
+ }, peg$c1573 = peg$otherExpectation("oarrange declaration"), peg$c1574 = "oarrange", peg$c1575 = peg$literalExpectation("oarrange", false), peg$c1576 = function (value) {
892
+ const node = { key: 'oarrange_declaration', value };
893
+ if (options.locations) {
894
+ node.loc = location();
895
+ }
896
+ return node;
897
+ }, peg$c1577 = peg$otherExpectation("farrange declaration"), peg$c1578 = "farrange", peg$c1579 = peg$literalExpectation("farrange", false), peg$c1580 = function (value) {
898
+ const node = { key: 'farrange_declaration', value };
899
+ if (options.locations) {
900
+ node.loc = location();
901
+ }
902
+ return node;
903
+ }, peg$c1581 = peg$otherExpectation("arrange declaration"), peg$currPos = 0, peg$savedPos = 0, peg$posDetailsCache = [{ line: 1, column: 1 }], peg$maxFailPos = 0, peg$maxFailExpected = [], peg$silentFails = 0, peg$result;
892
904
  if ("startRule" in options) {
893
905
  if (!(options.startRule in peg$startRuleFunctions)) {
894
906
  throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
@@ -20456,6 +20468,176 @@ function peg$parse(input, options) {
20456
20468
  }
20457
20469
  return s0;
20458
20470
  }
20471
+ function peg$parseOArrangeDeclaration() {
20472
+ var s0, s1, s2, s3, s4, s5, s6;
20473
+ peg$silentFails++;
20474
+ s0 = peg$currPos;
20475
+ if (input.substr(peg$currPos, 8) === peg$c1574) {
20476
+ s1 = peg$c1574;
20477
+ peg$currPos += 8;
20478
+ }
20479
+ else {
20480
+ s1 = peg$FAILED;
20481
+ if (peg$silentFails === 0 && peg$currPos >= peg$maxFailPos) {
20482
+ peg$fail(peg$c1575);
20483
+ }
20484
+ }
20485
+ if (s1 !== peg$FAILED) {
20486
+ s2 = peg$parseWS();
20487
+ if (s2 === peg$FAILED) {
20488
+ s2 = null;
20489
+ }
20490
+ if (s2 !== peg$FAILED) {
20491
+ s3 = peg$parseLabelOrLabelList();
20492
+ if (s3 !== peg$FAILED) {
20493
+ s4 = peg$parseWS();
20494
+ if (s4 === peg$FAILED) {
20495
+ s4 = null;
20496
+ }
20497
+ if (s4 !== peg$FAILED) {
20498
+ if (input.charCodeAt(peg$currPos) === 59) {
20499
+ s5 = peg$c1213;
20500
+ peg$currPos++;
20501
+ }
20502
+ else {
20503
+ s5 = peg$FAILED;
20504
+ if (peg$silentFails === 0 && peg$currPos >= peg$maxFailPos) {
20505
+ peg$fail(peg$c1214);
20506
+ }
20507
+ }
20508
+ if (s5 !== peg$FAILED) {
20509
+ s6 = peg$parseWS();
20510
+ if (s6 === peg$FAILED) {
20511
+ s6 = null;
20512
+ }
20513
+ if (s6 !== peg$FAILED) {
20514
+ peg$savedPos = s0;
20515
+ s1 = peg$c1576(s3);
20516
+ s0 = s1;
20517
+ }
20518
+ else {
20519
+ peg$currPos = s0;
20520
+ s0 = peg$FAILED;
20521
+ }
20522
+ }
20523
+ else {
20524
+ peg$currPos = s0;
20525
+ s0 = peg$FAILED;
20526
+ }
20527
+ }
20528
+ else {
20529
+ peg$currPos = s0;
20530
+ s0 = peg$FAILED;
20531
+ }
20532
+ }
20533
+ else {
20534
+ peg$currPos = s0;
20535
+ s0 = peg$FAILED;
20536
+ }
20537
+ }
20538
+ else {
20539
+ peg$currPos = s0;
20540
+ s0 = peg$FAILED;
20541
+ }
20542
+ }
20543
+ else {
20544
+ peg$currPos = s0;
20545
+ s0 = peg$FAILED;
20546
+ }
20547
+ peg$silentFails--;
20548
+ if (s0 === peg$FAILED) {
20549
+ s1 = peg$FAILED;
20550
+ if (peg$silentFails === 0 && peg$currPos >= peg$maxFailPos) {
20551
+ peg$fail(peg$c1573);
20552
+ }
20553
+ }
20554
+ return s0;
20555
+ }
20556
+ function peg$parseFArrangeDeclaration() {
20557
+ var s0, s1, s2, s3, s4, s5, s6;
20558
+ peg$silentFails++;
20559
+ s0 = peg$currPos;
20560
+ if (input.substr(peg$currPos, 8) === peg$c1578) {
20561
+ s1 = peg$c1578;
20562
+ peg$currPos += 8;
20563
+ }
20564
+ else {
20565
+ s1 = peg$FAILED;
20566
+ if (peg$silentFails === 0 && peg$currPos >= peg$maxFailPos) {
20567
+ peg$fail(peg$c1579);
20568
+ }
20569
+ }
20570
+ if (s1 !== peg$FAILED) {
20571
+ s2 = peg$parseWS();
20572
+ if (s2 === peg$FAILED) {
20573
+ s2 = null;
20574
+ }
20575
+ if (s2 !== peg$FAILED) {
20576
+ s3 = peg$parseLabelOrLabelList();
20577
+ if (s3 !== peg$FAILED) {
20578
+ s4 = peg$parseWS();
20579
+ if (s4 === peg$FAILED) {
20580
+ s4 = null;
20581
+ }
20582
+ if (s4 !== peg$FAILED) {
20583
+ if (input.charCodeAt(peg$currPos) === 59) {
20584
+ s5 = peg$c1213;
20585
+ peg$currPos++;
20586
+ }
20587
+ else {
20588
+ s5 = peg$FAILED;
20589
+ if (peg$silentFails === 0 && peg$currPos >= peg$maxFailPos) {
20590
+ peg$fail(peg$c1214);
20591
+ }
20592
+ }
20593
+ if (s5 !== peg$FAILED) {
20594
+ s6 = peg$parseWS();
20595
+ if (s6 === peg$FAILED) {
20596
+ s6 = null;
20597
+ }
20598
+ if (s6 !== peg$FAILED) {
20599
+ peg$savedPos = s0;
20600
+ s1 = peg$c1580(s3);
20601
+ s0 = s1;
20602
+ }
20603
+ else {
20604
+ peg$currPos = s0;
20605
+ s0 = peg$FAILED;
20606
+ }
20607
+ }
20608
+ else {
20609
+ peg$currPos = s0;
20610
+ s0 = peg$FAILED;
20611
+ }
20612
+ }
20613
+ else {
20614
+ peg$currPos = s0;
20615
+ s0 = peg$FAILED;
20616
+ }
20617
+ }
20618
+ else {
20619
+ peg$currPos = s0;
20620
+ s0 = peg$FAILED;
20621
+ }
20622
+ }
20623
+ else {
20624
+ peg$currPos = s0;
20625
+ s0 = peg$FAILED;
20626
+ }
20627
+ }
20628
+ else {
20629
+ peg$currPos = s0;
20630
+ s0 = peg$FAILED;
20631
+ }
20632
+ peg$silentFails--;
20633
+ if (s0 === peg$FAILED) {
20634
+ s1 = peg$FAILED;
20635
+ if (peg$silentFails === 0 && peg$currPos >= peg$maxFailPos) {
20636
+ peg$fail(peg$c1577);
20637
+ }
20638
+ }
20639
+ return s0;
20640
+ }
20459
20641
  function peg$parseArrangeDeclaration() {
20460
20642
  var s0;
20461
20643
  peg$silentFails++;
@@ -20463,13 +20645,19 @@ function peg$parse(input, options) {
20463
20645
  if (s0 === peg$FAILED) {
20464
20646
  s0 = peg$parseArrangeEndDeclaration();
20465
20647
  if (s0 === peg$FAILED) {
20466
- s0 = peg$parseRegularArrangeDeclaration();
20648
+ s0 = peg$parseOArrangeDeclaration();
20649
+ if (s0 === peg$FAILED) {
20650
+ s0 = peg$parseFArrangeDeclaration();
20651
+ if (s0 === peg$FAILED) {
20652
+ s0 = peg$parseRegularArrangeDeclaration();
20653
+ }
20654
+ }
20467
20655
  }
20468
20656
  }
20469
20657
  peg$silentFails--;
20470
20658
  if (s0 === peg$FAILED) {
20471
20659
  if (peg$silentFails === 0 && peg$currPos >= peg$maxFailPos) {
20472
- peg$fail(peg$c1573);
20660
+ peg$fail(peg$c1581);
20473
20661
  }
20474
20662
  }
20475
20663
  return s0;
@@ -22370,7 +22558,8 @@ function compile_rule_handler(rule) {
22370
22558
  return { agg_as: 'state_declaration', val: { state: rule.name, declarations: rule.value } };
22371
22559
  }
22372
22560
  if (['arrange_declaration', 'arrange_start_declaration',
22373
- 'arrange_end_declaration'].includes(rule.key)) {
22561
+ 'arrange_end_declaration', 'oarrange_declaration',
22562
+ 'farrange_declaration'].includes(rule.key)) {
22374
22563
  return { agg_as: rule.key, val: [rule.value] };
22375
22564
  }
22376
22565
  // things that can only exist once and are just a value under their own name
@@ -22576,6 +22765,8 @@ function compile(tree) {
22576
22765
  arrange_declaration: [],
22577
22766
  arrange_start_declaration: [],
22578
22767
  arrange_end_declaration: [],
22768
+ oarrange_declaration: [],
22769
+ farrange_declaration: [],
22579
22770
  machine_version: [],
22580
22771
  default_state_config: [],
22581
22772
  default_active_state_config: [],
@@ -22701,6 +22892,7 @@ function compile(tree) {
22701
22892
  }
22702
22893
  });
22703
22894
  ['arrange_declaration', 'arrange_start_declaration', 'arrange_end_declaration',
22895
+ 'oarrange_declaration', 'farrange_declaration',
22704
22896
  'machine_author', 'machine_contributor', 'machine_reference', 'theme',
22705
22897
  'state_declaration', 'property_definition', 'default_state_config',
22706
22898
  'default_start_state_config', 'default_end_state_config',
@@ -23371,7 +23563,7 @@ var constants = /*#__PURE__*/Object.freeze({
23371
23563
  * Useful for runtime diagnostics and for embedding in serialized machine
23372
23564
  * snapshots so that deserializers can detect version-skew.
23373
23565
  */
23374
- const version = "5.152.0";
23566
+ const version = "5.153.0";
23375
23567
 
23376
23568
  // whargarbl lots of these return arrays could/should be sets
23377
23569
  const { state_name_chars, state_name_first_chars, action_label_chars } = constants;
@@ -23688,7 +23880,7 @@ function find_connected_components(states, edges) {
23688
23880
  }
23689
23881
  class Machine {
23690
23882
  // whargarbl this badly needs to be broken up, monolith master
23691
- constructor({ start_states, end_states = [], failed_outputs = [], initial_state, start_states_no_enforce, complete = [], transitions, machine_author, machine_comment, machine_contributor, machine_definition, machine_language, machine_license, machine_name, machine_version, npm_name, default_size, state_declaration, property_definition, state_property, fsl_version, dot_preamble = undefined, arrange_declaration = [], arrange_start_declaration = [], arrange_end_declaration = [], theme = ['default'], flow = 'down', graph_layout = 'dot', instance_name, history, boundary_depth_limit, data, default_state_config, default_active_state_config, default_hooked_state_config, default_terminal_state_config, default_start_state_config, default_end_state_config, default_transition_config, default_graph_config, group_registry, group_metadata, group_hooks, state_hooks, allows_override, config_allows_override, allow_islands, editor_config, rng_seed, time_source, timeout_source, clear_timeout_source }) {
23883
+ constructor({ start_states, end_states = [], failed_outputs = [], initial_state, start_states_no_enforce, complete = [], transitions, machine_author, machine_comment, machine_contributor, machine_definition, machine_language, machine_license, machine_name, machine_version, npm_name, default_size, state_declaration, property_definition, state_property, fsl_version, dot_preamble = undefined, arrange_declaration = [], arrange_start_declaration = [], arrange_end_declaration = [], oarrange_declaration = [], farrange_declaration = [], theme = ['default'], flow = 'down', graph_layout = 'dot', instance_name, history, boundary_depth_limit, data, default_state_config, default_active_state_config, default_hooked_state_config, default_terminal_state_config, default_start_state_config, default_end_state_config, default_transition_config, default_graph_config, group_registry, group_metadata, group_hooks, state_hooks, allows_override, config_allows_override, allow_islands, editor_config, rng_seed, time_source, timeout_source, clear_timeout_source }) {
23692
23884
  this._time_source = time_source !== null && time_source !== void 0 ? time_source : (() => new Date().getTime());
23693
23885
  this._create_started = this._time_source();
23694
23886
  this._instance_name = instance_name;
@@ -23725,6 +23917,8 @@ class Machine {
23725
23917
  this._arrange_declaration = arrange_declaration;
23726
23918
  this._arrange_start_declaration = arrange_start_declaration;
23727
23919
  this._arrange_end_declaration = arrange_end_declaration;
23920
+ this._oarrange_declaration = oarrange_declaration;
23921
+ this._farrange_declaration = farrange_declaration;
23728
23922
  this._dot_preamble = dot_preamble;
23729
23923
  this._themes = theme;
23730
23924
  this._flow = flow;
@@ -24137,11 +24331,11 @@ class Machine {
24137
24331
  }
24138
24332
  this._created = this._time_source();
24139
24333
  this.auto_set_state_timeout();
24140
- this._arrange_declaration.forEach((arrange_pair) => arrange_pair.forEach((possibleState) => {
24334
+ [this._arrange_declaration, this._oarrange_declaration, this._farrange_declaration].forEach((declaration) => declaration.forEach((arrange_pair) => arrange_pair.forEach((possibleState) => {
24141
24335
  if (!(this._states.has(possibleState))) {
24142
24336
  throw new JssmError(this, `Cannot arrange state that does not exist "${possibleState}"`);
24143
24337
  }
24144
- }));
24338
+ })));
24145
24339
  }
24146
24340
  /********
24147
24341
  *
@@ -24346,13 +24540,13 @@ class Machine {
24346
24540
  * `;
24347
24541
  *
24348
24542
  * traffic_light.state(); // Off
24349
- * traffic_light.props(); // { can_go: true, hesitate: true, stop_first: true; }
24543
+ * traffic_light.props(); // { can_go: true, hesitate: true, stop_first: true }
24350
24544
  *
24351
24545
  * traffic_light.go('Red');
24352
- * traffic_light.props(); // { can_go: false, hesitate: true, stop_first: true; }
24546
+ * traffic_light.props(); // { can_go: false, hesitate: true, stop_first: true }
24353
24547
  *
24354
24548
  * traffic_light.go('Green');
24355
- * traffic_light.props(); // { can_go: true, hesitate: false, stop_first: false; }
24549
+ * traffic_light.props(); // { can_go: true, hesitate: false, stop_first: false }
24356
24550
  * ```
24357
24551
  *
24358
24552
  * @returns An object mapping every known property name to its current value