File tree Expand file tree Collapse file tree 1 file changed +14
-0
lines changed
Expand file tree Collapse file tree 1 file changed +14
-0
lines changed Original file line number Diff line number Diff line change @@ -23,9 +23,11 @@ export type ParserNode = {
2323
2424export class Parser {
2525 parseError : 'throw' | 'continue' ;
26+
2627 constructor ( params : { parseError ?: 'throw' | 'continue' } = { } ) {
2728 this . parseError = params . parseError ?? 'continue' ;
2829 }
30+
2931 node ( label : string | number , value : ParserNodeValue , nodes : ParserNode [ ] = [ ] ) : ParserNode {
3032 if ( ! isParserNodeValue ( value ) ) {
3133 throw new Error ( `invalid node value ${ typeof value } ` ) ;
@@ -38,6 +40,18 @@ export class Parser {
3840 } ;
3941 }
4042
43+ nodeCatchError (
44+ label : string | number ,
45+ buildValue : ( ) => ParserNodeValue | undefined ,
46+ buildNodes : ( ) => ParserNode [ ] = ( ) => [ ]
47+ ) : ParserNode {
48+ try {
49+ return this . node ( label , buildValue ?.( ) , buildNodes ( ) ) ;
50+ } catch ( e ) {
51+ return this . handleParseError ( e ) ;
52+ }
53+ }
54+
4155 handleParseError ( e : unknown ) : ParserNode {
4256 if ( this . parseError === 'throw' ) {
4357 throw e ;
You can’t perform that action at this time.
0 commit comments