@ptolemy2002/rgx 2.6.0 → 2.7.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
@@ -23,7 +23,7 @@ type ValidVanillaRegexFlags = Branded<string, [ValidVanillaRegexFlagsBrandSymbol
23
23
 
24
24
  type RGXTokenType = 'no-op' | 'literal' | 'native' | 'convertible' | RGXTokenType[];
25
25
  type RGXTokenTypeFlat = Exclude<RGXTokenType, RGXTokenType[]> | "array";
26
- type RGXTokenTypeGuardInput = Exclude<RGXTokenType, RGXTokenType[]> | RGXTokenTypeFlat | null | RGXTokenTypeGuardInput[];
26
+ type RGXTokenTypeGuardInput = RGXTokenTypeFlat | null | RGXTokenTypeGuardInput[];
27
27
  type RGXTokenFromType<T extends RGXTokenTypeGuardInput> =
28
28
  // ... see source for full definition
29
29
  ;
@@ -279,6 +279,30 @@ Asserts that the given value is a convertible token (an object with a `toRgx` me
279
279
  #### Returns
280
280
  - `void`: This function does not return a value, but will throw an error if the assertion fails.
281
281
 
282
+ ### isRGXArrayToken
283
+ ```typescript
284
+ function isRGXArrayToken(value: unknown): value is RGXToken[]
285
+ ```
286
+ Checks if the given value is an array of RGX tokens. Validates that the value is an array and that every element is a valid RGX token (of any type, including nested arrays).
287
+
288
+ #### Parameters
289
+ - `value` (`unknown`): The value to check.
290
+
291
+ #### Returns
292
+ - `boolean`: `true` if the value is an array of RGX tokens, otherwise `false`.
293
+
294
+ ### assertRGXArrayToken
295
+ ```typescript
296
+ function assertRGXArrayToken(value: unknown): asserts value is RGXToken[]
297
+ ```
298
+ Asserts that the given value is an array of RGX tokens. Validates that the value is an array and that every element is a valid RGX token (of any type, including nested arrays). If the assertion fails, an `RGXInvalidTokenError` will be thrown.
299
+
300
+ #### Parameters
301
+ - `value` (`unknown`): The value to assert.
302
+
303
+ #### Returns
304
+ - `void`: This function does not return a value, but will throw an error if the assertion fails.
305
+
282
306
  ### rgxTokenType
283
307
  ```typescript
284
308
  function rgxTokenType(value: RGXToken): RGXTokenType
@@ -329,7 +353,7 @@ if (type === 'array') {
329
353
 
330
354
  ### rgxTokenFromType
331
355
  ```typescript
332
- function rgxTokenFromType<T extends RGXTokenType | RGXTokenTypeFlat>(type: T, value: RGXToken): RGXTokenFromType<T>
356
+ function rgxTokenFromType<T extends RGXTokenTypeGuardInput>(type: T, value: RGXToken): RGXTokenFromType<T>
333
357
  ```
334
358
 
335
359
  Does nothing at runtime, but performs a type assertion to the correct subset of `RGXToken` based on the provided `RGXTokenType`.
package/dist/index.js CHANGED
@@ -41,6 +41,7 @@ exports.default = rgx;
41
41
  const tg = __importStar(require("./typeGuards"));
42
42
  const class_1 = require("./class");
43
43
  const concat_1 = require("./concat");
44
+ const internal_1 = require("./internal");
44
45
  __exportStar(require("./errors"), exports);
45
46
  __exportStar(require("./types"), exports);
46
47
  __exportStar(require("./typeGuards"), exports);
@@ -50,16 +51,6 @@ __exportStar(require("./resolve"), exports);
50
51
  __exportStar(require("./concat"), exports);
51
52
  // Call this for certain class methods to work correctly
52
53
  (0, class_1.rgxClassInit)();
53
- function taggedTemplateToTokenArray(strings, tokens) {
54
- const tokenArray = [];
55
- for (let i = 0; i < strings.length; i++) {
56
- if (strings[i])
57
- tokenArray.push(strings[i]);
58
- if (i < tokens.length)
59
- tokenArray.push(tokens[i]);
60
- }
61
- return tokenArray;
62
- }
63
54
  function rgxa(tokens, flags = '') {
64
55
  tg.assertValidVanillaRegexFlags(flags);
65
56
  const pattern = (0, concat_1.rgxConcat)(tokens);
@@ -68,6 +59,6 @@ function rgxa(tokens, flags = '') {
68
59
  function rgx(flags = '') {
69
60
  tg.assertValidVanillaRegexFlags(flags);
70
61
  return (strings, ...tokens) => {
71
- return rgxa(taggedTemplateToTokenArray(strings, tokens), flags);
62
+ return rgxa((0, internal_1.taggedTemplateToArray)(strings, tokens), flags);
72
63
  };
73
64
  }
@@ -1 +1,2 @@
1
1
  export * from "./createConstructFunction";
2
+ export * from "./taggedTemplateToArray";
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./createConstructFunction"), exports);
18
+ __exportStar(require("./taggedTemplateToArray"), exports);
@@ -0,0 +1 @@
1
+ export declare function taggedTemplateToArray<T>(strings: TemplateStringsArray, tokens: T[]): (string | T)[];
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.taggedTemplateToArray = taggedTemplateToArray;
4
+ function taggedTemplateToArray(strings, tokens) {
5
+ function isNullOrUndefined(value) {
6
+ return value === null || value === undefined;
7
+ }
8
+ const array = [];
9
+ for (let i = 0; i < Math.max(strings.length, tokens.length); i++) {
10
+ const string = strings[i];
11
+ const token = tokens[i];
12
+ // Strings always come before tokens
13
+ if (!isNullOrUndefined(string))
14
+ array.push(string);
15
+ if (!isNullOrUndefined(token))
16
+ array.push(token);
17
+ }
18
+ return array;
19
+ }
@@ -7,9 +7,11 @@ export declare function isRGXNativeToken(value: unknown): value is t.RGXNativeTo
7
7
  export declare function assertRGXNativeToken(value: unknown): asserts value is t.RGXNativeToken;
8
8
  export declare function isRGXConvertibleToken(value: unknown): value is t.RGXConvertibleToken;
9
9
  export declare function assertRGXConvertibleToken(value: unknown): asserts value is t.RGXConvertibleToken;
10
+ export declare function isRGXArrayToken(value: unknown): value is t.RGXToken[];
11
+ export declare function assertRGXArrayToken(value: unknown): asserts value is t.RGXToken[];
10
12
  export declare function rgxTokenTypeFlat(value: t.RGXToken): t.RGXTokenTypeFlat;
11
13
  export declare function rgxTokenType(value: t.RGXToken): t.RGXTokenType;
12
- export declare function rgxTokenFromType<T extends t.RGXTokenType | t.RGXTokenTypeFlat>(type: T, value: t.RGXToken): t.RGXTokenFromType<T>;
14
+ export declare function rgxTokenFromType<T extends t.RGXTokenTypeGuardInput>(type: T, value: t.RGXToken): t.RGXTokenFromType<T>;
13
15
  export declare function rgxTokenTypeToFlat(type: t.RGXTokenType): t.RGXTokenTypeFlat;
14
16
  export declare function rgxTokenTypeGuardInputToFlat(type: t.RGXTokenTypeGuardInput): t.RGXTokenTypeFlat | null;
15
17
  export declare function isRGXToken<T extends t.RGXTokenTypeGuardInput = null>(value: unknown, type?: T, matchLength?: boolean): value is t.RGXTokenFromType<T>;
@@ -44,6 +44,8 @@ exports.isRGXNativeToken = isRGXNativeToken;
44
44
  exports.assertRGXNativeToken = assertRGXNativeToken;
45
45
  exports.isRGXConvertibleToken = isRGXConvertibleToken;
46
46
  exports.assertRGXConvertibleToken = assertRGXConvertibleToken;
47
+ exports.isRGXArrayToken = isRGXArrayToken;
48
+ exports.assertRGXArrayToken = assertRGXArrayToken;
47
49
  exports.rgxTokenTypeFlat = rgxTokenTypeFlat;
48
50
  exports.rgxTokenType = rgxTokenType;
49
51
  exports.rgxTokenFromType = rgxTokenFromType;
@@ -99,6 +101,16 @@ function assertRGXConvertibleToken(value) {
99
101
  throw new e.RGXInvalidTokenError(`Invalid convertible token`, { type: "tokenType", values: ['convertible'] }, value);
100
102
  }
101
103
  }
104
+ function isRGXArrayToken(value) {
105
+ return Array.isArray(value) && value.every(item => isRGXNoOpToken(item) || isRGXLiteralToken(item) ||
106
+ isRGXNativeToken(item) ||
107
+ isRGXConvertibleToken(item) || isRGXArrayToken(item));
108
+ }
109
+ function assertRGXArrayToken(value) {
110
+ if (!isRGXArrayToken(value)) {
111
+ throw new e.RGXInvalidTokenError("Invalid array token", { type: "tokenType", values: ['array'] }, value);
112
+ }
113
+ }
102
114
  function rgxTokenTypeFlat(value) {
103
115
  if (isRGXNoOpToken(value))
104
116
  return 'no-op';
@@ -151,10 +163,8 @@ function isRGXToken(value, type = null, matchLength = true) {
151
163
  return true;
152
164
  if (typeMatches('convertible') && isRGXConvertibleToken(value))
153
165
  return true;
154
- if (typeMatches('array') && Array.isArray(value)) {
155
- // @ts-ignore Excessively deep type is not a problem here.
156
- return value.every(item => isRGXToken(item, null));
157
- }
166
+ if (typeMatches('array') && isRGXArrayToken(value))
167
+ return true;
158
168
  if (Array.isArray(type) && Array.isArray(value) && (!matchLength || type.length === value.length)) {
159
169
  // This will always be false.
160
170
  if (value.length < type.length)
package/dist/types.d.ts CHANGED
@@ -10,7 +10,7 @@ export type RGXConvertibleToken = {
10
10
  export type RGXToken = RGXNativeToken | RGXLiteralToken | RGXConvertibleToken | RGXToken[];
11
11
  export type RGXTokenType = 'no-op' | 'literal' | 'native' | 'convertible' | RGXTokenType[];
12
12
  export type RGXTokenTypeFlat = Exclude<RGXTokenType, RGXTokenType[]> | "array";
13
- export type RGXTokenTypeGuardInput = Exclude<RGXTokenType, RGXTokenType[]> | RGXTokenTypeFlat | null | RGXTokenTypeGuardInput[];
13
+ export type RGXTokenTypeGuardInput = RGXTokenTypeFlat | null | RGXTokenTypeGuardInput[];
14
14
  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 'array' ? RGXToken[] : T extends RGXTokenTypeGuardInput[] ? {
15
15
  [K in keyof T]: T[K] extends RGXTokenTypeGuardInput ? RGXTokenFromType<T[K]> : never;
16
16
  } : never;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ptolemy2002/rgx",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",