@naturalcycles/js-lib 14.170.0 → 14.172.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/src/vendor/is.ts DELETED
@@ -1,833 +0,0 @@
1
- /// <reference lib="es2018"/>
2
- /// <reference lib="dom"/>
3
- /// <reference types="node"/>
4
-
5
- /*
6
- From: https://github.com/sindresorhus/is
7
- Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
8
- */
9
-
10
- /* eslint-disable */
11
-
12
- import { Class, ObservableLike, Primitive, TypedArray } from '../typeFest'
13
-
14
- const typedArrayTypeNames = [
15
- 'Int8Array',
16
- 'Uint8Array',
17
- 'Uint8ClampedArray',
18
- 'Int16Array',
19
- 'Uint16Array',
20
- 'Int32Array',
21
- 'Uint32Array',
22
- 'Float32Array',
23
- 'Float64Array',
24
- 'BigInt64Array',
25
- 'BigUint64Array',
26
- ] as const
27
-
28
- type TypedArrayTypeName = (typeof typedArrayTypeNames)[number]
29
-
30
- function isTypedArrayName(name: unknown): name is TypedArrayTypeName {
31
- return typedArrayTypeNames.includes(name as TypedArrayTypeName)
32
- }
33
-
34
- const objectTypeNames = [
35
- 'Function',
36
- 'Generator',
37
- 'AsyncGenerator',
38
- 'GeneratorFunction',
39
- 'AsyncGeneratorFunction',
40
- 'AsyncFunction',
41
- 'Observable',
42
- 'Array',
43
- 'Buffer',
44
- 'Object',
45
- 'RegExp',
46
- 'Date',
47
- 'Error',
48
- 'Map',
49
- 'Set',
50
- 'WeakMap',
51
- 'WeakSet',
52
- 'ArrayBuffer',
53
- 'SharedArrayBuffer',
54
- 'DataView',
55
- 'Promise',
56
- 'URL',
57
- 'FormData',
58
- 'URLSearchParams',
59
- 'HTMLElement',
60
- ...typedArrayTypeNames,
61
- ] as const
62
-
63
- type ObjectTypeName = (typeof objectTypeNames)[number]
64
-
65
- function isObjectTypeName(name: unknown): name is ObjectTypeName {
66
- return objectTypeNames.includes(name as ObjectTypeName)
67
- }
68
-
69
- const primitiveTypeNames = [
70
- 'null',
71
- 'undefined',
72
- 'string',
73
- 'number',
74
- 'bigint',
75
- 'boolean',
76
- 'symbol',
77
- ] as const
78
-
79
- type PrimitiveTypeName = (typeof primitiveTypeNames)[number]
80
-
81
- function isPrimitiveTypeName(name: unknown): name is PrimitiveTypeName {
82
- return primitiveTypeNames.includes(name as PrimitiveTypeName)
83
- }
84
-
85
- export type TypeName = ObjectTypeName | PrimitiveTypeName
86
-
87
- function isOfType<T extends Primitive | Function>(type: PrimitiveTypeName | 'function') {
88
- return (value: unknown): value is T => typeof value === type
89
- }
90
-
91
- const { toString } = Object.prototype
92
- const getObjectType = (value: unknown): ObjectTypeName | undefined => {
93
- const objectTypeName = toString.call(value).slice(8, -1)
94
-
95
- if (/HTML\w+Element/.test(objectTypeName) && is.domElement(value)) {
96
- return 'HTMLElement'
97
- }
98
-
99
- if (isObjectTypeName(objectTypeName)) {
100
- return objectTypeName
101
- }
102
-
103
- return undefined
104
- }
105
-
106
- const isObjectOfType =
107
- <T>(type: ObjectTypeName) =>
108
- (value: unknown): value is T =>
109
- getObjectType(value) === type
110
-
111
- export function is(value: unknown): TypeName {
112
- if (value === null) {
113
- return 'null'
114
- }
115
-
116
- switch (typeof value) {
117
- case 'undefined':
118
- return 'undefined'
119
- case 'string':
120
- return 'string'
121
- case 'number':
122
- return 'number'
123
- case 'boolean':
124
- return 'boolean'
125
- case 'function':
126
- return 'Function'
127
- case 'bigint':
128
- return 'bigint'
129
- case 'symbol':
130
- return 'symbol'
131
- default:
132
- }
133
-
134
- if (is.observable(value)) {
135
- return 'Observable'
136
- }
137
-
138
- if (is.array(value)) {
139
- return 'Array'
140
- }
141
-
142
- if (is.buffer(value)) {
143
- return 'Buffer'
144
- }
145
-
146
- const tagType = getObjectType(value)
147
- if (tagType) {
148
- return tagType
149
- }
150
-
151
- if (
152
- (value as any) instanceof String ||
153
- (value as any) instanceof Boolean ||
154
- (value as any) instanceof Number
155
- ) {
156
- throw new TypeError("Please don't use object wrappers for primitive types")
157
- }
158
-
159
- return 'Object'
160
- }
161
-
162
- is.undefined = isOfType<undefined>('undefined')
163
- is.string = isOfType<string>('string')
164
-
165
- const isNumberType = isOfType<number>('number')
166
- is.number = (value: unknown): value is number => isNumberType(value) && !is.nan(value)
167
-
168
- is.bigint = isOfType<bigint>('bigint')
169
-
170
- is.function_ = isOfType<Function>('function')
171
-
172
- is.null_ = (value: unknown): value is null => value === null
173
- is.class_ = (value: unknown): value is Class =>
174
- is.function_(value) && value.toString().startsWith('class ')
175
- is.boolean = (value: unknown): value is boolean => value === true || value === false
176
- is.symbol = isOfType<symbol>('symbol')
177
-
178
- is.numericString = (value: unknown): value is string =>
179
- is.string(value) && !is.emptyStringOrWhitespace(value) && !Number.isNaN(Number(value))
180
-
181
- is.array = <T = unknown>(value: unknown, assertion?: (value: T) => value is T): value is T[] => {
182
- if (!Array.isArray(value)) {
183
- return false
184
- }
185
-
186
- if (!is.function_(assertion)) {
187
- return true
188
- }
189
-
190
- return value.every(assertion)
191
- }
192
-
193
- is.buffer = (value: unknown): value is Buffer =>
194
- (value as any)?.constructor?.isBuffer?.(value) ?? false
195
-
196
- is.nullOrUndefined = (value: unknown): value is null | undefined =>
197
- is.null_(value) || is.undefined(value)
198
- is.object = (value: unknown): value is object =>
199
- !is.null_(value) && (typeof value === 'object' || is.function_(value))
200
- is.iterable = <T = unknown>(value: unknown): value is IterableIterator<T> =>
201
- is.function_((value as IterableIterator<T>)?.[Symbol.iterator])
202
-
203
- is.asyncIterable = <T = unknown>(value: unknown): value is AsyncIterableIterator<T> =>
204
- is.function_((value as AsyncIterableIterator<T>)?.[Symbol.asyncIterator])
205
-
206
- is.generator = (value: unknown): value is Generator =>
207
- is.iterable(value) && is.function_(value.next) && is.function_(value.throw)
208
-
209
- is.asyncGenerator = (value: unknown): value is AsyncGenerator =>
210
- is.asyncIterable(value) && is.function_(value.next) && is.function_(value.throw)
211
-
212
- is.nativePromise = <T = unknown>(value: unknown): value is Promise<T> =>
213
- isObjectOfType<Promise<T>>('Promise')(value)
214
-
215
- const hasPromiseAPI = <T = unknown>(value: unknown): value is Promise<T> =>
216
- is.function_((value as Promise<T>)?.then) && is.function_((value as Promise<T>)?.catch)
217
-
218
- is.promise = <T = unknown>(value: unknown): value is Promise<T> =>
219
- is.nativePromise(value) || hasPromiseAPI(value)
220
-
221
- is.generatorFunction = isObjectOfType<GeneratorFunction>('GeneratorFunction')
222
-
223
- is.asyncGeneratorFunction = (value: unknown): value is (...args: any[]) => Promise<unknown> =>
224
- getObjectType(value) === 'AsyncGeneratorFunction'
225
-
226
- is.asyncFunction = <T = unknown>(value: unknown): value is (...args: any[]) => Promise<T> =>
227
- getObjectType(value) === 'AsyncFunction'
228
-
229
- is.boundFunction = (value: unknown): value is Function =>
230
- is.function_(value) && !value.hasOwnProperty('prototype')
231
-
232
- is.regExp = isObjectOfType<RegExp>('RegExp')
233
- is.date = isObjectOfType<Date>('Date')
234
- is.error = isObjectOfType<Error>('Error')
235
- is.map = <Key = unknown, Value = unknown>(value: unknown): value is Map<Key, Value> =>
236
- isObjectOfType<Map<Key, Value>>('Map')(value)
237
- is.set = <T = unknown>(value: unknown): value is Set<T> => isObjectOfType<Set<T>>('Set')(value)
238
- is.weakMap = <Key extends object = object, Value = unknown>(
239
- value: unknown,
240
- ): value is WeakMap<Key, Value> => isObjectOfType<WeakMap<Key, Value>>('WeakMap')(value)
241
- is.weakSet = (value: unknown): value is WeakSet<object> =>
242
- isObjectOfType<WeakSet<object>>('WeakSet')(value)
243
-
244
- is.int8Array = isObjectOfType<Int8Array>('Int8Array')
245
- is.uint8Array = isObjectOfType<Uint8Array>('Uint8Array')
246
- is.uint8ClampedArray = isObjectOfType<Uint8ClampedArray>('Uint8ClampedArray')
247
- is.int16Array = isObjectOfType<Int16Array>('Int16Array')
248
- is.uint16Array = isObjectOfType<Uint16Array>('Uint16Array')
249
- is.int32Array = isObjectOfType<Int32Array>('Int32Array')
250
- is.uint32Array = isObjectOfType<Uint32Array>('Uint32Array')
251
- is.float32Array = isObjectOfType<Float32Array>('Float32Array')
252
- is.float64Array = isObjectOfType<Float64Array>('Float64Array')
253
- is.bigInt64Array = isObjectOfType<BigInt64Array>('BigInt64Array')
254
- is.bigUint64Array = isObjectOfType<BigUint64Array>('BigUint64Array')
255
-
256
- is.arrayBuffer = isObjectOfType<ArrayBuffer>('ArrayBuffer')
257
- is.sharedArrayBuffer = isObjectOfType<SharedArrayBuffer>('SharedArrayBuffer')
258
- is.dataView = isObjectOfType<DataView>('DataView')
259
-
260
- is.directInstanceOf = <T>(instance: unknown, class_: Class<T>): instance is T =>
261
- Object.getPrototypeOf(instance) === class_.prototype
262
- is.urlInstance = (value: unknown): value is URL => isObjectOfType<URL>('URL')(value)
263
-
264
- is.urlString = (value: unknown): value is string => {
265
- if (!is.string(value)) {
266
- return false
267
- }
268
-
269
- try {
270
- new URL(value)
271
- return true
272
- } catch {
273
- return false
274
- }
275
- }
276
-
277
- // TODO: Use the `not` operator with a type guard here when it's available.
278
- // Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`
279
- is.truthy = (value: unknown) => Boolean(value)
280
- // Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`
281
- is.falsy = (value: unknown) => !value
282
-
283
- is.nan = (value: unknown) => Number.isNaN(value as number)
284
-
285
- is.primitive = (value: unknown): value is Primitive =>
286
- is.null_(value) || isPrimitiveTypeName(typeof value)
287
-
288
- is.integer = (value: unknown): value is number => Number.isInteger(value as number)
289
- is.safeInteger = (value: unknown): value is number => Number.isSafeInteger(value as number)
290
-
291
- is.plainObject = <Value = unknown>(value: unknown): value is Record<PropertyKey, Value> => {
292
- // From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js
293
- if (toString.call(value) !== '[object Object]') {
294
- return false
295
- }
296
-
297
- const prototype = Object.getPrototypeOf(value)
298
-
299
- return prototype === null || prototype === Object.getPrototypeOf({})
300
- }
301
-
302
- is.typedArray = (value: unknown): value is TypedArray => isTypedArrayName(getObjectType(value))
303
-
304
- export interface ArrayLike<T> {
305
- readonly [index: number]: T
306
- readonly length: number
307
- }
308
-
309
- const isValidLength = (value: unknown): value is number => is.safeInteger(value) && value >= 0
310
- is.arrayLike = <T = unknown>(value: unknown): value is ArrayLike<T> =>
311
- !is.nullOrUndefined(value) &&
312
- !is.function_(value) &&
313
- isValidLength((value as ArrayLike<T>).length)
314
-
315
- is.inRange = (value: number, range: number | number[]): value is number => {
316
- if (is.number(range)) {
317
- return value >= Math.min(0, range) && value <= Math.max(range, 0)
318
- }
319
-
320
- if (is.array(range) && range.length === 2) {
321
- return value >= Math.min(...range) && value <= Math.max(...range)
322
- }
323
-
324
- throw new TypeError(`Invalid range: ${JSON.stringify(range)}`)
325
- }
326
-
327
- const NODE_TYPE_ELEMENT = 1
328
- const DOM_PROPERTIES_TO_CHECK: (keyof HTMLElement)[] = [
329
- 'innerHTML',
330
- 'ownerDocument',
331
- 'style',
332
- 'attributes',
333
- 'nodeValue',
334
- ]
335
-
336
- is.domElement = (value: unknown): value is HTMLElement => {
337
- return (
338
- is.object(value) &&
339
- (value as HTMLElement).nodeType === NODE_TYPE_ELEMENT &&
340
- is.string((value as HTMLElement).nodeName) &&
341
- !is.plainObject(value) &&
342
- DOM_PROPERTIES_TO_CHECK.every(property => property in value)
343
- )
344
- }
345
-
346
- is.observable = (value: unknown): value is ObservableLike => {
347
- if (!value) {
348
- return false
349
- }
350
-
351
- if (value === (value as any)[Symbol.observable]?.()) {
352
- return true
353
- }
354
-
355
- if (value === (value as any)['@@observable']?.()) {
356
- return true
357
- }
358
-
359
- return false
360
- }
361
-
362
- export interface NodeStream extends NodeJS.EventEmitter {
363
- pipe<T extends NodeJS.WritableStream>(destination: T, options?: { end?: boolean }): T
364
- }
365
-
366
- is.nodeStream = (value: unknown): value is NodeStream =>
367
- is.object(value) && is.function_((value as NodeStream).pipe) && !is.observable(value)
368
-
369
- is.infinite = (value: unknown): value is number => value === Infinity || value === -Infinity
370
-
371
- const isAbsoluteMod2 =
372
- (remainder: number) =>
373
- (value: number): value is number =>
374
- is.integer(value) && Math.abs(value % 2) === remainder
375
- is.evenInteger = isAbsoluteMod2(0)
376
- is.oddInteger = isAbsoluteMod2(1)
377
-
378
- is.emptyArray = (value: unknown): value is never[] => is.array(value) && value.length === 0
379
- is.nonEmptyArray = (value: unknown): value is unknown[] => is.array(value) && value.length > 0
380
-
381
- is.emptyString = (value: unknown): value is '' => is.string(value) && value.length === 0
382
-
383
- // TODO: Use `not ''` when the `not` operator is available.
384
- is.nonEmptyString = (value: unknown): value is string => is.string(value) && value.length > 0
385
-
386
- const isWhiteSpaceString = (value: unknown): value is string =>
387
- is.string(value) && !/\S/.test(value)
388
- is.emptyStringOrWhitespace = (value: unknown): value is string =>
389
- is.emptyString(value) || isWhiteSpaceString(value)
390
-
391
- is.emptyObject = <Key extends keyof any = string>(value: unknown): value is Record<Key, never> =>
392
- is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0
393
-
394
- // TODO: Use `not` operator here to remove `Map` and `Set` from type guard:
395
- // - https://github.com/Microsoft/TypeScript/pull/29317
396
- is.nonEmptyObject = <Key extends keyof any = string, Value = unknown>(
397
- value: unknown,
398
- ): value is Record<Key, Value> =>
399
- is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0
400
-
401
- is.emptySet = (value: unknown): value is Set<never> => is.set(value) && value.size === 0
402
- is.nonEmptySet = <T = unknown>(value: unknown): value is Set<T> => is.set(value) && value.size > 0
403
-
404
- is.emptyMap = (value: unknown): value is Map<never, never> => is.map(value) && value.size === 0
405
- is.nonEmptyMap = <Key = unknown, Value = unknown>(value: unknown): value is Map<Key, Value> =>
406
- is.map(value) && value.size > 0
407
-
408
- // `PropertyKey` is any value that can be used as an object key (string, number, or symbol)
409
- is.propertyKey = (value: unknown): value is PropertyKey =>
410
- is.any([is.string, is.number, is.symbol], value)
411
- is.formData = (value: unknown): value is FormData => isObjectOfType<FormData>('FormData')(value)
412
-
413
- is.urlSearchParams = (value: unknown): value is URLSearchParams =>
414
- isObjectOfType<URLSearchParams>('URLSearchParams')(value)
415
-
416
- export type Predicate = (value: unknown) => boolean
417
-
418
- type ArrayMethod = (
419
- fn: (value: unknown, index: number, array: unknown[]) => boolean,
420
- thisArg?: unknown,
421
- ) => boolean
422
-
423
- const predicateOnArray = (method: ArrayMethod, predicate: Predicate, values: unknown[]) => {
424
- if (!is.function_(predicate)) {
425
- throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`)
426
- }
427
-
428
- if (values.length === 0) {
429
- throw new TypeError('Invalid number of values')
430
- }
431
-
432
- return method.call(values, predicate)
433
- }
434
-
435
- is.any = (predicate: Predicate | Predicate[], ...values: unknown[]): boolean => {
436
- const predicates = is.array(predicate) ? predicate : [predicate]
437
- return predicates.some(singlePredicate =>
438
- predicateOnArray(Array.prototype.some, singlePredicate, values),
439
- )
440
- }
441
-
442
- is.all = (predicate: Predicate, ...values: unknown[]): boolean =>
443
- predicateOnArray(Array.prototype.every, predicate, values)
444
-
445
- const assertType = (
446
- condition: boolean,
447
- description: string,
448
- value: unknown,
449
- options: { multipleValues?: boolean } = {},
450
- ): asserts condition => {
451
- if (!condition) {
452
- const { multipleValues } = options
453
- const valuesMessage = multipleValues
454
- ? `received values of types ${[
455
- ...new Set((value as any[]).map(singleValue => `\`${is(singleValue)}\``)),
456
- ].join(', ')}`
457
- : `received value of type \`${is(value)}\``
458
-
459
- throw new TypeError(`Expected value which is \`${description}\`, ${valuesMessage}.`)
460
- }
461
- }
462
-
463
- export const enum AssertionTypeDescription {
464
- class_ = 'Class',
465
- numericString = 'string with a number',
466
- nullOrUndefined = 'null or undefined',
467
- iterable = 'Iterable',
468
- asyncIterable = 'AsyncIterable',
469
- nativePromise = 'native Promise',
470
- urlString = 'string with a URL',
471
- truthy = 'truthy',
472
- falsy = 'falsy',
473
- nan = 'NaN',
474
- primitive = 'primitive',
475
- integer = 'integer',
476
- safeInteger = 'integer',
477
- plainObject = 'plain object',
478
- arrayLike = 'array-like',
479
- typedArray = 'TypedArray',
480
- domElement = 'HTMLElement',
481
- nodeStream = 'Node.js Stream',
482
- infinite = 'infinite number',
483
- emptyArray = 'empty array',
484
- nonEmptyArray = 'non-empty array',
485
- emptyString = 'empty string',
486
- nonEmptyString = 'non-empty string',
487
- emptyStringOrWhitespace = 'empty string or whitespace',
488
- emptyObject = 'empty object',
489
- nonEmptyObject = 'non-empty object',
490
- emptySet = 'empty set',
491
- nonEmptySet = 'non-empty set',
492
- emptyMap = 'empty map',
493
- nonEmptyMap = 'non-empty map',
494
-
495
- evenInteger = 'even integer',
496
- oddInteger = 'odd integer',
497
-
498
- directInstanceOf = 'T',
499
- inRange = 'in range',
500
-
501
- any = 'predicate returns truthy for any value',
502
- all = 'predicate returns truthy for all values',
503
- }
504
-
505
- // Type assertions have to be declared with an explicit type.
506
- interface Assert {
507
- // Unknowns.
508
- undefined: (value: unknown) => asserts value is undefined
509
- string: (value: unknown) => asserts value is string
510
- number: (value: unknown) => asserts value is number
511
- bigint: (value: unknown) => asserts value is bigint
512
-
513
- function_: (value: unknown) => asserts value is Function
514
- null_: (value: unknown) => asserts value is null
515
- class_: (value: unknown) => asserts value is Class
516
- boolean: (value: unknown) => asserts value is boolean
517
- symbol: (value: unknown) => asserts value is symbol
518
- numericString: (value: unknown) => asserts value is string
519
- array: <T = unknown>(
520
- value: unknown,
521
- assertion?: (element: unknown) => asserts element is T,
522
- ) => asserts value is T[]
523
- buffer: (value: unknown) => asserts value is Buffer
524
- nullOrUndefined: (value: unknown) => asserts value is null | undefined
525
- object: <Key extends keyof any = string, Value = unknown>(
526
- value: unknown,
527
- ) => asserts value is Record<Key, Value>
528
- iterable: <T = unknown>(value: unknown) => asserts value is Iterable<T>
529
- asyncIterable: <T = unknown>(value: unknown) => asserts value is AsyncIterable<T>
530
- generator: (value: unknown) => asserts value is Generator
531
- asyncGenerator: (value: unknown) => asserts value is AsyncGenerator
532
- nativePromise: <T = unknown>(value: unknown) => asserts value is Promise<T>
533
- promise: <T = unknown>(value: unknown) => asserts value is Promise<T>
534
- generatorFunction: (value: unknown) => asserts value is GeneratorFunction
535
- asyncGeneratorFunction: (value: unknown) => asserts value is AsyncGeneratorFunction
536
-
537
- asyncFunction: (value: unknown) => asserts value is Function
538
-
539
- boundFunction: (value: unknown) => asserts value is Function
540
- regExp: (value: unknown) => asserts value is RegExp
541
- date: (value: unknown) => asserts value is Date
542
- error: (value: unknown) => asserts value is Error
543
- map: <Key = unknown, Value = unknown>(value: unknown) => asserts value is Map<Key, Value>
544
- set: <T = unknown>(value: unknown) => asserts value is Set<T>
545
- weakMap: <Key extends object = object, Value = unknown>(
546
- value: unknown,
547
- ) => asserts value is WeakMap<Key, Value>
548
- weakSet: <T extends object = object>(value: unknown) => asserts value is WeakSet<T>
549
- int8Array: (value: unknown) => asserts value is Int8Array
550
- uint8Array: (value: unknown) => asserts value is Uint8Array
551
- uint8ClampedArray: (value: unknown) => asserts value is Uint8ClampedArray
552
- int16Array: (value: unknown) => asserts value is Int16Array
553
- uint16Array: (value: unknown) => asserts value is Uint16Array
554
- int32Array: (value: unknown) => asserts value is Int32Array
555
- uint32Array: (value: unknown) => asserts value is Uint32Array
556
- float32Array: (value: unknown) => asserts value is Float32Array
557
- float64Array: (value: unknown) => asserts value is Float64Array
558
- bigInt64Array: (value: unknown) => asserts value is BigInt64Array
559
- bigUint64Array: (value: unknown) => asserts value is BigUint64Array
560
- arrayBuffer: (value: unknown) => asserts value is ArrayBuffer
561
- sharedArrayBuffer: (value: unknown) => asserts value is SharedArrayBuffer
562
- dataView: (value: unknown) => asserts value is DataView
563
- urlInstance: (value: unknown) => asserts value is URL
564
- urlString: (value: unknown) => asserts value is string
565
- truthy: (value: unknown) => asserts value is unknown
566
- falsy: (value: unknown) => asserts value is unknown
567
- nan: (value: unknown) => asserts value is unknown
568
- primitive: (value: unknown) => asserts value is Primitive
569
- integer: (value: unknown) => asserts value is number
570
- safeInteger: (value: unknown) => asserts value is number
571
- plainObject: <Value = unknown>(value: unknown) => asserts value is Record<PropertyKey, Value>
572
- typedArray: (value: unknown) => asserts value is TypedArray
573
- arrayLike: <T = unknown>(value: unknown) => asserts value is ArrayLike<T>
574
- domElement: (value: unknown) => asserts value is HTMLElement
575
- observable: (value: unknown) => asserts value is ObservableLike
576
- nodeStream: (value: unknown) => asserts value is NodeStream
577
- infinite: (value: unknown) => asserts value is number
578
- emptyArray: (value: unknown) => asserts value is never[]
579
- nonEmptyArray: (value: unknown) => asserts value is unknown[]
580
- emptyString: (value: unknown) => asserts value is ''
581
- nonEmptyString: (value: unknown) => asserts value is string
582
- emptyStringOrWhitespace: (value: unknown) => asserts value is string
583
- emptyObject: <Key extends keyof any = string>(
584
- value: unknown,
585
- ) => asserts value is Record<Key, never>
586
- nonEmptyObject: <Key extends keyof any = string, Value = unknown>(
587
- value: unknown,
588
- ) => asserts value is Record<Key, Value>
589
- emptySet: (value: unknown) => asserts value is Set<never>
590
- nonEmptySet: <T = unknown>(value: unknown) => asserts value is Set<T>
591
- emptyMap: (value: unknown) => asserts value is Map<never, never>
592
- nonEmptyMap: <Key = unknown, Value = unknown>(value: unknown) => asserts value is Map<Key, Value>
593
- propertyKey: (value: unknown) => asserts value is PropertyKey
594
- formData: (value: unknown) => asserts value is FormData
595
- urlSearchParams: (value: unknown) => asserts value is URLSearchParams
596
-
597
- // Numbers.
598
- evenInteger: (value: number) => asserts value is number
599
- oddInteger: (value: number) => asserts value is number
600
-
601
- // Two arguments.
602
- directInstanceOf: <T>(instance: unknown, class_: Class<T>) => asserts instance is T
603
- inRange: (value: number, range: number | number[]) => asserts value is number
604
-
605
- // Variadic functions.
606
- any: (predicate: Predicate | Predicate[], ...values: unknown[]) => void | never
607
- all: (predicate: Predicate, ...values: unknown[]) => void | never
608
- }
609
-
610
- export const assert: Assert = {
611
- // Unknowns.
612
- undefined: (value: unknown): asserts value is undefined =>
613
- assertType(is.undefined(value), 'undefined', value),
614
- string: (value: unknown): asserts value is string =>
615
- assertType(is.string(value), 'string', value),
616
- number: (value: unknown): asserts value is number =>
617
- assertType(is.number(value), 'number', value),
618
- bigint: (value: unknown): asserts value is bigint =>
619
- assertType(is.bigint(value), 'bigint', value),
620
-
621
- function_: (value: unknown): asserts value is Function =>
622
- assertType(is.function_(value), 'Function', value),
623
- null_: (value: unknown): asserts value is null => assertType(is.null_(value), 'null', value),
624
- class_: (value: unknown): asserts value is Class =>
625
- assertType(is.class_(value), AssertionTypeDescription.class_, value),
626
- boolean: (value: unknown): asserts value is boolean =>
627
- assertType(is.boolean(value), 'boolean', value),
628
- symbol: (value: unknown): asserts value is symbol =>
629
- assertType(is.symbol(value), 'symbol', value),
630
- numericString: (value: unknown): asserts value is string =>
631
- assertType(is.numericString(value), AssertionTypeDescription.numericString, value),
632
- array: <T = unknown>(
633
- value: unknown,
634
- assertion?: (element: unknown) => asserts element is T,
635
- ): asserts value is T[] => {
636
- const assert: (condition: boolean, description: string, value: unknown) => asserts condition =
637
- assertType
638
- assert(is.array(value), 'Array', value)
639
-
640
- if (assertion) {
641
- value.forEach(assertion)
642
- }
643
- },
644
- buffer: (value: unknown): asserts value is Buffer =>
645
- assertType(is.buffer(value), 'Buffer', value),
646
- nullOrUndefined: (value: unknown): asserts value is null | undefined =>
647
- assertType(is.nullOrUndefined(value), AssertionTypeDescription.nullOrUndefined, value),
648
- object: (value: unknown): asserts value is object =>
649
- assertType(is.object(value), 'Object', value),
650
- iterable: <T = unknown>(value: unknown): asserts value is Iterable<T> =>
651
- assertType(is.iterable(value), AssertionTypeDescription.iterable, value),
652
- asyncIterable: <T = unknown>(value: unknown): asserts value is AsyncIterable<T> =>
653
- assertType(is.asyncIterable(value), AssertionTypeDescription.asyncIterable, value),
654
- generator: (value: unknown): asserts value is Generator =>
655
- assertType(is.generator(value), 'Generator', value),
656
- asyncGenerator: (value: unknown): asserts value is AsyncGenerator =>
657
- assertType(is.asyncGenerator(value), 'AsyncGenerator', value),
658
- nativePromise: <T = unknown>(value: unknown): asserts value is Promise<T> =>
659
- assertType(is.nativePromise(value), AssertionTypeDescription.nativePromise, value),
660
- promise: <T = unknown>(value: unknown): asserts value is Promise<T> =>
661
- assertType(is.promise(value), 'Promise', value),
662
- generatorFunction: (value: unknown): asserts value is GeneratorFunction =>
663
- assertType(is.generatorFunction(value), 'GeneratorFunction', value),
664
- asyncGeneratorFunction: (value: unknown): asserts value is AsyncGeneratorFunction =>
665
- assertType(is.asyncGeneratorFunction(value), 'AsyncGeneratorFunction', value),
666
-
667
- asyncFunction: (value: unknown): asserts value is Function =>
668
- assertType(is.asyncFunction(value), 'AsyncFunction', value),
669
-
670
- boundFunction: (value: unknown): asserts value is Function =>
671
- assertType(is.boundFunction(value), 'Function', value),
672
- regExp: (value: unknown): asserts value is RegExp =>
673
- assertType(is.regExp(value), 'RegExp', value),
674
- date: (value: unknown): asserts value is Date => assertType(is.date(value), 'Date', value),
675
- error: (value: unknown): asserts value is Error => assertType(is.error(value), 'Error', value),
676
- map: <Key = unknown, Value = unknown>(value: unknown): asserts value is Map<Key, Value> =>
677
- assertType(is.map(value), 'Map', value),
678
- set: <T = unknown>(value: unknown): asserts value is Set<T> =>
679
- assertType(is.set(value), 'Set', value),
680
- weakMap: <Key extends object = object, Value = unknown>(
681
- value: unknown,
682
- ): asserts value is WeakMap<Key, Value> => assertType(is.weakMap(value), 'WeakMap', value),
683
- weakSet: <T extends object = object>(value: unknown): asserts value is WeakSet<T> =>
684
- assertType(is.weakSet(value), 'WeakSet', value),
685
- int8Array: (value: unknown): asserts value is Int8Array =>
686
- assertType(is.int8Array(value), 'Int8Array', value),
687
- uint8Array: (value: unknown): asserts value is Uint8Array =>
688
- assertType(is.uint8Array(value), 'Uint8Array', value),
689
- uint8ClampedArray: (value: unknown): asserts value is Uint8ClampedArray =>
690
- assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value),
691
- int16Array: (value: unknown): asserts value is Int16Array =>
692
- assertType(is.int16Array(value), 'Int16Array', value),
693
- uint16Array: (value: unknown): asserts value is Uint16Array =>
694
- assertType(is.uint16Array(value), 'Uint16Array', value),
695
- int32Array: (value: unknown): asserts value is Int32Array =>
696
- assertType(is.int32Array(value), 'Int32Array', value),
697
- uint32Array: (value: unknown): asserts value is Uint32Array =>
698
- assertType(is.uint32Array(value), 'Uint32Array', value),
699
- float32Array: (value: unknown): asserts value is Float32Array =>
700
- assertType(is.float32Array(value), 'Float32Array', value),
701
- float64Array: (value: unknown): asserts value is Float64Array =>
702
- assertType(is.float64Array(value), 'Float64Array', value),
703
- bigInt64Array: (value: unknown): asserts value is BigInt64Array =>
704
- assertType(is.bigInt64Array(value), 'BigInt64Array', value),
705
- bigUint64Array: (value: unknown): asserts value is BigUint64Array =>
706
- assertType(is.bigUint64Array(value), 'BigUint64Array', value),
707
- arrayBuffer: (value: unknown): asserts value is ArrayBuffer =>
708
- assertType(is.arrayBuffer(value), 'ArrayBuffer', value),
709
- sharedArrayBuffer: (value: unknown): asserts value is SharedArrayBuffer =>
710
- assertType(is.sharedArrayBuffer(value), 'SharedArrayBuffer', value),
711
- dataView: (value: unknown): asserts value is DataView =>
712
- assertType(is.dataView(value), 'DataView', value),
713
- urlInstance: (value: unknown): asserts value is URL =>
714
- assertType(is.urlInstance(value), 'URL', value),
715
- urlString: (value: unknown): asserts value is string =>
716
- assertType(is.urlString(value), AssertionTypeDescription.urlString, value),
717
- truthy: (value: unknown): asserts value is unknown =>
718
- assertType(is.truthy(value), AssertionTypeDescription.truthy, value),
719
- falsy: (value: unknown): asserts value is unknown =>
720
- assertType(is.falsy(value), AssertionTypeDescription.falsy, value),
721
- nan: (value: unknown): asserts value is unknown =>
722
- assertType(is.nan(value), AssertionTypeDescription.nan, value),
723
- primitive: (value: unknown): asserts value is Primitive =>
724
- assertType(is.primitive(value), AssertionTypeDescription.primitive, value),
725
- integer: (value: unknown): asserts value is number =>
726
- assertType(is.integer(value), AssertionTypeDescription.integer, value),
727
- safeInteger: (value: unknown): asserts value is number =>
728
- assertType(is.safeInteger(value), AssertionTypeDescription.safeInteger, value),
729
- plainObject: <Value = unknown>(value: unknown): asserts value is Record<PropertyKey, Value> =>
730
- assertType(is.plainObject(value), AssertionTypeDescription.plainObject, value),
731
- typedArray: (value: unknown): asserts value is TypedArray =>
732
- assertType(is.typedArray(value), AssertionTypeDescription.typedArray, value),
733
- arrayLike: <T = unknown>(value: unknown): asserts value is ArrayLike<T> =>
734
- assertType(is.arrayLike(value), AssertionTypeDescription.arrayLike, value),
735
- domElement: (value: unknown): asserts value is HTMLElement =>
736
- assertType(is.domElement(value), AssertionTypeDescription.domElement, value),
737
- observable: (value: unknown): asserts value is ObservableLike =>
738
- assertType(is.observable(value), 'Observable', value),
739
- nodeStream: (value: unknown): asserts value is NodeStream =>
740
- assertType(is.nodeStream(value), AssertionTypeDescription.nodeStream, value),
741
- infinite: (value: unknown): asserts value is number =>
742
- assertType(is.infinite(value), AssertionTypeDescription.infinite, value),
743
- emptyArray: (value: unknown): asserts value is never[] =>
744
- assertType(is.emptyArray(value), AssertionTypeDescription.emptyArray, value),
745
- nonEmptyArray: (value: unknown): asserts value is unknown[] =>
746
- assertType(is.nonEmptyArray(value), AssertionTypeDescription.nonEmptyArray, value),
747
- emptyString: (value: unknown): asserts value is '' =>
748
- assertType(is.emptyString(value), AssertionTypeDescription.emptyString, value),
749
- nonEmptyString: (value: unknown): asserts value is string =>
750
- assertType(is.nonEmptyString(value), AssertionTypeDescription.nonEmptyString, value),
751
- emptyStringOrWhitespace: (value: unknown): asserts value is string =>
752
- assertType(
753
- is.emptyStringOrWhitespace(value),
754
- AssertionTypeDescription.emptyStringOrWhitespace,
755
- value,
756
- ),
757
- emptyObject: <Key extends keyof any = string>(
758
- value: unknown,
759
- ): asserts value is Record<Key, never> =>
760
- assertType(is.emptyObject(value), AssertionTypeDescription.emptyObject, value),
761
- nonEmptyObject: <Key extends keyof any = string, Value = unknown>(
762
- value: unknown,
763
- ): asserts value is Record<Key, Value> =>
764
- assertType(is.nonEmptyObject(value), AssertionTypeDescription.nonEmptyObject, value),
765
- emptySet: (value: unknown): asserts value is Set<never> =>
766
- assertType(is.emptySet(value), AssertionTypeDescription.emptySet, value),
767
- nonEmptySet: <T = unknown>(value: unknown): asserts value is Set<T> =>
768
- assertType(is.nonEmptySet(value), AssertionTypeDescription.nonEmptySet, value),
769
- emptyMap: (value: unknown): asserts value is Map<never, never> =>
770
- assertType(is.emptyMap(value), AssertionTypeDescription.emptyMap, value),
771
- nonEmptyMap: <Key = unknown, Value = unknown>(value: unknown): asserts value is Map<Key, Value> =>
772
- assertType(is.nonEmptyMap(value), AssertionTypeDescription.nonEmptyMap, value),
773
- propertyKey: (value: unknown): asserts value is number =>
774
- assertType(is.propertyKey(value), 'PropertyKey', value),
775
- formData: (value: unknown): asserts value is FormData =>
776
- assertType(is.formData(value), 'FormData', value),
777
- urlSearchParams: (value: unknown): asserts value is URLSearchParams =>
778
- assertType(is.urlSearchParams(value), 'URLSearchParams', value),
779
-
780
- // Numbers.
781
- evenInteger: (value: number): asserts value is number =>
782
- assertType(is.evenInteger(value), AssertionTypeDescription.evenInteger, value),
783
- oddInteger: (value: number): asserts value is number =>
784
- assertType(is.oddInteger(value), AssertionTypeDescription.oddInteger, value),
785
-
786
- // Two arguments.
787
- directInstanceOf: <T>(instance: unknown, class_: Class<T>): asserts instance is T =>
788
- assertType(
789
- is.directInstanceOf(instance, class_),
790
- AssertionTypeDescription.directInstanceOf,
791
- instance,
792
- ),
793
- inRange: (value: number, range: number | number[]): asserts value is number =>
794
- assertType(is.inRange(value, range), AssertionTypeDescription.inRange, value),
795
-
796
- // Variadic functions.
797
- any: (predicate: Predicate | Predicate[], ...values: unknown[]): void | never => {
798
- return assertType(is.any(predicate, ...values), AssertionTypeDescription.any, values, {
799
- multipleValues: true,
800
- })
801
- },
802
- all: (predicate: Predicate, ...values: unknown[]): void | never =>
803
- assertType(is.all(predicate, ...values), AssertionTypeDescription.all, values, {
804
- multipleValues: true,
805
- }),
806
- }
807
-
808
- // Some few keywords are reserved, but we'll populate them for Node.js users
809
- // See https://github.com/Microsoft/TypeScript/issues/2536
810
- Object.defineProperties(is, {
811
- class: {
812
- value: is.class_,
813
- },
814
- function: {
815
- value: is.function_,
816
- },
817
- null: {
818
- value: is.null_,
819
- },
820
- })
821
- Object.defineProperties(assert, {
822
- class: {
823
- value: assert.class_,
824
- },
825
- function: {
826
- value: assert.function_,
827
- },
828
- null: {
829
- value: assert.null_,
830
- },
831
- })
832
-
833
- // export {Class, TypedArray, ObservableLike, Primitive} from './types';