Skip to content

Commit ddc59bb

Browse files
committed
refactor: qualifiers
1 parent 7c1c039 commit ddc59bb

File tree

2 files changed

+13
-56
lines changed

2 files changed

+13
-56
lines changed

src/constructs/quantifiers.ts

Lines changed: 7 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,28 @@
11
import { encodeAtom } from '../encoder/encoder';
22
import type { EncodeResult } from '../encoder/types';
3-
import { ensureArray } from '../utils/elements';
4-
import type { RegexConstruct, RegexElement, RegexSequence } from '../types';
3+
import type { RegexSequence } from '../types';
54

65
export interface QuantifierOptions {
76
greedy?: boolean;
87
}
9-
export interface ZeroOrMore extends RegexConstruct {
10-
type: 'zeroOrMore';
11-
children: RegexElement[];
12-
options?: QuantifierOptions;
13-
}
14-
15-
export interface OneOrMore extends RegexConstruct {
16-
type: 'oneOrMore';
17-
children: RegexElement[];
18-
options?: QuantifierOptions;
19-
}
20-
21-
export interface Optional extends RegexConstruct {
22-
type: 'optional';
23-
children: RegexElement[];
24-
options?: QuantifierOptions;
25-
}
26-
27-
export function zeroOrMore(sequence: RegexSequence, options?: QuantifierOptions): ZeroOrMore {
28-
return {
29-
type: 'zeroOrMore',
30-
children: ensureArray(sequence),
31-
options,
32-
encode: encodeZeroOrMore,
33-
};
34-
}
35-
36-
export function oneOrMore(sequence: RegexSequence, options?: QuantifierOptions): OneOrMore {
37-
return {
38-
type: 'oneOrMore',
39-
children: ensureArray(sequence),
40-
options,
41-
encode: encodeOneOrMore,
42-
};
43-
}
44-
45-
export function optional(sequence: RegexSequence, options?: QuantifierOptions): Optional {
46-
return {
47-
type: 'optional',
48-
children: ensureArray(sequence),
49-
options,
50-
encode: encodeOptional,
51-
};
52-
}
538

54-
function encodeZeroOrMore(this: ZeroOrMore): EncodeResult {
9+
export function zeroOrMore(sequence: RegexSequence, options?: QuantifierOptions): EncodeResult {
5510
return {
5611
precedence: 'sequence',
57-
pattern: `${encodeAtom(this.children).pattern}*${this.options?.greedy === false ? '?' : ''}`,
12+
pattern: `${encodeAtom(sequence).pattern}*${options?.greedy === false ? '?' : ''}`,
5813
};
5914
}
6015

61-
function encodeOneOrMore(this: OneOrMore): EncodeResult {
16+
export function oneOrMore(sequence: RegexSequence, options?: QuantifierOptions): EncodeResult {
6217
return {
6318
precedence: 'sequence',
64-
pattern: `${encodeAtom(this.children).pattern}+${this.options?.greedy === false ? '?' : ''}`,
19+
pattern: `${encodeAtom(sequence).pattern}+${options?.greedy === false ? '?' : ''}`,
6520
};
6621
}
6722

68-
function encodeOptional(this: Optional): EncodeResult {
23+
export function optional(sequence: RegexSequence, options?: QuantifierOptions): EncodeResult {
6924
return {
7025
precedence: 'sequence',
71-
pattern: `${encodeAtom(this.children).pattern}?${this.options?.greedy === false ? '?' : ''}`,
26+
pattern: `${encodeAtom(sequence).pattern}?${options?.greedy === false ? '?' : ''}`,
7227
};
7328
}

src/encoder/encoder.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
import type { RegexElement } from '../types';
1+
import type { RegexElement, RegexSequence } from '../types';
2+
import { ensureArray } from '../utils/elements';
23
import { escapeText } from '../utils/text';
34
import type { EncodeResult } from './types';
45

5-
export function encodeSequence(elements: RegexElement[]): EncodeResult {
6+
export function encodeSequence(sequence: RegexSequence): EncodeResult {
7+
const elements = ensureArray(sequence);
68
const encodedNodes = elements.map((n) => encodeNode(n));
79
return concatSequence(encodedNodes);
810
}
911

10-
export function encodeAtom(elements: RegexElement[]): EncodeResult {
11-
return wrapAtom(encodeSequence(elements));
12+
export function encodeAtom(sequence: RegexSequence): EncodeResult {
13+
return wrapAtom(encodeSequence(sequence));
1214
}
1315

1416
function encodeNode(element: RegexElement): EncodeResult {

0 commit comments

Comments
 (0)