@ptolemy2002/rgx 4.3.0 → 4.5.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
@@ -32,11 +32,12 @@ type ValidIdentifier = Branded<string, [ValidIdentifierBrandSymbol]>;
32
32
 
33
33
  type RGXTokenType = 'no-op' | 'literal' | 'native' | 'convertible' | 'class' | RGXTokenType[];
34
34
  type RGXTokenTypeFlat = Exclude<RGXTokenType, RGXTokenType[]> | "array";
35
- type RGXTokenTypeGuardInput = RGXTokenTypeFlat | null | RGXClassTokenConstructor | typeof ExtRegExp | RGXTokenTypeGuardInput[];
35
+ type RGXTokenTypeGuardInput = RGXTokenTypeFlat | null | RGXClassTokenConstructor | typeof ExtRegExp | typeof RGXTokenCollection | RGXTokenTypeGuardInput[];
36
36
  type RGXTokenFromType<T extends RGXTokenTypeGuardInput> =
37
37
  // Maps token type strings to their corresponding types, e.g.:
38
38
  // 'no-op' -> RGXNoOpToken, 'literal' -> RGXLiteralToken, etc.
39
- // Also maps RGXClassTokenConstructor to InstanceType<T> and typeof ExtRegExp to ExtRegExp.
39
+ // Also maps any constructor to InstanceType<T>,
40
+ // and preserves tuple types for constant arrays.
40
41
  // ... see source for full definition
41
42
  ;
42
43
 
@@ -904,6 +905,48 @@ Unregisters a previously registered custom flag transformer by its key. If the k
904
905
  #### Returns
905
906
  - `void`: This function does not return a value.
906
907
 
908
+ ### accentInsensitiveFlagTransformer
909
+ ```typescript
910
+ const accentInsensitiveFlagTransformer: RegExpFlagTransformer
911
+ ```
912
+
913
+ A pre-built `RegExpFlagTransformer` that makes a regex pattern accent-insensitive. It replaces any accentable characters (a, e, i, o, u and their uppercase equivalents) in the regex source with alternation groups that match both the base character and its accented variants. For example, `é` becomes `(e|é|è|ë|ê)`. The following accent mappings are supported:
914
+
915
+ - `a` / `A`: á, à, ä, â, ã / Á, À, Ä, Â, Ã
916
+ - `e` / `E`: é, è, ë, ê / É, È, Ë, Ê
917
+ - `i` / `I`: í, ì, ï, î / Í, Ì, Ï, Î
918
+ - `o` / `O`: ó, ò, ö, ô, õ / Ó, Ò, Ö, Ô, Õ
919
+ - `u` / `U`: ú, ù, ü, û / Ú, Ù, Ü, Û
920
+
921
+ #### Parameters
922
+ - `exp` (`RegExp`): The regular expression to transform.
923
+
924
+ #### Returns
925
+ - `RegExp`: A new `RegExp` with the same flags but with accentable characters in the source replaced by accent-insensitive alternation groups.
926
+
927
+ ### registerCustomFlagTransformers
928
+ ```typescript
929
+ function registerCustomFlagTransformers(): void
930
+ ```
931
+
932
+ Registers the library's built-in custom flag transformers. Currently registers the following:
933
+ - `"a"` flag: `accentInsensitiveFlagTransformer` — makes patterns accent-insensitive.
934
+
935
+ This function is called automatically when importing from the main module entry point, so you typically do not need to call it yourself. It only needs to be called manually if you import directly from sub-modules.
936
+
937
+ #### Returns
938
+ - `void`: This function does not return a value.
939
+
940
+ ### unregisterCustomFlagTransformers
941
+ ```typescript
942
+ function unregisterCustomFlagTransformers(): void
943
+ ```
944
+
945
+ Unregisters all built-in custom flag transformers that were registered by `registerCustomFlagTransformers`. Currently unregisters the `"a"` flag.
946
+
947
+ #### Returns
948
+ - `void`: This function does not return a value.
949
+
907
950
  ### applyFlagTransformers
908
951
  ```typescript
909
952
  function applyFlagTransformers(regex: RegExp, flags: string, alreadyAppliedFlags?: string): RegExp
@@ -0,0 +1,2 @@
1
+ import { RegExpFlagTransformer } from "../ExtRegExp";
2
+ export declare const accentInsensitiveFlagTransformer: RegExpFlagTransformer;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accentInsensitiveFlagTransformer = void 0;
4
+ const accentPatterns = [
5
+ "(a|á|à|ä|â|ã)", "(A|Á|À|Ä|Â|Ã)",
6
+ "(e|é|è|ë|ê)", "(E|É|È|Ë|Ê)",
7
+ "(i|í|ì|ï|î)", "(I|Í|Ì|Ï|Î)",
8
+ "(o|ó|ò|ö|ô|õ)", "(O|Ó|Ò|Ö|Ô|Õ)",
9
+ "(u|ú|ù|ü|û)", "(U|Ú|Ù|Ü|Û)"
10
+ ];
11
+ const accentInsensitiveFlagTransformer = function (exp) {
12
+ let source = exp.source;
13
+ const flags = exp.flags;
14
+ accentPatterns.forEach((pattern) => {
15
+ // Replace any of the characters in the pattern with the pattern itself
16
+ source = source.replaceAll(new RegExp(pattern, "g"), pattern);
17
+ });
18
+ return new RegExp(source, flags);
19
+ };
20
+ exports.accentInsensitiveFlagTransformer = accentInsensitiveFlagTransformer;
@@ -0,0 +1,2 @@
1
+ export * from "./accentInsensitive";
2
+ export * from "./register";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./accentInsensitive"), exports);
18
+ __exportStar(require("./register"), exports);
@@ -0,0 +1,2 @@
1
+ export declare function registerCustomFlagTransformers(): void;
2
+ export declare function unregisterCustomFlagTransformers(): void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerCustomFlagTransformers = registerCustomFlagTransformers;
4
+ exports.unregisterCustomFlagTransformers = unregisterCustomFlagTransformers;
5
+ const ExtRegExp_1 = require("../ExtRegExp");
6
+ const accentInsensitive_1 = require("./accentInsensitive");
7
+ function registerCustomFlagTransformers() {
8
+ (0, ExtRegExp_1.registerFlagTransformer)("a", accentInsensitive_1.accentInsensitiveFlagTransformer);
9
+ }
10
+ function unregisterCustomFlagTransformers() {
11
+ (0, ExtRegExp_1.unregisterFlagTransformer)("a");
12
+ }
package/dist/index.d.ts CHANGED
@@ -9,5 +9,6 @@ export * from "./resolve";
9
9
  export * from "./concat";
10
10
  export * from "./utils";
11
11
  export * from "./ExtRegExp";
12
+ export * from "./flag-transformer";
12
13
  export declare function rgxa(tokens: t.RGXToken[], flags?: string): ExtRegExp;
13
14
  export default function rgx(flags?: string): (strings: TemplateStringsArray, ...tokens: t.RGXToken[]) => ExtRegExp;
package/dist/index.js CHANGED
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.rgxa = rgxa;
18
18
  exports.default = rgx;
19
19
  const class_1 = require("./class");
20
+ const flag_transformer_1 = require("./flag-transformer");
20
21
  const concat_1 = require("./concat");
21
22
  const internal_1 = require("./internal");
22
23
  const ExtRegExp_1 = require("./ExtRegExp");
@@ -29,8 +30,11 @@ __exportStar(require("./resolve"), exports);
29
30
  __exportStar(require("./concat"), exports);
30
31
  __exportStar(require("./utils"), exports);
31
32
  __exportStar(require("./ExtRegExp"), exports);
33
+ __exportStar(require("./flag-transformer"), exports);
32
34
  // Call this for certain class methods to work correctly
33
35
  (0, class_1.rgxClassInit)();
36
+ // Call this for our custom flags to work correctly
37
+ (0, flag_transformer_1.registerCustomFlagTransformers)();
34
38
  function rgxa(tokens, flags = '') {
35
39
  (0, ExtRegExp_1.assertValidRegexFlags)(flags);
36
40
  const pattern = (0, concat_1.rgxConcat)(tokens);
package/dist/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Branded } from "@ptolemy2002/ts-brand-utils";
2
2
  import type { RGXClassToken } from "./class";
3
- import { ExtRegExp } from "./ExtRegExp";
3
+ import type { ExtRegExp } from "./ExtRegExp";
4
+ import type { RGXTokenCollection } from "./collection";
4
5
  export type RGXNoOpToken = null | undefined;
5
6
  export type RGXLiteralToken = RegExp;
6
7
  export type RGXNativeToken = string | number | boolean | RGXNoOpToken;
@@ -12,10 +13,10 @@ export type RGXToken = RGXNativeToken | RGXLiteralToken | RGXConvertibleToken |
12
13
  export type RGXClassTokenConstructor = new (...args: unknown[]) => RGXClassToken;
13
14
  export type RGXTokenType = 'no-op' | 'literal' | 'native' | 'convertible' | 'class' | RGXTokenType[];
14
15
  export type RGXTokenTypeFlat = Exclude<RGXTokenType, RGXTokenType[]> | "array";
15
- export type RGXTokenTypeGuardInput = RGXTokenTypeFlat | null | RGXClassTokenConstructor | typeof ExtRegExp | RGXTokenTypeGuardInput[];
16
- export type RGXTokenFromType<T extends RGXTokenTypeGuardInput> = T extends null ? RGXToken : T extends 'no-op' ? RGXNoOpToken : T extends 'literal' ? RGXLiteralToken : T extends 'native' ? RGXNativeToken : T extends 'convertible' ? RGXConvertibleToken : T extends 'class' ? RGXClassToken : T extends 'array' ? RGXToken[] : T extends RGXTokenTypeGuardInput[] ? {
16
+ export type RGXTokenTypeGuardInput = RGXTokenTypeFlat | null | RGXClassTokenConstructor | typeof ExtRegExp | typeof RGXTokenCollection | RGXTokenTypeGuardInput[];
17
+ export type RGXTokenFromType<T extends RGXTokenTypeGuardInput> = T extends null ? RGXToken : T extends 'no-op' ? RGXNoOpToken : T extends 'literal' ? RGXLiteralToken : T extends 'native' ? RGXNativeToken : T extends 'convertible' ? RGXConvertibleToken : T extends 'class' ? RGXClassToken : T extends 'array' ? RGXToken[] : T extends new (...args: unknown[]) => infer R ? R : T extends RGXTokenTypeGuardInput[] ? {
17
18
  [K in keyof T]: T[K] extends RGXTokenTypeGuardInput ? RGXTokenFromType<T[K]> : never;
18
- } : T extends RGXClassTokenConstructor ? InstanceType<T> : T extends typeof ExtRegExp ? ExtRegExp : never;
19
+ } : never;
19
20
  export type RangeObject = {
20
21
  min?: number | null;
21
22
  max?: number | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ptolemy2002/rgx",
3
- "version": "4.3.0",
3
+ "version": "4.5.0",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",