@zokugun/regexp 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,231 @@
1
+ export declare enum TokenType {
2
+ ALTERNATE = "alternate",
3
+ ANY = "any",
4
+ BACK_REFERENCE = "back-reference",
5
+ BACKSPACE = "backspace",
6
+ BEGIN = "begin",
7
+ CAPTURE_GROUP = "capture-group",
8
+ CARRIAGE_RETURN = "carriage-return",
9
+ CHARSET = "charset",
10
+ CONTROL = "control",
11
+ DIGIT = "digit",
12
+ END = "end",
13
+ ESCAPE = "escape",
14
+ FORM_FEED = "form-feed",
15
+ HEX = "hex",
16
+ LINE_FEED = "line-feed",
17
+ LITERAL = "literal",
18
+ MATCH = "match",
19
+ MODIFIED_GROUP = "modified-group",
20
+ MODIFIER = "modifier",
21
+ NAMED_BACK_REFERENCE = "named-back-reference",
22
+ NAMED_GROUP = "named-group",
23
+ NEGATIVE_LOOKAHEAD = "negative-lookahead",
24
+ NEGATIVE_LOOKBEHIND = "negative-lookbehind",
25
+ NON_CAPTURE_GROUP = "non-capture-group",
26
+ NON_DIGIT = "non-digit",
27
+ NON_UNICODE_PROPERTY = "non-unicode-property",
28
+ NON_WHITE_SPACE = "non-white-space",
29
+ NON_WORD = "non-word",
30
+ NON_WORD_BOUNDARY = "non-word-boundary",
31
+ NUL = "nul",
32
+ OCTAL = "octal",
33
+ PATTERN = "pattern",
34
+ POSITIVE_LOOKAHEAD = "positive-lookahead",
35
+ POSITIVE_LOOKBEHIND = "positive-lookbehind",
36
+ QUANTIFIED = "quantified",
37
+ QUANTIFIER = "quantifier",
38
+ RANGE = "range",
39
+ TAB = "tab",
40
+ UNICODE = "unicode",
41
+ UNICODE_PROPERTY = "unicode-property",
42
+ UTF16 = "utf-16",
43
+ VERTICAL_TAB = "vertical-tab",
44
+ WHITE_SPACE = "white-space",
45
+ WORD = "word",
46
+ WORD_BOUNDARY = "word-boundary"
47
+ }
48
+ export declare enum Flavor {
49
+ ES2018 = "es2018"
50
+ }
51
+ export type Modifiers = {
52
+ positive: string[];
53
+ negative: string[];
54
+ };
55
+ export type BaseToken = {
56
+ type: TokenType;
57
+ body?: Token | Token[];
58
+ };
59
+ export type AlternateToken = BaseToken & {
60
+ type: TokenType.ALTERNATE;
61
+ body: Token[];
62
+ };
63
+ export type AnyToken = BaseToken & {
64
+ type: TokenType.ANY;
65
+ };
66
+ export type BackReferenceToken = BaseToken & {
67
+ type: TokenType.BACK_REFERENCE;
68
+ code: string;
69
+ };
70
+ export type BackspaceToken = BaseToken & {
71
+ type: TokenType.BACKSPACE;
72
+ };
73
+ export type BeginToken = BaseToken & {
74
+ type: TokenType.BEGIN;
75
+ };
76
+ export type CaptureGroupToken = BaseToken & {
77
+ type: TokenType.CAPTURE_GROUP;
78
+ body: Token;
79
+ };
80
+ export type CarriageReturnToken = BaseToken & {
81
+ type: TokenType.CARRIAGE_RETURN;
82
+ };
83
+ export type CharsetToken = BaseToken & {
84
+ type: TokenType.CHARSET;
85
+ body: Token[];
86
+ negated?: boolean;
87
+ };
88
+ export type ControlToken = BaseToken & {
89
+ type: TokenType.CONTROL;
90
+ code: string;
91
+ };
92
+ export type DigitToken = BaseToken & {
93
+ type: TokenType.DIGIT;
94
+ };
95
+ export type EndToken = BaseToken & {
96
+ type: TokenType.END;
97
+ };
98
+ export type EscapeToken = BaseToken & {
99
+ type: TokenType.ESCAPE;
100
+ code: string;
101
+ };
102
+ export type FormFeedToken = BaseToken & {
103
+ type: TokenType.FORM_FEED;
104
+ };
105
+ export type HexToken = BaseToken & {
106
+ type: TokenType.HEX;
107
+ code: string;
108
+ };
109
+ export type LineFeedToken = BaseToken & {
110
+ type: TokenType.LINE_FEED;
111
+ };
112
+ export type LiteralToken = BaseToken & {
113
+ type: TokenType.LITERAL;
114
+ text: string;
115
+ };
116
+ export type MatchToken = BaseToken & {
117
+ type: TokenType.MATCH;
118
+ body: Token[];
119
+ };
120
+ export type ModifiedGroupToken = BaseToken & {
121
+ type: TokenType.MODIFIED_GROUP;
122
+ modifiers: Modifiers;
123
+ body: Token;
124
+ };
125
+ export type ModifierToken = BaseToken & {
126
+ type: TokenType.MODIFIER;
127
+ positive: string[];
128
+ negative: string[];
129
+ };
130
+ export type NamedBackReferenceToken = BaseToken & {
131
+ type: TokenType.NAMED_BACK_REFERENCE;
132
+ name: string;
133
+ };
134
+ export type NamedGroupToken = BaseToken & {
135
+ type: TokenType.NAMED_GROUP;
136
+ name: string;
137
+ body: Token;
138
+ };
139
+ export type NegativeLookaheadToken = BaseToken & {
140
+ type: TokenType.NEGATIVE_LOOKAHEAD;
141
+ body: Token;
142
+ };
143
+ export type NegativeLookbehindToken = BaseToken & {
144
+ type: TokenType.NEGATIVE_LOOKBEHIND;
145
+ body: Token;
146
+ };
147
+ export type NonCaptureGroupToken = BaseToken & {
148
+ type: TokenType.NON_CAPTURE_GROUP;
149
+ body: Token;
150
+ };
151
+ export type NonDigitToken = BaseToken & {
152
+ type: TokenType.NON_DIGIT;
153
+ };
154
+ export type NonUnicodePropertyToken = BaseToken & {
155
+ type: TokenType.NON_UNICODE_PROPERTY;
156
+ property: string;
157
+ };
158
+ export type NonWhiteSpaceToken = BaseToken & {
159
+ type: TokenType.NON_WHITE_SPACE;
160
+ };
161
+ export type NonWordToken = BaseToken & {
162
+ type: TokenType.NON_WORD;
163
+ };
164
+ export type NonWordBoundaryToken = BaseToken & {
165
+ type: TokenType.NON_WORD_BOUNDARY;
166
+ };
167
+ export type NulToken = BaseToken & {
168
+ type: TokenType.NUL;
169
+ };
170
+ export type OctalToken = BaseToken & {
171
+ type: TokenType.OCTAL;
172
+ code: string;
173
+ };
174
+ export type PatternToken = BaseToken & {
175
+ type: TokenType.PATTERN;
176
+ body: Token;
177
+ modifiers?: Modifiers;
178
+ };
179
+ export type PositiveLookaheadToken = BaseToken & {
180
+ type: TokenType.POSITIVE_LOOKAHEAD;
181
+ body: Token;
182
+ };
183
+ export type PositiveLookbehindToken = BaseToken & {
184
+ type: TokenType.POSITIVE_LOOKBEHIND;
185
+ body: Token;
186
+ };
187
+ export type QuantifiedToken = BaseToken & {
188
+ type: TokenType.QUANTIFIED;
189
+ body: Token;
190
+ quantifier: QuantifierToken;
191
+ };
192
+ export type QuantifierToken = BaseToken & {
193
+ type: TokenType.QUANTIFIER;
194
+ min: number;
195
+ max: number;
196
+ };
197
+ export type RangeToken = BaseToken & {
198
+ type: TokenType.RANGE;
199
+ begin: Token;
200
+ end: Token;
201
+ };
202
+ export type TabToken = BaseToken & {
203
+ type: TokenType.TAB;
204
+ };
205
+ export type UnicodeToken = BaseToken & {
206
+ type: TokenType.UNICODE;
207
+ code: string;
208
+ };
209
+ export type UnicodePropertyToken = BaseToken & {
210
+ type: TokenType.UNICODE_PROPERTY;
211
+ property: string;
212
+ };
213
+ export type Utf16Token = BaseToken & {
214
+ type: TokenType.UTF16;
215
+ code: string;
216
+ };
217
+ export type VerticalTabToken = BaseToken & {
218
+ type: TokenType.VERTICAL_TAB;
219
+ };
220
+ export type WhiteSpaceToken = BaseToken & {
221
+ type: TokenType.WHITE_SPACE;
222
+ };
223
+ export type WordToken = BaseToken & {
224
+ type: TokenType.WORD;
225
+ };
226
+ export type WordBoundaryToken = BaseToken & {
227
+ type: TokenType.WORD_BOUNDARY;
228
+ };
229
+ export type Token = AlternateToken | AnyToken | BackReferenceToken | BackspaceToken | BeginToken | CaptureGroupToken | CarriageReturnToken | CharsetToken | ControlToken | DigitToken | EndToken | EscapeToken | FormFeedToken | HexToken | LineFeedToken | LiteralToken | MatchToken | ModifiedGroupToken | ModifierToken | NamedBackReferenceToken | NamedGroupToken | NegativeLookaheadToken | NegativeLookbehindToken | NonCaptureGroupToken | NonDigitToken | NonUnicodePropertyToken | NonWhiteSpaceToken | NonWordToken | NonWordBoundaryToken | NulToken | OctalToken | PatternToken | PositiveLookaheadToken | PositiveLookbehindToken | QuantifiedToken | QuantifierToken | RangeToken | TabToken | UnicodeToken | UnicodePropertyToken | Utf16Token | VerticalTabToken | WhiteSpaceToken | WordToken | WordBoundaryToken;
230
+ export type Visitor = (token: Token) => void;
231
+ export type Transformer = (token: Token, parent: Token | null, key: string | null, index: number | null) => void;
@@ -0,0 +1,52 @@
1
+ export var TokenType;
2
+ (function (TokenType) {
3
+ TokenType["ALTERNATE"] = "alternate";
4
+ TokenType["ANY"] = "any";
5
+ TokenType["BACK_REFERENCE"] = "back-reference";
6
+ TokenType["BACKSPACE"] = "backspace";
7
+ TokenType["BEGIN"] = "begin";
8
+ TokenType["CAPTURE_GROUP"] = "capture-group";
9
+ TokenType["CARRIAGE_RETURN"] = "carriage-return";
10
+ TokenType["CHARSET"] = "charset";
11
+ TokenType["CONTROL"] = "control";
12
+ TokenType["DIGIT"] = "digit";
13
+ TokenType["END"] = "end";
14
+ TokenType["ESCAPE"] = "escape";
15
+ TokenType["FORM_FEED"] = "form-feed";
16
+ TokenType["HEX"] = "hex";
17
+ TokenType["LINE_FEED"] = "line-feed";
18
+ TokenType["LITERAL"] = "literal";
19
+ TokenType["MATCH"] = "match";
20
+ TokenType["MODIFIED_GROUP"] = "modified-group";
21
+ TokenType["MODIFIER"] = "modifier";
22
+ TokenType["NAMED_BACK_REFERENCE"] = "named-back-reference";
23
+ TokenType["NAMED_GROUP"] = "named-group";
24
+ TokenType["NEGATIVE_LOOKAHEAD"] = "negative-lookahead";
25
+ TokenType["NEGATIVE_LOOKBEHIND"] = "negative-lookbehind";
26
+ TokenType["NON_CAPTURE_GROUP"] = "non-capture-group";
27
+ TokenType["NON_DIGIT"] = "non-digit";
28
+ TokenType["NON_UNICODE_PROPERTY"] = "non-unicode-property";
29
+ TokenType["NON_WHITE_SPACE"] = "non-white-space";
30
+ TokenType["NON_WORD"] = "non-word";
31
+ TokenType["NON_WORD_BOUNDARY"] = "non-word-boundary";
32
+ TokenType["NUL"] = "nul";
33
+ TokenType["OCTAL"] = "octal";
34
+ TokenType["PATTERN"] = "pattern";
35
+ TokenType["POSITIVE_LOOKAHEAD"] = "positive-lookahead";
36
+ TokenType["POSITIVE_LOOKBEHIND"] = "positive-lookbehind";
37
+ TokenType["QUANTIFIED"] = "quantified";
38
+ TokenType["QUANTIFIER"] = "quantifier";
39
+ TokenType["RANGE"] = "range";
40
+ TokenType["TAB"] = "tab";
41
+ TokenType["UNICODE"] = "unicode";
42
+ TokenType["UNICODE_PROPERTY"] = "unicode-property";
43
+ TokenType["UTF16"] = "utf-16";
44
+ TokenType["VERTICAL_TAB"] = "vertical-tab";
45
+ TokenType["WHITE_SPACE"] = "white-space";
46
+ TokenType["WORD"] = "word";
47
+ TokenType["WORD_BOUNDARY"] = "word-boundary";
48
+ })(TokenType || (TokenType = {}));
49
+ export var Flavor;
50
+ (function (Flavor) {
51
+ Flavor["ES2018"] = "es2018";
52
+ })(Flavor || (Flavor = {}));
@@ -0,0 +1,2 @@
1
+ import { type Token, type TokenType, type Visitor } from './types.mjs';
2
+ export declare function visit(tokens: Token | Token[] | undefined, callback?: Visitor | Partial<Record<TokenType, Visitor>>): void;
@@ -0,0 +1,32 @@
1
+ export function visit(tokens, callback) {
2
+ if (typeof callback === 'function') {
3
+ visitFunc(tokens, callback);
4
+ }
5
+ else if (callback) {
6
+ visitMap(tokens, callback);
7
+ }
8
+ }
9
+ function visitFunc(tokens, callback) {
10
+ if (Array.isArray(tokens)) {
11
+ for (const token of tokens) {
12
+ callback(token);
13
+ if ('body' in token && token.body) {
14
+ visitFunc(token.body, callback);
15
+ }
16
+ }
17
+ }
18
+ else if (tokens) {
19
+ callback(tokens);
20
+ if ('body' in tokens && tokens.body) {
21
+ visitFunc(tokens.body, callback);
22
+ }
23
+ }
24
+ }
25
+ function visitMap(tokens, callbackMap) {
26
+ visitFunc(tokens, (token) => {
27
+ const fn = callbackMap[token.type];
28
+ if (fn) {
29
+ fn(token);
30
+ }
31
+ });
32
+ }
package/package.json ADDED
@@ -0,0 +1,115 @@
1
+ {
2
+ "name": "@zokugun/regexp",
3
+ "description": "RegExp parser/formatter/visitor/transformer",
4
+ "version": "0.3.0",
5
+ "author": {
6
+ "name": "Baptiste Augrain",
7
+ "email": "daiyam@zokugun.org"
8
+ },
9
+ "license": "MIT",
10
+ "homepage": "https://github.com/zokugun/node-regexp",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/zokugun/node-regexp.git"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/zokugun/node-regexp/discussions/categories/issue-triage"
17
+ },
18
+ "type": "module",
19
+ "exports": {
20
+ ".": {
21
+ "import": "./lib/esm/index.mjs",
22
+ "require": "./lib/cjs/index.cjs"
23
+ }
24
+ },
25
+ "main": "lib/cjs/index.cjs",
26
+ "module": "lib/esm/index.mjs",
27
+ "typesVersions": {
28
+ "*": {
29
+ ".": [
30
+ "./lib/cjs/index.d.cts"
31
+ ]
32
+ }
33
+ },
34
+ "scripts": {
35
+ "audit:fix": "npm audit fix --min-release-age=0",
36
+ "build": "npm run clean && npm run build:lib",
37
+ "build:lib": "tsc-leda generate",
38
+ "build:package": "tsc-leda update-package && npm run lint:package",
39
+ "build:peg": "node scripts/compile.js",
40
+ "ci:lint": "zizmor .",
41
+ "ci:lint:fix": "zizmor . --fix=all",
42
+ "clean": "rimraf .src .test lib",
43
+ "compile:src": "tsc -p src",
44
+ "compile:test": "tsc -p test",
45
+ "lint": "xo",
46
+ "lint:all": "npm audit && npm run lint:package && npm run ci:lint && npm run lint",
47
+ "lint:fix": "xo --fix",
48
+ "lint:package": "fixpack || true",
49
+ "prepack": "npm run build",
50
+ "prepare": "husky; npm run lint:package",
51
+ "release": "release-it",
52
+ "test": "vitest run --reporter tree",
53
+ "test:coverage": "vitest run --reporter tree --coverage --coverage.reporter text",
54
+ "test:ui": "vitest --ui --coverage",
55
+ "test:watch": "vitest",
56
+ "update:artifacts": "artifact update",
57
+ "update:ci": "PINACT_MIN_AGE=7 pinact run --update",
58
+ "update:deps": "taze --all",
59
+ "watch:build": "tsc-watch -p src --onSuccess 'npm run build'",
60
+ "watch:src": "tsc-watch -p src",
61
+ "watch:test": "tsc-watch -p test"
62
+ },
63
+ "dependencies": {
64
+ "@zokugun/is-it-type": "^0.8.1"
65
+ },
66
+ "devDependencies": {
67
+ "@commitlint/cli": "20.5.3",
68
+ "@commitlint/config-conventional": "20.5.3",
69
+ "@types/node": "20.19.39",
70
+ "@vitest/coverage-v8": "4.1.5",
71
+ "@vitest/ui": "4.1.5",
72
+ "@zokugun/fs-extra-plus": "0.5.0",
73
+ "@zokugun/tsc-leda": "0.4.2",
74
+ "@zokugun/xtry": "0.11.6",
75
+ "fixpack": "4.0.0",
76
+ "husky": "9.1.7",
77
+ "lint-staged": "16.4.0",
78
+ "pegjs": "0.10.0",
79
+ "release-it": "20.0.1",
80
+ "rimraf": "6.1.3",
81
+ "taze": "19.14.1",
82
+ "tsc-watch": "7.2.0",
83
+ "typescript": "5.9.3",
84
+ "vitest": "4.1.5",
85
+ "xo": "0.60.0",
86
+ "yaml": "2.9.0"
87
+ },
88
+ "overrides": {
89
+ "ajv": {
90
+ "fast-uri": "3.1.2"
91
+ },
92
+ "@inquirer/core": {
93
+ "mute-stream": "3.0.0"
94
+ }
95
+ },
96
+ "keywords": [
97
+ "ast",
98
+ "es2018",
99
+ "formatter",
100
+ "parse",
101
+ "parser",
102
+ "pcre",
103
+ "pcre2",
104
+ "regex",
105
+ "regexp",
106
+ "regular expression",
107
+ "stringify",
108
+ "transform",
109
+ "transformer",
110
+ "translate",
111
+ "translator",
112
+ "visit",
113
+ "visitor"
114
+ ]
115
+ }