ejv 2.1.4 → 2.1.5

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/src/tester.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { DATA_TYPE } from './constants';
2
- import { AnyObject } from './interfaces';
2
+ import { AnyObject, BufferLike } from './interfaces';
3
3
 
4
- export const typeTester = (value: unknown, type: DATA_TYPE): boolean => {
4
+ export function typeTester (value: unknown, type: DATA_TYPE): boolean {
5
5
  let valid: boolean;
6
6
 
7
7
  switch (type) {
@@ -32,72 +32,88 @@ export const typeTester = (value: unknown, type: DATA_TYPE): boolean => {
32
32
  case DATA_TYPE.ARRAY:
33
33
  valid = arrayTester(value);
34
34
  break;
35
+
36
+ case DATA_TYPE.BUFFER:
37
+ valid = bufferTester(value);
38
+ break;
35
39
  }
36
40
 
37
41
  return valid;
38
- };
42
+ }
39
43
 
40
- export const definedTester = (value: unknown): value is boolean => {
44
+ export function definedTester (value: unknown): value is boolean {
41
45
  return value !== undefined;
42
- };
46
+ }
43
47
 
44
- export const enumTester = <T> (value: T, arr: T[]): boolean => {
48
+ export function enumTester<T> (value: T, arr: T[]): boolean {
45
49
  return arr.includes(value);
46
- };
50
+ }
47
51
 
48
- export const notEnumTester = <T> (value: T, arr: T[]): boolean => {
52
+ export function notEnumTester<T> (value: T, arr: T[]): boolean {
49
53
  return !enumTester(value, arr);
50
- };
54
+ }
51
55
 
52
- export const lengthTester = (value: string | unknown[], length: number): boolean => {
56
+ export function lengthTester (value: string | unknown[], length: number): boolean {
53
57
  return value.length === length;
54
- };
58
+ }
55
59
 
56
- export const minLengthTester = (value: string | unknown[], minLength: number): boolean => {
60
+ export function minLengthTester (value: string | unknown[], minLength: number): boolean {
57
61
  return value.length >= minLength;
58
- };
62
+ }
59
63
 
60
- export const maxLengthTester = (value: string | unknown[], maxLength: number): boolean => {
64
+ export function maxLengthTester (value: string | unknown[], maxLength: number): boolean {
61
65
  return value.length <= maxLength;
62
- };
66
+ }
67
+
68
+ export function bufferLengthTester (value: BufferLike, length: number): boolean {
69
+ return value.byteLength === length;
70
+ }
63
71
 
64
- export const booleanTester = (value: unknown): value is boolean => {
72
+ export function minByteLengthTester (value: BufferLike, minLength: number): boolean {
73
+ return value.byteLength >= minLength;
74
+ }
75
+
76
+ export function maxByteLengthTester (value: BufferLike, maxLength: number): boolean {
77
+ return value.byteLength <= maxLength;
78
+ }
79
+
80
+ export function booleanTester (value: unknown): value is boolean {
65
81
  return typeof value === 'boolean';
66
- };
82
+ }
67
83
 
68
- export const numberTester = (value: unknown): value is number => {
84
+ export function numberTester (value: unknown): value is number {
69
85
  return typeof value === 'number' && !isNaN(value);
70
- };
86
+ }
71
87
 
72
- export const integerTester = (value: number): boolean => {
88
+ export function integerTester (value: number): boolean {
73
89
  return +value.toFixed(0) === value;
74
- };
90
+ }
75
91
 
76
- export const indexTester = (value: number): value is number => {
92
+ export function indexTester (value: number): value is number {
77
93
  return integerTester(value) && value >= 0;
78
- };
94
+ }
79
95
 
80
- export const minNumberTester = (value: number, min: number): boolean => {
96
+ export function minNumberTester (value: number, min: number): boolean {
81
97
  return value >= min;
82
- };
98
+ }
83
99
 
84
- export const exclusiveMinNumberTester = (value: number, min: number): boolean => {
100
+ export function exclusiveMinNumberTester (value: number, min: number): boolean {
85
101
  return value > min;
86
- };
102
+ }
87
103
 
88
- export const maxNumberTester = (value: number, max: number): boolean => {
104
+ export function maxNumberTester (value: number, max: number): boolean {
89
105
  return value <= max;
90
- };
106
+ }
91
107
 
92
- export const exclusiveMaxNumberTester = (value: number, max: number): boolean => {
108
+ export function exclusiveMaxNumberTester (value: number, max: number): boolean {
93
109
  return value < max;
94
- };
110
+ }
95
111
 
96
- export const stringTester = (value: unknown): value is string => {
112
+ export function stringTester (value: unknown): value is string {
97
113
  return typeof value === 'string';
98
- };
114
+ }
99
115
 
100
- export const stringRegExpTester = (value: string, regExp: string | RegExp): boolean => {
116
+ export function stringRegExpTester (value: string, regExp: string | RegExp): boolean {
101
117
  let valid = false;
102
118
 
103
119
  let _regExp: RegExp | undefined = undefined;
@@ -114,18 +130,18 @@ export const stringRegExpTester = (value: string, regExp: string | RegExp): bool
114
130
  }
115
131
 
116
132
  return valid;
117
- };
133
+ }
118
134
 
119
135
  // RFC 5322, 3.4.1. spec
120
- export const emailTester = (value: string): boolean => {
136
+ export function emailTester (value: string): boolean {
121
137
  let valid = false;
122
138
 
123
139
  if (stringTester(value) && stringRegExpTester(value, /^.+@.+$/)) {
124
140
  const valueAsString: string = value as string;
125
141
 
126
142
  const atIndex: number = valueAsString.lastIndexOf('@');
127
- const localPart: string = valueAsString.substr(0, atIndex);
128
- const domain: string = valueAsString.substr(atIndex + 1);
143
+ const localPart: string = valueAsString.substring(0, atIndex);
144
+ const domain: string = valueAsString.substring(atIndex + 1);
129
145
 
130
146
  // regular expression sources
131
147
  // const aTextRegExpStr : string = '[-a-zA-Z0-9!#$%&\\\'*+/=?^_`{|}~]+';
@@ -150,9 +166,9 @@ export const emailTester = (value: string): boolean => {
150
166
  }
151
167
 
152
168
  return valid;
153
- };
169
+ }
154
170
 
155
- export const jsonStrTester = (value: string): boolean => {
171
+ export function jsonStrTester (value: string): boolean {
156
172
  try {
157
173
  JSON.parse(value);
158
174
 
@@ -161,14 +177,14 @@ export const jsonStrTester = (value: string): boolean => {
161
177
  catch (e: unknown) { // eslint-disable-line @typescript-eslint/no-unused-vars
162
178
  return false;
163
179
  }
164
- };
180
+ }
165
181
 
166
182
  // RFC 3339 (https://www.ietf.org/rfc/rfc3339.txt) : YYYY-MM-DDThh:mm:ss[.SSSZ]
167
- const rfc3339Tester = (value: string): boolean => {
183
+ function rfc3339Tester (value: string): boolean {
168
184
  return /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([0-1][0-9]|2[0-3])(:([0-5][0-9])){2}(\.\d+)?(Z|[-+]\d{2}:\d{2})?$/.test(value);
169
- };
185
+ }
170
186
 
171
- const iso8601DateTester = (value: string): boolean => {
187
+ function iso8601DateTester (value: string): boolean {
172
188
  const years = '(\\d{4})';
173
189
  const months = '(0[1-9]|1[0-2])';
174
190
  const dates = '(0[1-9]|[1-2][0-9]|3[0-1])';
@@ -187,9 +203,9 @@ const iso8601DateTester = (value: string): boolean => {
187
203
  ].some((regExp: RegExp): boolean => {
188
204
  return regExp.test(value);
189
205
  });
190
- };
206
+ }
191
207
 
192
- const iso8601TimeTester = (value: string): boolean => {
208
+ function iso8601TimeTester (value: string): boolean {
193
209
  const hours = '([0-1]\\d|2[0-3])';
194
210
  const minutes = '([0-5]\\d)';
195
211
  const seconds = '([0-5]\\d|60)'; // 60 for leap second
@@ -208,9 +224,9 @@ const iso8601TimeTester = (value: string): boolean => {
208
224
  .some((regExp: RegExp): boolean => {
209
225
  return regExp.test(value);
210
226
  });
211
- };
227
+ }
212
228
 
213
- const iso8601DateTimeTester = (value: string): boolean => {
229
+ function iso8601DateTimeTester (value: string): boolean {
214
230
  let valid = false;
215
231
 
216
232
  if (/.+T.+/.test(value) // should have 1 'T'
@@ -235,19 +251,19 @@ const iso8601DateTimeTester = (value: string): boolean => {
235
251
  }
236
252
 
237
253
  return valid;
238
- };
254
+ }
239
255
 
240
- export const dateFormatTester = (value: string): boolean => {
256
+ export function dateFormatTester (value: string): boolean {
241
257
  return iso8601DateTester(value);
242
- };
258
+ }
243
259
 
244
- export const timeFormatTester = (value: string): boolean => {
260
+ export function timeFormatTester (value: string): boolean {
245
261
  return iso8601TimeTester(value);
246
- };
262
+ }
247
263
 
248
- export const dateTimeFormatTester = (value: string): boolean => {
264
+ export function dateTimeFormatTester (value: string): boolean {
249
265
  return rfc3339Tester(value) || iso8601DateTimeTester(value);
250
- };
266
+ }
251
267
 
252
268
  // // with port
253
269
  // export const urlTester = (value : any) : boolean => {
@@ -270,54 +286,60 @@ export const dateTimeFormatTester = (value: string): boolean => {
270
286
  // return ipv4Tester(value) || ipv6Tester(value);
271
287
  // };
272
288
 
273
- export const objectTester = (value: unknown): boolean => {
289
+ export function objectTester (value: unknown): boolean {
274
290
  return typeof value === 'object';
275
- };
291
+ }
276
292
 
277
- export const hasPropertyTester = (value: AnyObject): boolean => {
293
+ export function hasPropertyTester (value: AnyObject): boolean {
278
294
  return Object.keys(value).length > 0;
279
- };
295
+ }
280
296
 
281
- export const dateTester = (value: unknown): value is Date => {
297
+ export function dateTester (value: unknown): value is Date {
282
298
  return objectTester(value)
283
299
  && value !== null
284
300
  && typeof value === 'object'
285
301
  && value instanceof Date
286
302
  && !isNaN(value.getFullYear());
287
- };
303
+ }
288
304
 
289
- export const minDateTester = (value: Date, min: Date): boolean => {
305
+ export function minDateTester (value: Date, min: Date): boolean {
290
306
  return +value >= +min;
291
- };
307
+ }
292
308
 
293
- export const exclusiveMinDateTester = (value: Date, min: Date): boolean => {
309
+ export function exclusiveMinDateTester (value: Date, min: Date): boolean {
294
310
  return +value > +min;
295
- };
311
+ }
296
312
 
297
- export const maxDateTester = (value: Date, max: Date): boolean => {
313
+ export function maxDateTester (value: Date, max: Date): boolean {
298
314
  return +value <= +max;
299
- };
315
+ }
300
316
 
301
- export const exclusiveMaxDateTester = (value: Date, max: Date): boolean => {
317
+ export function exclusiveMaxDateTester (value: Date, max: Date): boolean {
302
318
  return +value < +max;
303
- };
319
+ }
304
320
 
305
- export const arrayTester = (value: unknown): value is unknown[] => {
321
+ export function arrayTester (value: unknown): value is unknown[] {
306
322
  return Array.isArray(value);
307
- };
323
+ }
308
324
 
309
- export const arrayTypeOfTester = (array: unknown[], type: DATA_TYPE): boolean => {
325
+ export function arrayTypeOfTester (array: unknown[], type: DATA_TYPE): boolean {
310
326
  return array.every((item: unknown): boolean => {
311
327
  return typeTester(item, type);
312
328
  });
313
- };
329
+ }
314
330
 
315
- export const uniqueItemsTester = (array: unknown[]): boolean => {
331
+ export function uniqueItemsTester (array: unknown[]): boolean {
316
332
  return array.every((item: unknown): boolean => {
317
333
  return array.filter((target: unknown): boolean => target === item).length === 1;
318
334
  });
319
- };
335
+ }
320
336
 
321
- export const regExpTester = (value: unknown): value is RegExp => {
337
+ export function regExpTester (value: unknown): value is RegExp {
322
338
  return value instanceof RegExp;
323
- };
339
+ }
340
+
341
+ export function bufferTester (value: unknown): value is BufferLike {
342
+ return (ArrayBuffer.isView(value) && !(value instanceof DataView)) // normally buffer, ex. Uint8Array, Uint16Array, ...
343
+ || value instanceof ArrayBuffer
344
+ || (typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer);
345
+ }
package/src/util.ts CHANGED
@@ -14,15 +14,15 @@ enum CloneDataType {
14
14
  RegExp = 'regexp'
15
15
  }
16
16
 
17
- export const isArray = <T> (value: unknown): value is T[] => {
17
+ export function isArray<T> (value: unknown): value is T[] {
18
18
  return value !== undefined
19
19
  && value !== null
20
20
  && Array.isArray(value);
21
- };
21
+ }
22
22
 
23
23
 
24
24
  // sanitize removes undefined & null fields from object. default false
25
- export const clone = <T> (obj: T, sanitize?: boolean): T => {
25
+ export function clone<T> (obj: T, sanitize?: boolean): T {
26
26
  let result !: T;
27
27
 
28
28
  if (obj) {
@@ -90,10 +90,10 @@ export const clone = <T> (obj: T, sanitize?: boolean): T => {
90
90
  }
91
91
 
92
92
  return result;
93
- };
93
+ }
94
94
 
95
95
 
96
- export const sift = <T> (arr: T[]): T[] => {
96
+ export function sift<T> (arr: T[]): T[] {
97
97
  return arr.reduce((acc: T[], cur: T) => {
98
98
  if (cur !== null && cur !== undefined && !acc.includes(cur)) {
99
99
  acc.push(cur);
@@ -101,12 +101,12 @@ export const sift = <T> (arr: T[]): T[] => {
101
101
 
102
102
  return acc;
103
103
  }, []);
104
- };
104
+ }
105
105
 
106
106
 
107
- export const createErrorMsg = (errorMsg: ERROR_MESSAGE, param?: {
107
+ export function createErrorMsg (errorMsg: ERROR_MESSAGE, param?: {
108
108
  placeholders?: (string | number)[]
109
- }): string => {
109
+ }): string {
110
110
  let result: string = errorMsg;
111
111
 
112
112
  if (param?.placeholders) {
@@ -121,4 +121,4 @@ export const createErrorMsg = (errorMsg: ERROR_MESSAGE, param?: {
121
121
  }
122
122
 
123
123
  return result;
124
- };
124
+ }