jssm 5.65.2 → 5.65.3
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 +106 -2
- package/dist/es6/jssm.js +124 -2
- 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 +106 -2
- package/package.json +1 -1
package/dist/es6/jssm.d.ts
CHANGED
|
@@ -51,13 +51,117 @@ declare function arrow_left_kind(arrow: JssmArrow): JssmArrowKind;
|
|
|
51
51
|
declare function arrow_right_kind(arrow: JssmArrow): JssmArrowKind;
|
|
52
52
|
/*********
|
|
53
53
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
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
|
+
* ```typescript
|
|
86
|
+
* import { sm } from './jssm';
|
|
87
|
+
*
|
|
88
|
+
* const switch = sm`on <=> off;`;
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* … or …
|
|
92
|
+
*
|
|
93
|
+
* ```typescript
|
|
94
|
+
* import * as jssm from './jssm';
|
|
95
|
+
*
|
|
96
|
+
* const toggle = jssm.from('up <=> down;');
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* `wrap_parse` itself is an internal convenience method for alting out an
|
|
100
|
+
* object as the options call. Not generally meant for external use.
|
|
56
101
|
*
|
|
57
102
|
*/
|
|
58
103
|
declare function wrap_parse(input: string, options?: Object): any;
|
|
104
|
+
/*********
|
|
105
|
+
*
|
|
106
|
+
* Compile a machine's JSON intermediate representation to a config object. If
|
|
107
|
+
* you're using this (probably don't,) you're probably also using
|
|
108
|
+
* {@link parse} to get the IR, and the object constructor
|
|
109
|
+
* {@link Machine.construct} to turn the config object into a workable machine.
|
|
110
|
+
*
|
|
111
|
+
* ```typescript
|
|
112
|
+
* import { parse, compile, Machine } from './jssm';
|
|
113
|
+
*
|
|
114
|
+
* const intermediate = parse('a -> b;');
|
|
115
|
+
* // [ {key:'transition', from:'a', se:{kind:'->',to:'b'}} ]
|
|
116
|
+
*
|
|
117
|
+
* const cfg = compile(intermediate);
|
|
118
|
+
* // { start_states:['a'], transitions: [{ from:'a', to:'b', kind:'legal', forced_only:false, main_path:false }] }
|
|
119
|
+
*
|
|
120
|
+
* const machine = new Machine(cfg);
|
|
121
|
+
* // Machine { _instance_name: undefined, _state: 'a', ...
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* This method is mostly for plugin and intermediate tool authors, or people
|
|
125
|
+
* who need to work with the machine's intermediate representation.
|
|
126
|
+
*
|
|
127
|
+
* # Hey!
|
|
128
|
+
*
|
|
129
|
+
* Most people looking at this want either the `sm` operator or method `from`,
|
|
130
|
+
* which perform all the steps in the chain. The library's author mostly uses
|
|
131
|
+
* operator `sm`, and mostly falls back to `.from` when needing to parse
|
|
132
|
+
* strings dynamically instead of from template literals.
|
|
133
|
+
*
|
|
134
|
+
* ```typescript
|
|
135
|
+
* import { sm } from './jssm';
|
|
136
|
+
*
|
|
137
|
+
* const switch = sm`on <=> off;`;
|
|
138
|
+
* ```
|
|
139
|
+
*
|
|
140
|
+
* … or …
|
|
141
|
+
*
|
|
142
|
+
* ```typescript
|
|
143
|
+
* import * as jssm from './jssm';
|
|
144
|
+
*
|
|
145
|
+
* const toggle = jssm.from('up <=> down;');
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
*/
|
|
59
149
|
declare function compile<mDT>(tree: JssmParseTree): JssmGenericConfig<mDT>;
|
|
150
|
+
/*********
|
|
151
|
+
*
|
|
152
|
+
* An internal convenience wrapper for parsing then compiling a machine string.
|
|
153
|
+
* Not generally meant for external use. Please see {@link compile} or
|
|
154
|
+
* {@link sm}.
|
|
155
|
+
*
|
|
156
|
+
*/
|
|
60
157
|
declare function make<mDT>(plan: string): JssmGenericConfig<mDT>;
|
|
158
|
+
/*********
|
|
159
|
+
*
|
|
160
|
+
* An internal method meant to take a series of declarations and fold them into
|
|
161
|
+
* a single multi-faceted declaration, in the process of building a state. Not
|
|
162
|
+
* generally meant for external use.
|
|
163
|
+
*
|
|
164
|
+
*/
|
|
61
165
|
declare function transfer_state_properties(state_decl: JssmStateDeclaration): JssmStateDeclaration;
|
|
62
166
|
declare class Machine<mDT> {
|
|
63
167
|
_state: StateType;
|
package/dist/es6/jssm.js
CHANGED
|
@@ -222,13 +222,64 @@ function makeTransition(this_se, from, to, isRight, _wasList, _wasIndex) {
|
|
|
222
222
|
}
|
|
223
223
|
/*********
|
|
224
224
|
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
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
|
+
* ```typescript
|
|
257
|
+
* import { sm } from './jssm';
|
|
258
|
+
*
|
|
259
|
+
* const switch = sm`on <=> off;`;
|
|
260
|
+
* ```
|
|
261
|
+
*
|
|
262
|
+
* … or …
|
|
263
|
+
*
|
|
264
|
+
* ```typescript
|
|
265
|
+
* import * as jssm from './jssm';
|
|
266
|
+
*
|
|
267
|
+
* const toggle = jssm.from('up <=> down;');
|
|
268
|
+
* ```
|
|
269
|
+
*
|
|
270
|
+
* `wrap_parse` itself is an internal convenience method for alting out an
|
|
271
|
+
* object as the options call. Not generally meant for external use.
|
|
227
272
|
*
|
|
228
273
|
*/
|
|
229
274
|
function wrap_parse(input, options) {
|
|
230
275
|
return parse(input, options || {});
|
|
231
276
|
}
|
|
277
|
+
/*********
|
|
278
|
+
*
|
|
279
|
+
* Internal method performing one step in compiling rules for transitions. Not
|
|
280
|
+
* generally meant for external use.
|
|
281
|
+
*
|
|
282
|
+
*/
|
|
232
283
|
function compile_rule_transition_step(acc, from, to, this_se, next_se) {
|
|
233
284
|
const edges = [];
|
|
234
285
|
const uFrom = (Array.isArray(from) ? from : [from]), uTo = (Array.isArray(to) ? to : [to]);
|
|
@@ -252,9 +303,21 @@ function compile_rule_transition_step(acc, from, to, this_se, next_se) {
|
|
|
252
303
|
return new_acc;
|
|
253
304
|
}
|
|
254
305
|
}
|
|
306
|
+
/*********
|
|
307
|
+
*
|
|
308
|
+
* Internal method performing one step in compiling rules for transitions. Not
|
|
309
|
+
* generally meant for external use.
|
|
310
|
+
*
|
|
311
|
+
*/
|
|
255
312
|
function compile_rule_handle_transition(rule) {
|
|
256
313
|
return compile_rule_transition_step([], rule.from, rule.se.to, rule.se, rule.se.se);
|
|
257
314
|
}
|
|
315
|
+
/*********
|
|
316
|
+
*
|
|
317
|
+
* Internal method performing one step in compiling rules for transitions. Not
|
|
318
|
+
* generally meant for external use.
|
|
319
|
+
*
|
|
320
|
+
*/
|
|
258
321
|
function compile_rule_handler(rule) {
|
|
259
322
|
if (rule.key === 'transition') {
|
|
260
323
|
return { agg_as: 'transition', val: compile_rule_handle_transition(rule) };
|
|
@@ -283,6 +346,51 @@ function compile_rule_handler(rule) {
|
|
|
283
346
|
}
|
|
284
347
|
throw new JssmError(undefined, `compile_rule_handler: Unknown rule: ${JSON.stringify(rule)}`);
|
|
285
348
|
}
|
|
349
|
+
/*********
|
|
350
|
+
*
|
|
351
|
+
* Compile a machine's JSON intermediate representation to a config object. If
|
|
352
|
+
* you're using this (probably don't,) you're probably also using
|
|
353
|
+
* {@link parse} to get the IR, and the object constructor
|
|
354
|
+
* {@link Machine.construct} to turn the config object into a workable machine.
|
|
355
|
+
*
|
|
356
|
+
* ```typescript
|
|
357
|
+
* import { parse, compile, Machine } from './jssm';
|
|
358
|
+
*
|
|
359
|
+
* const intermediate = parse('a -> b;');
|
|
360
|
+
* // [ {key:'transition', from:'a', se:{kind:'->',to:'b'}} ]
|
|
361
|
+
*
|
|
362
|
+
* const cfg = compile(intermediate);
|
|
363
|
+
* // { start_states:['a'], transitions: [{ from:'a', to:'b', kind:'legal', forced_only:false, main_path:false }] }
|
|
364
|
+
*
|
|
365
|
+
* const machine = new Machine(cfg);
|
|
366
|
+
* // Machine { _instance_name: undefined, _state: 'a', ...
|
|
367
|
+
* ```
|
|
368
|
+
*
|
|
369
|
+
* This method is mostly for plugin and intermediate tool authors, or people
|
|
370
|
+
* who need to work with the machine's intermediate representation.
|
|
371
|
+
*
|
|
372
|
+
* # Hey!
|
|
373
|
+
*
|
|
374
|
+
* Most people looking at this want either the `sm` operator or method `from`,
|
|
375
|
+
* which perform all the steps in the chain. The library's author mostly uses
|
|
376
|
+
* operator `sm`, and mostly falls back to `.from` when needing to parse
|
|
377
|
+
* strings dynamically instead of from template literals.
|
|
378
|
+
*
|
|
379
|
+
* ```typescript
|
|
380
|
+
* import { sm } from './jssm';
|
|
381
|
+
*
|
|
382
|
+
* const switch = sm`on <=> off;`;
|
|
383
|
+
* ```
|
|
384
|
+
*
|
|
385
|
+
* … or …
|
|
386
|
+
*
|
|
387
|
+
* ```typescript
|
|
388
|
+
* import * as jssm from './jssm';
|
|
389
|
+
*
|
|
390
|
+
* const toggle = jssm.from('up <=> down;');
|
|
391
|
+
* ```
|
|
392
|
+
*
|
|
393
|
+
*/
|
|
286
394
|
function compile(tree) {
|
|
287
395
|
const results = {
|
|
288
396
|
graph_layout: [],
|
|
@@ -340,9 +448,23 @@ function compile(tree) {
|
|
|
340
448
|
});
|
|
341
449
|
return result_cfg;
|
|
342
450
|
}
|
|
451
|
+
/*********
|
|
452
|
+
*
|
|
453
|
+
* An internal convenience wrapper for parsing then compiling a machine string.
|
|
454
|
+
* Not generally meant for external use. Please see {@link compile} or
|
|
455
|
+
* {@link sm}.
|
|
456
|
+
*
|
|
457
|
+
*/
|
|
343
458
|
function make(plan) {
|
|
344
459
|
return compile(wrap_parse(plan));
|
|
345
460
|
}
|
|
461
|
+
/*********
|
|
462
|
+
*
|
|
463
|
+
* An internal method meant to take a series of declarations and fold them into
|
|
464
|
+
* a single multi-faceted declaration, in the process of building a state. Not
|
|
465
|
+
* generally meant for external use.
|
|
466
|
+
*
|
|
467
|
+
*/
|
|
346
468
|
function transfer_state_properties(state_decl) {
|
|
347
469
|
state_decl.declarations.map((d) => {
|
|
348
470
|
switch (d.key) {
|
package/dist/es6/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const version = "5.65.
|
|
1
|
+
const version = "5.65.3";
|
|
2
2
|
export { version };
|