Skip to content

Commit 6622bed

Browse files
committed
adds type error message for invalid flags
1 parent f4977fd commit 6622bed

File tree

2 files changed

+8
-15
lines changed

2 files changed

+8
-15
lines changed

src/index.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@
33
// TODO: Create some parse errors in invalid cases
44
// TODO: Parse normal captures in a typed tuple?
55

6+
type ReError<T extends string> = { type: T };
7+
68
type Flag = 'd' | 'g' | 'i' | 'm' | 's' | 'u' | 'y';
79

810
type FlagChecker<Fl extends string> =
911
Fl extends '' ? string
1012
: Fl extends `${Flag}${infer rest}` ? FlagChecker<rest>
11-
: never;
13+
: ReError<`Invalid flag used: ${Fl}`>;
1214

13-
export type RegExCaptureResult<RegexStr extends string> =
14-
RegexStr extends `(?<${infer key}>${infer rest}`
15+
export type RegExCaptureResult<Re extends string> =
16+
Re extends `(?<${infer key}>${infer rest}`
1517
? rest extends `${infer _})${infer rest}`
1618
? rest extends `?${infer rest}` | `*${infer rest}`
1719
? { [k in key]?: string } & RegExCaptureResult<rest>
1820
: { [k in key]: string } & RegExCaptureResult<rest>
19-
: { [k in key]: string } & RegExCaptureResult<rest> // This should be an error
20-
: RegexStr extends `${infer _}(?${infer rest}`
21-
? rest extends string
22-
? RegExCaptureResult<`(?${rest}`>
23-
: never
21+
: never
22+
: Re extends `${infer _}(?${infer rest}`
23+
? RegExCaptureResult<`(?${rest}`>
2424
: {};
2525

2626
export type RegExExecResult<Re extends string> = {

tests/regex.test.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,6 @@ describe('TypedRegEx', () => {
2727
expect(result).not.toBeNull();
2828
expect(result?.name).toBe('r');
2929
});
30-
31-
xit('should extract 0 or more (*) applied on capture groups', () => {
32-
const r = TypedRegEx('^foo(?<name>\\w)(?<num>.*', 'gi');
33-
const result = r.captures('foobar');
34-
expect(result).not.toBeNull();
35-
expect(result?.name).toBe('r');
36-
});
3730
});
3831

3932
describe('#test', () => {

0 commit comments

Comments
 (0)