typeshi 1.7.9 → 1.7.11

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.
@@ -47,21 +47,24 @@ export declare function isEmptyArray(value: any): value is Array<any> & {
47
47
  };
48
48
  /**
49
49
  * @param value `any`
50
+ * @param requireNonNegative `boolean` `default = false`
51
+ * @param requireNonEmpty `boolean` `default = true`
52
+ * - `if` `true` then `value` must be array with at least 1 element
53
+ * - `if` `false` then `value` can be empty array
50
54
  * @returns **`isIntegerArray`** `boolean` = `value is Array<number> & { length: number }`
51
- * - **`true`** if `value` is an array with `length > 0` and each of its elements is an `integer`
52
- * - **`false`** `otherwise`
53
55
  */
54
- export declare function isIntegerArray(value: any, requireNonNegative?: boolean): value is Array<number> & {
56
+ export declare function isIntegerArray(value: any, requireNonNegative?: boolean, requireNonEmpty?: boolean): value is Array<number> & {
55
57
  length: number;
56
58
  };
57
59
  /**
58
60
  * @consideration add param to allow for empty strings?
59
61
  * @param value `any`
62
+ * @param requireNonEmpty `boolean` `default = true`
63
+ * - `if` `true` then `value` must be array with at least 1 element
64
+ * - `if` `false` then `value` can be empty array
60
65
  * @returns **`isStringArray`** `boolean` = `value is Array<string> & { length: number }`
61
- * - **`true`** if `value` is an array with `length > 0` and each of its elements is a **non-empty** `string`
62
- * - **`false`** `otherwise`
63
66
  */
64
- export declare function isStringArray(value: any): value is Array<string> & {
67
+ export declare function isStringArray(value: any, requireNonEmpty?: boolean): value is Array<string> & {
65
68
  length: number;
66
69
  };
67
70
  /**
@@ -147,15 +150,20 @@ export declare class isOptional {
147
150
  static type: <T>(value: any, guard: (v: any, ...args: any[]) => v is T, ...args: any[]) => value is T | undefined | null;
148
151
  /**
149
152
  * @param value
150
- * @param requireNonEmpty `bolean` `default` = `true`
153
+ * @param requireNonEmpty `boolean` `default` = `true` (if `true`, require that string have at least 1 non-whitespace character)
151
154
  * @returns
152
155
  */
153
156
  static string: (value: any, requireNonEmpty?: boolean) => value is string | undefined | null;
154
- static stringArray: (value: any) => value is string[] | undefined | null;
157
+ /**
158
+ * @param value
159
+ * @param requireNonEmpty `boolean` `default` = `true` (if `true`, require that array have at least 1 element)
160
+ * @returns
161
+ */
162
+ static stringArray: (value: any, requireNonEmpty?: boolean) => value is string[] | undefined | null;
155
163
  static numeric: (value: any, requireInteger?: boolean, requireNonNegative?: boolean) => value is string | number | undefined | null;
156
164
  static number: (value: any, requireInteger?: boolean, requireNonNegative?: boolean) => value is number | undefined | null;
157
165
  static positiveInteger: (value: any) => value is number | undefined | null;
158
- static integerArray: (value: any, requireNonNegative?: boolean) => value is number[] | undefined | null;
166
+ static integerArray: (value: any, requireNonNegative?: boolean, requireNonEmpty?: boolean) => value is number[] | undefined | null;
159
167
  static boolean: (value: any) => value is boolean | undefined | null;
160
168
  static function: (value: any) => value is Function | undefined | null;
161
169
  }
@@ -163,15 +171,20 @@ export declare class isUndefinedOr {
163
171
  static type: <T>(value: any, guard: (v: any, ...args: any[]) => v is T, ...args: any[]) => value is T | undefined;
164
172
  /**
165
173
  * @param value
166
- * @param requireNonEmpty `bolean` `default` = `true`
174
+ * @param requireNonEmpty `boolean` `default` = `true` (if `true`, require that string have at least 1 non-whitespace character)
167
175
  * @returns
168
176
  */
169
177
  static string: (value: any, requireNonEmpty?: boolean) => value is string | undefined;
170
- static stringArray: (value: any) => value is string[] | undefined;
178
+ /**
179
+ * @param value
180
+ * @param requireNonEmpty `boolean` `default` = `true` (if `true`, require that array have at least 1 element)
181
+ * @returns
182
+ */
183
+ static stringArray: (value: any, requireNonEmpty?: boolean) => value is string[] | undefined;
171
184
  static numeric: (value: any, requireInteger?: boolean, requireNonNegative?: boolean) => value is string | number | undefined;
172
185
  static number: (value: any, requireInteger?: boolean, requireNonNegative?: boolean) => value is number | undefined;
173
186
  static positiveInteger: (value: any) => value is number | undefined;
174
- static integerArray: (value: any, requireNonNegative?: boolean) => value is number[] | undefined;
187
+ static integerArray: (value: any, requireNonNegative?: boolean, requireNonEmpty?: boolean) => value is number[] | undefined;
175
188
  static boolean: (value: any) => value is boolean | undefined;
176
189
  static function: (value: any) => value is Function | undefined;
177
190
  }
@@ -195,25 +208,25 @@ export declare function isFunction(value: any): value is Function;
195
208
  */
196
209
  export declare function isUndefined(value: any): value is undefined;
197
210
  export declare function isUndefinedOrNull(value: unknown): value is undefined | null;
198
- export type NumberKeys<T> = {
199
- [K in keyof T]: T[K] extends number | undefined ? K : never;
200
- }[keyof T];
201
- export type ArrayKeys<T> = {
202
- [K in keyof T]: T[K] extends Array<any> | undefined ? K : never;
203
- }[keyof T];
204
- export type ArrayOfTypeKeys<T, U> = {
205
- [K in keyof T]: T[K] extends Array<U> | undefined ? K : never;
206
- }[keyof T];
207
- export type StringKeys<T> = {
208
- [K in keyof T]: T[K] extends string | undefined ? K : never;
209
- }[keyof T];
210
- export type PrimitiveKeys<T> = {
211
- [K in keyof T]: T[K] extends string | number | boolean | null | undefined ? K : never;
212
- }[keyof T];
211
+ export type NumberKeys<T, Required extends true | false = false> = {
212
+ [K in keyof T]: Required extends true ? (T[K] extends number ? K : never) : (T[K] extends number | undefined ? K : never);
213
+ }[keyof T][];
214
+ export type ArrayKeys<T, Required extends true | false = false> = {
215
+ [K in keyof T]: Required extends true ? (T[K] extends Array<any> ? K : never) : (T[K] extends Array<any> | undefined ? K : never);
216
+ }[keyof T][];
217
+ export type ArrayOfTypeKeys<T, U, Required extends true | false = false> = {
218
+ [K in keyof T]: Required extends true ? (T[K] extends Array<U> ? K : never) : (T[K] extends Array<U> | undefined ? K : never);
219
+ }[keyof T][];
220
+ export type StringKeys<T, Required extends true | false = false> = {
221
+ [K in keyof T]: Required extends true ? (T[K] extends string ? K : never) : (T[K] extends string | undefined ? K : never);
222
+ }[keyof T][];
223
+ export type PrimitiveKeys<T, Required extends true | false = false> = {
224
+ [K in keyof T]: Required extends true ? (T[K] extends string | number | boolean | null ? K : never) : (T[K] extends string | number | boolean | null | undefined ? K : never);
225
+ }[keyof T][];
213
226
  export type Primitive = string | number | boolean | null | undefined;
214
227
  /** Get the union of all values of `T` (like `valueof T`) */
215
228
  export type ValueOf<T> = T[keyof T];
216
229
  /** Keys of `T` whose values extend a given type `U` */
217
230
  export type KeysOfType<T, U> = {
218
231
  [K in keyof T]: T[K] extends U ? K : never;
219
- }[keyof T];
232
+ }[keyof T][];
@@ -92,25 +92,29 @@ function isEmptyArray(value) {
92
92
  }
93
93
  /**
94
94
  * @param value `any`
95
+ * @param requireNonNegative `boolean` `default = false`
96
+ * @param requireNonEmpty `boolean` `default = true`
97
+ * - `if` `true` then `value` must be array with at least 1 element
98
+ * - `if` `false` then `value` can be empty array
95
99
  * @returns **`isIntegerArray`** `boolean` = `value is Array<number> & { length: number }`
96
- * - **`true`** if `value` is an array with `length > 0` and each of its elements is an `integer`
97
- * - **`false`** `otherwise`
98
100
  */
99
- function isIntegerArray(value, requireNonNegative = false) {
100
- return (value
101
- && isNonEmptyArray(value)
102
- && value.every(arrElement => isInteger(arrElement, requireNonNegative)));
101
+ function isIntegerArray(value, requireNonNegative = false, requireNonEmpty = true) {
102
+ return (requireNonEmpty
103
+ ? isNonEmptyArray(value) && value.every(el => isInteger(el, requireNonNegative))
104
+ : isEmptyArray(value));
103
105
  }
104
106
  /**
105
107
  * @consideration add param to allow for empty strings?
106
108
  * @param value `any`
109
+ * @param requireNonEmpty `boolean` `default = true`
110
+ * - `if` `true` then `value` must be array with at least 1 element
111
+ * - `if` `false` then `value` can be empty array
107
112
  * @returns **`isStringArray`** `boolean` = `value is Array<string> & { length: number }`
108
- * - **`true`** if `value` is an array with `length > 0` and each of its elements is a **non-empty** `string`
109
- * - **`false`** `otherwise`
110
113
  */
111
- function isStringArray(value) {
112
- return (isNonEmptyArray(value)
113
- && value.every(el => isNonEmptyString(el)));
114
+ function isStringArray(value, requireNonEmpty = true) {
115
+ return (requireNonEmpty
116
+ ? isNonEmptyArray(value) && value.every(el => isNonEmptyString(el))
117
+ : isEmptyArray(value));
114
118
  }
115
119
  /**
116
120
  * @note **passing in an array will return `false`.**
@@ -305,14 +309,19 @@ isOptional.type = (value, guard, ...args) => {
305
309
  };
306
310
  /**
307
311
  * @param value
308
- * @param requireNonEmpty `bolean` `default` = `true`
312
+ * @param requireNonEmpty `boolean` `default` = `true` (if `true`, require that string have at least 1 non-whitespace character)
309
313
  * @returns
310
314
  */
311
315
  isOptional.string = (value, requireNonEmpty = true) => {
312
316
  return isUndefinedOrNull(value) || requireNonEmpty ? isNonEmptyString(value) : typeof value === "string";
313
317
  };
314
- isOptional.stringArray = (value) => {
315
- return isUndefinedOrNull(value) || isStringArray(value);
318
+ /**
319
+ * @param value
320
+ * @param requireNonEmpty `boolean` `default` = `true` (if `true`, require that array have at least 1 element)
321
+ * @returns
322
+ */
323
+ isOptional.stringArray = (value, requireNonEmpty = true) => {
324
+ return isUndefinedOrNull(value) || isStringArray(value, requireNonEmpty);
316
325
  };
317
326
  isOptional.numeric = (value, requireInteger = false, requireNonNegative = false) => {
318
327
  return isUndefinedOrNull(value) || isNumeric(value, requireInteger, requireNonNegative);
@@ -324,8 +333,8 @@ isOptional.number = (value, requireInteger = false, requireNonNegative = false)
324
333
  isOptional.positiveInteger = (value) => {
325
334
  return (isUndefinedOrNull(value) || isPositveInteger(value));
326
335
  };
327
- isOptional.integerArray = (value, requireNonNegative = false) => {
328
- return isUndefinedOrNull(value) || isIntegerArray(value, requireNonNegative);
336
+ isOptional.integerArray = (value, requireNonNegative = false, requireNonEmpty = true) => {
337
+ return isUndefinedOrNull(value) || isIntegerArray(value, requireNonNegative, requireNonEmpty);
329
338
  };
330
339
  isOptional.boolean = (value) => {
331
340
  return isUndefinedOrNull(value) || isBoolean(value);
@@ -341,14 +350,19 @@ isUndefinedOr.type = (value, guard, ...args) => {
341
350
  };
342
351
  /**
343
352
  * @param value
344
- * @param requireNonEmpty `bolean` `default` = `true`
353
+ * @param requireNonEmpty `boolean` `default` = `true` (if `true`, require that string have at least 1 non-whitespace character)
345
354
  * @returns
346
355
  */
347
356
  isUndefinedOr.string = (value, requireNonEmpty = true) => {
348
357
  return isUndefined(value) || requireNonEmpty ? isNonEmptyString(value) : typeof value === "string";
349
358
  };
350
- isUndefinedOr.stringArray = (value) => {
351
- return isUndefined(value) || isStringArray(value);
359
+ /**
360
+ * @param value
361
+ * @param requireNonEmpty `boolean` `default` = `true` (if `true`, require that array have at least 1 element)
362
+ * @returns
363
+ */
364
+ isUndefinedOr.stringArray = (value, requireNonEmpty = true) => {
365
+ return isUndefined(value) || isStringArray(value, requireNonEmpty);
352
366
  };
353
367
  isUndefinedOr.numeric = (value, requireInteger = false, requireNonNegative = false) => {
354
368
  return isUndefined(value) || isNumeric(value, requireInteger, requireNonNegative);
@@ -360,8 +374,8 @@ isUndefinedOr.number = (value, requireInteger = false, requireNonNegative = fals
360
374
  isUndefinedOr.positiveInteger = (value) => {
361
375
  return (isUndefined(value) || isPositveInteger(value));
362
376
  };
363
- isUndefinedOr.integerArray = (value, requireNonNegative = false) => {
364
- return isUndefined(value) || isIntegerArray(value, requireNonNegative);
377
+ isUndefinedOr.integerArray = (value, requireNonNegative = false, requireNonEmpty = true) => {
378
+ return isUndefined(value) || isIntegerArray(value, requireNonNegative, requireNonEmpty);
365
379
  };
366
380
  isUndefinedOr.boolean = (value) => {
367
381
  return isUndefined(value) || isBoolean(value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typeshi",
3
- "version": "1.7.9",
3
+ "version": "1.7.11",
4
4
  "description": "TypeScript utility modules",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",