Merge branch 'master' into observable-improvement

This commit is contained in:
Sindre Sorhus 2018-12-13 16:52:43 +01:00 committed by GitHub
commit aa9b4994d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 3 deletions

View file

@ -2,6 +2,7 @@
/// <reference lib="es2017.sharedmemory"/>
/// <reference lib="esnext.asynciterable"/>
/// <reference lib="dom"/>
import {URL} from 'url';
type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
type Primitive = null | undefined | string | number | boolean | Symbol;
@ -188,6 +189,19 @@ namespace is { // tslint:disable-line:no-namespace
export const directInstanceOf = <T>(instance: unknown, klass: Class<T>): instance is T => Object.getPrototypeOf(instance) === klass.prototype;
export const urlInstance = (value: unknown): value is URL => isObjectOfType<URL>(TypeName.URL)(value);
export const urlString = (value: unknown) => {
if (!string(value)) {
return false;
}
try {
new URL(value); // tslint:disable-line no-unused-expression
return true;
} catch {
return false;
}
};
export const truthy = (value: unknown) => Boolean(value);
export const falsy = (value: unknown) => !value;

View file

@ -576,13 +576,22 @@ test('is.directInstanceOf', t => {
});
test('is.urlInstance', t => {
const url = new URL('https://www.example.com');
const url = new URL('https://example.com');
t.true(is.urlInstance(url));
t.false(is.urlInstance({}));
t.false(is.urlInstance(undefined));
t.false(is.urlInstance(null));
});
test('is.urlString', t => {
const url = 'https://example.com';
t.true(is.urlString(url));
t.false(is.urlString(new URL(url)));
t.false(is.urlString({}));
t.false(is.urlString(undefined));
t.false(is.urlString(null));
});
test('is.truthy', t => {
t.true(is.truthy('unicorn'));
t.true(is.truthy('🦄'));
@ -681,8 +690,9 @@ test('is.class', t => {
});
test('is.typedArray', t => {
// Typescript currently does not support empty constructors for these
// TypeScript currently does not support empty constructors for these
// See https://github.com/Microsoft/TypeScript/issues/19680
// TODO: Remove the `0` when targeting `es2017` (Node.js 8), in other places of this file too.
const typedArrays = [
new Int8Array(0),
new Uint8Array(0),