@@ -3,27 +3,34 @@ import type { RegExpValidatorSourceContext } from "./validator"
3
3
export class RegExpSyntaxError extends SyntaxError {
4
4
public index : number
5
5
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 )
27
8
this . index = index
28
9
}
29
10
}
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