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 +7 -7
- package/custom-elements.json +11 -11
- package/dist/cdn/instance.js +205 -11
- package/dist/cdn/viz.js +229 -16
- package/dist/cli/fsl-export-system-prompt.cjs +1 -1
- package/dist/cli/fsl-render.cjs +1 -1
- package/dist/cli/fsl.cjs +1 -1
- package/dist/cli/lib.cjs +1 -1
- package/dist/cli/lib.mjs +1 -1
- package/dist/deno/README.md +7 -7
- package/dist/deno/jssm.d.ts +6 -4
- package/dist/deno/jssm.js +1 -1
- package/dist/deno/jssm_types.d.ts +2 -0
- package/dist/jssm.es5.cjs +1 -1
- package/dist/jssm.es5.iife.js +1 -1
- package/dist/jssm.es6.mjs +1 -1
- package/dist/jssm_viz.cjs +1 -1
- package/dist/jssm_viz.iife.cjs +1 -1
- package/dist/jssm_viz.mjs +1 -1
- package/jssm.es5.d.cts +8 -4
- package/jssm.es6.d.ts +8 -4
- package/jssm_viz.es5.d.cts +8 -4
- package/jssm_viz.es6.d.ts +8 -4
- package/package.json +1 -1
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.
|
|
21
|
+
* Generated for version 5.153.0 at 6/28/2026, 6:29:10 PM
|
|
22
22
|
|
|
23
23
|
-->
|
|
24
|
-
# jssm 5.
|
|
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,
|
|
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,
|
|
448
|
+
***7,769 tests***, run 82,415 times.
|
|
449
449
|
|
|
450
|
-
- 7,
|
|
451
|
-
- 754 fuzz tests with 55.
|
|
452
|
-
- 9,
|
|
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
|
[](https://github.com/StoneCypher/jssm/actions)
|
|
455
455
|
[](https://www.npmjs.com/package/jssm)
|
package/custom-elements.json
CHANGED
|
@@ -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`\
|
|
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,\
|
|
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.\
|
|
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\
|
|
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
|
{
|
package/dist/cdn/instance.js
CHANGED
|
@@ -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("
|
|
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$
|
|
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$
|
|
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'
|
|
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.
|
|
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
|