jssm 5.86.1 → 5.86.2

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/CHANGELOG.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- 1067 merges; 173 releases; Changlogging the last 10 commits; Full changelog at [CHANGELOG.long.md](CHANGELOG.long.md)
5
+ 1068 merges; 175 releases; Changlogging the last 10 commits; Full changelog at [CHANGELOG.long.md](CHANGELOG.long.md)
6
6
 
7
7
 
8
8
 
@@ -12,7 +12,7 @@ All notable changes to this project will be documented in this file.
12
12
 
13
13
  Published tags:
14
14
 
15
- <a href="#5__85__11">5.85.11</a>, <a href="#5__85__10">5.85.10</a>, <a href="#5__85__9">5.85.9</a>, <a href="#5__85__8">5.85.8</a>, <a href="#5__85__7">5.85.7</a>, <a href="#5__85__6">5.85.6</a>, <a href="#5__85__5">5.85.5</a>, <a href="#5__85__4">5.85.4</a>, <a href="#5__85__3">5.85.3</a>, <a href="#5__85__2">5.85.2</a>, <a href="#5__85__1">5.85.1</a>, <a href="#5__85__0">5.85.0</a>, <a href="#5__84__1">5.84.1</a>, <a href="#5__84__0">5.84.0</a>, <a href="#5__83__2">5.83.2</a>, <a href="#5__83__1">5.83.1</a>, <a href="#5__83__0">5.83.0</a>, <a href="#5__82__5">5.82.5</a>, <a href="#5__82__4">5.82.4</a>, <a href="#5__82__3">5.82.3</a>, <a href="#5__82__2">5.82.2</a>, <a href="#5__82__1">5.82.1</a>, <a href="#5__82__0">5.82.0</a>, <a href="#5__81__2">5.81.2</a>, <a href="#5__81__0">5.81.0</a>, <a href="#5__80__1">5.80.1</a>, <a href="#5__80__0">5.80.0</a>, <a href="#5__79__18">5.79.18</a>, <a href="#5__79__17">5.79.17</a>, <a href="#5__79__16">5.79.16</a>, <a href="#5__79__15">5.79.15</a>, <a href="#5__79__11">5.79.11</a>, <a href="#5__79__10">5.79.10</a>, <a href="#5__79__9">5.79.9</a>, <a href="#5__79__8">5.79.8</a>, <a href="#5__79__6">5.79.6</a>, <a href="#5__79__4">5.79.4</a>, <a href="#5__79__3">5.79.3</a>, <a href="#5__79__2">5.79.2</a>, <a href="#5__79__1">5.79.1</a>, <a href="#5__79__0">5.79.0</a>, <a href="#5__78__0">5.78.0</a>, <a href="#5__77__1">5.77.1</a>, <a href="#5__77__0">5.77.0</a>, <a href="#5__76__2">5.76.2</a>, <a href="#5__76__0">5.76.0</a>, <a href="#5__75__1">5.75.1</a>, <a href="#5__75__0">5.75.0</a>, <a href="#5__74__0">5.74.0</a>, <a href="#5__73__1">5.73.1</a>, <a href="#5__73__0">5.73.0</a>, <a href="#5__72__5">5.72.5</a>, <a href="#5__72__4">5.72.4</a>, <a href="#5__72__3">5.72.3</a>, <a href="#5__72__2">5.72.2</a>, <a href="#5__72__1">5.72.1</a>, <a href="#5__72__0">5.72.0</a>, <a href="#5__71__1">5.71.1</a>, <a href="#5__71__0">5.71.0</a>, <a href="#5__70__36">5.70.36</a>, <a href="#5__70__35">5.70.35</a>, <a href="#5__70__34">5.70.34</a>, <a href="#5__70__33">5.70.33</a>, <a href="#5__70__32">5.70.32</a>, <a href="#5__70__31">5.70.31</a>, <a href="#5__70__30">5.70.30</a>, <a href="#5__70__29">5.70.29</a>, <a href="#5__70__28">5.70.28</a>, <a href="#5__70__27">5.70.27</a>, <a href="#5__70__26">5.70.26</a>, <a href="#5__70__25">5.70.25</a>, <a href="#5__70__24">5.70.24</a>, <a href="#5__70__23">5.70.23</a>, <a href="#5__70__22">5.70.22</a>, <a href="#5__70__21">5.70.21</a>, <a href="#5__70__20">5.70.20</a>, <a href="#5__70__19">5.70.19</a>, <a href="#5__70__18">5.70.18</a>, <a href="#5__70__16">5.70.16</a>, <a href="#5__70__15">5.70.15</a>, <a href="#5__70__14">5.70.14</a>, <a href="#5__70__13">5.70.13</a>, <a href="#5__70__12">5.70.12</a>, <a href="#5__70__11">5.70.11</a>, <a href="#5__70__10">5.70.10</a>, <a href="#5__70__9">5.70.9</a>, <a href="#5__70__8">5.70.8</a>, <a href="#5__70__7">5.70.7</a>, <a href="#5__70__6">5.70.6</a>, <a href="#5__70__5">5.70.5</a>, <a href="#5__70__4">5.70.4</a>, <a href="#5__70__3">5.70.3</a>, <a href="#5__70__2">5.70.2</a>, <a href="#5__70__1">5.70.1</a>, <a href="#5__70__0">5.70.0</a>, <a href="#5__69__4">5.69.4</a>, <a href="#5__69__3">5.69.3</a>, <a href="#5__69__2">5.69.2</a>, <a href="#5__69__0">5.69.0</a>, <a href="#5__68__0">5.68.0</a>, <a href="#5__67__2">5.67.2</a>, <a href="#5__67__0">5.67.0</a>, <a href="#5__66__0">5.66.0</a>, <a href="#5__65__14">5.65.14</a>, <a href="#5__65__12">5.65.12</a>, <a href="#5__65__11">5.65.11</a>, <a href="#5__65__10">5.65.10</a>, <a href="#5__65__9">5.65.9</a>, <a href="#5__65__8">5.65.8</a>, <a href="#5__65__7">5.65.7</a>, <a href="#5__65__5">5.65.5</a>, <a href="#5__65__4">5.65.4</a>, <a href="#5__65__3">5.65.3</a>, <a href="#5__65__2">5.65.2</a>, <a href="#5__65__1">5.65.1</a>, <a href="#5__65__0">5.65.0</a>, <a href="#5__64__2">5.64.2</a>, <a href="#5__64__1">5.64.1</a>, <a href="#5__64__0">5.64.0</a>, <a href="#5__63__0">5.63.0</a>, <a href="#5__62__0">5.62.0</a>, <a href="#5__61__4">5.61.4</a>, <a href="#5__61__3">5.61.3</a>, <a href="#5__61__2">5.61.2</a>, <a href="#5__61__1">5.61.1</a>, <a href="#5__60__4">5.60.4</a>, <a href="#5__60__3">5.60.3</a>, <a href="#5__60__0">5.60.0</a>, <a href="#5__59__1">5.59.1</a>, <a href="#5__59__0">5.59.0</a>, <a href="#5__58__1">5.58.1</a>, <a href="#5__58__0">5.58.0</a>, <a href="#5__57__1">5.57.1</a>, <a href="#5__57__0">5.57.0</a>, <a href="#5__56__2">5.56.2</a>, <a href="#5__56__1">5.56.1</a>, <a href="#5__55__0">5.55.0</a>, <a href="#5__54__0">5.54.0</a>, <a href="#5__53__0">5.53.0</a>, <a href="#5__52__0">5.52.0</a>, <a href="#5__51__0">5.51.0</a>, <a href="#5__50__0">5.50.0</a>, <a href="#5__49__0">5.49.0</a>, <a href="#5__48__0">5.48.0</a>, <a href="#5__47__0">5.47.0</a>, <a href="#5__46__0">5.46.0</a>, <a href="#5__45__2">5.45.2</a>, <a href="#5__45__0">5.45.0</a>, <a href="#5__44__0">5.44.0</a>, <a href="#5__43__2">5.43.2</a>, <a href="#v5__42__0">v5.42.0</a>, <a href="#5__42__0">5.42.0</a>, <a href="#v5__41__15">v5.41.15</a>, <a href="#5__41__15">5.41.15</a>, <a href="#v5__41__14">v5.41.14</a>, <a href="#5__41__14">5.41.14</a>, <a href="#v5__41__12">v5.41.12</a>, <a href="#5__41__12">5.41.12</a>, <a href="#v5__41__10">v5.41.10</a>, <a href="#5__41__10">5.41.10</a>, <a href="#v5__41__9">v5.41.9</a>, <a href="#5__41__9">5.41.9</a>, <a href="#v5__41__8">v5.41.8</a>, <a href="#5__41__8">5.41.8</a>, <a href="#v5__41__7">v5.41.7</a>, <a href="#v5__41__2">v5.41.2</a>, <a href="#v5__41__1">v5.41.1</a>, <a href="#v5__32__14">v5.32.14</a>, <a href="#5__14__0">5.14.0</a>, <a href="#5__12__0">5.12.0</a>, <a href="#5__11__12">5.11.12</a>, <a href="#5__11__1">5.11.1</a>, <a href="#5__11__0">5.11.0</a>
15
+ <a href="#5__86__1">5.86.1</a>, <a href="#5__86__0">5.86.0</a>, <a href="#5__85__11">5.85.11</a>, <a href="#5__85__10">5.85.10</a>, <a href="#5__85__9">5.85.9</a>, <a href="#5__85__8">5.85.8</a>, <a href="#5__85__7">5.85.7</a>, <a href="#5__85__6">5.85.6</a>, <a href="#5__85__5">5.85.5</a>, <a href="#5__85__4">5.85.4</a>, <a href="#5__85__3">5.85.3</a>, <a href="#5__85__2">5.85.2</a>, <a href="#5__85__1">5.85.1</a>, <a href="#5__85__0">5.85.0</a>, <a href="#5__84__1">5.84.1</a>, <a href="#5__84__0">5.84.0</a>, <a href="#5__83__2">5.83.2</a>, <a href="#5__83__1">5.83.1</a>, <a href="#5__83__0">5.83.0</a>, <a href="#5__82__5">5.82.5</a>, <a href="#5__82__4">5.82.4</a>, <a href="#5__82__3">5.82.3</a>, <a href="#5__82__2">5.82.2</a>, <a href="#5__82__1">5.82.1</a>, <a href="#5__82__0">5.82.0</a>, <a href="#5__81__2">5.81.2</a>, <a href="#5__81__0">5.81.0</a>, <a href="#5__80__1">5.80.1</a>, <a href="#5__80__0">5.80.0</a>, <a href="#5__79__18">5.79.18</a>, <a href="#5__79__17">5.79.17</a>, <a href="#5__79__16">5.79.16</a>, <a href="#5__79__15">5.79.15</a>, <a href="#5__79__11">5.79.11</a>, <a href="#5__79__10">5.79.10</a>, <a href="#5__79__9">5.79.9</a>, <a href="#5__79__8">5.79.8</a>, <a href="#5__79__6">5.79.6</a>, <a href="#5__79__4">5.79.4</a>, <a href="#5__79__3">5.79.3</a>, <a href="#5__79__2">5.79.2</a>, <a href="#5__79__1">5.79.1</a>, <a href="#5__79__0">5.79.0</a>, <a href="#5__78__0">5.78.0</a>, <a href="#5__77__1">5.77.1</a>, <a href="#5__77__0">5.77.0</a>, <a href="#5__76__2">5.76.2</a>, <a href="#5__76__0">5.76.0</a>, <a href="#5__75__1">5.75.1</a>, <a href="#5__75__0">5.75.0</a>, <a href="#5__74__0">5.74.0</a>, <a href="#5__73__1">5.73.1</a>, <a href="#5__73__0">5.73.0</a>, <a href="#5__72__5">5.72.5</a>, <a href="#5__72__4">5.72.4</a>, <a href="#5__72__3">5.72.3</a>, <a href="#5__72__2">5.72.2</a>, <a href="#5__72__1">5.72.1</a>, <a href="#5__72__0">5.72.0</a>, <a href="#5__71__1">5.71.1</a>, <a href="#5__71__0">5.71.0</a>, <a href="#5__70__36">5.70.36</a>, <a href="#5__70__35">5.70.35</a>, <a href="#5__70__34">5.70.34</a>, <a href="#5__70__33">5.70.33</a>, <a href="#5__70__32">5.70.32</a>, <a href="#5__70__31">5.70.31</a>, <a href="#5__70__30">5.70.30</a>, <a href="#5__70__29">5.70.29</a>, <a href="#5__70__28">5.70.28</a>, <a href="#5__70__27">5.70.27</a>, <a href="#5__70__26">5.70.26</a>, <a href="#5__70__25">5.70.25</a>, <a href="#5__70__24">5.70.24</a>, <a href="#5__70__23">5.70.23</a>, <a href="#5__70__22">5.70.22</a>, <a href="#5__70__21">5.70.21</a>, <a href="#5__70__20">5.70.20</a>, <a href="#5__70__19">5.70.19</a>, <a href="#5__70__18">5.70.18</a>, <a href="#5__70__16">5.70.16</a>, <a href="#5__70__15">5.70.15</a>, <a href="#5__70__14">5.70.14</a>, <a href="#5__70__13">5.70.13</a>, <a href="#5__70__12">5.70.12</a>, <a href="#5__70__11">5.70.11</a>, <a href="#5__70__10">5.70.10</a>, <a href="#5__70__9">5.70.9</a>, <a href="#5__70__8">5.70.8</a>, <a href="#5__70__7">5.70.7</a>, <a href="#5__70__6">5.70.6</a>, <a href="#5__70__5">5.70.5</a>, <a href="#5__70__4">5.70.4</a>, <a href="#5__70__3">5.70.3</a>, <a href="#5__70__2">5.70.2</a>, <a href="#5__70__1">5.70.1</a>, <a href="#5__70__0">5.70.0</a>, <a href="#5__69__4">5.69.4</a>, <a href="#5__69__3">5.69.3</a>, <a href="#5__69__2">5.69.2</a>, <a href="#5__69__0">5.69.0</a>, <a href="#5__68__0">5.68.0</a>, <a href="#5__67__2">5.67.2</a>, <a href="#5__67__0">5.67.0</a>, <a href="#5__66__0">5.66.0</a>, <a href="#5__65__14">5.65.14</a>, <a href="#5__65__12">5.65.12</a>, <a href="#5__65__11">5.65.11</a>, <a href="#5__65__10">5.65.10</a>, <a href="#5__65__9">5.65.9</a>, <a href="#5__65__8">5.65.8</a>, <a href="#5__65__7">5.65.7</a>, <a href="#5__65__5">5.65.5</a>, <a href="#5__65__4">5.65.4</a>, <a href="#5__65__3">5.65.3</a>, <a href="#5__65__2">5.65.2</a>, <a href="#5__65__1">5.65.1</a>, <a href="#5__65__0">5.65.0</a>, <a href="#5__64__2">5.64.2</a>, <a href="#5__64__1">5.64.1</a>, <a href="#5__64__0">5.64.0</a>, <a href="#5__63__0">5.63.0</a>, <a href="#5__62__0">5.62.0</a>, <a href="#5__61__4">5.61.4</a>, <a href="#5__61__3">5.61.3</a>, <a href="#5__61__2">5.61.2</a>, <a href="#5__61__1">5.61.1</a>, <a href="#5__60__4">5.60.4</a>, <a href="#5__60__3">5.60.3</a>, <a href="#5__60__0">5.60.0</a>, <a href="#5__59__1">5.59.1</a>, <a href="#5__59__0">5.59.0</a>, <a href="#5__58__1">5.58.1</a>, <a href="#5__58__0">5.58.0</a>, <a href="#5__57__1">5.57.1</a>, <a href="#5__57__0">5.57.0</a>, <a href="#5__56__2">5.56.2</a>, <a href="#5__56__1">5.56.1</a>, <a href="#5__55__0">5.55.0</a>, <a href="#5__54__0">5.54.0</a>, <a href="#5__53__0">5.53.0</a>, <a href="#5__52__0">5.52.0</a>, <a href="#5__51__0">5.51.0</a>, <a href="#5__50__0">5.50.0</a>, <a href="#5__49__0">5.49.0</a>, <a href="#5__48__0">5.48.0</a>, <a href="#5__47__0">5.47.0</a>, <a href="#5__46__0">5.46.0</a>, <a href="#5__45__2">5.45.2</a>, <a href="#5__45__0">5.45.0</a>, <a href="#5__44__0">5.44.0</a>, <a href="#5__43__2">5.43.2</a>, <a href="#v5__42__0">v5.42.0</a>, <a href="#5__42__0">5.42.0</a>, <a href="#v5__41__15">v5.41.15</a>, <a href="#5__41__15">5.41.15</a>, <a href="#v5__41__14">v5.41.14</a>, <a href="#5__41__14">5.41.14</a>, <a href="#v5__41__12">v5.41.12</a>, <a href="#5__41__12">5.41.12</a>, <a href="#v5__41__10">v5.41.10</a>, <a href="#5__41__10">5.41.10</a>, <a href="#v5__41__9">v5.41.9</a>, <a href="#5__41__9">5.41.9</a>, <a href="#v5__41__8">v5.41.8</a>, <a href="#5__41__8">5.41.8</a>, <a href="#v5__41__7">v5.41.7</a>, <a href="#v5__41__2">v5.41.2</a>, <a href="#v5__41__1">v5.41.1</a>, <a href="#v5__32__14">v5.32.14</a>, <a href="#5__14__0">5.14.0</a>, <a href="#5__12__0">5.12.0</a>, <a href="#5__11__12">5.11.12</a>, <a href="#5__11__1">5.11.1</a>, <a href="#5__11__0">5.11.0</a>
16
16
 
17
17
 
18
18
 
@@ -22,7 +22,26 @@ Published tags:
22
22
 
23
23
  &nbsp;
24
24
 
25
- ## [Untagged] - 11/11/2022 6:22:48 PM
25
+ <a name="5__86__1" />
26
+
27
+ ## [5.86.1] - 11/11/2022 6:41:15 PM
28
+
29
+ Commit [48b4f928eb1a4597122b64e6eea38a57c19a112f](https://github.com/StoneCypher/jssm/commit/48b4f928eb1a4597122b64e6eea38a57c19a112f)
30
+
31
+ Author: `John Haugeland <stonecypher@gmail.com>`
32
+
33
+ * Allow override attribute in grammar, fixes StoneCypher/fsl#1226
34
+
35
+
36
+
37
+
38
+ &nbsp;
39
+
40
+ &nbsp;
41
+
42
+ <a name="5__86__0" />
43
+
44
+ ## [5.86.0] - 11/11/2022 6:22:48 PM
26
45
 
27
46
  Commit [31077c9256ee31f80398460b3af95bc65a8dbc3a](https://github.com/StoneCypher/jssm/commit/31077c9256ee31f80398460b3af95bc65a8dbc3a)
28
47
 
@@ -174,20 +193,4 @@ Author: `John Haugeland <stonecypher@gmail.com>`
174
193
  Merges [581fd8d, 013999a]
175
194
 
176
195
  * Merge pull request #543 from StoneCypher/PullArrowsOutIntoModules
177
- * Pull arrows out into modules
178
-
179
-
180
-
181
-
182
- &nbsp;
183
-
184
- &nbsp;
185
-
186
- ## [Untagged] - 9/12/2022 8:18:05 PM
187
-
188
- Commit [013999a77ce43ceed5eb982754ffe480fdddf159](https://github.com/StoneCypher/jssm/commit/013999a77ce43ceed5eb982754ffe480fdddf159)
189
-
190
- Author: `John Haugeland <stonecypher@gmail.com>`
191
-
192
- * Pull arrows out into modules
193
- * Fixes StoneCypher/fsl#1206
196
+ * Pull arrows out into modules
package/README.md CHANGED
@@ -18,7 +18,7 @@ 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.86.1 at 11/11/2022, 6:40:14 PM
21
+ * Generated for version 5.86.2 at 11/12/2022, 12:38:24 PM
22
22
 
23
23
  -->
24
24
  # jssm
@@ -29,7 +29,7 @@ share online. Easy to embed.
29
29
 
30
30
  Readable, useful state machines as one-liner strings.
31
31
 
32
- ***4,878 tests*** run 5,769 times. 4,869 specs with 100.0% coverage, 9 fuzz tests with 13.5% coverage. With 2,766 lines, that's about 1.8 tests per line, or 2.1 generated tests per line.
32
+ ***4,904 tests*** run 5,795 times. 4,895 specs with 100.0% coverage, 9 fuzz tests with 13.3% coverage. With 2,812 lines, that's about 1.7 tests per line, or 2.1 generated tests per line.
33
33
 
34
34
  ***Meet your new state machine library.***
35
35
 
@@ -1,6 +1,6 @@
1
1
  declare type StateType = string;
2
2
  import { JssmGenericState, JssmGenericConfig, JssmStateConfig, JssmTransition, JssmTransitionList, // JssmTransitionRule,
3
- JssmMachineInternalState, JssmStateDeclaration, JssmStateStyleKeyList, JssmLayout, JssmHistory, JssmSerialization, FslDirection, FslDirections, FslTheme, HookDescription, HookHandler, HookContext, HookResult, HookComplexResult } from './jssm_types';
3
+ JssmMachineInternalState, JssmAllowsOverride, JssmStateDeclaration, JssmStateStyleKeyList, JssmLayout, JssmHistory, JssmSerialization, FslDirection, FslDirections, FslTheme, HookDescription, HookHandler, HookContext, HookResult, HookComplexResult } from './jssm_types';
4
4
  import { arrow_direction, arrow_left_kind, arrow_right_kind } from './jssm_arrow';
5
5
  import { compile, make, wrap_parse } from './jssm_compiler';
6
6
  import { seq, unique, find_repeated, weighted_rand_select, weighted_sample_select, histograph, weighted_histo_key } from './jssm_util';
@@ -74,7 +74,8 @@ declare class Machine<mDT> {
74
74
  _has_post_exit_hooks: boolean;
75
75
  _has_post_global_action_hooks: boolean;
76
76
  _has_post_transition_hooks: boolean;
77
- _allows_override: boolean;
77
+ _code_allows_override: JssmAllowsOverride;
78
+ _config_allows_override: JssmAllowsOverride;
78
79
  _post_hooks: Map<string, HookHandler<mDT>>;
79
80
  _post_named_hooks: Map<string, HookHandler<mDT>>;
80
81
  _post_entry_hooks: Map<string, HookHandler<mDT>>;
@@ -98,7 +99,7 @@ declare class Machine<mDT> {
98
99
  _start_state_style: JssmStateConfig;
99
100
  _end_state_style: JssmStateConfig;
100
101
  _state_labels: Map<string, string>;
101
- constructor({ start_states, end_states, complete, transitions, machine_author, machine_comment, machine_contributor, machine_definition, machine_language, machine_license, machine_name, machine_version, state_declaration, property_definition, state_property, fsl_version, dot_preamble, arrange_declaration, arrange_start_declaration, arrange_end_declaration, theme, flow, graph_layout, instance_name, history, data, default_state_config, default_active_state_config, default_hooked_state_config, default_terminal_state_config, default_start_state_config, default_end_state_config }: JssmGenericConfig<StateType, mDT>);
102
+ constructor({ start_states, end_states, complete, transitions, machine_author, machine_comment, machine_contributor, machine_definition, machine_language, machine_license, machine_name, machine_version, state_declaration, property_definition, state_property, fsl_version, dot_preamble, arrange_declaration, arrange_start_declaration, arrange_end_declaration, theme, flow, graph_layout, instance_name, history, data, default_state_config, default_active_state_config, default_hooked_state_config, default_terminal_state_config, default_start_state_config, default_end_state_config, allows_override, config_allows_override }: JssmGenericConfig<StateType, mDT>);
102
103
  /********
103
104
  *
104
105
  * Internal method for fabricating states. Not meant for external use.
@@ -484,12 +485,24 @@ declare class Machine<mDT> {
484
485
  list_actions(): Array<StateType>;
485
486
  get uses_actions(): boolean;
486
487
  get uses_forced_transitions(): boolean;
488
+ /*********
489
+ *
490
+ * Check if the code that built the machine allows overriding state and data.
491
+ *
492
+ */
493
+ get code_allows_override(): JssmAllowsOverride;
494
+ /*********
495
+ *
496
+ * Check if the machine config allows overriding state and data.
497
+ *
498
+ */
499
+ get config_allows_override(): JssmAllowsOverride;
487
500
  /*********
488
501
  *
489
502
  * Check if a machine allows overriding state and data.
490
503
  *
491
504
  */
492
- get allows_override(): boolean;
505
+ get allows_override(): JssmAllowsOverride;
493
506
  all_themes(): FslTheme[];
494
507
  get themes(): FslTheme | FslTheme[];
495
508
  set themes(to: FslTheme | FslTheme[]);
package/dist/es6/jssm.js CHANGED
@@ -126,7 +126,7 @@ function state_style_condense(jssk) {
126
126
  // TODO add a lotta docblock here
127
127
  class Machine {
128
128
  // whargarbl this badly needs to be broken up, monolith master
129
- constructor({ start_states, end_states = [], complete = [], transitions, machine_author, machine_comment, machine_contributor, machine_definition, machine_language, machine_license, machine_name, machine_version, 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, data, default_state_config, default_active_state_config, default_hooked_state_config, default_terminal_state_config, default_start_state_config, default_end_state_config }) {
129
+ constructor({ start_states, end_states = [], complete = [], transitions, machine_author, machine_comment, machine_contributor, machine_definition, machine_language, machine_license, machine_name, machine_version, 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, data, default_state_config, default_active_state_config, default_hooked_state_config, default_terminal_state_config, default_start_state_config, default_end_state_config, allows_override, config_allows_override }) {
130
130
  this._instance_name = instance_name;
131
131
  this._state = start_states[0];
132
132
  this._states = new Map();
@@ -183,7 +183,11 @@ class Machine {
183
183
  this._has_post_global_action_hooks = false;
184
184
  this._has_post_transition_hooks = true;
185
185
  // no need for a boolean for single hooks, just test for undefinedness
186
- this._allows_override = false;
186
+ this._code_allows_override = allows_override;
187
+ this._config_allows_override = config_allows_override;
188
+ if ((allows_override === false) && (config_allows_override === true)) {
189
+ throw new JssmError(undefined, "Code specifies no override, but config tries to permit; config may not be less strict than code");
190
+ }
187
191
  this._post_hooks = new Map();
188
192
  this._post_named_hooks = new Map();
189
193
  this._post_entry_hooks = new Map();
@@ -901,13 +905,55 @@ class Machine {
901
905
  get uses_forced_transitions() {
902
906
  return this._has_forced_transitions;
903
907
  }
908
+ /*********
909
+ *
910
+ * Check if the code that built the machine allows overriding state and data.
911
+ *
912
+ */
913
+ get code_allows_override() {
914
+ return this._code_allows_override;
915
+ }
916
+ /*********
917
+ *
918
+ * Check if the machine config allows overriding state and data.
919
+ *
920
+ */
921
+ get config_allows_override() {
922
+ return this._config_allows_override;
923
+ }
904
924
  /*********
905
925
  *
906
926
  * Check if a machine allows overriding state and data.
907
927
  *
908
928
  */
909
929
  get allows_override() {
910
- return this._allows_override === true;
930
+ // code false? config true, throw. config false, false. config undefined, false.
931
+ if (this._code_allows_override === false) {
932
+ /* istanbul ignore next */
933
+ if (this._config_allows_override === true) {
934
+ /* istanbul ignore next */
935
+ throw new JssmError(this, "Code specifies no override, but config tries to permit; config may not be less strict than code; should be unreachable");
936
+ }
937
+ else {
938
+ return false;
939
+ }
940
+ }
941
+ // code true? config true, true. config false, false. config undefined, true.
942
+ if (this._code_allows_override === true) {
943
+ if (this._config_allows_override === false) {
944
+ return false;
945
+ }
946
+ else {
947
+ return true;
948
+ }
949
+ }
950
+ // code must be undefined. config false, false. config true, true. config undefined, false.
951
+ if (this._config_allows_override === true) {
952
+ return true;
953
+ }
954
+ else {
955
+ return false;
956
+ }
911
957
  }
912
958
  all_themes() {
913
959
  return [...theme_mapping.keys()]; // constructor sets this to "default" otherwise
@@ -2198,7 +2244,14 @@ function sm(template_strings, ...remainder /* , arguments */) {
2198
2244
  function from(MachineAsString, ExtraConstructorFields) {
2199
2245
  const to_decorate = make(MachineAsString);
2200
2246
  if (ExtraConstructorFields !== undefined) {
2201
- Object.keys(ExtraConstructorFields).map(key => to_decorate[key] = ExtraConstructorFields[key]);
2247
+ Object.keys(ExtraConstructorFields).map(key => {
2248
+ if (key === 'allows_override') {
2249
+ to_decorate['config_allows_override'] = ExtraConstructorFields['allows_override'];
2250
+ }
2251
+ else {
2252
+ to_decorate[key] = ExtraConstructorFields[key];
2253
+ }
2254
+ });
2202
2255
  }
2203
2256
  return new Machine(to_decorate);
2204
2257
  }
@@ -192,9 +192,10 @@ function compile_rule_handler(rule) {
192
192
  'graph_layout', 'start_states', 'end_states', 'machine_name', 'machine_version',
193
193
  'machine_comment', 'machine_author', 'machine_contributor', 'machine_definition',
194
194
  'machine_reference', 'machine_license', 'fsl_version', 'state_config', 'theme',
195
- 'flow', 'dot_preamble', 'default_state_config', 'default_start_state_config',
196
- 'default_end_state_config', 'default_hooked_state_config',
197
- 'default_active_state_config', 'default_terminal_state_config'
195
+ 'flow', 'dot_preamble', 'allows_override', 'default_state_config',
196
+ 'default_start_state_config', 'default_end_state_config',
197
+ 'default_hooked_state_config', 'default_active_state_config',
198
+ 'default_terminal_state_config'
198
199
  ];
199
200
  if (tautologies.includes(rule.key)) {
200
201
  return { agg_as: rule.key, val: rule.value };
@@ -284,6 +285,7 @@ function compile(tree) {
284
285
  default_terminal_state_config: [],
285
286
  default_start_state_config: [],
286
287
  default_end_state_config: [],
288
+ allows_override: []
287
289
  };
288
290
  tree.map((tr) => {
289
291
  const rule = compile_rule_handler(tr), agg_as = rule.agg_as, val = rule.val; // TODO FIXME no any
@@ -303,7 +305,7 @@ function compile(tree) {
303
305
  const oneOnlyKeys = [
304
306
  'graph_layout', 'machine_name', 'machine_version', 'machine_comment',
305
307
  'fsl_version', 'machine_license', 'machine_definition', 'machine_language',
306
- 'flow', 'dot_preamble'
308
+ 'flow', 'dot_preamble', 'allows_override'
307
309
  ];
308
310
  oneOnlyKeys.map((oneOnlyKey) => {
309
311
  if (results[oneOnlyKey].length > 1) {
@@ -24,6 +24,7 @@ declare type JssmArrowKind = 'none' | 'legal' | 'main' | 'forced';
24
24
  declare type JssmLayout = 'dot' | 'circo' | 'twopi' | 'fdp';
25
25
  declare type JssmCorner = 'regular' | 'rounded' | 'lined';
26
26
  declare type JssmLineStyle = 'solid' | 'dashed' | 'dotted';
27
+ declare type JssmAllowsOverride = true | false | undefined;
27
28
  declare const FslDirections: readonly ["up", "right", "down", "left"];
28
29
  declare type FslDirection = typeof FslDirections[number];
29
30
  declare const FslThemes: readonly ["default", "ocean", "modern", "plain", "bold"];
@@ -190,6 +191,8 @@ declare type JssmGenericConfig<StateType, DataType> = {
190
191
  allow_force?: false;
191
192
  actions?: JssmPermittedOpt;
192
193
  simplify_bidi?: boolean;
194
+ allows_override?: JssmAllowsOverride;
195
+ config_allows_override?: JssmAllowsOverride;
193
196
  dot_preamble?: string;
194
197
  start_states: Array<StateType>;
195
198
  end_states?: Array<StateType>;
@@ -354,4 +357,4 @@ declare type JssmErrorExtendedInfo = {
354
357
  requested_state?: StateType | undefined;
355
358
  };
356
359
  declare type JssmHistory<mDT> = circular_buffer<[StateType, mDT]>;
357
- export { JssmColor, JssmShape, JssmTransition, JssmTransitions, JssmTransitionList, JssmTransitionRule, JssmArrow, JssmArrowKind, JssmArrowDirection, JssmGenericConfig, JssmGenericState, JssmGenericMachine, JssmParseTree, JssmCompileSe, JssmCompileSeStart, JssmCompileRule, JssmPermitted, JssmPermittedOpt, JssmResult, JssmStateDeclaration, JssmStateDeclarationRule, JssmStateConfig, JssmStateStyleKey, JssmStateStyleKeyList, JssmBaseTheme, JssmTheme, JssmLayout, JssmHistory, JssmSerialization, JssmPropertyDefinition, JssmParseFunctionType, JssmMachineInternalState, JssmErrorExtendedInfo, FslDirections, FslDirection, FslThemes, FslTheme, HookDescription, HookHandler, HookContext, HookResult, HookComplexResult };
360
+ export { JssmColor, JssmShape, JssmTransition, JssmTransitions, JssmTransitionList, JssmTransitionRule, JssmArrow, JssmArrowKind, JssmArrowDirection, JssmGenericConfig, JssmGenericState, JssmGenericMachine, JssmParseTree, JssmCompileSe, JssmCompileSeStart, JssmCompileRule, JssmPermitted, JssmPermittedOpt, JssmResult, JssmStateDeclaration, JssmStateDeclarationRule, JssmStateConfig, JssmStateStyleKey, JssmStateStyleKeyList, JssmBaseTheme, JssmTheme, JssmLayout, JssmHistory, JssmSerialization, JssmPropertyDefinition, JssmAllowsOverride, JssmParseFunctionType, JssmMachineInternalState, JssmErrorExtendedInfo, FslDirections, FslDirection, FslThemes, FslTheme, HookDescription, HookHandler, HookContext, HookResult, HookComplexResult };
@@ -1,2 +1,2 @@
1
- const version = "5.86.1", build_time = 1668220727832;
1
+ const version = "5.86.2", build_time = 1668285414765;
2
2
  export { version, build_time };