diff --git a/.travis.yml b/.travis.yml index f98fed0..94ab01f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,4 +2,3 @@ language: node_js node_js: - '12' - '10' - - '8' diff --git a/package.json b/package.json index b6bc236..1ffa0e6 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ }, "main": "dist", "engines": { - "node": ">=8" + "node": ">=10" }, "scripts": { "build": "del dist && tsc", @@ -46,9 +46,9 @@ "types" ], "devDependencies": { - "@sindresorhus/tsconfig": "^0.4.0", + "@sindresorhus/tsconfig": "^0.6.0", "@types/jsdom": "^12.2.4", - "@types/node": "^12.0.10", + "@types/node": "^12.12.6", "@types/zen-observable": "^0.8.0", "@typescript-eslint/eslint-plugin": "^1.11.0", "@typescript-eslint/parser": "^1.11.0", @@ -60,7 +60,7 @@ "tempy": "^0.3.0", "ts-node": "^8.3.0", "typescript": "^3.4.1", - "xo": "^0.24.0", + "xo": "^0.25.3", "zen-observable": "^0.8.8" }, "types": "dist", @@ -86,8 +86,6 @@ "BigUint64Array" ], "rules": { - "import/first": "off", - "import/newline-after-import": "off", "@typescript-eslint/promise-function-async": "off", "@typescript-eslint/no-empty-function": "off", "@typescript-eslint/explicit-function-return-type": "off" diff --git a/source/index.ts b/source/index.ts index 9bb06dd..2cfe2c3 100644 --- a/source/index.ts +++ b/source/index.ts @@ -1,9 +1,6 @@ -/// +/// /// -// TODO: Use the `URL` global when targeting Node.js 10 -const URLGlobal = typeof URL === 'undefined' ? require('url').URL : URL; - export type Class = new (...args: any[]) => T; export const enum TypeName { @@ -194,7 +191,7 @@ is.urlString = (value: unknown): value is string => { } try { - new URLGlobal(value); // eslint-disable-line no-new + new URL(value); // eslint-disable-line no-new return true; } catch { return false; @@ -219,7 +216,14 @@ const primitiveTypeOfTypes = new Set([ ]); // TODO: This should be able to be `not object` when the `not` operator is out -export type Primitive = null | undefined | string | number | bigint | boolean | symbol; +export type Primitive = + | null + | undefined + | string + | number + | bigint + | boolean + | symbol; is.primitive = (value: unknown): value is Primitive => is.null_(value) || primitiveTypeOfTypes.has(typeof value); @@ -251,7 +255,18 @@ const typedArrayTypes = new Set([ TypeName.BigUint64Array ]); -export type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array; +export type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array + | BigInt64Array + | BigUint64Array; is.typedArray = (value: unknown): value is TypedArray => { const objectType = getObjectType(value); diff --git a/test/test.ts b/test/test.ts index 748ce7a..cbf59b0 100644 --- a/test/test.ts +++ b/test/test.ts @@ -9,10 +9,6 @@ import {Subject, Observable} from 'rxjs'; import ZenObservable = require('zen-observable'); import is, {TypeName} from '../source'; -const URLGlobal = typeof URL === 'undefined' ? require('url').URL : URL; - -const isNode10orHigher = Number(process.versions.node.split('.')[0]) >= 10; - class PromiseSubclassFixture extends Promise {} class ErrorSubclassFixture extends Error {} @@ -70,18 +66,17 @@ const types = new Map([ ], typename: TypeName.number }], - // TODO: Nodejs 10 only - // ['bigint', { - // is: is.bigint, - // fixtures: [ - // 1n, - // 0n, - // -0n, - // // eslint-disable-next-line new-cap - // BigInt('1234') - // ], - // typename: TypeName.bigint - // }], + ['bigint', { + is: is.bigint, + fixtures: [ + // Disabled until TS supports it for an ESnnnn target. + // 1n, + // 0n, + // -0n, + BigInt('1234') + ], + typename: TypeName.bigint + }], ['boolean', { is: is.boolean, fixtures: [ @@ -151,7 +146,7 @@ const types = new Map([ is: is.regExp, fixtures: [ /\w/, - new RegExp('\\w') + new RegExp('\\w') // eslint-disable-line prefer-regex-literals ], typename: TypeName.RegExp }], @@ -324,21 +319,20 @@ const types = new Map([ ], typename: TypeName.Float64Array }], - // TODO: Nodejs 10 only - // ['bigInt64Array', { - // is: is.bigInt64Array, - // fixtures: [ - // new BigInt64Array() - // ], - // typename: TypeName.BigInt64Array - // }], - // ['bigUint64Array', { - // is: is.bigUint64Array, - // fixtures: [ - // new BigUint64Array() - // ], - // typename: TypeName.BigUint64Array - // }], + ['bigInt64Array', { + is: is.bigInt64Array, + fixtures: [ + new BigInt64Array() + ], + typename: TypeName.BigInt64Array + }], + ['bigUint64Array', { + is: is.bigUint64Array, + fixtures: [ + new BigUint64Array() + ], + typename: TypeName.BigUint64Array + }], ['arrayBuffer', { is: is.arrayBuffer, fixtures: [ @@ -496,10 +490,9 @@ test('is.number', t => { testType(t, 'number', ['integer', 'safeInteger', 'infinite']); }); -// TODO: Nodejs 10 only -// test('is.bigint', t => { -// testType(t, 'bigint'); -// }); +test('is.bigint', t => { + testType(t, 'bigint'); +}); test('is.boolean', t => { testType(t, 'boolean'); @@ -629,14 +622,13 @@ test('is.float64Array', t => { testType(t, 'float64Array'); }); -// TODO: Nodejs 10 only -// test('is.bigInt64Array', t => { -// testType(t, 'bigInt64Array'); -// }); +test('is.bigInt64Array', t => { + testType(t, 'bigInt64Array'); +}); -// test('is.bigUint64Array', t => { -// testType(t, 'bigUint64Array'); -// }); +test('is.bigUint64Array', t => { + testType(t, 'bigUint64Array'); +}); test('is.arrayBuffer', t => { testType(t, 'arrayBuffer'); @@ -658,7 +650,7 @@ test('is.directInstanceOf', t => { }); test('is.urlInstance', t => { - const url = new URLGlobal('https://example.com'); + const url = new URL('https://example.com'); t.true(is.urlInstance(url)); t.false(is.urlInstance({})); t.false(is.urlInstance(undefined)); @@ -668,7 +660,7 @@ test('is.urlInstance', t => { test('is.urlString', t => { const url = 'https://example.com'; t.true(is.urlString(url)); - t.false(is.urlString(new URLGlobal(url))); + t.false(is.urlString(new URL(url))); t.false(is.urlString({})); t.false(is.urlString(undefined)); t.false(is.urlString(null)); @@ -681,13 +673,9 @@ test('is.truthy', t => { t.true(is.truthy(Symbol('🦄'))); t.true(is.truthy(true)); t.true(is.truthy(1)); - - // TODO: Nodejs 10 only - // if (isNode10orHigher) { - // t.true(is.truthy(1n)); - // // eslint-disable-next-line new-cap - // t.true(is.truthy(BigInt(1))); - // } + // Disabled until TS supports it for an ESnnnn target. + // t.true(is.truthy(1n)); + t.true(is.truthy(BigInt(1))); }); test('is.falsy', t => { @@ -697,13 +685,9 @@ test('is.falsy', t => { t.true(is.falsy(null)); t.true(is.falsy(undefined)); t.true(is.falsy(NaN)); - - // TODO: Nodejs 10 only - // if (isNode10orHigher) { - // t.true(is.falsy(0n)); - // // eslint-disable-next-line new-cap - // t.true(is.falsy(BigInt(0))); - // } + // Disabled until TS supports it for an ESnnnn target. + // t.true(is.falsy(0n)); + t.true(is.falsy(BigInt(0))); }); test('is.nan', t => { @@ -725,13 +709,10 @@ test('is.primitive', t => { true, false, Symbol('🦄') + // Disabled until TS supports it for an ESnnnn target. + // 6n ]; - // TODO: Nodejs 10 only - // if (isNode10orHigher) { - // primitives.push(6n); - // } - for (const el of primitives) { t.true(is.primitive(el)); } @@ -764,20 +745,18 @@ test('is.iterable', t => { t.false(is.iterable({})); }); -if (isNode10orHigher) { - test('is.asyncIterable', t => { - t.true(is.asyncIterable({ - [Symbol.asyncIterator]: () => {} - })); +test('is.asyncIterable', t => { + t.true(is.asyncIterable({ + [Symbol.asyncIterator]: () => {} + })); - t.false(is.asyncIterable(null)); - t.false(is.asyncIterable(undefined)); - t.false(is.asyncIterable(0)); - t.false(is.asyncIterable(NaN)); - t.false(is.asyncIterable(Infinity)); - t.false(is.asyncIterable({})); - }); -} + t.false(is.asyncIterable(null)); + t.false(is.asyncIterable(undefined)); + t.false(is.asyncIterable(0)); + t.false(is.asyncIterable(NaN)); + t.false(is.asyncIterable(Infinity)); + t.false(is.asyncIterable({})); +}); test('is.class', t => { class Foo {} // eslint-disable-line @typescript-eslint/no-extraneous-class @@ -801,17 +780,11 @@ test('is.typedArray', t => { new Int32Array(), new Uint32Array(), new Float32Array(), - new Float64Array() + new Float64Array(), + new BigInt64Array(), + new BigUint64Array() ]; - // TODO: Nodejs 10 only - // if (isNode10orHigher) { - // typedArrays.push( - // new BigInt64Array(), - // new BigUint64Array() - // ); - // } - for (const item of typedArrays) { t.true(is.typedArray(item)); } diff --git a/tsconfig.json b/tsconfig.json index 2acbd3e..d1f6382 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,9 +2,9 @@ "extends": "@sindresorhus/tsconfig", "compilerOptions": { "outDir": "dist", - "target": "es2017", + "target": "es2018", "lib": [ - "esnext", + "es2018", "dom" ] },