jssm 5.65.1 → 5.65.4
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/dist/es6/jssm.d.ts +189 -0
- package/dist/es6/jssm.js +213 -0
- package/dist/es6/version.js +1 -1
- package/dist/jssm.es5.cjs.js +1 -1
- package/dist/jssm.es5.iife.js +1 -1
- package/jssm.d.ts +189 -0
- package/package.json +2 -1
package/dist/es6/jssm.d.ts
CHANGED
|
@@ -4,12 +4,168 @@ JssmMachineInternalState, JssmParseTree, JssmStateDeclaration, JssmArrow, JssmAr
|
|
|
4
4
|
import { seq, weighted_rand_select, weighted_sample_select, histograph, weighted_histo_key } from './jssm_util';
|
|
5
5
|
import { shapes, gviz_shapes, named_colors } from './jssm_constants';
|
|
6
6
|
import { version } from './version';
|
|
7
|
+
/*********
|
|
8
|
+
*
|
|
9
|
+
* Return the direction of an arrow - `right`, `left`, or `both`.
|
|
10
|
+
*
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { arrow_direction } from './jssm';
|
|
13
|
+
*
|
|
14
|
+
* arrow_direction('->'); // 'right'
|
|
15
|
+
* arrow_direction('<~=>'); // 'both'
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
7
19
|
declare function arrow_direction(arrow: JssmArrow): JssmArrowDirection;
|
|
20
|
+
/*********
|
|
21
|
+
*
|
|
22
|
+
* Return the direction of an arrow - `right`, `left`, or `both`.
|
|
23
|
+
*
|
|
24
|
+
* ```typescript
|
|
25
|
+
* import { arrow_left_kind } from './jssm';
|
|
26
|
+
*
|
|
27
|
+
* arrow_left_kind('<-'); // 'legal'
|
|
28
|
+
* arrow_left_kind('<='); // 'main'
|
|
29
|
+
* arrow_left_kind('<~'); // 'forced'
|
|
30
|
+
* arrow_left_kind('<->'); // 'legal'
|
|
31
|
+
* arrow_left_kind('->'); // 'none'
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
8
35
|
declare function arrow_left_kind(arrow: JssmArrow): JssmArrowKind;
|
|
36
|
+
/*********
|
|
37
|
+
*
|
|
38
|
+
* Return the direction of an arrow - `right`, `left`, or `both`.
|
|
39
|
+
*
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import { arrow_left_kind } from './jssm';
|
|
42
|
+
*
|
|
43
|
+
* arrow_left_kind('->'); // 'legal'
|
|
44
|
+
* arrow_left_kind('=>'); // 'main'
|
|
45
|
+
* arrow_left_kind('~>'); // 'forced'
|
|
46
|
+
* arrow_left_kind('<->'); // 'legal'
|
|
47
|
+
* arrow_left_kind('<-'); // 'none'
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
*/
|
|
9
51
|
declare function arrow_right_kind(arrow: JssmArrow): JssmArrowKind;
|
|
52
|
+
/*********
|
|
53
|
+
*
|
|
54
|
+
* This method wraps the parser call that comes from the peg grammar,
|
|
55
|
+
* {@link parse}. Generally neither this nor that should be used directly
|
|
56
|
+
* unless you mean to develop plugins or extensions for the machine.
|
|
57
|
+
*
|
|
58
|
+
* Parses the intermediate representation of a compiled string down to a
|
|
59
|
+
* machine configuration object. If you're using this (probably don't,) you're
|
|
60
|
+
* probably also using {@link compile} and {@link Machine.constructor}.
|
|
61
|
+
*
|
|
62
|
+
* ```typescript
|
|
63
|
+
* import { parse, compile, Machine } from './jssm';
|
|
64
|
+
*
|
|
65
|
+
* const intermediate = wrap_parse('a -> b;', {});
|
|
66
|
+
* // [ {key:'transition', from:'a', se:{kind:'->',to:'b'}} ]
|
|
67
|
+
*
|
|
68
|
+
* const cfg = compile(intermediate);
|
|
69
|
+
* // { start_states:['a'], transitions: [{ from:'a', to:'b', kind:'legal', forced_only:false, main_path:false }] }
|
|
70
|
+
*
|
|
71
|
+
* const machine = new Machine(cfg);
|
|
72
|
+
* // Machine { _instance_name: undefined, _state: 'a', ...
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* This method is mostly for plugin and intermediate tool authors, or people
|
|
76
|
+
* who need to work with the machine's intermediate representation.
|
|
77
|
+
*
|
|
78
|
+
* # Hey!
|
|
79
|
+
*
|
|
80
|
+
* Most people looking at this want either the `sm` operator or method `from`,
|
|
81
|
+
* which perform all the steps in the chain. The library's author mostly uses
|
|
82
|
+
* operator `sm`, and mostly falls back to `.from` when needing to parse
|
|
83
|
+
* strings dynamically instead of from template literals.
|
|
84
|
+
*
|
|
85
|
+
* Operator {@link sm}:
|
|
86
|
+
*
|
|
87
|
+
* ```typescript
|
|
88
|
+
* import { sm } from './jssm';
|
|
89
|
+
*
|
|
90
|
+
* const switch = sm`on <=> off;`;
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* Method {@link from}:
|
|
94
|
+
*
|
|
95
|
+
* ```typescript
|
|
96
|
+
* import * as jssm from './jssm';
|
|
97
|
+
*
|
|
98
|
+
* const toggle = jssm.from('up <=> down;');
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* `wrap_parse` itself is an internal convenience method for alting out an
|
|
102
|
+
* object as the options call. Not generally meant for external use.
|
|
103
|
+
*
|
|
104
|
+
*/
|
|
10
105
|
declare function wrap_parse(input: string, options?: Object): any;
|
|
106
|
+
/*********
|
|
107
|
+
*
|
|
108
|
+
* Compile a machine's JSON intermediate representation to a config object. If
|
|
109
|
+
* you're using this (probably don't,) you're probably also using
|
|
110
|
+
* {@link parse} to get the IR, and the object constructor
|
|
111
|
+
* {@link Machine.construct} to turn the config object into a workable machine.
|
|
112
|
+
*
|
|
113
|
+
* ```typescript
|
|
114
|
+
* import { parse, compile, Machine } from './jssm';
|
|
115
|
+
*
|
|
116
|
+
* const intermediate = parse('a -> b;');
|
|
117
|
+
* // [ {key:'transition', from:'a', se:{kind:'->',to:'b'}} ]
|
|
118
|
+
*
|
|
119
|
+
* const cfg = compile(intermediate);
|
|
120
|
+
* // { start_states:['a'], transitions: [{ from:'a', to:'b', kind:'legal', forced_only:false, main_path:false }] }
|
|
121
|
+
*
|
|
122
|
+
* const machine = new Machine(cfg);
|
|
123
|
+
* // Machine { _instance_name: undefined, _state: 'a', ...
|
|
124
|
+
* ```
|
|
125
|
+
*
|
|
126
|
+
* This method is mostly for plugin and intermediate tool authors, or people
|
|
127
|
+
* who need to work with the machine's intermediate representation.
|
|
128
|
+
*
|
|
129
|
+
* # Hey!
|
|
130
|
+
*
|
|
131
|
+
* Most people looking at this want either the `sm` operator or method `from`,
|
|
132
|
+
* which perform all the steps in the chain. The library's author mostly uses
|
|
133
|
+
* operator `sm`, and mostly falls back to `.from` when needing to parse
|
|
134
|
+
* strings dynamically instead of from template literals.
|
|
135
|
+
*
|
|
136
|
+
* Operator {@link sm}:
|
|
137
|
+
*
|
|
138
|
+
* ```typescript
|
|
139
|
+
* import { sm } from './jssm';
|
|
140
|
+
*
|
|
141
|
+
* const switch = sm`on <=> off;`;
|
|
142
|
+
* ```
|
|
143
|
+
*
|
|
144
|
+
* Method {@link from}:
|
|
145
|
+
*
|
|
146
|
+
* ```typescript
|
|
147
|
+
* import * as jssm from './jssm';
|
|
148
|
+
*
|
|
149
|
+
* const toggle = jssm.from('up <=> down;');
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
*/
|
|
11
153
|
declare function compile<mDT>(tree: JssmParseTree): JssmGenericConfig<mDT>;
|
|
154
|
+
/*********
|
|
155
|
+
*
|
|
156
|
+
* An internal convenience wrapper for parsing then compiling a machine string.
|
|
157
|
+
* Not generally meant for external use. Please see {@link compile} or
|
|
158
|
+
* {@link sm}.
|
|
159
|
+
*
|
|
160
|
+
*/
|
|
12
161
|
declare function make<mDT>(plan: string): JssmGenericConfig<mDT>;
|
|
162
|
+
/*********
|
|
163
|
+
*
|
|
164
|
+
* An internal method meant to take a series of declarations and fold them into
|
|
165
|
+
* a single multi-faceted declaration, in the process of building a state. Not
|
|
166
|
+
* generally meant for external use.
|
|
167
|
+
*
|
|
168
|
+
*/
|
|
13
169
|
declare function transfer_state_properties(state_decl: JssmStateDeclaration): JssmStateDeclaration;
|
|
14
170
|
declare class Machine<mDT> {
|
|
15
171
|
_state: StateType;
|
|
@@ -129,6 +285,39 @@ declare class Machine<mDT> {
|
|
|
129
285
|
instance_name(): string | undefined;
|
|
130
286
|
sm(template_strings: TemplateStringsArray, ...remainder: any[]): Machine<mDT>;
|
|
131
287
|
}
|
|
288
|
+
/*********
|
|
289
|
+
*
|
|
290
|
+
* Create a state machine from a template string. This is one of the two main
|
|
291
|
+
* paths for working with JSSM, alongside {@link from}.
|
|
292
|
+
*
|
|
293
|
+
* Use this method when you want to work directly and conveniently with a
|
|
294
|
+
* constant template expression. Use `.from` when you want to pull from
|
|
295
|
+
* dynamic strings.
|
|
296
|
+
*
|
|
297
|
+
*
|
|
298
|
+
* ```typescript
|
|
299
|
+
* import * as jssm from './jssm';
|
|
300
|
+
*
|
|
301
|
+
* const switch = jssm.from('on <=> off;');
|
|
302
|
+
* ```
|
|
303
|
+
*
|
|
304
|
+
*/
|
|
132
305
|
declare function sm<mDT>(template_strings: TemplateStringsArray, ...remainder: any[]): Machine<mDT>;
|
|
306
|
+
/*********
|
|
307
|
+
*
|
|
308
|
+
* Create a state machine from an implementation string. This is one of the
|
|
309
|
+
* two main paths for working with JSSM, alongside {@link sm}.
|
|
310
|
+
*
|
|
311
|
+
* Use this method when you want to conveniently pull a state machine from a
|
|
312
|
+
* string dynamically. Use operator `sm` when you just want to work with a
|
|
313
|
+
* template expression.
|
|
314
|
+
*
|
|
315
|
+
* ```typescript
|
|
316
|
+
* import * as jssm from './jssm';
|
|
317
|
+
*
|
|
318
|
+
* const switch = jssm.from('on <=> off;');
|
|
319
|
+
* ```
|
|
320
|
+
*
|
|
321
|
+
*/
|
|
133
322
|
declare function from<mDT>(MachineAsString: string, ExtraConstructorFields?: Partial<JssmGenericConfig<mDT>> | undefined): Machine<mDT>;
|
|
134
323
|
export { version, transfer_state_properties, Machine, make, wrap_parse as parse, compile, sm, from, arrow_direction, arrow_left_kind, arrow_right_kind, seq, weighted_rand_select, histograph, weighted_sample_select, weighted_histo_key, shapes, gviz_shapes, named_colors };
|
package/dist/es6/jssm.js
CHANGED
|
@@ -6,6 +6,18 @@ import { parse } from './jssm-dot';
|
|
|
6
6
|
import { version } from './version'; // replaced from package.js in build
|
|
7
7
|
import { JssmError } from './jssm_error';
|
|
8
8
|
/* eslint-disable complexity */
|
|
9
|
+
/*********
|
|
10
|
+
*
|
|
11
|
+
* Return the direction of an arrow - `right`, `left`, or `both`.
|
|
12
|
+
*
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { arrow_direction } from './jssm';
|
|
15
|
+
*
|
|
16
|
+
* arrow_direction('->'); // 'right'
|
|
17
|
+
* arrow_direction('<~=>'); // 'both'
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
9
21
|
function arrow_direction(arrow) {
|
|
10
22
|
switch (String(arrow)) {
|
|
11
23
|
case '->':
|
|
@@ -59,6 +71,21 @@ function arrow_direction(arrow) {
|
|
|
59
71
|
}
|
|
60
72
|
/* eslint-enable complexity */
|
|
61
73
|
/* eslint-disable complexity */
|
|
74
|
+
/*********
|
|
75
|
+
*
|
|
76
|
+
* Return the direction of an arrow - `right`, `left`, or `both`.
|
|
77
|
+
*
|
|
78
|
+
* ```typescript
|
|
79
|
+
* import { arrow_left_kind } from './jssm';
|
|
80
|
+
*
|
|
81
|
+
* arrow_left_kind('<-'); // 'legal'
|
|
82
|
+
* arrow_left_kind('<='); // 'main'
|
|
83
|
+
* arrow_left_kind('<~'); // 'forced'
|
|
84
|
+
* arrow_left_kind('<->'); // 'legal'
|
|
85
|
+
* arrow_left_kind('->'); // 'none'
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
*/
|
|
62
89
|
function arrow_left_kind(arrow) {
|
|
63
90
|
switch (String(arrow)) {
|
|
64
91
|
case '->':
|
|
@@ -101,6 +128,21 @@ function arrow_left_kind(arrow) {
|
|
|
101
128
|
}
|
|
102
129
|
/* eslint-enable complexity */
|
|
103
130
|
/* eslint-disable complexity */
|
|
131
|
+
/*********
|
|
132
|
+
*
|
|
133
|
+
* Return the direction of an arrow - `right`, `left`, or `both`.
|
|
134
|
+
*
|
|
135
|
+
* ```typescript
|
|
136
|
+
* import { arrow_left_kind } from './jssm';
|
|
137
|
+
*
|
|
138
|
+
* arrow_left_kind('->'); // 'legal'
|
|
139
|
+
* arrow_left_kind('=>'); // 'main'
|
|
140
|
+
* arrow_left_kind('~>'); // 'forced'
|
|
141
|
+
* arrow_left_kind('<->'); // 'legal'
|
|
142
|
+
* arrow_left_kind('<-'); // 'none'
|
|
143
|
+
* ```
|
|
144
|
+
*
|
|
145
|
+
*/
|
|
104
146
|
function arrow_right_kind(arrow) {
|
|
105
147
|
switch (String(arrow)) {
|
|
106
148
|
case '<-':
|
|
@@ -142,6 +184,12 @@ function arrow_right_kind(arrow) {
|
|
|
142
184
|
}
|
|
143
185
|
}
|
|
144
186
|
/* eslint-enable complexity */
|
|
187
|
+
/*********
|
|
188
|
+
*
|
|
189
|
+
* Internal method meant to perform factory assembly of an edge. Not meant for
|
|
190
|
+
* external use.
|
|
191
|
+
*
|
|
192
|
+
*/
|
|
145
193
|
function makeTransition(this_se, from, to, isRight, _wasList, _wasIndex) {
|
|
146
194
|
const kind = isRight ? arrow_right_kind(this_se.kind) : arrow_left_kind(this_se.kind), edge = {
|
|
147
195
|
from,
|
|
@@ -172,9 +220,68 @@ function makeTransition(this_se, from, to, isRight, _wasList, _wasIndex) {
|
|
|
172
220
|
}
|
|
173
221
|
return edge;
|
|
174
222
|
}
|
|
223
|
+
/*********
|
|
224
|
+
*
|
|
225
|
+
* This method wraps the parser call that comes from the peg grammar,
|
|
226
|
+
* {@link parse}. Generally neither this nor that should be used directly
|
|
227
|
+
* unless you mean to develop plugins or extensions for the machine.
|
|
228
|
+
*
|
|
229
|
+
* Parses the intermediate representation of a compiled string down to a
|
|
230
|
+
* machine configuration object. If you're using this (probably don't,) you're
|
|
231
|
+
* probably also using {@link compile} and {@link Machine.constructor}.
|
|
232
|
+
*
|
|
233
|
+
* ```typescript
|
|
234
|
+
* import { parse, compile, Machine } from './jssm';
|
|
235
|
+
*
|
|
236
|
+
* const intermediate = wrap_parse('a -> b;', {});
|
|
237
|
+
* // [ {key:'transition', from:'a', se:{kind:'->',to:'b'}} ]
|
|
238
|
+
*
|
|
239
|
+
* const cfg = compile(intermediate);
|
|
240
|
+
* // { start_states:['a'], transitions: [{ from:'a', to:'b', kind:'legal', forced_only:false, main_path:false }] }
|
|
241
|
+
*
|
|
242
|
+
* const machine = new Machine(cfg);
|
|
243
|
+
* // Machine { _instance_name: undefined, _state: 'a', ...
|
|
244
|
+
* ```
|
|
245
|
+
*
|
|
246
|
+
* This method is mostly for plugin and intermediate tool authors, or people
|
|
247
|
+
* who need to work with the machine's intermediate representation.
|
|
248
|
+
*
|
|
249
|
+
* # Hey!
|
|
250
|
+
*
|
|
251
|
+
* Most people looking at this want either the `sm` operator or method `from`,
|
|
252
|
+
* which perform all the steps in the chain. The library's author mostly uses
|
|
253
|
+
* operator `sm`, and mostly falls back to `.from` when needing to parse
|
|
254
|
+
* strings dynamically instead of from template literals.
|
|
255
|
+
*
|
|
256
|
+
* Operator {@link sm}:
|
|
257
|
+
*
|
|
258
|
+
* ```typescript
|
|
259
|
+
* import { sm } from './jssm';
|
|
260
|
+
*
|
|
261
|
+
* const switch = sm`on <=> off;`;
|
|
262
|
+
* ```
|
|
263
|
+
*
|
|
264
|
+
* Method {@link from}:
|
|
265
|
+
*
|
|
266
|
+
* ```typescript
|
|
267
|
+
* import * as jssm from './jssm';
|
|
268
|
+
*
|
|
269
|
+
* const toggle = jssm.from('up <=> down;');
|
|
270
|
+
* ```
|
|
271
|
+
*
|
|
272
|
+
* `wrap_parse` itself is an internal convenience method for alting out an
|
|
273
|
+
* object as the options call. Not generally meant for external use.
|
|
274
|
+
*
|
|
275
|
+
*/
|
|
175
276
|
function wrap_parse(input, options) {
|
|
176
277
|
return parse(input, options || {});
|
|
177
278
|
}
|
|
279
|
+
/*********
|
|
280
|
+
*
|
|
281
|
+
* Internal method performing one step in compiling rules for transitions. Not
|
|
282
|
+
* generally meant for external use.
|
|
283
|
+
*
|
|
284
|
+
*/
|
|
178
285
|
function compile_rule_transition_step(acc, from, to, this_se, next_se) {
|
|
179
286
|
const edges = [];
|
|
180
287
|
const uFrom = (Array.isArray(from) ? from : [from]), uTo = (Array.isArray(to) ? to : [to]);
|
|
@@ -198,9 +305,21 @@ function compile_rule_transition_step(acc, from, to, this_se, next_se) {
|
|
|
198
305
|
return new_acc;
|
|
199
306
|
}
|
|
200
307
|
}
|
|
308
|
+
/*********
|
|
309
|
+
*
|
|
310
|
+
* Internal method performing one step in compiling rules for transitions. Not
|
|
311
|
+
* generally meant for external use.
|
|
312
|
+
*
|
|
313
|
+
*/
|
|
201
314
|
function compile_rule_handle_transition(rule) {
|
|
202
315
|
return compile_rule_transition_step([], rule.from, rule.se.to, rule.se, rule.se.se);
|
|
203
316
|
}
|
|
317
|
+
/*********
|
|
318
|
+
*
|
|
319
|
+
* Internal method performing one step in compiling rules for transitions. Not
|
|
320
|
+
* generally meant for external use.
|
|
321
|
+
*
|
|
322
|
+
*/
|
|
204
323
|
function compile_rule_handler(rule) {
|
|
205
324
|
if (rule.key === 'transition') {
|
|
206
325
|
return { agg_as: 'transition', val: compile_rule_handle_transition(rule) };
|
|
@@ -229,6 +348,53 @@ function compile_rule_handler(rule) {
|
|
|
229
348
|
}
|
|
230
349
|
throw new JssmError(undefined, `compile_rule_handler: Unknown rule: ${JSON.stringify(rule)}`);
|
|
231
350
|
}
|
|
351
|
+
/*********
|
|
352
|
+
*
|
|
353
|
+
* Compile a machine's JSON intermediate representation to a config object. If
|
|
354
|
+
* you're using this (probably don't,) you're probably also using
|
|
355
|
+
* {@link parse} to get the IR, and the object constructor
|
|
356
|
+
* {@link Machine.construct} to turn the config object into a workable machine.
|
|
357
|
+
*
|
|
358
|
+
* ```typescript
|
|
359
|
+
* import { parse, compile, Machine } from './jssm';
|
|
360
|
+
*
|
|
361
|
+
* const intermediate = parse('a -> b;');
|
|
362
|
+
* // [ {key:'transition', from:'a', se:{kind:'->',to:'b'}} ]
|
|
363
|
+
*
|
|
364
|
+
* const cfg = compile(intermediate);
|
|
365
|
+
* // { start_states:['a'], transitions: [{ from:'a', to:'b', kind:'legal', forced_only:false, main_path:false }] }
|
|
366
|
+
*
|
|
367
|
+
* const machine = new Machine(cfg);
|
|
368
|
+
* // Machine { _instance_name: undefined, _state: 'a', ...
|
|
369
|
+
* ```
|
|
370
|
+
*
|
|
371
|
+
* This method is mostly for plugin and intermediate tool authors, or people
|
|
372
|
+
* who need to work with the machine's intermediate representation.
|
|
373
|
+
*
|
|
374
|
+
* # Hey!
|
|
375
|
+
*
|
|
376
|
+
* Most people looking at this want either the `sm` operator or method `from`,
|
|
377
|
+
* which perform all the steps in the chain. The library's author mostly uses
|
|
378
|
+
* operator `sm`, and mostly falls back to `.from` when needing to parse
|
|
379
|
+
* strings dynamically instead of from template literals.
|
|
380
|
+
*
|
|
381
|
+
* Operator {@link sm}:
|
|
382
|
+
*
|
|
383
|
+
* ```typescript
|
|
384
|
+
* import { sm } from './jssm';
|
|
385
|
+
*
|
|
386
|
+
* const switch = sm`on <=> off;`;
|
|
387
|
+
* ```
|
|
388
|
+
*
|
|
389
|
+
* Method {@link from}:
|
|
390
|
+
*
|
|
391
|
+
* ```typescript
|
|
392
|
+
* import * as jssm from './jssm';
|
|
393
|
+
*
|
|
394
|
+
* const toggle = jssm.from('up <=> down;');
|
|
395
|
+
* ```
|
|
396
|
+
*
|
|
397
|
+
*/
|
|
232
398
|
function compile(tree) {
|
|
233
399
|
const results = {
|
|
234
400
|
graph_layout: [],
|
|
@@ -286,9 +452,23 @@ function compile(tree) {
|
|
|
286
452
|
});
|
|
287
453
|
return result_cfg;
|
|
288
454
|
}
|
|
455
|
+
/*********
|
|
456
|
+
*
|
|
457
|
+
* An internal convenience wrapper for parsing then compiling a machine string.
|
|
458
|
+
* Not generally meant for external use. Please see {@link compile} or
|
|
459
|
+
* {@link sm}.
|
|
460
|
+
*
|
|
461
|
+
*/
|
|
289
462
|
function make(plan) {
|
|
290
463
|
return compile(wrap_parse(plan));
|
|
291
464
|
}
|
|
465
|
+
/*********
|
|
466
|
+
*
|
|
467
|
+
* An internal method meant to take a series of declarations and fold them into
|
|
468
|
+
* a single multi-faceted declaration, in the process of building a state. Not
|
|
469
|
+
* generally meant for external use.
|
|
470
|
+
*
|
|
471
|
+
*/
|
|
292
472
|
function transfer_state_properties(state_decl) {
|
|
293
473
|
state_decl.declarations.map((d) => {
|
|
294
474
|
switch (d.key) {
|
|
@@ -1019,6 +1199,23 @@ class Machine {
|
|
|
1019
1199
|
return sm(template_strings, ...remainder);
|
|
1020
1200
|
}
|
|
1021
1201
|
}
|
|
1202
|
+
/*********
|
|
1203
|
+
*
|
|
1204
|
+
* Create a state machine from a template string. This is one of the two main
|
|
1205
|
+
* paths for working with JSSM, alongside {@link from}.
|
|
1206
|
+
*
|
|
1207
|
+
* Use this method when you want to work directly and conveniently with a
|
|
1208
|
+
* constant template expression. Use `.from` when you want to pull from
|
|
1209
|
+
* dynamic strings.
|
|
1210
|
+
*
|
|
1211
|
+
*
|
|
1212
|
+
* ```typescript
|
|
1213
|
+
* import * as jssm from './jssm';
|
|
1214
|
+
*
|
|
1215
|
+
* const switch = jssm.from('on <=> off;');
|
|
1216
|
+
* ```
|
|
1217
|
+
*
|
|
1218
|
+
*/
|
|
1022
1219
|
function sm(template_strings, ...remainder /* , arguments */) {
|
|
1023
1220
|
// foo`a${1}b${2}c` will come in as (['a','b','c'],1,2)
|
|
1024
1221
|
// this includes when a and c are empty strings
|
|
@@ -1032,6 +1229,22 @@ function sm(template_strings, ...remainder /* , arguments */) {
|
|
|
1032
1229
|
/* eslint-enable prefer-rest-params */
|
|
1033
1230
|
)));
|
|
1034
1231
|
}
|
|
1232
|
+
/*********
|
|
1233
|
+
*
|
|
1234
|
+
* Create a state machine from an implementation string. This is one of the
|
|
1235
|
+
* two main paths for working with JSSM, alongside {@link sm}.
|
|
1236
|
+
*
|
|
1237
|
+
* Use this method when you want to conveniently pull a state machine from a
|
|
1238
|
+
* string dynamically. Use operator `sm` when you just want to work with a
|
|
1239
|
+
* template expression.
|
|
1240
|
+
*
|
|
1241
|
+
* ```typescript
|
|
1242
|
+
* import * as jssm from './jssm';
|
|
1243
|
+
*
|
|
1244
|
+
* const switch = jssm.from('on <=> off;');
|
|
1245
|
+
* ```
|
|
1246
|
+
*
|
|
1247
|
+
*/
|
|
1035
1248
|
function from(MachineAsString, ExtraConstructorFields) {
|
|
1036
1249
|
const to_decorate = make(MachineAsString);
|
|
1037
1250
|
if (ExtraConstructorFields !== undefined) {
|
package/dist/es6/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const version = "5.65.
|
|
1
|
+
const version = "5.65.4";
|
|
2
2
|
export { version };
|