@@ -3,27 +3,34 @@ import type { RegExpValidatorSourceContext } from "./validator"
33export class RegExpSyntaxError extends SyntaxError {
44 public index : number
55
6- public constructor (
7- srcCtx : RegExpValidatorSourceContext ,
8- flags : { unicode : boolean ; unicodeSets : boolean } ,
9- index : number ,
10- message : string ,
11- ) {
12- let source = ""
13- if ( srcCtx . kind === "literal" ) {
14- const literal = srcCtx . source . slice ( srcCtx . start , srcCtx . end )
15- if ( literal ) {
16- source = `: ${ literal } `
17- }
18- } else if ( srcCtx . kind === "pattern" ) {
19- const pattern = srcCtx . source . slice ( srcCtx . start , srcCtx . end )
20- const flagsText = `${ flags . unicode ? "u" : "" } ${
21- flags . unicodeSets ? "v" : ""
22- } `
23- source = `: /${ pattern } /${ flagsText } `
24- }
25-
26- super ( `Invalid regular expression${ source } : ${ message } ` )
6+ public constructor ( message : string , index : number ) {
7+ super ( message )
278 this . index = index
289 }
2910}
11+
12+ export function newRegExpSyntaxError (
13+ srcCtx : RegExpValidatorSourceContext ,
14+ flags : { unicode : boolean ; unicodeSets : boolean } ,
15+ index : number ,
16+ message : string ,
17+ ) : RegExpSyntaxError {
18+ let source = ""
19+ if ( srcCtx . kind === "literal" ) {
20+ const literal = srcCtx . source . slice ( srcCtx . start , srcCtx . end )
21+ if ( literal ) {
22+ source = `: ${ literal } `
23+ }
24+ } else if ( srcCtx . kind === "pattern" ) {
25+ const pattern = srcCtx . source . slice ( srcCtx . start , srcCtx . end )
26+ const flagsText = `${ flags . unicode ? "u" : "" } ${
27+ flags . unicodeSets ? "v" : ""
28+ } `
29+ source = `: /${ pattern } /${ flagsText } `
30+ }
31+
32+ return new RegExpSyntaxError (
33+ `Invalid regular expression${ source } : ${ message } ` ,
34+ index ,
35+ )
36+ }
0 commit comments