@spudlabs/guardis 0.4.0 → 0.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
@@ -298,6 +298,17 @@ isStringArray.validate(["a", 123, "c"]);
298
298
  const isPeople = Is.Array.of(isPerson);
299
299
  isPeople.validate([{ name: "Alice", address: { city: 456, zip: 12345 } }]);
300
300
  // { issues: [{ message: "Expected string. Received: 456", path: [0, "address", "city"] }] }
301
+
302
+ // Tuple validation includes element indices in the path
303
+ const isPair = createTypeGuard("pair", (v, { tupleHas }) => {
304
+ if (!Is.Array(v) || v.length !== 2) return null;
305
+ if (!tupleHas(v, 0, Is.String)) return null;
306
+ if (!tupleHas(v, 1, Is.Number)) return null;
307
+ return v;
308
+ });
309
+
310
+ isPair.validate(["hi", "nope"]);
311
+ // { issues: [{ message: 'Expected number. Received: "nope"', path: [1] }] }
301
312
  ```
302
313
 
303
314
  **Collecting errors:**
@@ -483,7 +494,7 @@ const isExample = createTypeGuard((val, helpers) => {
483
494
  // Check that a property does NOT exist
484
495
  hasNot(obj, "deleted"); // ensures "deleted" property is absent
485
496
 
486
- // Check tuple element at specific index
497
+ // Check tuple element at specific index (includes index in validation path)
487
498
  tupleHas(tuple, 0, Is.String); // [string, ...unknown[]]
488
499
 
489
500
  // Check if value is in array (for union types)
@@ -1 +1 @@
1
- {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/src/guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/src/guard.ts"],"names":[],"mappings":"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"}
package/esm/src/guard.js CHANGED
@@ -15,7 +15,7 @@ function createHelpers(ctx) {
15
15
  has: (t, k, guard, errorMessage) => hasProperty(t, k, guard, ctx?.pushPath(k), ctx ? errorMessage : undefined),
16
16
  hasNot: (t, k, errorMessage) => doesNotHaveProperty(t, k, ctx?.pushPath(k), ctx ? errorMessage : undefined),
17
17
  hasOptional: (t, k, guard, errorMessage) => hasOptionalProperty(t, k, guard, ctx?.pushPath(k), ctx ? errorMessage : undefined),
18
- tupleHas,
18
+ tupleHas: (t, i, guard) => tupleHas(t, i, guard, ctx?.pushPath(i)),
19
19
  includes,
20
20
  keyOf: (k, t, errorMessage) => keyOf(k, t, ctx, ctx ? errorMessage : undefined),
21
21
  fail: (message) => {
@@ -161,17 +161,57 @@ const createStrictTypeGuard = (parser, name) => {
161
161
  * console.log(isStringOrNumber(false)); // false
162
162
  * ```
163
163
  */
164
- const createOrTypeGuard = (guard) => (guardTwo) => {
165
- // Create a union of the names of the two guards for better error messages, if available.
166
- const name = hasName(guard) && hasName(guardTwo)
167
- ? `${guard._.name} | ${guardTwo._.name}`
168
- : undefined;
164
+ const createOrTypeGuard = (guard) => (...others) => {
165
+ if (others.length === 0)
166
+ return guard;
167
+ const allGuards = [guard, ...others];
168
+ // Build a union name from all named guards
169
+ const names = [];
170
+ for (const g of allGuards) {
171
+ if (hasName(g))
172
+ names.push(g._.name);
173
+ }
174
+ const name = names.length === allGuards.length ? names.join(" | ") : undefined;
169
175
  const parser = (v) => {
170
- if (guard(v) || guardTwo(v))
171
- return v === null ? true : v;
176
+ for (const g of allGuards) {
177
+ if (g(v))
178
+ return v === null ? true : v;
179
+ }
172
180
  return null;
173
181
  };
174
- return name ? createTypeGuard(name, parser) : createTypeGuard(parser);
182
+ return (name ? createTypeGuard(name, parser) : createTypeGuard(parser));
183
+ };
184
+ /**
185
+ * Creates an optional variant of a type guard that accepts undefined.
186
+ * The returned guard is context-aware for path tracking in shapes.
187
+ *
188
+ * @template T - The type checked by the base type guard.
189
+ *
190
+ * @param guard - The base type guard predicate to wrap.
191
+ * @param parser - The parser function from the base type guard.
192
+ * @param context - The context-aware validation function from the base type guard.
193
+ * @returns A new type guard that checks if a value is of type `T | undefined`.
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * const optionalString = createOptionalTypeGuard(isString, stringParser, stringContext);
198
+ *
199
+ * console.log(optionalString("hello")); // true
200
+ * console.log(optionalString(undefined)); // true
201
+ * console.log(optionalString(42)); // false
202
+ * ```
203
+ */
204
+ const createOptionalTypeGuard = (guard, parser, context) => {
205
+ const optional = (value) => isUndefined(value) || guard(value);
206
+ const name = hasName(guard) ? `${guard._.name} | undefined` : undefined;
207
+ const optionalParser = (v, h) => isUndefined(v) ? v : parser(v, h);
208
+ const optionalContext = (value, ctx) => isUndefined(value) ? { value } : context(value, ctx ?? createContext());
209
+ optional._ = { name, parser: optionalParser, context: optionalContext };
210
+ optional.strict = createStrictTypeGuard(optionalParser, name);
211
+ optional.assert = optional.strict;
212
+ optional.validate = (value) => optionalContext(value, createContext());
213
+ optional.or = createOrTypeGuard(optional);
214
+ return optional;
175
215
  };
176
216
  /**
177
217
  * Creates a notEmpty variant of a type guard that rejects empty values
@@ -196,18 +236,7 @@ const createNotEmptyTypeGuard = (guard) => {
196
236
  notEmpty.strict = createStrictTypeGuard(notEmptyParser, name);
197
237
  notEmpty.assert = notEmpty.strict;
198
238
  notEmpty.validate = (value) => context(value, createContext());
199
- const notEmptyOptional = (value) => guard(value) ? notEmpty(value) : isUndefined(value);
200
- const optionalName = name ? `${name} | undefined` : undefined;
201
- const optionalParser = (v) => notEmptyOptional(v) ? v : null;
202
- notEmptyOptional.strict = createStrictTypeGuard(optionalParser, optionalName);
203
- notEmptyOptional.assert = notEmptyOptional.strict;
204
- notEmptyOptional.validate = (value) => {
205
- if (isUndefined(value))
206
- return { value: value };
207
- return context(value, createContext());
208
- };
209
- notEmptyOptional.or = createOrTypeGuard(notEmptyOptional);
210
- notEmpty.optional = notEmptyOptional;
239
+ notEmpty.optional = createOptionalTypeGuard(notEmpty, notEmptyParser, context);
211
240
  notEmpty.or = createOrTypeGuard(notEmpty);
212
241
  return notEmpty;
213
242
  };
@@ -227,21 +256,23 @@ export function createTypeGuard(...args) {
227
256
  * This is used by nested validations to propagate paths.
228
257
  */
229
258
  const context = (value, ctx) => {
230
- const issuesBefore = ctx?.issues.length ?? 0;
259
+ const issuesBefore = ctx?.issues.length;
231
260
  const helpers = createHelpers(ctx);
232
261
  const result = parser(value, helpers);
233
262
  // If parser returned null and no child issues were added, add this guard's error
234
- if (result === null && ctx?.issues.length === issuesBefore) {
263
+ if (result === null && ctx && ctx.issues.length === issuesBefore) {
235
264
  ctx.addIssue(formatErrorMessage(value, name));
236
265
  }
237
- // Return accumulated issues if any
238
- if (ctx && ctx.issues.length > 0) {
239
- return { issues: ctx.issues };
240
- }
241
- if (result !== null) {
266
+ // Check if THIS guard added any issues (not sibling issues from shared context)
267
+ const hasNewIssues = ctx !== undefined && ctx.issues.length > issuesBefore;
268
+ if (result !== null && !hasNewIssues) {
242
269
  // Special case: isNull parser returns `true` when value is null
243
270
  return { value: result === true && value === null ? value : result };
244
271
  }
272
+ // Return accumulated issues if this guard contributed any
273
+ if (hasNewIssues) {
274
+ return { issues: ctx.issues };
275
+ }
245
276
  return { issues: [{ message: formatErrorMessage(value, name) }] };
246
277
  };
247
278
  const callback = (value) => parser(value, defaultHelpers) !== null;
@@ -278,16 +309,7 @@ export function createTypeGuard(...args) {
278
309
  * @returns
279
310
  */
280
311
  callback.notEmpty = createNotEmptyTypeGuard(callback);
281
- /**
282
- * Returns true if the value is undefined or passes the parser.
283
- * @param {unknown} value
284
- * @returns
285
- */
286
- const optional = (value) => isUndefined(value) || callback(value);
287
- optional.strict = createStrictTypeGuard((v, h) => isUndefined(v) ? v : parser(v, h), name ? `${name} | undefined` : undefined);
288
- optional.assert = optional.strict;
289
- optional.validate = (value) => isUndefined(value) ? { value } : context(value, createContext());
290
- optional.or = createOrTypeGuard(optional);
312
+ const optional = createOptionalTypeGuard(callback, parser, context);
291
313
  optional.notEmpty = callback.notEmpty.optional;
292
314
  callback.optional = optional;
293
315
  /**
@@ -42,6 +42,10 @@ export type HelpersWithContext = Helpers & {
42
42
  export type Parser<T = unknown> = (val: unknown, helper: Helpers) => T | null;
43
43
  export type ExtendedParser<T1, T2 extends T1 = T1> = (val: T1, helper: Helpers) => T2 | null;
44
44
  export type Predicate<T> = (val: unknown) => val is T;
45
+ /** Extracts a union of guarded types from a tuple of predicates */
46
+ type PredicateUnion<Guards extends [Predicate<unknown>, ...Predicate<unknown>[]]> = {
47
+ [K in keyof Guards]: Guards[K] extends Predicate<infer U> ? U : never;
48
+ }[number];
45
49
  export type StrictTypeGuard<T> = (value: unknown, errorMsg?: string) => value is T;
46
50
  /**
47
51
  * Represents a type guard function with additional utility methods.
@@ -77,7 +81,7 @@ export interface TypeGuard<T1> extends StandardSchemaV1<T1> {
77
81
  * @param guard A type guard for T2
78
82
  * @returns A new type guard that checks if the value is of type T or T2
79
83
  */
80
- or: <T2>(guard: Predicate<T2>) => TypeGuard<T1 | T2>;
84
+ or: <Guards extends [Predicate<unknown>, ...Predicate<unknown>[]]>(...guards: Guards) => TypeGuard<T1 | PredicateUnion<Guards>>;
81
85
  /**
82
86
  * A strict type guard that throws an error if the value is not of type T.
83
87
  * @param value The value to check
@@ -179,7 +183,7 @@ export interface TypeGuard<T1> extends StandardSchemaV1<T1> {
179
183
  * @param guard A type guard for T2
180
184
  * @returns A new type guard that checks if the value is of type T1 | undefined | T2
181
185
  */
182
- or: <T2>(guard: Predicate<T2>) => TypeGuard<T1 | undefined | T2>;
186
+ or: <Guards extends [Predicate<unknown>, ...Predicate<unknown>[]]>(...guards: Guards) => TypeGuard<T1 | undefined | PredicateUnion<Guards>>;
183
187
  /**
184
188
  * A type guard that checks if the value is not empty and of type T | undefined.
185
189
  * An empty value is defined as null, an empty string, an empty array,
@@ -248,7 +252,7 @@ export interface TypeGuard<T1> extends StandardSchemaV1<T1> {
248
252
  * @param guard A type guard for T2
249
253
  * @returns A new type guard that checks if the value is of type T1 or T2
250
254
  */
251
- or: <T2>(guard: Predicate<T2>) => TypeGuard<T1 | T2>;
255
+ or: <Guards extends [Predicate<unknown>, ...Predicate<unknown>[]]>(...guards: Guards) => TypeGuard<T1 | PredicateUnion<Guards>>;
252
256
  /**
253
257
  * A type guard that checks if the value is not empty and of type T | undefined.
254
258
  * An empty value is defined as null, an empty string, an empty array,
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/src/types.ts"],"names":[],"mappings":"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"}
@@ -49,13 +49,30 @@ export declare function hasOptionalProperty<K extends PropertyKey, G = unknown>(
49
49
  [K2 in K]+?: G;
50
50
  };
51
51
  /**
52
- * Utility to verify if a value is included in a tuple.
53
- * @param {array} t The tuple to check for the presence of index i.
54
- * @param {unknown} i The index to check.
55
- * @param {Function} guard The type guard to validate t[i].
56
- * @returns {boolean}
52
+ * Validates that a tuple element at a given index satisfies a type guard.
53
+ * Narrows the tuple type to include the guarded type at the specified index.
54
+ *
55
+ * @typeParam T - The tuple type.
56
+ * @typeParam I - The numeric index type.
57
+ * @typeParam G - The type that the guard checks for.
58
+ *
59
+ * @param t - The tuple to validate.
60
+ * @param i - The index of the element to check.
61
+ * @param guard - The type guard to validate `t[i]` against.
62
+ * @param ctx - Optional validation context for path tracking.
63
+ * Note: ctx is expected to already include the index in its path when passed.
64
+ * @returns `true` if the element at index `i` satisfies the guard, `false` otherwise.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const tuple = [1, "test", true] as const;
69
+ *
70
+ * tupleHas(tuple, 0, isNumber); // true — narrows tuple[0] to number
71
+ * tupleHas(tuple, 1, isNumber); // false
72
+ * tupleHas(tuple, 5, isString); // false — index out of bounds
73
+ * ```
57
74
  */
58
- export declare function tupleHas<T extends readonly unknown[], I extends number, G = unknown>(t: T, i: I, guard: (v: unknown) => v is G): t is T & {
75
+ export declare function tupleHas<T extends readonly unknown[], I extends number, G = unknown>(t: T, i: I, guard: (v: unknown) => v is G, ctx?: Context): t is T & {
59
76
  [K in I]: G;
60
77
  };
61
78
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/src/utilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,GAAG,OAAO,EAC5D,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC9B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,GAAG,CAAC;CAAE,CAmCvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EACvD,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,GAAG,KAAK;CAAE,CAM3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,GAAG,OAAO,EACpE,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC9B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;CAAE,CAIzB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,OAAO,EAClF,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAC5B,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,GAAG,CAAC;CAAE,CAE1B;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAEvF;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,CAAC,EACJ,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI,MAAM,CAAC,CAYd;AAiCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EACtF,GAAG,QAAQ,CAAC,KACX,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAYlC,CAAC"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/src/utilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,GAAG,OAAO,EAC5D,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC9B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,GAAG,CAAC;CAAE,CAmCvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EACvD,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,GAAG,KAAK;CAAE,CAM3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,GAAG,OAAO,EACpE,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC9B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;CAAE,CAIzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,OAAO,EAClF,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC7B,GAAG,CAAC,EAAE,OAAO,GACZ,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,GAAG,CAAC;CAAE,CAmB1B;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAEvF;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,CAAC,EACJ,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI,MAAM,CAAC,CAYd;AAoCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EACtF,GAAG,QAAQ,CAAC,KACX,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAYlC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { isUndefined } from "./guard.js";
2
- import { hasContext } from "./introspect.js";
2
+ import { hasContext, hasName } from "./introspect.js";
3
3
  /**
4
4
  * Utility to verify if a property exists in an object. Checks that
5
5
  * k is a key in t. If a guard method is provided, it will also check
@@ -86,14 +86,46 @@ export function hasOptionalProperty(t, k, guard, ctx, errorMessage) {
86
86
  return hasProperty(t, k, guard, ctx, errorMessage);
87
87
  }
88
88
  /**
89
- * Utility to verify if a value is included in a tuple.
90
- * @param {array} t The tuple to check for the presence of index i.
91
- * @param {unknown} i The index to check.
92
- * @param {Function} guard The type guard to validate t[i].
93
- * @returns {boolean}
89
+ * Validates that a tuple element at a given index satisfies a type guard.
90
+ * Narrows the tuple type to include the guarded type at the specified index.
91
+ *
92
+ * @typeParam T - The tuple type.
93
+ * @typeParam I - The numeric index type.
94
+ * @typeParam G - The type that the guard checks for.
95
+ *
96
+ * @param t - The tuple to validate.
97
+ * @param i - The index of the element to check.
98
+ * @param guard - The type guard to validate `t[i]` against.
99
+ * @param ctx - Optional validation context for path tracking.
100
+ * Note: ctx is expected to already include the index in its path when passed.
101
+ * @returns `true` if the element at index `i` satisfies the guard, `false` otherwise.
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * const tuple = [1, "test", true] as const;
106
+ *
107
+ * tupleHas(tuple, 0, isNumber); // true — narrows tuple[0] to number
108
+ * tupleHas(tuple, 1, isNumber); // false
109
+ * tupleHas(tuple, 5, isString); // false — index out of bounds
110
+ * ```
94
111
  */
95
- export function tupleHas(t, i, guard) {
96
- return (i in t) && guard(t[i]);
112
+ export function tupleHas(t, i, guard, ctx) {
113
+ if (!(i in t))
114
+ return false;
115
+ // If context is provided, use context-aware validation if available on the guard
116
+ if (ctx && hasContext(guard)) {
117
+ guard._.context(t[i], ctx);
118
+ // Returns true despite potential failure to avoid short-circuiting && chains,
119
+ // enabling multi-element error collection. Safe because validate() checks ctx.issues.
120
+ return true;
121
+ }
122
+ if (guard(t[i]))
123
+ return true;
124
+ if (ctx) {
125
+ ctx.addIssue(formatErrorMessage(t[i], hasName(guard) ? guard._.name : undefined));
126
+ return true;
127
+ }
128
+ return false;
97
129
  }
98
130
  /**
99
131
  * Determines whether the specified value `i` is included in the array `t`.
package/package.json CHANGED
@@ -1,7 +1,26 @@
1
1
  {
2
2
  "name": "@spudlabs/guardis",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Guardis is a modular library of type guards, built to be easy to use and extend.",
5
+ "keywords": [
6
+ "typescript",
7
+ "type-guard",
8
+ "typeguard",
9
+ "runtime-validation",
10
+ "type-safety",
11
+ "validation",
12
+ "type-check",
13
+ "branded-types",
14
+ "standard-schema",
15
+ "runtime-type-check",
16
+ "parser",
17
+ "assertion",
18
+ "schema",
19
+ "zod",
20
+ "arktype",
21
+ "valibot",
22
+ "typebox"
23
+ ],
5
24
  "repository": {
6
25
  "type": "git",
7
26
  "url": "git+https://github.com/bsickler/guardis.git"
@@ -1 +1 @@
1
- {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/src/guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/src/guard.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ function createHelpers(ctx) {
20
20
  has: (t, k, guard, errorMessage) => (0, utilities_js_1.hasProperty)(t, k, guard, ctx?.pushPath(k), ctx ? errorMessage : undefined),
21
21
  hasNot: (t, k, errorMessage) => (0, utilities_js_1.doesNotHaveProperty)(t, k, ctx?.pushPath(k), ctx ? errorMessage : undefined),
22
22
  hasOptional: (t, k, guard, errorMessage) => (0, utilities_js_1.hasOptionalProperty)(t, k, guard, ctx?.pushPath(k), ctx ? errorMessage : undefined),
23
- tupleHas: utilities_js_1.tupleHas,
23
+ tupleHas: (t, i, guard) => (0, utilities_js_1.tupleHas)(t, i, guard, ctx?.pushPath(i)),
24
24
  includes: utilities_js_1.includes,
25
25
  keyOf: (k, t, errorMessage) => (0, utilities_js_1.keyOf)(k, t, ctx, ctx ? errorMessage : undefined),
26
26
  fail: (message) => {
@@ -166,17 +166,57 @@ const createStrictTypeGuard = (parser, name) => {
166
166
  * console.log(isStringOrNumber(false)); // false
167
167
  * ```
168
168
  */
169
- const createOrTypeGuard = (guard) => (guardTwo) => {
170
- // Create a union of the names of the two guards for better error messages, if available.
171
- const name = (0, introspect_js_1.hasName)(guard) && (0, introspect_js_1.hasName)(guardTwo)
172
- ? `${guard._.name} | ${guardTwo._.name}`
173
- : undefined;
169
+ const createOrTypeGuard = (guard) => (...others) => {
170
+ if (others.length === 0)
171
+ return guard;
172
+ const allGuards = [guard, ...others];
173
+ // Build a union name from all named guards
174
+ const names = [];
175
+ for (const g of allGuards) {
176
+ if ((0, introspect_js_1.hasName)(g))
177
+ names.push(g._.name);
178
+ }
179
+ const name = names.length === allGuards.length ? names.join(" | ") : undefined;
174
180
  const parser = (v) => {
175
- if (guard(v) || guardTwo(v))
176
- return v === null ? true : v;
181
+ for (const g of allGuards) {
182
+ if (g(v))
183
+ return v === null ? true : v;
184
+ }
177
185
  return null;
178
186
  };
179
- return name ? createTypeGuard(name, parser) : createTypeGuard(parser);
187
+ return (name ? createTypeGuard(name, parser) : createTypeGuard(parser));
188
+ };
189
+ /**
190
+ * Creates an optional variant of a type guard that accepts undefined.
191
+ * The returned guard is context-aware for path tracking in shapes.
192
+ *
193
+ * @template T - The type checked by the base type guard.
194
+ *
195
+ * @param guard - The base type guard predicate to wrap.
196
+ * @param parser - The parser function from the base type guard.
197
+ * @param context - The context-aware validation function from the base type guard.
198
+ * @returns A new type guard that checks if a value is of type `T | undefined`.
199
+ *
200
+ * @example
201
+ * ```typescript
202
+ * const optionalString = createOptionalTypeGuard(isString, stringParser, stringContext);
203
+ *
204
+ * console.log(optionalString("hello")); // true
205
+ * console.log(optionalString(undefined)); // true
206
+ * console.log(optionalString(42)); // false
207
+ * ```
208
+ */
209
+ const createOptionalTypeGuard = (guard, parser, context) => {
210
+ const optional = (value) => (0, exports.isUndefined)(value) || guard(value);
211
+ const name = (0, introspect_js_1.hasName)(guard) ? `${guard._.name} | undefined` : undefined;
212
+ const optionalParser = (v, h) => (0, exports.isUndefined)(v) ? v : parser(v, h);
213
+ const optionalContext = (value, ctx) => (0, exports.isUndefined)(value) ? { value } : context(value, ctx ?? (0, context_js_1.createContext)());
214
+ optional._ = { name, parser: optionalParser, context: optionalContext };
215
+ optional.strict = createStrictTypeGuard(optionalParser, name);
216
+ optional.assert = optional.strict;
217
+ optional.validate = (value) => optionalContext(value, (0, context_js_1.createContext)());
218
+ optional.or = createOrTypeGuard(optional);
219
+ return optional;
180
220
  };
181
221
  /**
182
222
  * Creates a notEmpty variant of a type guard that rejects empty values
@@ -201,18 +241,7 @@ const createNotEmptyTypeGuard = (guard) => {
201
241
  notEmpty.strict = createStrictTypeGuard(notEmptyParser, name);
202
242
  notEmpty.assert = notEmpty.strict;
203
243
  notEmpty.validate = (value) => context(value, (0, context_js_1.createContext)());
204
- const notEmptyOptional = (value) => guard(value) ? notEmpty(value) : (0, exports.isUndefined)(value);
205
- const optionalName = name ? `${name} | undefined` : undefined;
206
- const optionalParser = (v) => notEmptyOptional(v) ? v : null;
207
- notEmptyOptional.strict = createStrictTypeGuard(optionalParser, optionalName);
208
- notEmptyOptional.assert = notEmptyOptional.strict;
209
- notEmptyOptional.validate = (value) => {
210
- if ((0, exports.isUndefined)(value))
211
- return { value: value };
212
- return context(value, (0, context_js_1.createContext)());
213
- };
214
- notEmptyOptional.or = createOrTypeGuard(notEmptyOptional);
215
- notEmpty.optional = notEmptyOptional;
244
+ notEmpty.optional = createOptionalTypeGuard(notEmpty, notEmptyParser, context);
216
245
  notEmpty.or = createOrTypeGuard(notEmpty);
217
246
  return notEmpty;
218
247
  };
@@ -232,21 +261,23 @@ function createTypeGuard(...args) {
232
261
  * This is used by nested validations to propagate paths.
233
262
  */
234
263
  const context = (value, ctx) => {
235
- const issuesBefore = ctx?.issues.length ?? 0;
264
+ const issuesBefore = ctx?.issues.length;
236
265
  const helpers = createHelpers(ctx);
237
266
  const result = parser(value, helpers);
238
267
  // If parser returned null and no child issues were added, add this guard's error
239
- if (result === null && ctx?.issues.length === issuesBefore) {
268
+ if (result === null && ctx && ctx.issues.length === issuesBefore) {
240
269
  ctx.addIssue((0, utilities_js_1.formatErrorMessage)(value, name));
241
270
  }
242
- // Return accumulated issues if any
243
- if (ctx && ctx.issues.length > 0) {
244
- return { issues: ctx.issues };
245
- }
246
- if (result !== null) {
271
+ // Check if THIS guard added any issues (not sibling issues from shared context)
272
+ const hasNewIssues = ctx !== undefined && ctx.issues.length > issuesBefore;
273
+ if (result !== null && !hasNewIssues) {
247
274
  // Special case: isNull parser returns `true` when value is null
248
275
  return { value: result === true && value === null ? value : result };
249
276
  }
277
+ // Return accumulated issues if this guard contributed any
278
+ if (hasNewIssues) {
279
+ return { issues: ctx.issues };
280
+ }
250
281
  return { issues: [{ message: (0, utilities_js_1.formatErrorMessage)(value, name) }] };
251
282
  };
252
283
  const callback = (value) => parser(value, defaultHelpers) !== null;
@@ -283,16 +314,7 @@ function createTypeGuard(...args) {
283
314
  * @returns
284
315
  */
285
316
  callback.notEmpty = createNotEmptyTypeGuard(callback);
286
- /**
287
- * Returns true if the value is undefined or passes the parser.
288
- * @param {unknown} value
289
- * @returns
290
- */
291
- const optional = (value) => (0, exports.isUndefined)(value) || callback(value);
292
- optional.strict = createStrictTypeGuard((v, h) => (0, exports.isUndefined)(v) ? v : parser(v, h), name ? `${name} | undefined` : undefined);
293
- optional.assert = optional.strict;
294
- optional.validate = (value) => (0, exports.isUndefined)(value) ? { value } : context(value, (0, context_js_1.createContext)());
295
- optional.or = createOrTypeGuard(optional);
317
+ const optional = createOptionalTypeGuard(callback, parser, context);
296
318
  optional.notEmpty = callback.notEmpty.optional;
297
319
  callback.optional = optional;
298
320
  /**
@@ -42,6 +42,10 @@ export type HelpersWithContext = Helpers & {
42
42
  export type Parser<T = unknown> = (val: unknown, helper: Helpers) => T | null;
43
43
  export type ExtendedParser<T1, T2 extends T1 = T1> = (val: T1, helper: Helpers) => T2 | null;
44
44
  export type Predicate<T> = (val: unknown) => val is T;
45
+ /** Extracts a union of guarded types from a tuple of predicates */
46
+ type PredicateUnion<Guards extends [Predicate<unknown>, ...Predicate<unknown>[]]> = {
47
+ [K in keyof Guards]: Guards[K] extends Predicate<infer U> ? U : never;
48
+ }[number];
45
49
  export type StrictTypeGuard<T> = (value: unknown, errorMsg?: string) => value is T;
46
50
  /**
47
51
  * Represents a type guard function with additional utility methods.
@@ -77,7 +81,7 @@ export interface TypeGuard<T1> extends StandardSchemaV1<T1> {
77
81
  * @param guard A type guard for T2
78
82
  * @returns A new type guard that checks if the value is of type T or T2
79
83
  */
80
- or: <T2>(guard: Predicate<T2>) => TypeGuard<T1 | T2>;
84
+ or: <Guards extends [Predicate<unknown>, ...Predicate<unknown>[]]>(...guards: Guards) => TypeGuard<T1 | PredicateUnion<Guards>>;
81
85
  /**
82
86
  * A strict type guard that throws an error if the value is not of type T.
83
87
  * @param value The value to check
@@ -179,7 +183,7 @@ export interface TypeGuard<T1> extends StandardSchemaV1<T1> {
179
183
  * @param guard A type guard for T2
180
184
  * @returns A new type guard that checks if the value is of type T1 | undefined | T2
181
185
  */
182
- or: <T2>(guard: Predicate<T2>) => TypeGuard<T1 | undefined | T2>;
186
+ or: <Guards extends [Predicate<unknown>, ...Predicate<unknown>[]]>(...guards: Guards) => TypeGuard<T1 | undefined | PredicateUnion<Guards>>;
183
187
  /**
184
188
  * A type guard that checks if the value is not empty and of type T | undefined.
185
189
  * An empty value is defined as null, an empty string, an empty array,
@@ -248,7 +252,7 @@ export interface TypeGuard<T1> extends StandardSchemaV1<T1> {
248
252
  * @param guard A type guard for T2
249
253
  * @returns A new type guard that checks if the value is of type T1 or T2
250
254
  */
251
- or: <T2>(guard: Predicate<T2>) => TypeGuard<T1 | T2>;
255
+ or: <Guards extends [Predicate<unknown>, ...Predicate<unknown>[]]>(...guards: Guards) => TypeGuard<T1 | PredicateUnion<Guards>>;
252
256
  /**
253
257
  * A type guard that checks if the value is not empty and of type T | undefined.
254
258
  * An empty value is defined as null, an empty string, an empty array,
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/src/types.ts"],"names":[],"mappings":"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"}
@@ -49,13 +49,30 @@ export declare function hasOptionalProperty<K extends PropertyKey, G = unknown>(
49
49
  [K2 in K]+?: G;
50
50
  };
51
51
  /**
52
- * Utility to verify if a value is included in a tuple.
53
- * @param {array} t The tuple to check for the presence of index i.
54
- * @param {unknown} i The index to check.
55
- * @param {Function} guard The type guard to validate t[i].
56
- * @returns {boolean}
52
+ * Validates that a tuple element at a given index satisfies a type guard.
53
+ * Narrows the tuple type to include the guarded type at the specified index.
54
+ *
55
+ * @typeParam T - The tuple type.
56
+ * @typeParam I - The numeric index type.
57
+ * @typeParam G - The type that the guard checks for.
58
+ *
59
+ * @param t - The tuple to validate.
60
+ * @param i - The index of the element to check.
61
+ * @param guard - The type guard to validate `t[i]` against.
62
+ * @param ctx - Optional validation context for path tracking.
63
+ * Note: ctx is expected to already include the index in its path when passed.
64
+ * @returns `true` if the element at index `i` satisfies the guard, `false` otherwise.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const tuple = [1, "test", true] as const;
69
+ *
70
+ * tupleHas(tuple, 0, isNumber); // true — narrows tuple[0] to number
71
+ * tupleHas(tuple, 1, isNumber); // false
72
+ * tupleHas(tuple, 5, isString); // false — index out of bounds
73
+ * ```
57
74
  */
58
- export declare function tupleHas<T extends readonly unknown[], I extends number, G = unknown>(t: T, i: I, guard: (v: unknown) => v is G): t is T & {
75
+ export declare function tupleHas<T extends readonly unknown[], I extends number, G = unknown>(t: T, i: I, guard: (v: unknown) => v is G, ctx?: Context): t is T & {
59
76
  [K in I]: G;
60
77
  };
61
78
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/src/utilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,GAAG,OAAO,EAC5D,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC9B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,GAAG,CAAC;CAAE,CAmCvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EACvD,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,GAAG,KAAK;CAAE,CAM3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,GAAG,OAAO,EACpE,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC9B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;CAAE,CAIzB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,OAAO,EAClF,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAC5B,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,GAAG,CAAC;CAAE,CAE1B;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAEvF;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,CAAC,EACJ,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI,MAAM,CAAC,CAYd;AAiCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EACtF,GAAG,QAAQ,CAAC,KACX,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAYlC,CAAC"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/src/utilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,GAAG,OAAO,EAC5D,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC9B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,GAAG,CAAC;CAAE,CAmCvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EACvD,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,GAAG,KAAK;CAAE,CAM3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,GAAG,OAAO,EACpE,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,CAAC,EACJ,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC9B,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI;KAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;CAAE,CAIzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,OAAO,EAClF,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAC7B,GAAG,CAAC,EAAE,OAAO,GACZ,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,GAAG,CAAC;CAAE,CAmB1B;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAEvF;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,CAAC,EACJ,GAAG,CAAC,EAAE,OAAO,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,IAAI,MAAM,CAAC,CAYd;AAoCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EACtF,GAAG,QAAQ,CAAC,KACX,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAYlC,CAAC"}
@@ -96,14 +96,46 @@ function hasOptionalProperty(t, k, guard, ctx, errorMessage) {
96
96
  return hasProperty(t, k, guard, ctx, errorMessage);
97
97
  }
98
98
  /**
99
- * Utility to verify if a value is included in a tuple.
100
- * @param {array} t The tuple to check for the presence of index i.
101
- * @param {unknown} i The index to check.
102
- * @param {Function} guard The type guard to validate t[i].
103
- * @returns {boolean}
99
+ * Validates that a tuple element at a given index satisfies a type guard.
100
+ * Narrows the tuple type to include the guarded type at the specified index.
101
+ *
102
+ * @typeParam T - The tuple type.
103
+ * @typeParam I - The numeric index type.
104
+ * @typeParam G - The type that the guard checks for.
105
+ *
106
+ * @param t - The tuple to validate.
107
+ * @param i - The index of the element to check.
108
+ * @param guard - The type guard to validate `t[i]` against.
109
+ * @param ctx - Optional validation context for path tracking.
110
+ * Note: ctx is expected to already include the index in its path when passed.
111
+ * @returns `true` if the element at index `i` satisfies the guard, `false` otherwise.
112
+ *
113
+ * @example
114
+ * ```typescript
115
+ * const tuple = [1, "test", true] as const;
116
+ *
117
+ * tupleHas(tuple, 0, isNumber); // true — narrows tuple[0] to number
118
+ * tupleHas(tuple, 1, isNumber); // false
119
+ * tupleHas(tuple, 5, isString); // false — index out of bounds
120
+ * ```
104
121
  */
105
- function tupleHas(t, i, guard) {
106
- return (i in t) && guard(t[i]);
122
+ function tupleHas(t, i, guard, ctx) {
123
+ if (!(i in t))
124
+ return false;
125
+ // If context is provided, use context-aware validation if available on the guard
126
+ if (ctx && (0, introspect_js_1.hasContext)(guard)) {
127
+ guard._.context(t[i], ctx);
128
+ // Returns true despite potential failure to avoid short-circuiting && chains,
129
+ // enabling multi-element error collection. Safe because validate() checks ctx.issues.
130
+ return true;
131
+ }
132
+ if (guard(t[i]))
133
+ return true;
134
+ if (ctx) {
135
+ ctx.addIssue(formatErrorMessage(t[i], (0, introspect_js_1.hasName)(guard) ? guard._.name : undefined));
136
+ return true;
137
+ }
138
+ return false;
107
139
  }
108
140
  /**
109
141
  * Determines whether the specified value `i` is included in the array `t`.