1
1
import {
2
2
AlternationFunction ,
3
- CanBeNegated ,
4
- CanBeQuantified ,
5
3
CharClassFunction ,
6
- ExtraQuantifiedToken ,
7
4
FlagUnion ,
8
5
FlagsString ,
9
6
GroupFunction ,
10
7
LiteralFunction ,
11
- QuantifiedToken ,
12
- QuantifierFunction ,
13
8
RegExpLiteral ,
14
9
RegExpModifier ,
15
10
RegExpToken ,
16
- negatableSymbol ,
17
- quantifiableSymbol ,
11
+ TokenFunction ,
18
12
} from './types' ;
19
13
import {
20
14
assign ,
@@ -40,8 +34,6 @@ class RegExpBuilder implements RegExpToken {
40
34
public readonly modifiers : RegExpModifier [ ] ;
41
35
public readonly backreferences : ( string | number ) [ ] ;
42
36
public readonly namedGroups : ( string | number ) [ ] ;
43
- public readonly [ negatableSymbol ] : undefined ;
44
- public readonly [ quantifiableSymbol ] : undefined ;
45
37
46
38
public constructor (
47
39
regExp ?: string ,
@@ -226,7 +218,7 @@ class RegExpBuilder implements RegExpToken {
226
218
}
227
219
228
220
public get exactly ( ) : RegExpToken [ 'exactly' ] {
229
- function func ( this : RegExpBuilder , ...args : RegExpLiteral ) : RegExpToken & CanBeQuantified {
221
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral ) : RegExpToken {
230
222
if ( ! isLiteralArgument ( args ) ) throw new Error ( 'Invalid arguments for exactly' ) ;
231
223
const literal = getLiteralString ( args ) ;
232
224
return this . addNode ( literal ) ;
@@ -235,7 +227,7 @@ class RegExpBuilder implements RegExpToken {
235
227
}
236
228
237
229
public get octal ( ) : RegExpToken [ 'octal' ] {
238
- function func ( this : RegExpBuilder , ...args : RegExpLiteral ) : RegExpToken & CanBeQuantified & CanBeNegated {
230
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral ) : RegExpToken {
239
231
const literal = getLiteralString ( args , false ) ;
240
232
if ( ! octalNumber . test ( literal ) ) throw new Error ( 'Invalid octal character' ) ;
241
233
const num = Number . parseInt ( literal , 8 ) ;
@@ -253,7 +245,7 @@ class RegExpBuilder implements RegExpToken {
253
245
}
254
246
255
247
public get hex ( ) : RegExpToken [ 'hex' ] {
256
- function func ( this : RegExpBuilder , ...args : RegExpLiteral ) : RegExpToken & CanBeQuantified & CanBeNegated {
248
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral ) : RegExpToken {
257
249
const literal = getLiteralString ( args , false ) ;
258
250
if ( ! hexNumber . test ( literal ) ) throw new Error ( 'Invalid hex character' ) ;
259
251
const num = Number . parseInt ( literal , 16 ) ;
@@ -265,7 +257,7 @@ class RegExpBuilder implements RegExpToken {
265
257
}
266
258
267
259
public get unicode ( ) : RegExpToken [ 'unicode' ] {
268
- function func ( this : RegExpBuilder , ...args : RegExpLiteral ) : RegExpToken & CanBeQuantified & CanBeNegated {
260
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral ) : RegExpToken {
269
261
const literal = getLiteralString ( args , false ) ;
270
262
if ( ! hexNumber . test ( literal ) ) throw new Error ( 'Invalid unicode character' ) ;
271
263
const num = Number . parseInt ( literal , 16 ) ;
@@ -279,7 +271,7 @@ class RegExpBuilder implements RegExpToken {
279
271
function func (
280
272
this : RegExpBuilder ,
281
273
...args : RegExpLiteral | ( string | RegExpToken ) [ ]
282
- ) : RegExpToken & CanBeQuantified & CanBeNegated & CharClassFunction < CanBeNegated > {
274
+ ) : RegExpToken & CharClassFunction {
283
275
if ( ! ( this . modifiers [ 0 ] instanceof CharacterClassModifier ) )
284
276
throw new Error ( `Unexpected modifier, expected CharacterClassModifier, but got ${ this . modifiers [ 0 ] } ` ) ;
285
277
if ( isLiteralArgument ( args ) ) {
@@ -314,7 +306,7 @@ class RegExpBuilder implements RegExpToken {
314
306
}
315
307
316
308
public get not ( ) : RegExpToken [ 'not' ] {
317
- function func ( this : RegExpBuilder , token : RegExpToken & CanBeNegated ) : RegExpToken & CanBeQuantified {
309
+ function func ( this : RegExpBuilder , token : RegExpToken ) : RegExpToken {
318
310
if ( RegExpBuilder . isRegExpBuilder ( token ) ) {
319
311
return this . addNode ( token ) ;
320
312
} else {
@@ -329,12 +321,8 @@ class RegExpBuilder implements RegExpToken {
329
321
*/
330
322
331
323
public get repeat ( ) : RegExpToken [ 'repeat' ] {
332
- function configure (
333
- this : RegExpBuilder ,
334
- min : number ,
335
- max ?: number
336
- ) : LiteralFunction < CanBeQuantified > & QuantifierFunction & QuantifiedToken {
337
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken & CanBeQuantified {
324
+ function configure ( this : RegExpBuilder , min : number , max ?: number ) : LiteralFunction & TokenFunction & RegExpToken {
325
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken {
338
326
if ( isLiteralArgument ( args ) ) {
339
327
const literal = getLiteralString ( args ) ;
340
328
return this . addNode ( literal ) ;
@@ -350,22 +338,15 @@ class RegExpBuilder implements RegExpToken {
350
338
}
351
339
352
340
public get repeatLazily ( ) : RegExpToken [ 'repeatLazily' ] {
353
- function configure (
354
- this : RegExpBuilder ,
355
- min : number ,
356
- max ?: number
357
- ) : LiteralFunction < CanBeQuantified > & QuantifierFunction & QuantifiedToken < 'lazily' > {
341
+ function configure ( this : RegExpBuilder , min : number , max ?: number ) : LiteralFunction & TokenFunction & RegExpToken {
358
342
return this . repeat ( min , max ) . lazily ;
359
343
}
360
344
return bind ( configure , this ) ;
361
345
}
362
346
363
347
public get atLeast ( ) : RegExpToken [ 'atLeast' ] {
364
- function configure (
365
- this : RegExpBuilder ,
366
- limit : number
367
- ) : LiteralFunction < CanBeQuantified > & QuantifierFunction & QuantifiedToken {
368
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken & CanBeQuantified {
348
+ function configure ( this : RegExpBuilder , limit : number ) : LiteralFunction & TokenFunction & RegExpToken {
349
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken {
369
350
if ( isLiteralArgument ( args ) ) {
370
351
const literal = getLiteralString ( args ) ;
371
352
return this . addNode ( literal ) ;
@@ -381,21 +362,15 @@ class RegExpBuilder implements RegExpToken {
381
362
}
382
363
383
364
public get atLeastLazily ( ) : RegExpToken [ 'atLeastLazily' ] {
384
- function configure (
385
- this : RegExpBuilder ,
386
- limit : number
387
- ) : LiteralFunction < CanBeQuantified > & QuantifierFunction & QuantifiedToken < 'lazily' > {
365
+ function configure ( this : RegExpBuilder , limit : number ) : LiteralFunction & TokenFunction & RegExpToken {
388
366
return this . atLeast ( limit ) . lazily ;
389
367
}
390
368
return bind ( configure , this ) ;
391
369
}
392
370
393
371
public get atMost ( ) : RegExpToken [ 'atMost' ] {
394
- function configure (
395
- this : RegExpBuilder ,
396
- limit : number
397
- ) : LiteralFunction < CanBeQuantified > & QuantifierFunction & QuantifiedToken {
398
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken & CanBeQuantified {
372
+ function configure ( this : RegExpBuilder , limit : number ) : LiteralFunction & TokenFunction & RegExpToken {
373
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken {
399
374
if ( isLiteralArgument ( args ) ) {
400
375
const literal = getLiteralString ( args ) ;
401
376
return this . addNode ( literal ) ;
@@ -411,17 +386,14 @@ class RegExpBuilder implements RegExpToken {
411
386
}
412
387
413
388
public get atMostLazily ( ) : RegExpToken [ 'atMostLazily' ] {
414
- function configure (
415
- this : RegExpBuilder ,
416
- limit : number
417
- ) : LiteralFunction < CanBeQuantified > & QuantifierFunction & QuantifiedToken < 'lazily' > {
389
+ function configure ( this : RegExpBuilder , limit : number ) : LiteralFunction & TokenFunction & RegExpToken {
418
390
return this . atMost ( limit ) . lazily ;
419
391
}
420
392
return bind ( configure , this ) ;
421
393
}
422
394
423
395
public get maybe ( ) : RegExpToken [ 'maybe' ] {
424
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken & CanBeQuantified {
396
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken {
425
397
if ( isLiteralArgument ( args ) ) {
426
398
const literal = getLiteralString ( args ) ;
427
399
return this . addNode ( literal ) ;
@@ -439,7 +411,7 @@ class RegExpBuilder implements RegExpToken {
439
411
}
440
412
441
413
public get zeroOrMore ( ) : RegExpToken [ 'zeroOrMore' ] {
442
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken & CanBeQuantified {
414
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken {
443
415
if ( isLiteralArgument ( args ) ) {
444
416
const literal = getLiteralString ( args ) ;
445
417
return this . addNode ( literal ) ;
@@ -457,7 +429,7 @@ class RegExpBuilder implements RegExpToken {
457
429
}
458
430
459
431
public get oneOrMore ( ) : RegExpToken [ 'oneOrMore' ] {
460
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken & CanBeQuantified {
432
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken {
461
433
if ( isLiteralArgument ( args ) ) {
462
434
const literal = getLiteralString ( args ) ;
463
435
return this . addNode ( literal ) ;
@@ -474,8 +446,8 @@ class RegExpBuilder implements RegExpToken {
474
446
return this . oneOrMore . lazily ;
475
447
}
476
448
477
- public get lazily ( ) : ExtraQuantifiedToken [ 'lazily' ] {
478
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken & CanBeQuantified {
449
+ public get lazily ( ) : RegExpToken [ 'lazily' ] {
450
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ] ) : RegExpToken {
479
451
if ( isLiteralArgument ( args ) ) {
480
452
const literal = getLiteralString ( args ) ;
481
453
return this . addNode ( literal ) ;
@@ -499,7 +471,7 @@ class RegExpBuilder implements RegExpToken {
499
471
*/
500
472
501
473
public get capture ( ) : RegExpToken [ 'capture' ] {
502
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ?] ) : RegExpToken & CanBeQuantified {
474
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ?] ) : RegExpToken {
503
475
if ( args . length === 0 ) {
504
476
return this . addNode ( '' ) ;
505
477
} else if ( isLiteralArgument ( args ) ) {
@@ -521,14 +493,14 @@ class RegExpBuilder implements RegExpToken {
521
493
function configure (
522
494
this : RegExpBuilder ,
523
495
...configArgs : RegExpLiteral
524
- ) : LiteralFunction < CanBeQuantified > & GroupFunction & RegExpToken {
496
+ ) : LiteralFunction & GroupFunction & RegExpToken {
525
497
if ( ! isLiteralArgument ( configArgs ) ) {
526
498
throw new Error ( 'Invalid arguments for captureAs' ) ;
527
499
}
528
500
const name = getLiteralString ( configArgs ) ;
529
501
if ( ! captureName . test ( name ) )
530
502
throw new Error ( 'Invalid capture name. It must be alpha numeric and must not begin with a digit' ) ;
531
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ?] ) : RegExpToken & CanBeQuantified {
503
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ?] ) : RegExpToken {
532
504
if ( args . length === 0 ) {
533
505
return this . addNode ( '' ) ;
534
506
} else if ( isLiteralArgument ( args ) ) {
@@ -549,7 +521,7 @@ class RegExpBuilder implements RegExpToken {
549
521
}
550
522
551
523
public get ref ( ) : RegExpToken [ 'ref' ] {
552
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ number ] ) : RegExpToken & CanBeQuantified {
524
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ number ] ) : RegExpToken {
553
525
if ( args . length === 1 && typeof args [ 0 ] === 'number' ) {
554
526
const index = args [ 0 ] ;
555
527
if ( index <= 0 ) throw new Error ( 'Invalid group index in ref' ) ;
@@ -567,7 +539,7 @@ class RegExpBuilder implements RegExpToken {
567
539
}
568
540
569
541
public get group ( ) : RegExpToken [ 'group' ] {
570
- function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ?] ) : RegExpToken & CanBeQuantified {
542
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ?] ) : RegExpToken {
571
543
if ( args . length === 0 ) {
572
544
return this . addNode ( '' ) ;
573
545
} else if ( isLiteralArgument ( args ) ) {
@@ -583,10 +555,7 @@ class RegExpBuilder implements RegExpToken {
583
555
}
584
556
585
557
public get ahead ( ) : RegExpToken [ 'ahead' ] {
586
- function func (
587
- this : RegExpBuilder ,
588
- ...args : RegExpLiteral | [ RegExpToken ?]
589
- ) : RegExpToken & CanBeQuantified & CanBeNegated {
558
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ?] ) : RegExpToken {
590
559
if ( args . length === 0 ) {
591
560
return this . addNode ( '' ) ;
592
561
} else if ( isLiteralArgument ( args ) ) {
@@ -602,10 +571,7 @@ class RegExpBuilder implements RegExpToken {
602
571
}
603
572
604
573
public get behind ( ) : RegExpToken [ 'behind' ] {
605
- function func (
606
- this : RegExpBuilder ,
607
- ...args : RegExpLiteral | [ RegExpToken ?]
608
- ) : RegExpToken & CanBeQuantified & CanBeNegated {
574
+ function func ( this : RegExpBuilder , ...args : RegExpLiteral | [ RegExpToken ?] ) : RegExpToken {
609
575
if ( args . length === 0 ) {
610
576
return this . addNode ( '' ) ;
611
577
} else if ( isLiteralArgument ( args ) ) {
@@ -632,7 +598,7 @@ class RegExpBuilder implements RegExpToken {
632
598
function func (
633
599
this : RegExpBuilder ,
634
600
...args : RegExpLiteral | ( string | RegExpToken ) [ ]
635
- ) : RegExpToken & CanBeQuantified & AlternationFunction {
601
+ ) : RegExpToken & AlternationFunction {
636
602
if ( ! ( this . modifiers [ 0 ] instanceof AlternationModifier ) )
637
603
throw new Error ( `Unexpected modifier, expected OneOfModifier, but got ${ this . modifiers [ 0 ] } ` ) ;
638
604
if ( isLiteralArgument ( args ) ) {
@@ -676,7 +642,7 @@ class RegExpBuilder implements RegExpToken {
676
642
*/
677
643
678
644
public get match ( ) : RegExpToken [ 'match' ] {
679
- function func ( this : RegExpBuilder , token : RegExpToken ) : RegExpToken & CanBeQuantified {
645
+ function func ( this : RegExpBuilder , token : RegExpToken ) : RegExpToken {
680
646
if ( ! RegExpBuilder . isRegExpBuilder ( token ) ) throw new Error ( 'Invalid arguments for match' ) ;
681
647
return this . addNode ( token ) ;
682
648
}
0 commit comments