@spudlabs/guardis 0.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.
Files changed (106) hide show
  1. package/README.md +901 -0
  2. package/esm/mod.d.ts +55 -0
  3. package/esm/mod.d.ts.map +1 -0
  4. package/esm/mod.js +43 -0
  5. package/esm/package.json +3 -0
  6. package/esm/specs/standard-schema-spec.v1.d.ts +56 -0
  7. package/esm/specs/standard-schema-spec.v1.d.ts.map +1 -0
  8. package/esm/specs/standard-schema-spec.v1.js +1 -0
  9. package/esm/src/batch.d.ts +23 -0
  10. package/esm/src/batch.d.ts.map +1 -0
  11. package/esm/src/batch.js +23 -0
  12. package/esm/src/brand.d.ts +62 -0
  13. package/esm/src/brand.d.ts.map +1 -0
  14. package/esm/src/brand.js +9 -0
  15. package/esm/src/context.d.ts +19 -0
  16. package/esm/src/context.d.ts.map +1 -0
  17. package/esm/src/context.js +41 -0
  18. package/esm/src/extend.d.ts +23 -0
  19. package/esm/src/extend.d.ts.map +1 -0
  20. package/esm/src/extend.js +9 -0
  21. package/esm/src/guard.d.ts +288 -0
  22. package/esm/src/guard.d.ts.map +1 -0
  23. package/esm/src/guard.js +631 -0
  24. package/esm/src/helpers/http.helpers.d.ts +3 -0
  25. package/esm/src/helpers/http.helpers.d.ts.map +1 -0
  26. package/esm/src/helpers/http.helpers.js +2 -0
  27. package/esm/src/helpers/strings.helpers.d.ts +18 -0
  28. package/esm/src/helpers/strings.helpers.d.ts.map +1 -0
  29. package/esm/src/helpers/strings.helpers.js +47 -0
  30. package/esm/src/introspect.d.ts +36 -0
  31. package/esm/src/introspect.d.ts.map +1 -0
  32. package/esm/src/introspect.js +25 -0
  33. package/esm/src/modules/async.d.ts +27 -0
  34. package/esm/src/modules/async.d.ts.map +1 -0
  35. package/esm/src/modules/async.js +38 -0
  36. package/esm/src/modules/http.branded.d.ts +42 -0
  37. package/esm/src/modules/http.branded.d.ts.map +1 -0
  38. package/esm/src/modules/http.branded.js +24 -0
  39. package/esm/src/modules/http.d.ts +46 -0
  40. package/esm/src/modules/http.d.ts.map +1 -0
  41. package/esm/src/modules/http.js +59 -0
  42. package/esm/src/modules/strings.branded.d.ts +185 -0
  43. package/esm/src/modules/strings.branded.d.ts.map +1 -0
  44. package/esm/src/modules/strings.branded.js +123 -0
  45. package/esm/src/modules/strings.d.ts +109 -0
  46. package/esm/src/modules/strings.d.ts.map +1 -0
  47. package/esm/src/modules/strings.js +147 -0
  48. package/esm/src/types.d.ts +318 -0
  49. package/esm/src/types.d.ts.map +1 -0
  50. package/esm/src/types.js +1 -0
  51. package/esm/src/utilities.d.ts +95 -0
  52. package/esm/src/utilities.d.ts.map +1 -0
  53. package/esm/src/utilities.js +196 -0
  54. package/package.json +40 -0
  55. package/script/mod.d.ts +55 -0
  56. package/script/mod.d.ts.map +1 -0
  57. package/script/mod.js +83 -0
  58. package/script/package.json +3 -0
  59. package/script/specs/standard-schema-spec.v1.d.ts +56 -0
  60. package/script/specs/standard-schema-spec.v1.d.ts.map +1 -0
  61. package/script/specs/standard-schema-spec.v1.js +2 -0
  62. package/script/src/batch.d.ts +23 -0
  63. package/script/src/batch.d.ts.map +1 -0
  64. package/script/src/batch.js +26 -0
  65. package/script/src/brand.d.ts +62 -0
  66. package/script/src/brand.d.ts.map +1 -0
  67. package/script/src/brand.js +12 -0
  68. package/script/src/context.d.ts +19 -0
  69. package/script/src/context.d.ts.map +1 -0
  70. package/script/src/context.js +45 -0
  71. package/script/src/extend.d.ts +23 -0
  72. package/script/src/extend.d.ts.map +1 -0
  73. package/script/src/extend.js +12 -0
  74. package/script/src/guard.d.ts +288 -0
  75. package/script/src/guard.d.ts.map +1 -0
  76. package/script/src/guard.js +640 -0
  77. package/script/src/helpers/http.helpers.d.ts +3 -0
  78. package/script/src/helpers/http.helpers.d.ts.map +1 -0
  79. package/script/src/helpers/http.helpers.js +5 -0
  80. package/script/src/helpers/strings.helpers.d.ts +18 -0
  81. package/script/src/helpers/strings.helpers.d.ts.map +1 -0
  82. package/script/src/helpers/strings.helpers.js +52 -0
  83. package/script/src/introspect.d.ts +36 -0
  84. package/script/src/introspect.d.ts.map +1 -0
  85. package/script/src/introspect.js +31 -0
  86. package/script/src/modules/async.d.ts +27 -0
  87. package/script/src/modules/async.d.ts.map +1 -0
  88. package/script/src/modules/async.js +41 -0
  89. package/script/src/modules/http.branded.d.ts +42 -0
  90. package/script/src/modules/http.branded.d.ts.map +1 -0
  91. package/script/src/modules/http.branded.js +30 -0
  92. package/script/src/modules/http.d.ts +46 -0
  93. package/script/src/modules/http.d.ts.map +1 -0
  94. package/script/src/modules/http.js +62 -0
  95. package/script/src/modules/strings.branded.d.ts +185 -0
  96. package/script/src/modules/strings.branded.d.ts.map +1 -0
  97. package/script/src/modules/strings.branded.js +126 -0
  98. package/script/src/modules/strings.d.ts +109 -0
  99. package/script/src/modules/strings.d.ts.map +1 -0
  100. package/script/src/modules/strings.js +150 -0
  101. package/script/src/types.d.ts +318 -0
  102. package/script/src/types.d.ts.map +1 -0
  103. package/script/src/types.js +2 -0
  104. package/script/src/utilities.d.ts +95 -0
  105. package/script/src/utilities.d.ts.map +1 -0
  106. package/script/src/utilities.js +207 -0
@@ -0,0 +1,288 @@
1
+ /**
2
+ * guard.ts
3
+ * @module
4
+ */
5
+ import type { InferShape, JsonObject, JsonPrimitive, JsonValue, Parser, ParserEntry, TupleOfLength, TypeGuard, TypeGuardShape } from "./types.js";
6
+ /**
7
+ * Creates a type guard from a parser function.
8
+ *
9
+ * The parser should perform whatever checks are necessary to safely establish
10
+ * that the input is of the specified type.
11
+ *
12
+ * Injects the `has` utility method as the second argument of any parser, as
13
+ * a convenience to check if a property exists in an object.
14
+ *
15
+ * @param parser A function that returns the value if valid, or null if invalid.
16
+ * @returns A type guard function with utility methods.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const parseString = (val: unknown): string | null => typeof val === 'string' ? val : null;
21
+ * const isString = createTypeGuard(parseString);
22
+ * ```
23
+ */
24
+ export declare function createTypeGuard<T1>(parser: Parser<T1>): TypeGuard<T1>;
25
+ /**
26
+ * Creates a type guard from a parser function with a custom type name.
27
+ *
28
+ * The name is used for error messages when the type guard fails.
29
+ *
30
+ * @param name The type name to use for error messages.
31
+ * @param parser A function that returns the value if valid, or null if invalid.
32
+ * @returns A type guard function with utility methods.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * const isPositive = createTypeGuard("positive number", (val: unknown): number | null =>
37
+ * typeof val === 'number' && val > 0 ? val : null
38
+ * );
39
+ * ```
40
+ */
41
+ export declare function createTypeGuard<T1>(name: string, parser: Parser<T1>): TypeGuard<T1>;
42
+ /**
43
+ * Creates a type guard from a shape object.
44
+ *
45
+ * The shape maps property names to guard predicates or nested shapes.
46
+ * The resulting type guard validates that an object matches the shape.
47
+ *
48
+ * @param shape A shape object mapping keys to guards or nested shapes.
49
+ * @returns A type guard function with utility methods.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const isUser = createTypeGuard({ name: isString, age: isNumber });
54
+ * ```
55
+ */
56
+ export declare function createTypeGuard<S extends TypeGuardShape>(shape: S): TypeGuard<InferShape<S>>;
57
+ /**
58
+ * Creates a type guard from a shape object with a custom type name.
59
+ *
60
+ * @param name The type name to use for error messages.
61
+ * @param shape A shape object mapping keys to guards or nested shapes.
62
+ * @returns A type guard function with utility methods.
63
+ */
64
+ export declare function createTypeGuard<S extends TypeGuardShape>(name: string, shape: S): TypeGuard<InferShape<S>>;
65
+ /**
66
+ * Converts a ParserEntry (parser function, named parser object, or shape) into a TypeGuard.
67
+ * Shared by `batch` and `extend` to avoid duplicating entry detection logic.
68
+ */
69
+ export declare function entryToGuard(entry: ParserEntry): TypeGuard<unknown>;
70
+ /**
71
+ * Returns true if input satisfies type boolean.
72
+ * @param {unknown} t
73
+ * @return {boolean}
74
+ */
75
+ export declare const isBoolean: TypeGuard<boolean>;
76
+ /**
77
+ * Returns true if input satisfies type string.
78
+ * @param {unknown} t
79
+ * @return {boolean}
80
+ */
81
+ export declare const isString: TypeGuard<string>;
82
+ /**
83
+ * Returns true if input satisfies type number. Returns false if `NaN` is passed.
84
+ *
85
+ * While `NaN` is technically a number in JavaScript, it is not a valid value for many applications
86
+ * and will fail if used with common numeric operations.
87
+ *
88
+ * @param {unknown} t
89
+ * @return {boolean}
90
+ */
91
+ export declare const isNumber: TypeGuard<number>;
92
+ /**
93
+ * Returns true if input satisfies type symbol.
94
+ * @param {unknown} t
95
+ * @return {boolean}
96
+ */
97
+ export declare const isSymbol: TypeGuard<symbol>;
98
+ /**
99
+ * Returns true if input satisfies type binary.
100
+ * @param {unknown} t
101
+ * @return {boolean}
102
+ */
103
+ export declare const isBinary: TypeGuard<0 | 1>;
104
+ /**
105
+ * Returns true if input satisfies type numeric.
106
+ * @param {unknown} t
107
+ * @return {boolean}
108
+ */
109
+ export declare const isNumeric: TypeGuard<number>;
110
+ /**
111
+ * Returns true if input satisfies type Function.
112
+ * @param {unknown} t
113
+ * @return {boolean}
114
+ */
115
+ export declare const isFunction: TypeGuard<(...args: unknown[]) => unknown>;
116
+ /**
117
+ * Returns true if input satisfies type undefined.
118
+ * @param {unknown} t
119
+ * @return {boolean}
120
+ */
121
+ export declare const isUndefined: TypeGuard<undefined>;
122
+ /**
123
+ * Returns true if input satisfies type null.
124
+ * @param {unknown} t
125
+ * @return {boolean}
126
+ */
127
+ declare const isNull: TypeGuard<null>;
128
+ /**
129
+ * Returns true if input is a JSON-able primitive date type
130
+ * @param {unknown} t
131
+ * @return {boolean}
132
+ */
133
+ export declare const isJsonPrimitive: TypeGuard<JsonPrimitive>;
134
+ /**
135
+ * Returns true if input satisfies type object. _BEWARE_ object
136
+ * can apply to many different types, including arrays. This
137
+ * is not as type safe as you might think.
138
+ * @param {unknown} t
139
+ * @return {boolean}
140
+ */
141
+ export declare const isObject: TypeGuard<object>;
142
+ /** Returns true if input satisfies type PropertyKey.
143
+ * @param {unknown} t
144
+ * @return {boolean}
145
+ */
146
+ export declare const isPropertyKey: TypeGuard<PropertyKey>;
147
+ /**
148
+ * Returns true if input satisfies type object. _BEWARE_ object
149
+ * can apply to many different types, including arrays. This
150
+ * is not as type safe as you might think.
151
+ * @param {unknown} t
152
+ * @return {boolean}
153
+ */
154
+ export declare const isJsonObject: TypeGuard<JsonObject>;
155
+ /**
156
+ * Returns true if input satisfies type array.
157
+ * @param {unknown} t
158
+ * @return {boolean}
159
+ */
160
+ export declare const isArray: TypeGuard<unknown[]> & {
161
+ /**
162
+ * Returns true if input satisfies type array of T.
163
+ * @param guard The type guard for the array elements
164
+ * @returns {boolean}
165
+ */
166
+ of: <T>(guard: TypeGuard<T>) => TypeGuard<T[]>;
167
+ };
168
+ /**
169
+ * Returns true if input satisfies type array.
170
+ * @param {unknown} t
171
+ * @return {boolean}
172
+ */
173
+ export declare const isJsonArray: TypeGuard<JsonValue[] | readonly JsonValue[]>;
174
+ /**
175
+ * Checks if a given value is a valid JSON value.
176
+ *
177
+ * This type guard leverages helper functions to determine if the provided value is a valid JSON
178
+ * primitive, JSON array, or JSON object. If the value satisfies any of these conditions, it is
179
+ * considered a valid JSON value.
180
+ *
181
+ * @param t - The value to be checked.
182
+ * @returns The value itself if it is a valid JSON value; otherwise, returns null.
183
+ *
184
+ * @remarks
185
+ * - For primitive types, arrays, and objects, the guard confirms conformance with the JSON value standards.
186
+ *
187
+ * @example
188
+ * const value: unknown = getValue();
189
+ * const jsonValue = isJsonValue(value);
190
+ * if (jsonValue !== null) {
191
+ * // Work with the confirmed JSON value.
192
+ * }
193
+ */
194
+ export declare const isJsonValue: TypeGuard<JsonValue>;
195
+ /**
196
+ * A type guard function that checks if a value is a Date object.
197
+ *
198
+ * @param t - The value to check
199
+ * @returns The original Date object if the value is a Date, otherwise null
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const maybeDate: unknown = new Date();
204
+ *
205
+ * if (isDate(maybeDate)) {
206
+ * // maybeDate is now typed as Date
207
+ * console.log(maybeDate.toISOString());
208
+ * }
209
+ * ```
210
+ */
211
+ export declare const isDate: TypeGuard<Date>;
212
+ /**
213
+ * Returns true if input satisfies type null or undefined.
214
+ * @param {unknown} t
215
+ * @return {boolean}
216
+ */
217
+ declare const isNil: TypeGuard<null | undefined>;
218
+ /**
219
+ * Returns true if input is undefined, null, empty string, object with length
220
+ * of 0 or object without enumerable keys.
221
+ *
222
+ * Strings are trimmed when evaluated.
223
+ * @param {unknown} t
224
+ * @return {boolean}
225
+ */
226
+ declare const isEmpty: TypeGuard<null | undefined | "" | [] | Record<string, never>>;
227
+ /**
228
+ * Returns true if the value is iterable (has Symbol.iterator). Does not
229
+ * check the type contained within the iterable.
230
+ * @param t
231
+ * @returns
232
+ */
233
+ declare const isIterable: TypeGuard<Iterable<unknown>>;
234
+ /**
235
+ * Type guard that checks if a value is a tuple (array) of a specific length.
236
+ *
237
+ * A tuple is an array with a fixed number of elements. This function validates
238
+ * that the input is an array and has exactly the specified length.
239
+ *
240
+ * @typeParam N - The expected length of the tuple
241
+ * @param t - The value to check
242
+ * @param length - The expected length of the tuple
243
+ * @returns Type predicate indicating if the value is a tuple of length N
244
+ *
245
+ * @example
246
+ * ```typescript
247
+ * const value: unknown = [1, 2, 3];
248
+ *
249
+ * if (isTuple(value, 3)) {
250
+ * // value is now typed as [unknown, unknown, unknown]
251
+ * console.log(value.length); // 3
252
+ * }
253
+ *
254
+ * // Check for empty tuple
255
+ * if (isTuple([], 0)) {
256
+ * console.log("Empty tuple");
257
+ * }
258
+ * ```
259
+ */
260
+ declare const isTuple: {
261
+ <N extends number>(t: unknown, length: N): t is TupleOfLength<N>;
262
+ strict<N extends number>(t: unknown, length: N, errorMsg?: string): t is TupleOfLength<N>;
263
+ /**
264
+ * Assertion function that throws an error if the value is not a tuple of the specified length.
265
+ * TypeScript will narrow the type to TupleOfLength<N> after this assertion.
266
+ * @typeParam N - The expected length of the tuple
267
+ * @param t - The value to check
268
+ * @param length - The expected length of the tuple
269
+ * @param errorMsg - Optional custom error message
270
+ * @throws {TypeError} If the value is not a tuple of the specified length
271
+ */
272
+ assert: <N extends number>(t: unknown, length: N, errorMsg?: string) => asserts t is TupleOfLength<N>;
273
+ or<N extends number, T2>(length: N, guard: TypeGuard<T2>): TypeGuard<TupleOfLength<N> | T2>;
274
+ /**
275
+ * Optional variant of isTuple that accepts undefined or a tuple of the specified length.
276
+ * @typeParam N - The expected length of the tuple
277
+ * @param t - The value to check
278
+ * @param length - The expected length of the tuple
279
+ * @returns true if the value is undefined or a tuple of the specified length, otherwise false
280
+ */
281
+ optional: {
282
+ <N extends number>(t: unknown, length: N): t is TupleOfLength<N> | undefined;
283
+ strict<N extends number>(t: unknown, length: N, errorMsg?: string): t is TupleOfLength<N> | undefined;
284
+ assert: <N extends number>(t: unknown, length: N, errorMsg?: string) => t is TupleOfLength<N> | undefined;
285
+ };
286
+ };
287
+ export { isEmpty, isIterable, isNil, isNull, isTuple };
288
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/src/guard.ts"],"names":[],"mappings":"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"}