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.
@@ -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) {
@@ -1,2 +1,2 @@
1
- const version = "5.65.1";
1
+ const version = "5.65.4";
2
2
  export { version };