jssm 5.142.3 → 5.143.0
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/README.md +7 -7
- package/dist/cdn/instance.js +1537 -611
- package/dist/cdn/viz.js +1537 -611
- package/dist/cli/fsl-render.cjs +1 -1
- package/dist/cli/fsl.cjs +1 -1
- package/dist/deno/README.md +7 -7
- package/dist/deno/jssm.d.ts +18 -2
- package/dist/deno/jssm.js +1 -1
- package/dist/deno/jssm_compiler.d.ts +80 -4
- package/dist/deno/jssm_error.d.ts +12 -2
- package/dist/deno/jssm_types.d.ts +51 -2
- package/dist/jssm.es5.cjs +1 -1
- package/dist/jssm.es5.iife.js +1 -1
- package/dist/jssm.es6.mjs +1 -1
- package/dist/jssm_viz.cjs +1 -1
- package/dist/jssm_viz.iife.cjs +1 -1
- package/dist/jssm_viz.mjs +1 -1
- package/jssm.es5.d.cts +126 -4
- package/jssm.es6.d.ts +126 -4
- package/jssm_viz.es5.d.cts +61 -1
- package/jssm_viz.es6.d.ts +61 -1
- package/package.json +1 -1
|
@@ -1,4 +1,22 @@
|
|
|
1
|
-
import { JssmTransition, JssmCompileSe, JssmParseTree, JssmGenericConfig } from './jssm_types';
|
|
1
|
+
import { JssmTransition, JssmCompileSe, JssmCompileSeStart, JssmParseTree, JssmGenericConfig, FslSourceLocation } from './jssm_types';
|
|
2
|
+
/*********
|
|
3
|
+
*
|
|
4
|
+
* Returns the source span of the `n`-th parse-tree node (1-based) matching
|
|
5
|
+
* `predicate`, or `undefined` if there are fewer than `n` matches or the
|
|
6
|
+
* matched node carries no location. Used to point semantic compile errors
|
|
7
|
+
* at the offending statement when the tree was produced with
|
|
8
|
+
* `parse(input, { locations: true })`.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*
|
|
12
|
+
* @param tree The parse tree to scan.
|
|
13
|
+
* @param predicate Node test.
|
|
14
|
+
* @param n 1-based ordinal of the matching node to return.
|
|
15
|
+
*
|
|
16
|
+
* @returns The matching node's `loc`, or `undefined`.
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
declare function nth_matching_loc<StateType, mDT>(tree: JssmParseTree<StateType, mDT>, predicate: (node: JssmCompileSeStart<StateType, mDT>) => boolean, n: number): FslSourceLocation | undefined;
|
|
2
20
|
/*********
|
|
3
21
|
*
|
|
4
22
|
* Internal method meant to perform factory assembly of an edge. Not meant for
|
|
@@ -51,6 +69,34 @@ declare function makeTransition<StateType, mDT>(this_se: JssmCompileSe<StateType
|
|
|
51
69
|
* This method is mostly for plugin and intermediate tool authors, or people
|
|
52
70
|
* who need to work with the machine's intermediate representation.
|
|
53
71
|
*
|
|
72
|
+
* ## Opt-in source locations
|
|
73
|
+
*
|
|
74
|
+
* Pass `{ locations: true }` to attach source-span information to every
|
|
75
|
+
* object node in the AST. Each node gains a `loc` field of type
|
|
76
|
+
* {@link FslSourceLocation} covering its full statement span. Selected nodes
|
|
77
|
+
* also gain curated sub-span fields that pinpoint individual tokens within the
|
|
78
|
+
* statement:
|
|
79
|
+
*
|
|
80
|
+
* - Transition nodes: `from_loc` (source state), `to_loc` (target state, on
|
|
81
|
+
* the nested `se` object), `l_action_loc` / `r_action_loc` (action labels).
|
|
82
|
+
* - State-declaration nodes: `name_loc` (state name), plus `value_loc` on
|
|
83
|
+
* each color-bearing item inside the declaration block.
|
|
84
|
+
* - Machine-attribute nodes (`machine_name`, `fsl_version`, etc.): `value_loc`
|
|
85
|
+
* (the attribute value token).
|
|
86
|
+
*
|
|
87
|
+
* Without `{ locations: true }` the AST is byte-for-byte identical to the
|
|
88
|
+
* default output; no `loc` or `*_loc` fields are present.
|
|
89
|
+
*
|
|
90
|
+
* ```typescript
|
|
91
|
+
* const tree = wrap_parse('a -> b;', { locations: true });
|
|
92
|
+
* // tree[0].loc === { start: { offset: 0, line: 1, column: 1 },
|
|
93
|
+
* // end: { offset: 7, line: 1, column: 8 } }
|
|
94
|
+
* // tree[0].from_loc.start.offset === 0 // 'a'
|
|
95
|
+
* // tree[0].se.to_loc.start.offset === 5 // 'b'
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* @see {@link FslSourceLocation}
|
|
99
|
+
*
|
|
54
100
|
* # Hey!
|
|
55
101
|
*
|
|
56
102
|
* Most people looking at this want either the `sm` operator or method `from`,
|
|
@@ -79,7 +125,9 @@ declare function makeTransition<StateType, mDT>(this_se: JssmCompileSe<StateType
|
|
|
79
125
|
*
|
|
80
126
|
* @param input The FSL code to be evaluated
|
|
81
127
|
*
|
|
82
|
-
* @param options Things to control about the instance
|
|
128
|
+
* @param options Things to control about the instance. Pass
|
|
129
|
+
* `{ locations: true }` to enable opt-in source location
|
|
130
|
+
* tracking on every AST node.
|
|
83
131
|
*
|
|
84
132
|
*/
|
|
85
133
|
declare function wrap_parse(input: string, options?: Object): any;
|
|
@@ -106,6 +154,31 @@ declare function wrap_parse(input: string, options?: Object): any;
|
|
|
106
154
|
* This method is mostly for plugin and intermediate tool authors, or people
|
|
107
155
|
* who need to work with the machine's intermediate representation.
|
|
108
156
|
*
|
|
157
|
+
* ## Source-location-aware error reporting
|
|
158
|
+
*
|
|
159
|
+
* `compile()` ignores `loc` and `*_loc` fields during machine construction —
|
|
160
|
+
* the resulting config is identical whether or not the tree was parsed with
|
|
161
|
+
* `{ locations: true }`. However, when those fields are present, `compile()`
|
|
162
|
+
* attaches the offending node's source span to any semantic {@link JssmError}
|
|
163
|
+
* it throws, via the error's `source_location` field
|
|
164
|
+
* (type {@link FslSourceLocation}). This lets downstream tooling (e.g. a
|
|
165
|
+
* CodeMirror 6 linter) map the error to a precise editor range without any
|
|
166
|
+
* additional source-scanning.
|
|
167
|
+
*
|
|
168
|
+
* ```typescript
|
|
169
|
+
* import { parse, compile } from 'jssm';
|
|
170
|
+
*
|
|
171
|
+
* try {
|
|
172
|
+
* compile(parse('fsl_version: 1.0.0;\nfsl_version: 2.0.0;\na -> b;',
|
|
173
|
+
* { locations: true }));
|
|
174
|
+
* } catch (err) {
|
|
175
|
+
* // err.source_location.start.offset points at the second fsl_version line
|
|
176
|
+
* console.log(err.source_location);
|
|
177
|
+
* }
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @see {@link FslSourceLocation}
|
|
181
|
+
*
|
|
109
182
|
* # Hey!
|
|
110
183
|
*
|
|
111
184
|
* Most people looking at this want either the `sm` operator or method `from`,
|
|
@@ -131,7 +204,10 @@ declare function wrap_parse(input: string, options?: Object): any;
|
|
|
131
204
|
*
|
|
132
205
|
* @typeparam mDT The type of the machine data member; usually omitted
|
|
133
206
|
*
|
|
134
|
-
* @param tree The parse tree to be boiled down into a machine config
|
|
207
|
+
* @param tree The parse tree to be boiled down into a machine config. If the
|
|
208
|
+
* tree was produced with `parse(input, { locations: true })`, any
|
|
209
|
+
* semantic error thrown will carry a `source_location` span
|
|
210
|
+
* pointing at the offending statement.
|
|
135
211
|
*
|
|
136
212
|
*/
|
|
137
213
|
declare function compile<StateType, mDT>(tree: JssmParseTree<StateType, mDT>): JssmGenericConfig<StateType, mDT>;
|
|
@@ -147,4 +223,4 @@ declare function compile<StateType, mDT>(tree: JssmParseTree<StateType, mDT>): J
|
|
|
147
223
|
*
|
|
148
224
|
*/
|
|
149
225
|
declare function make<StateType, mDT>(plan: string): JssmGenericConfig<StateType, mDT>;
|
|
150
|
-
export { compile, make, makeTransition, wrap_parse };
|
|
226
|
+
export { compile, make, makeTransition, wrap_parse, nth_matching_loc };
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { JssmErrorExtendedInfo } from './jssm_types';
|
|
1
|
+
import { JssmErrorExtendedInfo, FslSourceLocation } from './jssm_types';
|
|
2
2
|
/*******
|
|
3
3
|
*
|
|
4
4
|
* Custom error class for jssm. Enriches the standard `Error` with
|
|
5
5
|
* machine context (current state, instance name) and an optional
|
|
6
6
|
* `requested_state` so that error messages are self-describing.
|
|
7
7
|
*
|
|
8
|
+
* When a semantic error is detected during `compile()` and the parse tree
|
|
9
|
+
* was produced with `parse(input, { locations: true })`, the thrown error
|
|
10
|
+
* also carries a `source_location` field — the FSL source span of the
|
|
11
|
+
* offending statement — so downstream tooling can map the error to a precise
|
|
12
|
+
* position in the original source text without additional scanning.
|
|
13
|
+
*
|
|
8
14
|
* ```typescript
|
|
9
15
|
* throw new JssmError(machine, 'no such state', { requested_state: 'Blue' });
|
|
10
16
|
* // JssmError: [[my-light]]: no such state (at "Red", requested "Blue")
|
|
@@ -15,13 +21,17 @@ import { JssmErrorExtendedInfo } from './jssm_types';
|
|
|
15
21
|
* read `state()` and `instance_name()` for context.
|
|
16
22
|
* @param message - A human-readable description of the error.
|
|
17
23
|
* @param JEEI - Optional {@link JssmErrorExtendedInfo} with extra
|
|
18
|
-
* context such as `requested_state
|
|
24
|
+
* context such as `requested_state` and/or
|
|
25
|
+
* `source_location` (the FSL source span of the
|
|
26
|
+
* offending statement, present when the error
|
|
27
|
+
* originated from a located parse tree).
|
|
19
28
|
*
|
|
20
29
|
*/
|
|
21
30
|
declare class JssmError extends Error {
|
|
22
31
|
message: string;
|
|
23
32
|
base_message: string;
|
|
24
33
|
requested_state: string | undefined;
|
|
34
|
+
source_location: FslSourceLocation | undefined;
|
|
25
35
|
constructor(machine: any, message: string, JEEI?: JssmErrorExtendedInfo);
|
|
26
36
|
}
|
|
27
37
|
export { JssmError };
|
|
@@ -81,6 +81,23 @@ declare type JssmAllowsOverride = true | false | undefined;
|
|
|
81
81
|
* component contains at least one start state.
|
|
82
82
|
*/
|
|
83
83
|
declare type JssmAllowIslands = true | false | 'with_start';
|
|
84
|
+
/**
|
|
85
|
+
* Structured render-size hint for a machine visualization, set by the FSL
|
|
86
|
+
* `default_size` directive. All three forms are optional in the sense that
|
|
87
|
+
* only one or two fields will be present depending on the form used:
|
|
88
|
+
*
|
|
89
|
+
* - `{ width }` — single-number form (`default_size: 800;`)
|
|
90
|
+
* - `{ width, height }` — bounding-box form (`default_size: 800 600;`)
|
|
91
|
+
* - `{ height }` — height-only form (`default_size: height 600;`)
|
|
92
|
+
*
|
|
93
|
+
* This is a *hint*, not a hard constraint. Renderers may ignore it.
|
|
94
|
+
*
|
|
95
|
+
* @see Machine.default_size
|
|
96
|
+
*/
|
|
97
|
+
declare type JssmDefaultSize = {
|
|
98
|
+
width?: number;
|
|
99
|
+
height?: number;
|
|
100
|
+
};
|
|
84
101
|
/**
|
|
85
102
|
* Runtime-iterable list of valid `flow` directions for FSL diagrams.
|
|
86
103
|
* Use this when you need to enumerate directions; for the type itself
|
|
@@ -230,6 +247,26 @@ declare type JssmGenericMachine<DataType> = {
|
|
|
230
247
|
allow_force?: boolean;
|
|
231
248
|
keep_history?: boolean | number;
|
|
232
249
|
};
|
|
250
|
+
/**
|
|
251
|
+
* A source span produced by the FSL parser when `parse(input, { locations:
|
|
252
|
+
* true })` is used. Mirrors PEG.js's native `location()` shape: byte
|
|
253
|
+
* `offset`s (0-based, half-open) plus 1-based `line`/`column` for display.
|
|
254
|
+
*
|
|
255
|
+
* ```typescript
|
|
256
|
+
* const [t] = parse('a -> b;', { locations: true });
|
|
257
|
+
* // t.loc === { start: { offset: 0, line: 1, column: 1 },
|
|
258
|
+
* // end: { offset: 7, line: 1, column: 8 } }
|
|
259
|
+
* ```
|
|
260
|
+
*/
|
|
261
|
+
declare type FslSourcePoint = {
|
|
262
|
+
offset: number;
|
|
263
|
+
line: number;
|
|
264
|
+
column: number;
|
|
265
|
+
};
|
|
266
|
+
declare type FslSourceLocation = {
|
|
267
|
+
start: FslSourcePoint;
|
|
268
|
+
end: FslSourcePoint;
|
|
269
|
+
};
|
|
233
270
|
/**
|
|
234
271
|
* A single key/value pair from an FSL `state X: { ... };` block, in the
|
|
235
272
|
* raw form produced by the parser before being condensed into a
|
|
@@ -239,6 +276,8 @@ declare type JssmStateDeclarationRule = {
|
|
|
239
276
|
key: string;
|
|
240
277
|
value: any;
|
|
241
278
|
name?: string;
|
|
279
|
+
loc?: FslSourceLocation;
|
|
280
|
+
value_loc?: FslSourceLocation;
|
|
242
281
|
};
|
|
243
282
|
/**
|
|
244
283
|
* The fully-condensed declaration for a single state, including its raw
|
|
@@ -410,6 +449,7 @@ declare type JssmGenericConfig<StateType, DataType> = {
|
|
|
410
449
|
machine_name?: string;
|
|
411
450
|
machine_version?: string;
|
|
412
451
|
npm_name?: string;
|
|
452
|
+
default_size?: JssmDefaultSize;
|
|
413
453
|
fsl_version?: string;
|
|
414
454
|
auto_api?: boolean | string;
|
|
415
455
|
instance_name?: string | undefined;
|
|
@@ -454,6 +494,10 @@ declare type JssmCompileSe<StateType, mDT> = {
|
|
|
454
494
|
r_probability: number;
|
|
455
495
|
l_after?: number;
|
|
456
496
|
r_after?: number;
|
|
497
|
+
loc?: FslSourceLocation;
|
|
498
|
+
to_loc?: FslSourceLocation;
|
|
499
|
+
l_action_loc?: FslSourceLocation;
|
|
500
|
+
r_action_loc?: FslSourceLocation;
|
|
457
501
|
};
|
|
458
502
|
/**
|
|
459
503
|
* Internal compiler intermediate: the root of a chained transition
|
|
@@ -468,11 +512,15 @@ declare type JssmCompileSeStart<StateType, DataType> = {
|
|
|
468
512
|
from: StateType;
|
|
469
513
|
se: JssmCompileSe<StateType, DataType>;
|
|
470
514
|
key: string;
|
|
471
|
-
value?: string | number
|
|
515
|
+
value?: string | number | Array<JssmStateDeclarationRule>;
|
|
472
516
|
name?: string;
|
|
473
517
|
state?: string;
|
|
474
518
|
default_value?: any;
|
|
475
519
|
required?: boolean;
|
|
520
|
+
loc?: FslSourceLocation;
|
|
521
|
+
from_loc?: FslSourceLocation;
|
|
522
|
+
value_loc?: FslSourceLocation;
|
|
523
|
+
name_loc?: FslSourceLocation;
|
|
476
524
|
};
|
|
477
525
|
/**
|
|
478
526
|
* The output shape of the FSL parser: a flat array of
|
|
@@ -694,6 +742,7 @@ declare type PostEverythingHookHandler<mDT> = (hook_context: EverythingHookConte
|
|
|
694
742
|
*/
|
|
695
743
|
declare type JssmErrorExtendedInfo = {
|
|
696
744
|
requested_state?: StateType | undefined;
|
|
745
|
+
source_location?: FslSourceLocation;
|
|
697
746
|
};
|
|
698
747
|
/**
|
|
699
748
|
* Bounded history of recently-visited states paired with the data payload
|
|
@@ -915,4 +964,4 @@ declare type JssmEventHandler<mDT, Ev extends JssmEventName> = (detail: JssmEven
|
|
|
915
964
|
* removes the subscription. Calling it more than once is a no-op.
|
|
916
965
|
*/
|
|
917
966
|
declare type JssmUnsubscribe = () => void;
|
|
918
|
-
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, JssmAllowIslands, JssmParseFunctionType, JssmMachineInternalState, JssmErrorExtendedInfo, FslDirections, FslDirection, FslThemes, FslTheme, HookDescription, HookHandler, HookContext, HookResult, HookComplexResult, EverythingHookContext, EverythingHookHandler, PostEverythingHookHandler, JssmEventName, JssmEventDetailMap, JssmEventFilterMap, JssmEventFilter, JssmEventHandler, JssmUnsubscribe, JssmTransitionEventDetail, JssmRejectionEventDetail, JssmActionEventDetail, JssmEntryEventDetail, JssmExitEventDetail, JssmTerminalEventDetail, JssmCompleteEventDetail, JssmErrorEventDetail, JssmDataChangeEventDetail, JssmOverrideEventDetail, JssmTimeoutEventDetail, JssmHookLifecycleEventDetail, JssmRng };
|
|
967
|
+
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, JssmAllowIslands, JssmDefaultSize, JssmParseFunctionType, JssmMachineInternalState, JssmErrorExtendedInfo, FslDirections, FslDirection, FslThemes, FslTheme, FslSourcePoint, FslSourceLocation, HookDescription, HookHandler, HookContext, HookResult, HookComplexResult, EverythingHookContext, EverythingHookHandler, PostEverythingHookHandler, JssmEventName, JssmEventDetailMap, JssmEventFilterMap, JssmEventFilter, JssmEventHandler, JssmUnsubscribe, JssmTransitionEventDetail, JssmRejectionEventDetail, JssmActionEventDetail, JssmEntryEventDetail, JssmExitEventDetail, JssmTerminalEventDetail, JssmCompleteEventDetail, JssmErrorEventDetail, JssmDataChangeEventDetail, JssmOverrideEventDetail, JssmTimeoutEventDetail, JssmHookLifecycleEventDetail, JssmRng };
|