jssm 5.73.1 → 5.75.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.
package/.clocignore ADDED
@@ -0,0 +1 @@
1
+ ./src/ts/jssm-dot.ts
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
- 935 merges; 123 releases; Changlogging the last 10 commits; Full changelog at [CHANGELOG.long.md](CHANGELOG.long.md)
5
+ 949 merges; 125 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__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__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,18 +22,13 @@ Published tags:
22
22
 
23
23
  &nbsp;
24
24
 
25
- <a name="5__73__0" />
25
+ ## [Untagged] - 7/3/2022 11:42:38 AM
26
26
 
27
- ## [5.73.0] - 6/27/2022 2:36:36 AM
28
-
29
- Commit [39f9a8671a45e1e9a903289431bc3bc7a1e292e5](https://github.com/StoneCypher/jssm/commit/39f9a8671a45e1e9a903289431bc3bc7a1e292e5)
27
+ Commit [840dcb95c04c49e04e92cd5564a09b18cd755ea4](https://github.com/StoneCypher/jssm/commit/840dcb95c04c49e04e92cd5564a09b18cd755ea4)
30
28
 
31
29
  Author: `John Haugeland <stonecypher@gmail.com>`
32
30
 
33
- Merges [f1a61f1, c494012]
34
-
35
- * Merge pull request #504 from StoneCypher/AddHistoryAndCircularBuffer
36
- * Working history, fixes StoneCypher/fsl#950, fixes StoneCypher/fsl#951,fixes StoneCypher/fsl#948, fixes StoneCypher/fsl#949, fixes StoneCypher/fsl#947, fixes StoneCypher/fsl#946, fixes StoneCypher/fsl#203
31
+ * Force this directory to exist with a meaningles file that defies the gitignore, then roll version back because apparently .0 didn't get released
37
32
 
38
33
 
39
34
 
@@ -42,13 +37,13 @@ Merges [f1a61f1, c494012]
42
37
 
43
38
  &nbsp;
44
39
 
45
- ## [Untagged] - 6/27/2022 2:30:06 AM
40
+ ## [Untagged] - 7/3/2022 11:41:29 AM
46
41
 
47
- Commit [c494012f33a608ae32bc31581549281abc98f120](https://github.com/StoneCypher/jssm/commit/c494012f33a608ae32bc31581549281abc98f120)
42
+ Commit [7bf27e64e929c449d613d461fd1de1ceee4e8183](https://github.com/StoneCypher/jssm/commit/7bf27e64e929c449d613d461fd1de1ceee4e8183)
48
43
 
49
44
  Author: `John Haugeland <stonecypher@gmail.com>`
50
45
 
51
- * Working history, fixes StoneCypher/fsl#950, fixes StoneCypher/fsl#951, fixes StoneCypher/fsl#948, fixes StoneCypher/fsl#949, fixes StoneCypher/fsl#947, fixes StoneCypher/fsl#946, fixes StoneCypher/fsl#203
46
+ * Force this directory to exist with a meaningles file that defies the gitignore, then roll version back because apparently .0 didn't get released
52
47
 
53
48
 
54
49
 
@@ -57,18 +52,13 @@ Author: `John Haugeland <stonecypher@gmail.com>`
57
52
 
58
53
  &nbsp;
59
54
 
60
- <a name="5__72__5" />
55
+ ## [Untagged] - 7/3/2022 11:41:18 AM
61
56
 
62
- ## [5.72.5] - 6/25/2022 11:07:29 AM
63
-
64
- Commit [f1a61f1e967df66b87f2b6b39f75636659f496e9](https://github.com/StoneCypher/jssm/commit/f1a61f1e967df66b87f2b6b39f75636659f496e9)
57
+ Commit [bed41d9f0a3d18c7d7cfc4b28e96e92702b854eb](https://github.com/StoneCypher/jssm/commit/bed41d9f0a3d18c7d7cfc4b28e96e92702b854eb)
65
58
 
66
59
  Author: `John Haugeland <stonecypher@gmail.com>`
67
60
 
68
- Merges [dc3096f, 751c5fd]
69
-
70
- * Merge pull request #503 from StoneCypher/AttemptToCaptureTestResults
71
- * Captures test results, fixes StoneCypher/fsl#944, tools readme, fixes StoneCypher/fsl#736
61
+ * Force this directory to exist with a meaningles file that defies the gitignore, then roll version back because apparently .0 didn't get released
72
62
 
73
63
 
74
64
 
@@ -77,13 +67,13 @@ Merges [dc3096f, 751c5fd]
77
67
 
78
68
  &nbsp;
79
69
 
80
- ## [Untagged] - 6/25/2022 11:04:20 AM
70
+ ## [Untagged] - 7/3/2022 10:40:28 AM
81
71
 
82
- Commit [751c5fd0cc8c9751331e664e8f51af34f736ce31](https://github.com/StoneCypher/jssm/commit/751c5fd0cc8c9751331e664e8f51af34f736ce31)
72
+ Commit [2526a1be2684b58e56fa44d28090a756e330b495](https://github.com/StoneCypher/jssm/commit/2526a1be2684b58e56fa44d28090a756e330b495)
83
73
 
84
74
  Author: `John Haugeland <stonecypher@gmail.com>`
85
75
 
86
- * Captures test results, fixes StoneCypher/fsl#944, tools readme, fixes StoneCypher/fsl#736
76
+ * Parsing of JSON part done.
87
77
 
88
78
 
89
79
 
@@ -92,18 +82,13 @@ Author: `John Haugeland <stonecypher@gmail.com>`
92
82
 
93
83
  &nbsp;
94
84
 
95
- <a name="5__72__4" />
85
+ ## [Untagged] - 7/3/2022 10:08:02 AM
96
86
 
97
- ## [5.72.4] - 6/25/2022 8:12:11 AM
98
-
99
- Commit [dc3096f064e58ea616899b12d3d25c973f326c1c](https://github.com/StoneCypher/jssm/commit/dc3096f064e58ea616899b12d3d25c973f326c1c)
87
+ Commit [99ef3d9866ff6830528005c9196456e2b766dc09](https://github.com/StoneCypher/jssm/commit/99ef3d9866ff6830528005c9196456e2b766dc09)
100
88
 
101
89
  Author: `John Haugeland <stonecypher@gmail.com>`
102
90
 
103
- Merges [a184324, 8762d17]
104
-
105
- * Merge pull request #502 from StoneCypher/AllowHooksToChangeData
106
- * Allow hooks to change data
91
+ * added cloc, turned to disk, made a cute little reporter, fixes StoneCypher/fsl#985
107
92
 
108
93
 
109
94
 
@@ -112,13 +97,13 @@ Merges [a184324, 8762d17]
112
97
 
113
98
  &nbsp;
114
99
 
115
- ## [Untagged] - 6/25/2022 8:08:38 AM
100
+ ## [Untagged] - 7/3/2022 10:08:02 AM
116
101
 
117
- Commit [8762d17bd69cdf48f522dbd6ee188f46e29a0c06](https://github.com/StoneCypher/jssm/commit/8762d17bd69cdf48f522dbd6ee188f46e29a0c06)
102
+ Commit [986fd0dd50adcb739f54e4fa3712628c94004505](https://github.com/StoneCypher/jssm/commit/986fd0dd50adcb739f54e4fa3712628c94004505)
118
103
 
119
104
  Author: `John Haugeland <stonecypher@gmail.com>`
120
105
 
121
- * Hooks can change data, fixes StoneCypher/fsl#932
106
+ * added cloc, turned to disk, made a cute little reporter, fixes StoneCypher/fsl#985
122
107
 
123
108
 
124
109
 
@@ -127,13 +112,13 @@ Author: `John Haugeland <stonecypher@gmail.com>`
127
112
 
128
113
  &nbsp;
129
114
 
130
- ## [Untagged] - 6/25/2022 7:15:46 AM
115
+ ## [Untagged] - 7/3/2022 10:08:02 AM
131
116
 
132
- Commit [fb82aff27a911a29304c8b7c211e48c1b6ac454e](https://github.com/StoneCypher/jssm/commit/fb82aff27a911a29304c8b7c211e48c1b6ac454e)
117
+ Commit [0c34b68d5a5d6666895965e5f8b4b9a9dadfe397](https://github.com/StoneCypher/jssm/commit/0c34b68d5a5d6666895965e5f8b4b9a9dadfe397)
133
118
 
134
119
  Author: `John Haugeland <stonecypher@gmail.com>`
135
120
 
136
- * prepping to test main and forced
121
+ * added cloc, turned to disk, made a cute little reporter, fixes StoneCypher/fsl#985
137
122
 
138
123
 
139
124
 
@@ -142,13 +127,18 @@ Author: `John Haugeland <stonecypher@gmail.com>`
142
127
 
143
128
  &nbsp;
144
129
 
145
- ## [Untagged] - 6/25/2022 7:05:36 AM
130
+ <a name="5__74__0" />
146
131
 
147
- Commit [3ffc6c2a0b76d1a4870cd80a0f94d745e1c976c9](https://github.com/StoneCypher/jssm/commit/3ffc6c2a0b76d1a4870cd80a0f94d745e1c976c9)
132
+ ## [5.74.0] - 7/2/2022 11:38:27 AM
133
+
134
+ Commit [3940ac2b520c843153af11b2c67b0e8915ede619](https://github.com/StoneCypher/jssm/commit/3940ac2b520c843153af11b2c67b0e8915ede619)
148
135
 
149
136
  Author: `John Haugeland <stonecypher@gmail.com>`
150
137
 
151
- * everything now tested but standard and main
138
+ Merges [89b9c2c, 9543655]
139
+
140
+ * Merge pull request #505 from StoneCypher/PostHooks
141
+ * Post hooks Fixes StoneCypher/fsl#897, StoneCypher/fsl#898, StoneCypher/fsl#899, StoneCypher/fsl#900, StoneCypher/fsl#901, StoneCypher/fsl#902, StoneCypher/fsl#903, StoneCypher/fsl#904, StoneCypher/fsl#905, StoneCypher/fsl#906, StoneCypher/fsl#959, StoneCypher/fsl#960, StoneCypher/fsl#961, StoneCypher/fsl#962, StoneCypher/fsl#963, StoneCypher/fsl#964, StoneCypher/fsl#965, StoneCypher/fsl#966, StoneCypher/fsl#967, StoneCypher/fsl#968, StoneCypher/fsl#969, StoneCypher/fsl#970, StoneCypher/fsl#971, StoneCypher/fsl#972, StoneCypher/fsl#973, StoneCypher/fsl#974, StoneCypher/fsl#976, StoneCypher/fsl#975, StoneCypher/fsl#977
152
142
 
153
143
 
154
144
 
@@ -157,13 +147,13 @@ Author: `John Haugeland <stonecypher@gmail.com>`
157
147
 
158
148
  &nbsp;
159
149
 
160
- ## [Untagged] - 6/25/2022 6:50:50 AM
150
+ ## [Untagged] - 7/2/2022 11:35:19 AM
161
151
 
162
- Commit [e74cb836ae9c06a3261658ee969506c8dd3c9a24](https://github.com/StoneCypher/jssm/commit/e74cb836ae9c06a3261658ee969506c8dd3c9a24)
152
+ Commit [95436551d075df2f4bb2c4baea55d9f1132e90a6](https://github.com/StoneCypher/jssm/commit/95436551d075df2f4bb2c4baea55d9f1132e90a6)
163
153
 
164
154
  Author: `John Haugeland <stonecypher@gmail.com>`
165
155
 
166
- * six data kinds tested
156
+ * Basic posthooks complete. Fixes StoneCypher/fsl#897, StoneCypher/fsl#898, StoneCypher/fsl#899, StoneCypher/fsl#900, StoneCypher/fsl#901, StoneCypher/fsl#902, StoneCypher/fsl#903, StoneCypher/fsl#904, StoneCypher/fsl#905, StoneCypher/fsl#906, StoneCypher/fsl#959, StoneCypher/fsl#960, StoneCypher/fsl#961, StoneCypher/fsl#962, StoneCypher/fsl#963, StoneCypher/fsl#964, StoneCypher/fsl#965, StoneCypher/fsl#966, StoneCypher/fsl#967, StoneCypher/fsl#968, StoneCypher/fsl#969, StoneCypher/fsl#970, StoneCypher/fsl#971, StoneCypher/fsl#972, StoneCypher/fsl#973, StoneCypher/fsl#974, StoneCypher/fsl#976, StoneCypher/fsl#975, StoneCypher/fsl#977
167
157
 
168
158
 
169
159
 
@@ -172,10 +162,10 @@ Author: `John Haugeland <stonecypher@gmail.com>`
172
162
 
173
163
  &nbsp;
174
164
 
175
- ## [Untagged] - 6/24/2022 9:24:32 PM
165
+ ## [Untagged] - 7/2/2022 11:04:51 AM
176
166
 
177
- Commit [df34e0fd36d969bcb80488c6609d6bf4140b89a4](https://github.com/StoneCypher/jssm/commit/df34e0fd36d969bcb80488c6609d6bf4140b89a4)
167
+ Commit [0222ce4624e1463b875bbb68292a39b438f267a3](https://github.com/StoneCypher/jssm/commit/0222ce4624e1463b875bbb68292a39b438f267a3)
178
168
 
179
169
  Author: `John Haugeland <stonecypher@gmail.com>`
180
170
 
181
- * working test matrix
171
+ * Nicely tied up, basic set_hook posthooks, all simply tested
package/README.md CHANGED
@@ -18,17 +18,19 @@ 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.73.1 at 6/27/2022, 2:52:26 AM
21
+ * Generated for version 5.75.1 at 7/3/2022, 1:24:04 PM
22
22
 
23
23
  -->
24
24
  # jssm
25
25
 
26
26
  Easy. Small. Fast. TS, es6, es5. Node, Browser. 100% coverage. Property
27
27
  tests. Fuzz tests. Language tests for a dozen languages and emoji. Easy to
28
- share online. Easy to embed. ***4,617 tests***.
28
+ share online. Easy to embed.
29
29
 
30
30
  Readable, useful state machines as one-liner strings.
31
31
 
32
+ ***4,655 tests*** run 5,546 times. 4,646 specs with 100.0% coverage, 9 fuzz tests with 5.3% coverage. With 1,712 lines, that's about 2.7 tests per line, or 3.2 generated tests per line.
33
+
32
34
  ***Meet your new state machine library.***
33
35
 
34
36
  # <a href="https://stonecypher.github.io/jssm-viz-demo/graph_explorer.html" target="_blank" rel="noopener noreferrer">TRY THE LIVE EDITOR</a>
@@ -234,6 +234,23 @@ declare class Machine<mDT> {
234
234
  _main_transition_hook: HookHandler<mDT> | undefined;
235
235
  _forced_transition_hook: HookHandler<mDT> | undefined;
236
236
  _any_transition_hook: HookHandler<mDT> | undefined;
237
+ _has_post_hooks: boolean;
238
+ _has_post_basic_hooks: boolean;
239
+ _has_post_named_hooks: boolean;
240
+ _has_post_entry_hooks: boolean;
241
+ _has_post_exit_hooks: boolean;
242
+ _has_post_global_action_hooks: boolean;
243
+ _has_post_transition_hooks: boolean;
244
+ _post_hooks: Map<string, HookHandler<mDT>>;
245
+ _post_named_hooks: Map<string, HookHandler<mDT>>;
246
+ _post_entry_hooks: Map<string, HookHandler<mDT>>;
247
+ _post_exit_hooks: Map<string, HookHandler<mDT>>;
248
+ _post_global_action_hooks: Map<string, HookHandler<mDT>>;
249
+ _post_any_action_hook: HookHandler<mDT> | undefined;
250
+ _post_standard_transition_hook: HookHandler<mDT> | undefined;
251
+ _post_main_transition_hook: HookHandler<mDT> | undefined;
252
+ _post_forced_transition_hook: HookHandler<mDT> | undefined;
253
+ _post_any_transition_hook: HookHandler<mDT> | undefined;
237
254
  _history: circular_buffer<[StateType, mDT]>;
238
255
  _history_length: number;
239
256
  constructor({ start_states, complete, transitions, machine_author, machine_comment, machine_contributor, machine_definition, machine_language, machine_license, machine_name, machine_version, state_declaration, fsl_version, dot_preamble, arrange_declaration, arrange_start_declaration, arrange_end_declaration, theme, flow, graph_layout, instance_name, history, data }: JssmGenericConfig<mDT>);
@@ -552,6 +569,16 @@ declare class Machine<mDT> {
552
569
  hook_any_transition(handler: HookHandler<mDT>): Machine<mDT>;
553
570
  hook_entry(to: string, handler: HookHandler<mDT>): Machine<mDT>;
554
571
  hook_exit(from: string, handler: HookHandler<mDT>): Machine<mDT>;
572
+ post_hook(from: string, to: string, handler: HookHandler<mDT>): Machine<mDT>;
573
+ post_hook_action(from: string, to: string, action: string, handler: HookHandler<mDT>): Machine<mDT>;
574
+ post_hook_global_action(action: string, handler: HookHandler<mDT>): Machine<mDT>;
575
+ post_hook_any_action(handler: HookHandler<mDT>): Machine<mDT>;
576
+ post_hook_standard_transition(handler: HookHandler<mDT>): Machine<mDT>;
577
+ post_hook_main_transition(handler: HookHandler<mDT>): Machine<mDT>;
578
+ post_hook_forced_transition(handler: HookHandler<mDT>): Machine<mDT>;
579
+ post_hook_any_transition(handler: HookHandler<mDT>): Machine<mDT>;
580
+ post_hook_entry(to: string, handler: HookHandler<mDT>): Machine<mDT>;
581
+ post_hook_exit(from: string, handler: HookHandler<mDT>): Machine<mDT>;
555
582
  edges_between(from: string, to: string): JssmTransition<mDT>[];
556
583
  transition_impl(newStateOrAction: StateType, newData: mDT | undefined, wasForced: boolean, wasAction: boolean): boolean;
557
584
  /*********
package/dist/es6/jssm.js CHANGED
@@ -570,7 +570,7 @@ class Machine {
570
570
  this._has_exit_hooks = false;
571
571
  this._has_global_action_hooks = false;
572
572
  this._has_transition_hooks = true;
573
- // no need for a boolean has any transition hook, as it's one or nothing, so just test that for undefinedness
573
+ // no need for a boolean for single hooks, just test for undefinedness
574
574
  this._hooks = new Map();
575
575
  this._named_hooks = new Map();
576
576
  this._entry_hooks = new Map();
@@ -581,7 +581,24 @@ class Machine {
581
581
  this._main_transition_hook = undefined;
582
582
  this._forced_transition_hook = undefined;
583
583
  this._any_transition_hook = undefined;
584
- this._standard_transition_hook = undefined;
584
+ this._has_post_hooks = false;
585
+ this._has_post_basic_hooks = false;
586
+ this._has_post_named_hooks = false;
587
+ this._has_post_entry_hooks = false;
588
+ this._has_post_exit_hooks = false;
589
+ this._has_post_global_action_hooks = false;
590
+ this._has_post_transition_hooks = true;
591
+ // no need for a boolean for single hooks, just test for undefinedness
592
+ this._post_hooks = new Map();
593
+ this._post_named_hooks = new Map();
594
+ this._post_entry_hooks = new Map();
595
+ this._post_exit_hooks = new Map();
596
+ this._post_global_action_hooks = new Map();
597
+ this._post_any_action_hook = undefined;
598
+ this._post_standard_transition_hook = undefined;
599
+ this._post_main_transition_hook = undefined;
600
+ this._post_forced_transition_hook = undefined;
601
+ this._post_any_transition_hook = undefined;
585
602
  this._data = data;
586
603
  this._history_length = history || 0;
587
604
  this._history = new circular_buffer(this._history_length);
@@ -1252,6 +1269,54 @@ class Machine {
1252
1269
  this._has_hooks = true;
1253
1270
  this._has_exit_hooks = true;
1254
1271
  break;
1272
+ case 'post hook':
1273
+ this._post_hooks.set(hook_name(HookDesc.from, HookDesc.to), HookDesc.handler);
1274
+ this._has_post_hooks = true;
1275
+ this._has_post_basic_hooks = true;
1276
+ break;
1277
+ case 'post named':
1278
+ this._post_named_hooks.set(named_hook_name(HookDesc.from, HookDesc.to, HookDesc.action), HookDesc.handler);
1279
+ this._has_post_hooks = true;
1280
+ this._has_post_named_hooks = true;
1281
+ break;
1282
+ case 'post global action':
1283
+ this._post_global_action_hooks.set(HookDesc.action, HookDesc.handler);
1284
+ this._has_post_hooks = true;
1285
+ this._has_post_global_action_hooks = true;
1286
+ break;
1287
+ case 'post any action':
1288
+ this._post_any_action_hook = HookDesc.handler;
1289
+ this._has_post_hooks = true;
1290
+ break;
1291
+ case 'post standard transition':
1292
+ this._post_standard_transition_hook = HookDesc.handler;
1293
+ this._has_post_transition_hooks = true;
1294
+ this._has_post_hooks = true;
1295
+ break;
1296
+ case 'post main transition':
1297
+ this._post_main_transition_hook = HookDesc.handler;
1298
+ this._has_post_transition_hooks = true;
1299
+ this._has_post_hooks = true;
1300
+ break;
1301
+ case 'post forced transition':
1302
+ this._post_forced_transition_hook = HookDesc.handler;
1303
+ this._has_post_transition_hooks = true;
1304
+ this._has_post_hooks = true;
1305
+ break;
1306
+ case 'post any transition':
1307
+ this._post_any_transition_hook = HookDesc.handler;
1308
+ this._has_post_hooks = true;
1309
+ break;
1310
+ case 'post entry':
1311
+ this._post_entry_hooks.set(HookDesc.to, HookDesc.handler);
1312
+ this._has_post_entry_hooks = true;
1313
+ this._has_post_hooks = true;
1314
+ break;
1315
+ case 'post exit':
1316
+ this._post_exit_hooks.set(HookDesc.from, HookDesc.handler);
1317
+ this._has_post_exit_hooks = true;
1318
+ this._has_post_hooks = true;
1319
+ break;
1255
1320
  default:
1256
1321
  throw new JssmError(this, `Unknown hook type ${HookDesc.kind}, should be impossible`);
1257
1322
  }
@@ -1296,6 +1361,46 @@ class Machine {
1296
1361
  this.set_hook({ kind: 'exit', from, handler });
1297
1362
  return this;
1298
1363
  }
1364
+ post_hook(from, to, handler) {
1365
+ this.set_hook({ kind: 'post hook', from, to, handler });
1366
+ return this;
1367
+ }
1368
+ post_hook_action(from, to, action, handler) {
1369
+ this.set_hook({ kind: 'post named', from, to, action, handler });
1370
+ return this;
1371
+ }
1372
+ post_hook_global_action(action, handler) {
1373
+ this.set_hook({ kind: 'post global action', action, handler });
1374
+ return this;
1375
+ }
1376
+ post_hook_any_action(handler) {
1377
+ this.set_hook({ kind: 'post any action', handler });
1378
+ return this;
1379
+ }
1380
+ post_hook_standard_transition(handler) {
1381
+ this.set_hook({ kind: 'post standard transition', handler });
1382
+ return this;
1383
+ }
1384
+ post_hook_main_transition(handler) {
1385
+ this.set_hook({ kind: 'post main transition', handler });
1386
+ return this;
1387
+ }
1388
+ post_hook_forced_transition(handler) {
1389
+ this.set_hook({ kind: 'post forced transition', handler });
1390
+ return this;
1391
+ }
1392
+ post_hook_any_transition(handler) {
1393
+ this.set_hook({ kind: 'post any transition', handler });
1394
+ return this;
1395
+ }
1396
+ post_hook_entry(to, handler) {
1397
+ this.set_hook({ kind: 'post entry', to, handler });
1398
+ return this;
1399
+ }
1400
+ post_hook_exit(from, handler) {
1401
+ this.set_hook({ kind: 'post exit', from, handler });
1402
+ return this;
1403
+ }
1299
1404
  // remove_hook(HookDesc: HookDescription) {
1300
1405
  // throw new JssmError(this, 'TODO: Should remove hook here');
1301
1406
  // }
@@ -1331,15 +1436,16 @@ class Machine {
1331
1436
  newState = newStateOrAction;
1332
1437
  }
1333
1438
  }
1439
+ const hook_args = {
1440
+ data: this._data,
1441
+ action: fromAction,
1442
+ from: this._state,
1443
+ to: newState,
1444
+ forced: wasForced,
1445
+ trans_type
1446
+ };
1334
1447
  if (valid) {
1335
1448
  if (this._has_hooks) {
1336
- const hook_args = {
1337
- data: this._data,
1338
- action: fromAction,
1339
- from: this._state,
1340
- to: newState,
1341
- forced: wasForced
1342
- };
1343
1449
  function update_fields(res) {
1344
1450
  if (res.hasOwnProperty('data')) {
1345
1451
  hook_args.data = res.data;
@@ -1436,7 +1542,8 @@ class Machine {
1436
1542
  if (data_changed) {
1437
1543
  this._data = hook_args.data;
1438
1544
  }
1439
- return true;
1545
+ // success fallthrough to posthooks; intentionally no return here
1546
+ // look for "posthooks begin here"
1440
1547
  // or without hooks
1441
1548
  }
1442
1549
  else {
@@ -1444,13 +1551,82 @@ class Machine {
1444
1551
  this._history.shove([this._state, this._data]);
1445
1552
  }
1446
1553
  this._state = newState;
1447
- return true;
1554
+ // success fallthrough to posthooks; intentionally no return here
1555
+ // look for "posthooks begin here"
1448
1556
  }
1449
1557
  // not valid
1450
1558
  }
1451
1559
  else {
1452
1560
  return false;
1453
1561
  }
1562
+ // posthooks begin here
1563
+ if (this._has_post_hooks) {
1564
+ if (wasAction) {
1565
+ // 1. any action posthook
1566
+ if (this._post_any_action_hook !== undefined) {
1567
+ this._post_any_action_hook(hook_args);
1568
+ }
1569
+ // 2. global specific action hook
1570
+ const pgah = this._post_global_action_hooks.get(hook_args.action);
1571
+ if (pgah !== undefined) {
1572
+ pgah(hook_args);
1573
+ }
1574
+ }
1575
+ // 3. any transition hook
1576
+ if (this._post_any_transition_hook !== undefined) {
1577
+ this._post_any_transition_hook(hook_args);
1578
+ }
1579
+ // 4. exit hook
1580
+ if (this._has_post_exit_hooks) {
1581
+ const peh = this._post_exit_hooks.get(hook_args.from); // todo this is probably from instead
1582
+ if (peh !== undefined) {
1583
+ peh(hook_args);
1584
+ }
1585
+ }
1586
+ // 5. named transition / action hook
1587
+ if (this._has_post_named_hooks) {
1588
+ if (wasAction) {
1589
+ const nhn = named_hook_name(hook_args.from, hook_args.to, hook_args.action), pnh = this._post_named_hooks.get(nhn);
1590
+ if (pnh !== undefined) {
1591
+ pnh(hook_args);
1592
+ }
1593
+ }
1594
+ }
1595
+ // 6. regular hook
1596
+ if (this._has_post_basic_hooks) {
1597
+ const hook = this._post_hooks.get(hook_name(hook_args.from, hook_args.to));
1598
+ if (hook !== undefined) {
1599
+ hook(hook_args);
1600
+ }
1601
+ }
1602
+ // 7. edge type hook
1603
+ // 7a. standard transition hook
1604
+ if (trans_type === 'legal') {
1605
+ if (this._post_standard_transition_hook !== undefined) {
1606
+ this._post_standard_transition_hook(hook_args);
1607
+ }
1608
+ }
1609
+ // 7b. main type hook
1610
+ if (trans_type === 'main') {
1611
+ if (this._post_main_transition_hook !== undefined) {
1612
+ this._post_main_transition_hook(hook_args);
1613
+ }
1614
+ }
1615
+ // 7c. forced transition hook
1616
+ if (trans_type === 'forced') {
1617
+ if (this._post_forced_transition_hook !== undefined) {
1618
+ this._post_forced_transition_hook(hook_args);
1619
+ }
1620
+ }
1621
+ // 8. entry hook
1622
+ if (this._has_post_entry_hooks) {
1623
+ const hook = this._post_entry_hooks.get(hook_args.to);
1624
+ if (hook !== undefined) {
1625
+ hook(hook_args);
1626
+ }
1627
+ }
1628
+ }
1629
+ return true;
1454
1630
  }
1455
1631
  /*********
1456
1632
  *
@@ -1,15 +1,15 @@
1
1
  declare type StateType = string;
2
2
  declare type JssmSuccess = {
3
3
  success: true;
4
- };
4
+ }; /** Composite type indicating success as part of a result */
5
5
  declare type JssmFailure = {
6
6
  success: false;
7
7
  error: any;
8
- };
8
+ }; /** Composite type indicating an error, and why, as part of a result */
9
9
  declare type JssmIncomplete = {
10
10
  success: 'incomplete';
11
- };
12
- declare type JssmResult = JssmSuccess | JssmFailure | JssmIncomplete;
11
+ }; /** Composite type indicating that a result isn't finished */
12
+ declare type JssmResult = JssmSuccess | JssmFailure | JssmIncomplete; /** Composite type composing whether or not a result was successful */
13
13
  declare type JssmColor = string;
14
14
  declare type JssmPermitted = 'required' | 'disallowed';
15
15
  declare type JssmPermittedOpt = 'required' | 'disallowed' | 'optional';
@@ -198,17 +198,69 @@ declare type ExitHook<mDT> = {
198
198
  from: string;
199
199
  handler: HookHandler<mDT>;
200
200
  };
201
- declare type HookDescription<mDT> = BasicHookDescription<mDT> | HookDescriptionWithAction<mDT> | GlobalActionHook<mDT> | AnyActionHook<mDT> | StandardTransitionHook<mDT> | MainTransitionHook<mDT> | ForcedTransitionHook<mDT> | AnyTransitionHook<mDT> | EntryHook<mDT> | ExitHook<mDT>;
201
+ declare type PostBasicHookDescription<mDT> = {
202
+ kind: 'post hook';
203
+ from: string;
204
+ to: string;
205
+ handler: PostHookHandler<mDT>;
206
+ };
207
+ declare type PostHookDescriptionWithAction<mDT> = {
208
+ kind: 'post named';
209
+ from: string;
210
+ to: string;
211
+ action: string;
212
+ handler: PostHookHandler<mDT>;
213
+ };
214
+ declare type PostStandardTransitionHook<mDT> = {
215
+ kind: 'post standard transition';
216
+ handler: PostHookHandler<mDT>;
217
+ };
218
+ declare type PostMainTransitionHook<mDT> = {
219
+ kind: 'post main transition';
220
+ handler: PostHookHandler<mDT>;
221
+ };
222
+ declare type PostForcedTransitionHook<mDT> = {
223
+ kind: 'post forced transition';
224
+ handler: PostHookHandler<mDT>;
225
+ };
226
+ declare type PostAnyTransitionHook<mDT> = {
227
+ kind: 'post any transition';
228
+ handler: PostHookHandler<mDT>;
229
+ };
230
+ declare type PostGlobalActionHook<mDT> = {
231
+ kind: 'post global action';
232
+ action: string;
233
+ handler: PostHookHandler<mDT>;
234
+ };
235
+ declare type PostAnyActionHook<mDT> = {
236
+ kind: 'post any action';
237
+ handler: PostHookHandler<mDT>;
238
+ };
239
+ declare type PostEntryHook<mDT> = {
240
+ kind: 'post entry';
241
+ to: string;
242
+ handler: PostHookHandler<mDT>;
243
+ };
244
+ declare type PostExitHook<mDT> = {
245
+ kind: 'post exit';
246
+ from: string;
247
+ handler: PostHookHandler<mDT>;
248
+ };
249
+ declare type HookDescription<mDT> = BasicHookDescription<mDT> | HookDescriptionWithAction<mDT> | GlobalActionHook<mDT> | AnyActionHook<mDT> | StandardTransitionHook<mDT> | MainTransitionHook<mDT> | ForcedTransitionHook<mDT> | AnyTransitionHook<mDT> | EntryHook<mDT> | ExitHook<mDT> | PostBasicHookDescription<mDT> | PostHookDescriptionWithAction<mDT> | PostGlobalActionHook<mDT> | PostAnyActionHook<mDT> | PostStandardTransitionHook<mDT> | PostMainTransitionHook<mDT> | PostForcedTransitionHook<mDT> | PostAnyTransitionHook<mDT> | PostEntryHook<mDT> | PostExitHook<mDT>;
202
250
  declare type HookComplexResult<mDT> = {
203
251
  pass: boolean;
204
252
  state?: StateType;
205
253
  data?: mDT;
206
254
  };
255
+ /********
256
+ * Documents whether a hook succeeded, either with a primitive or a reference to the hook complex object
257
+ */
207
258
  declare type HookResult<mDT> = true | false | undefined | void | HookComplexResult<mDT>;
208
259
  declare type HookContext<mDT> = {
209
260
  data: mDT;
210
261
  };
211
262
  declare type HookHandler<mDT> = (hook_context: HookContext<mDT>) => HookResult<mDT>;
263
+ declare type PostHookHandler<mDT> = (hook_context: HookContext<mDT>) => void;
212
264
  declare type JssmErrorExtendedInfo = {
213
265
  requested_state?: StateType | undefined;
214
266
  };
@@ -1,2 +1,2 @@
1
- const version = "5.73.1";
1
+ const version = "5.75.1";
2
2
  export { version };