@ptolemy2002/rgx 12.2.0 → 12.4.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.
package/README.md CHANGED
@@ -38,12 +38,7 @@ Because there is so much to document, it has been broken up into multiple files.
38
38
  - [lookbehind](./docs/class/token/lookaround/lookbehind.md) - The `RGXLookbehindToken` class, which represents a lookbehind assertion in a regular expression.
39
39
 
40
40
  ## Peer Dependencies
41
- - `@ptolemy2002/immutability-utils` ^2.0.0
42
- - `@ptolemy2002/js-utils` ^3.2.2
43
- - `@ptolemy2002/ts-brand-utils` ^1.0.0
44
- - `@ptolemy2002/ts-utils` ^3.4.0
45
- - `is-callable` ^1.2.7
46
- - `lodash.clonedeep` ^4.5.0
41
+ N/A
47
42
 
48
43
  ## Commands
49
44
  The following commands exist in the project:
@@ -120,6 +120,11 @@ export declare const RGX_PREDEFINED_CONSTANTS: {
120
120
  readonly rgxGroupWrap: false;
121
121
  readonly toRgx: () => RegExp;
122
122
  };
123
+ readonly "escape-bound": {
124
+ readonly rgxGroupWrap: false;
125
+ readonly rgxIsRepeatable: false;
126
+ readonly toRgx: () => RegExp;
127
+ };
123
128
  readonly "non-escape-bound": {
124
129
  readonly rgxGroupWrap: false;
125
130
  readonly rgxIsRepeatable: false;
package/dist/constants.js CHANGED
@@ -144,12 +144,21 @@ exports.RGX_PREDEFINED_CONSTANTS = {
144
144
  toRgx() { return /[\b]/; }
145
145
  },
146
146
  // Complex Constructs
147
+ "escape-bound": {
148
+ rgxGroupWrap: false,
149
+ rgxIsRepeatable: false,
150
+ toRgx() {
151
+ // Put this before any pattern to ensure that the pattern is escaped, i.e., preceded by an odd number of backslashes.
152
+ return /(?<=(?<!\\)\\(?:\\\\)*)/;
153
+ }
154
+ },
147
155
  "non-escape-bound": {
148
156
  rgxGroupWrap: false,
149
157
  rgxIsRepeatable: false,
150
158
  toRgx() {
151
159
  // Put this before any pattern to ensure that the pattern is not escaped, i.e., not preceded by an odd number of backslashes.
152
- return /(?<=(?<!\\)(?:\\\\)*)(?=[^\\]|$)/;
160
+ // Essentially equivalent to escape-bound, but without the extra backslash between the negative lookbehind and the non-capturing group.
161
+ return /(?<=(?<!\\)(?:\\\\)*)/;
153
162
  }
154
163
  },
155
164
  };
@@ -0,0 +1,2 @@
1
+ import { RegExpFlagTransformer } from "../ExtRegExp";
2
+ export declare const endFlagTransformer: RegExpFlagTransformer;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.endFlagTransformer = void 0;
4
+ const endFlagTransformer = function (exp) {
5
+ // Putting it in a group so that a union of patterns will be wrapped correctly,
6
+ // e.g. "a|b" will become "(?:a|b)$" instead of "a|b$"
7
+ return ["(?:" + exp.source + ")$", exp.flags];
8
+ };
9
+ exports.endFlagTransformer = endFlagTransformer;
@@ -1,2 +1,5 @@
1
1
  export * from "./accentInsensitive";
2
2
  export * from "./register";
3
+ export * from "./whole";
4
+ export * from "./start";
5
+ export * from "./end";
@@ -16,3 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./accentInsensitive"), exports);
18
18
  __exportStar(require("./register"), exports);
19
+ __exportStar(require("./whole"), exports);
20
+ __exportStar(require("./start"), exports);
21
+ __exportStar(require("./end"), exports);
@@ -4,9 +4,18 @@ exports.registerCustomFlagTransformers = registerCustomFlagTransformers;
4
4
  exports.unregisterCustomFlagTransformers = unregisterCustomFlagTransformers;
5
5
  const ExtRegExp_1 = require("../ExtRegExp");
6
6
  const accentInsensitive_1 = require("./accentInsensitive");
7
+ const whole_1 = require("./whole");
8
+ const start_1 = require("./start");
9
+ const end_1 = require("./end");
7
10
  function registerCustomFlagTransformers() {
8
11
  (0, ExtRegExp_1.registerFlagTransformer)("a", accentInsensitive_1.accentInsensitiveFlagTransformer);
12
+ (0, ExtRegExp_1.registerFlagTransformer)("w", whole_1.wholeFlagTransformer);
13
+ (0, ExtRegExp_1.registerFlagTransformer)("b", start_1.beginningFlagTransformer);
14
+ (0, ExtRegExp_1.registerFlagTransformer)("e", end_1.endFlagTransformer);
9
15
  }
10
16
  function unregisterCustomFlagTransformers() {
11
17
  (0, ExtRegExp_1.unregisterFlagTransformer)("a");
18
+ (0, ExtRegExp_1.unregisterFlagTransformer)("w");
19
+ (0, ExtRegExp_1.unregisterFlagTransformer)("b");
20
+ (0, ExtRegExp_1.unregisterFlagTransformer)("e");
12
21
  }
@@ -0,0 +1,2 @@
1
+ import { RegExpFlagTransformer } from "../ExtRegExp";
2
+ export declare const beginningFlagTransformer: RegExpFlagTransformer;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.beginningFlagTransformer = void 0;
4
+ const beginningFlagTransformer = function (exp) {
5
+ // Putting it in a group so that a union of patterns will be wrapped correctly,
6
+ // e.g. "a|b" will become "^(?:a|b)" instead of "^a|b"
7
+ return ["^(?:" + exp.source + ")", exp.flags];
8
+ };
9
+ exports.beginningFlagTransformer = beginningFlagTransformer;
@@ -0,0 +1,2 @@
1
+ import { RegExpFlagTransformer } from "../ExtRegExp";
2
+ export declare const wholeFlagTransformer: RegExpFlagTransformer;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wholeFlagTransformer = void 0;
4
+ const wholeFlagTransformer = function (exp) {
5
+ // Putting it in a group so that a union of patterns will be wrapped correctly,
6
+ // e.g. "a|b" will become "^(?:a|b)$" instead of "^a|b$"
7
+ return ["^(?:" + exp.source + ")$", exp.flags];
8
+ };
9
+ exports.wholeFlagTransformer = wholeFlagTransformer;
@@ -43,6 +43,7 @@ export declare class RGXWalker<R, S = unknown> {
43
43
  stepToToken(predicate: (token: RGXTokenOrPart<R>) => boolean): this;
44
44
  stepToPart(predicate?: (part: RGXPart<R, S, unknown>) => boolean): this;
45
45
  walk(): R;
46
+ tryWalk(): boolean;
46
47
  clone(depth?: CloneDepth): RGXWalker<R, S>;
47
48
  }
48
49
  export declare function rgxWalker<R, S = unknown>(...args: ConstructorParameters<typeof RGXWalker<R, S>>): RGXWalker<R, S>;
@@ -25,6 +25,9 @@ function createBranchGroups(tokens) {
25
25
  return tokens;
26
26
  }
27
27
  }
28
+ function isMatchError(e) {
29
+ return e instanceof errors_1.RGXRegexNotMatchedAtPositionError || e instanceof errors_1.RGXPartValidationFailedError;
30
+ }
28
31
  class RGXWalker {
29
32
  get sourcePosition() {
30
33
  return this._sourcePosition;
@@ -235,6 +238,22 @@ class RGXWalker {
235
238
  this.stepToToken(() => false);
236
239
  return this.reduced;
237
240
  }
241
+ tryWalk() {
242
+ const prevSourcePosition = this.sourcePosition;
243
+ const prevTokenPosition = this.tokenPosition;
244
+ try {
245
+ this.walk();
246
+ return true;
247
+ }
248
+ catch (e) {
249
+ this.sourcePosition = prevSourcePosition;
250
+ this.tokenPosition = prevTokenPosition;
251
+ if (isMatchError(e)) {
252
+ return false;
253
+ }
254
+ throw e;
255
+ }
256
+ }
238
257
  // Clone method
239
258
  clone(depth = "max") {
240
259
  if (depth === 0)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ptolemy2002/rgx",
3
- "version": "12.2.0",
3
+ "version": "12.4.0",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,22 +28,16 @@
28
28
  "release-major": "bash ./scripts/release.sh major"
29
29
  },
30
30
  "devDependencies": {
31
- "@ptolemy2002/immutability-utils": "^2.0.0",
32
- "@ptolemy2002/js-utils": "^3.2.2",
33
- "@ptolemy2002/ts-brand-utils": "^1.0.0",
34
- "@ptolemy2002/ts-utils": "^3.5.1",
35
31
  "@types/is-callable": "^1.1.2",
36
32
  "@types/jest": "^29.5.0",
37
33
  "@types/lodash.clonedeep": "^4.5.9",
38
- "is-callable": "^1.2.7",
39
34
  "jest": "^29.5.0",
40
- "lodash.clonedeep": "^4.5.0",
41
35
  "ts-jest": "^29.1.0",
42
36
  "ts-patch": "^3.3.0",
43
37
  "tsconfig-paths": "^4.2.0",
44
38
  "typescript-transform-paths": "^3.5.3"
45
39
  },
46
- "peerDependencies": {
40
+ "dependencies": {
47
41
  "@ptolemy2002/immutability-utils": "^2.0.0",
48
42
  "@ptolemy2002/js-utils": "^3.2.2",
49
43
  "@ptolemy2002/ts-brand-utils": "^1.0.0",