diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..bf357fbb --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "trailingComma": "all" +} diff --git a/.travis.yml b/.travis.yml index 87740706..9162eafc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,11 @@ os: - osx node_js: - - "10" - - "9" - "8" + - "9" + - "10" + - "11" + - "12" script: - npm run codecov diff --git a/CHANGELOG.md b/CHANGELOG.md index b8cc56c5..844e4029 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,13 +12,21 @@ --- -## [1.0.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v1.0.0) - *(2019-03-11)* +## [1.0.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v1.0.1) - _(2019-06-06)_ + +- `Function` + - :beetle: `isFunction` bug fixed +- :star2: Improved Typescript usage +- :star2: Improved linting +- :eyeglasses: Included Node.js `v11` and `v12` for `travis-ci` tests + +## [1.0.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v1.0.0) - _(2019-03-11)_ - `Object` - `prototype` - :zap: `flatten` Added -## [v0.21.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.21.0) - *(2018-12-01)* +## [v0.21.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.21.0) - _(2018-12-01)_ - `Array` - `prototype` @@ -29,13 +37,13 @@ - `prototype` - :zap: `dig` Added -## [v0.20.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.20.0) - *(2018-09-30)* +## [v0.20.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.20.0) - _(2018-09-30)_ - `Array` - `prototype` - :zap: `unwind` Added -## [v0.19.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.19.0) - *(2018-08-22)* +## [v0.19.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.19.0) - _(2018-08-22)_ - `Array` - `prototype` @@ -45,7 +53,7 @@ - :boom: Renamed `dist` path to `es5` - :boom: Set `es6` as default -## [v0.18.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.18.1) - *(2018-08-18)* +## [v0.18.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.18.1) - _(2018-08-18)_ - `Array` - `prototype` @@ -54,7 +62,7 @@ - `prototype` - :beetle: Deep `cloning` empty array bug fix -## [v0.18.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.18.0) - *(2018-08-18)* +## [v0.18.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.18.0) - _(2018-08-18)_ - `Object` - `prototype` @@ -64,7 +72,7 @@ - :boom: `singularize` Removed (use `pluralize(1)` instead) - :star2: Removed `pluralize` dependency (no more dependency :sunglasses:) -## [v0.17.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.17.0) - *(2018-08-17)* +## [v0.17.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.17.0) - _(2018-08-17)_ - `Array` - `prototype` @@ -80,7 +88,7 @@ - :zap: `reduce` Added - :star2: Some general enhancements -## [v0.16.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.16.0) - *(2018-08-15)* +## [v0.16.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.16.0) - _(2018-08-15)_ - `Array` - `prototype` @@ -93,7 +101,7 @@ - `prototype` - :beetle: `$clone` Fixed deep cloning bug -## [v0.14.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.14.1) - *(2018-08-11)* +## [v0.14.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.14.1) - _(2018-08-11)_ - `String` - `prototype` @@ -101,7 +109,7 @@ - :beetle: `kebabCase` Fixed regex bug - :beetle: `snakeCase` Fixed regex bug -## [v0.14.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.14.0) - *(2018-08-10)* +## [v0.14.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.14.0) - _(2018-08-10)_ - `Date` - :zap: `today` Added @@ -125,7 +133,7 @@ - :zap: `forEach` Added - :mortar_board: Improved documents -## [v0.13.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.13.0) - *(2018-08-01)* +## [v0.13.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.13.0) - _(2018-08-01)_ - `String` - `prototype` @@ -141,13 +149,13 @@ - `Number` - :beetle: `isNumber` Fixed considering numeral strings as number -## [v0.12.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.12.1) - *(2018-07-31)* +## [v0.12.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.12.1) - _(2018-07-31)_ - `Array` - `prototype` - :beetle: `nest` Fixed finding children of children bug -## [v0.12.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.12.0) - *(2018-07-26)* +## [v0.12.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.12.0) - _(2018-07-26)_ - `Object` - `prototype` @@ -155,7 +163,7 @@ - :zap: `$defaults` Added - :zap: `$keys` Added -## [v0.11.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.11.0) - *(2018-07-16)* +## [v0.11.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.11.0) - _(2018-07-16)_ - `Array` - `prototype` @@ -174,7 +182,7 @@ - :zap: `equals` Added - :zap: `parseInt` Added -## [v0.10.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.10.0) - *(2018-06-01)* +## [v0.10.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.10.0) - _(2018-06-01)_ - `Array` - :boom: `isInstance` Removed @@ -196,7 +204,7 @@ - :boom: `isInstance` Renamed to `isString` - :star2: Better object value path handling -## [v0.9.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.9.0) - *(2018-05-29)* +## [v0.9.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.9.0) - _(2018-05-29)_ - `Array` - `prototype` @@ -212,7 +220,7 @@ - :zap: `pad` Added - :zap: `repeat` Added -## [v0.8.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.8.0) - *(2018-05-25)* +## [v0.8.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.8.0) - _(2018-05-25)_ - `Array` - `prototype` @@ -225,7 +233,7 @@ - :zap: `$get` Added - :zap: `$omit` Added -## [v0.7.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.7.0) - *(2018-05-20)* +## [v0.7.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.7.0) - _(2018-05-20)_ - `Object` - `prototype` @@ -233,7 +241,7 @@ - :zap: `$kebabCaseKeys` Added - :zap: `$snakeCaseKeys` Added -## [v0.6.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.6.0) - *(2018-05-11)* +## [v0.6.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.6.0) - _(2018-05-11)_ - `Array` - `prototype` @@ -252,7 +260,7 @@ - :zap: `whereNotNull` Added - :zap: `whereNull` Added -## [v0.5.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.5.0) - *(2018-04-13)* +## [v0.5.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.5.0) - _(2018-04-13)_ - `Array` - `prototype` @@ -274,7 +282,7 @@ - :star2: Some general enhancements - :beetle: Typescript usage -## [v0.4.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.4.0) - *(2018-01-28)* +## [v0.4.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.4.0) - _(2018-01-28)_ - `String` - `prototype` @@ -284,7 +292,7 @@ - :zap: `humanize` Added - :star2: More customizable usage -## [v0.3.2](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.3.2) - *(2018-01-25)* +## [v0.3.2](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.3.2) - _(2018-01-25)_ - `Array` - `prototype` @@ -295,12 +303,12 @@ - `prototype` - :zap: `contains` Added -## [v0.3.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.3.1) - *(2018-01-24)* +## [v0.3.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.3.1) - _(2018-01-24)_ - :star2: `es6` Usage is now available along side `es5` (`dist`) - :beetle: Typescript usage -## [v0.3.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.3.0) - *(2018-01-24)* +## [v0.3.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.3.0) - _(2018-01-24)_ - `Array` - :zap: `isInstance` Added @@ -334,7 +342,7 @@ - :zap: `isEven` Added - :zap: `isPrime` Added -## [v0.2.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.2.0) - *(2018-01-18)* +## [v0.2.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.2.0) - _(2018-01-18)_ - `Array` - `prototype` @@ -357,14 +365,14 @@ - :beetle: `decapitalize` Fixed returning the capitalized string - :eyeglasses: Added tests -## [v0.1.2](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.1.2) - *(2018-01-15)* +## [v0.1.2](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.1.2) - _(2018-01-15)_ - :mortar_board: Fix project name in README.md -## [v0.1.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.1.1) - *(2018-01-15)* +## [v0.1.1](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.1.1) - _(2018-01-15)_ - :mortar_board: Update README.md usage -## [v0.1.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.1.0) - *(2018-01-15)* +## [v0.1.0](https://github.com/ardalanamini/prototyped.js/releases/tag/v0.1.0) - _(2018-01-15)_ - :tada: First release diff --git a/LICENSE b/LICENSE index 6f5605d2..78cdb065 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018 Ardalan Amini +Copyright (c) 2018-2019 Ardalan Amini Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b024f408..1bfb65bc 100644 --- a/README.md +++ b/README.md @@ -46,36 +46,34 @@ import all prototypes ```javascript // es6 (default) -require('prototyped.js'); -import 'prototyped.js'; +import "prototyped.js"; -// es5 -require('prototyped.js/es5'); -import 'prototyped.js/es5'; +// or es5 +require("prototyped.js/es5"); -console.log('hello world!'.words()); // ['hello', 'world'] +console.log("hello world!".words()); // ['hello', 'world'] ``` or simply import the prototypes you want ```javascript -require('prototyped.js/es6/string'); +require("prototyped.js/es6/string"); // or -require('prototyped.js/es5/string/words'); +require("prototyped.js/es5/string/words"); -console.log('hello world!'.words()); // ['hello', 'world'] +console.log("hello world!".words()); // ['hello', 'world'] ``` even better, just import the method you want ```javascript -const words = require('prototyped.js/es6/string/words/method'); +const words = require("prototyped.js/es6/string/words/method"); -console.log(words('hello world!')); // ['hello', 'world'] +console.log(words("hello world!")); // ['hello', 'world'] -const methods = require('prototyped.js/es5/methods'); +const methods = require("prototyped.js/es5/methods"); -console.log(methods.string.words('hello world!')); // ['hello', 'world'] +console.log(methods.string.words("hello world!")); // ['hello', 'world'] ``` **All documents are available at [here](https://prototyped.js.org)** @@ -86,7 +84,7 @@ We use [SemVer](http://semver.org) for versioning. For the versions available, s ## Authors -- **Ardalan Amini** - *Owner/Developer* - [@ardalanamini](https://github.com/ardalanamini) +- **Ardalan Amini** - _Core Maintainer_ - [@ardalanamini](https://github.com/ardalanamini) See also the list of [contributors](https://github.com/ardalanamini/prototyped.js/contributors) who participated in this project. diff --git a/docs/README.md b/docs/README.md index cd5d9ada..5c0f4863 100644 --- a/docs/README.md +++ b/docs/README.md @@ -100,7 +100,8 @@ ### array.all([fn]) ⇒ [Boolean](#Boolean) -Returns `true` if the provided predicate function returns `true` for all elements in a collection, `false` otherwise +Returns `true` if the provided predicate function +returns `true` for all elements in a collection,`false` otherwise **Kind**: instance method of [Array](#Array) @@ -116,7 +117,8 @@ Returns `true` if the provided predicate function returns `true` for all element ### array.any([fn]) ⇒ [Boolean](#Boolean) -Returns `true` if the provided predicate function returns `true` for at least one element in a collection, +Returns `true` if the provided predicate function +returns `true` for at least one element in a collection, `false` otherwise **Kind**: instance method of [Array](#Array) @@ -254,7 +256,8 @@ Counts the occurrences of a value in an array ### array.countBy(fn) ⇒ [Object](#Object) -Groups the elements of an array based on the given function and returns the count of elements in each group +Groups the elements of an array based on the given function and +returns the count of elements in each group **Kind**: instance method of [Array](#Array) @@ -270,7 +273,8 @@ Groups the elements of an array based on the given function and returns the coun ### array.crossJoin(array) ⇒ [Array.<Array>](#Array) -Cross joins the array's values among the given arrays, returning a Cartesian product with all possible permutations +Cross joins the array's values among the given arrays, +returning a Cartesian product with all possible permutations **Kind**: instance method of [Array](#Array) @@ -296,7 +300,8 @@ Deep flattens an array ### array.diff(array, [comp]) ⇒ [Array](#Array) Returns the difference between this and another array -if `comp` is given, filters out all values from an array for which the comparator function does not return true +if `comp` is given, filters out all values from an array for which the comparator function +does not return true **Kind**: instance method of [Array](#Array) @@ -452,7 +457,8 @@ It's like join but u get to git it which keys to join **Example** ```javascript -[{a: {b: 'first'}}, {a: {b: 'second'}}, {a: {b: 'third'}}].implode('a.b', ', '); // 'first, second, third' +[{a: {b: 'first'}}, {a: {b: 'second'}}, {a: {b: 'third'}}].implode('a.b', ', '); +// 'first, second, third' ``` @@ -673,7 +679,8 @@ FillS the array with the given value until the array reaches the specified size ### array.partition(fn) ⇒ [Array](#Array) -Groups the elements into two arrays, depending on the provided function's truthiness for each element +Groups the elements into two arrays, +depending on the provided function's truthiness for each element **Kind**: instance method of [Array](#Array) @@ -683,7 +690,9 @@ Groups the elements into two arrays, depending on the provided function's truthi **Example** ```javascript -const users = [{ user: 'barney', age: 36, active: false }, { user: 'fred', age: 40, active: true }]; +const users = [ + { user: 'barney', age: 36, active: false }, { user: 'fred', age: 40, active: true } +]; users.partition(o => o.active); // [ [{ 'user': 'fred', 'age': 40, 'active': true }], [{ 'user': 'barney', 'age': 36, 'active': false }] @@ -791,7 +800,8 @@ An alias of Array.prototype.skip ### array.sortBy(fn) ⇒ [Array](#Array) -Groups the elements of an array based on the given function and returns the count of elements in each group +Groups the elements of an array based on the given function and +returns the count of elements in each group **Kind**: instance method of [Array](#Array) @@ -948,7 +958,8 @@ Filters the array **Example** ```javascript ["foo", "bar", "hello", "world"].whereLike("o"); // ["foo","hello","world"] -[{foo:"hello"}, {foo:"bar"}, {foo:"world"}].whereLike("foo", /o/i); // [{foo:"hello"},{foo:"world"}] +[{foo:"hello"}, {foo:"bar"}, {foo:"world"}] + .whereLike("foo", /o/i); // [{foo:"hello"},{foo:"world"}] ``` @@ -2186,7 +2197,8 @@ Also removes beginning and ending whitespace **Kind**: instance method of [String](#String) **Example** ```javascript -' capitalize dash-CamelCase_underscore trim '.humanize(); // 'Capitalize dash camel case underscore trim' +' capitalize dash-CamelCase_underscore trim '.humanize(); +// 'Capitalize dash camel case underscore trim' ``` diff --git a/package-lock.json b/package-lock.json index e9ba7440..ff037b91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "prototyped.js", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -14,22 +14,22 @@ } }, "@babel/core": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", - "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", + "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.2.2", - "@babel/template": "^7.2.2", - "@babel/traverse": "^7.2.2", - "@babel/types": "^7.2.2", + "@babel/generator": "^7.4.4", + "@babel/helpers": "^7.4.4", + "@babel/parser": "^7.4.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.5", + "@babel/types": "^7.4.4", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" @@ -53,6 +53,12 @@ "minimist": "^1.2.0" } }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -64,27 +70,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } } } }, "@babel/generator": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.2.tgz", - "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", "dev": true, "requires": { - "@babel/types": "^7.3.2", + "@babel/types": "^7.4.4", "jsesc": "^2.5.1", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "source-map": "^0.5.0", "trim-right": "^1.0.1" }, @@ -94,6 +91,12 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true } } }, @@ -124,23 +127,23 @@ "dev": true }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.4" } }, "@babel/helpers": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", - "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", + "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", "dev": true, "requires": { - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.5", - "@babel/types": "^7.3.0" + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/highlight": { @@ -192,9 +195,9 @@ } }, "@babel/parser": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.2.tgz", - "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", "dev": true }, "@babel/plugin-syntax-object-rest-spread": { @@ -207,31 +210,31 @@ } }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", + "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", + "@babel/generator": "^7.4.4", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.5", + "@babel/types": "^7.4.4", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.10" + "lodash": "^4.17.11" }, "dependencies": { "debug": { @@ -244,9 +247,15 @@ } }, "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, "ms": { @@ -258,16 +267,22 @@ } }, "@babel/types": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.2.tgz", - "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "to-fast-properties": "^2.0.0" }, "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -276,16 +291,522 @@ } } }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@fimbul/bifrost": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@fimbul/bifrost/-/bifrost-0.17.0.tgz", + "integrity": "sha512-gVTkJAOef5HtN6LPmrtt5fAUmBywwlgmObsU3FBhPoNeXPLaIl2zywXkJEtvvVLQnaFmtff3x+wIj5lHRCDE3Q==", + "dev": true, + "requires": { + "@fimbul/ymir": "^0.17.0", + "get-caller-file": "^2.0.0", + "tslib": "^1.8.1", + "tsutils": "^3.5.0" + }, + "dependencies": { + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "tsutils": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.14.0.tgz", + "integrity": "sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@fimbul/ymir": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@fimbul/ymir/-/ymir-0.17.0.tgz", + "integrity": "sha512-xMXM9KTXRLHLVS6dnX1JhHNEkmWHcAVCQ/4+DA1KKwC/AFnGHzu/7QfQttEPgw3xplT+ILf9e3i64jrFwB3JtA==", + "dev": true, + "requires": { + "inversify": "^5.0.0", + "reflect-metadata": "^0.1.12", + "tslib": "^1.8.1" + } + }, + "@jest/console": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", + "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "dev": true, + "requires": { + "@jest/source-map": "^24.3.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@jest/core": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", + "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.8.0", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve-dependencies": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "jest-watcher": "^24.8.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@jest/environment": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", + "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0" + } + }, + "@jest/fake-timers": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", + "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0" + } + }, + "@jest/reporters": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", + "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "dev": true, + "requires": { + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.1.1", + "jest-haste-map": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.2.1", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@jest/source-map": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", + "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", + "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/types": "^24.8.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", + "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "dev": true, + "requires": { + "@jest/test-result": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0" + } + }, + "@jest/transform": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", + "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.8.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-util": "^24.8.0", + "micromatch": "^3.1.10", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@jest/types": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", + "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^12.0.9" + } + }, + "@types/babel__core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", + "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", + "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, "@types/jest": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.0.tgz", - "integrity": "sha512-kOafJnUTnMd7/OfEO/x3I47EHswNjn+dbz9qk3mtonr1RvKT+1FGVxnxAx08I9K8Tl7j9hpoJRE7OCf+t10fng==", + "version": "24.0.13", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.13.tgz", + "integrity": "sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww==", + "dev": true, + "requires": { + "@types/jest-diff": "*" + } + }, + "@types/jest-diff": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", + "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", "dev": true }, "@types/node": { - "version": "10.12.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.24.tgz", - "integrity": "sha512-GWWbvt+z9G5otRBW8rssOFgRY87J9N/qbhqfjMZ+gUuL6zoL+Hm6gP/8qQBG4jjimqdaNLCehcVapZ/Fs2WjCQ==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.4.tgz", + "integrity": "sha512-j8YL2C0fXq7IONwl/Ud5Kt0PeXw22zGERt+HSSnwbKOJVsAGkEz3sFCYwaF9IOuoG1HOtE0vKCj6sXF7Q0+Vaw==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", + "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", "dev": true }, "abab": { @@ -301,9 +822,9 @@ "dev": true }, "acorn-globals": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", - "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", "dev": true, "requires": { "acorn": "^6.0.1", @@ -311,9 +832,9 @@ }, "dependencies": { "acorn": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", - "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true } } @@ -324,25 +845,34 @@ "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", "dev": true }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ansi-escape-sequences": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz", - "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", + "integrity": "sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==", "dev": true, "requires": { - "array-back": "^2.0.0" + "array-back": "^3.0.1" } }, "ansi-escapes": { @@ -373,15 +903,6 @@ "normalize-path": "^2.1.1" } }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -397,16 +918,6 @@ "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", "dev": true }, - "argv-tools": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz", - "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "find-replace": "^2.0.1" - } - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -426,13 +937,10 @@ "dev": true }, "array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "requires": { - "typical": "^2.6.1" - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true }, "array-equal": { "version": "1.0.0", @@ -446,12 +954,6 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -479,15 +981,6 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -710,13 +1203,16 @@ } }, "babel-jest": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.1.0.tgz", - "integrity": "sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", + "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", "dev": true, "requires": { + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.1.0", + "babel-preset-jest": "^24.6.0", "chalk": "^2.4.2", "slash": "^2.0.0" }, @@ -777,21 +1273,24 @@ } }, "babel-plugin-istanbul": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.0.tgz", - "integrity": "sha512-CLoXPRSUWiR8yao8bShqZUIC6qLfZVVY3X1wj+QPNXu0wfmrRRfarh1LYy+dYMVI+bDj0ghy3tuqFFRFZmL1Nw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", + "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", "dev": true, "requires": { "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.0.0", - "test-exclude": "^5.0.0" + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" } }, "babel-plugin-jest-hoist": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz", - "integrity": "sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw==", - "dev": true + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", + "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", @@ -1125,13 +1624,13 @@ } }, "babel-preset-jest": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz", - "integrity": "sha512-FfNLDxFWsNX9lUmtwY7NheGlANnagvxq8LZdl5PKnVG3umP+S/g0XbVBfwtA4Ai3Ri/IMkWabBz3Tyk9wdspcw==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", + "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", "dev": true, "requires": { "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.1.0" + "babel-plugin-jest-hoist": "^24.6.0" } }, "babel-register": { @@ -1279,15 +1778,14 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "optional": true, "requires": { "tweetnacl": "^0.14.3" } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", "dev": true }, "brace-expansion": { @@ -1342,6 +1840,14 @@ "dev": true, "requires": { "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } } }, "browserslist": { @@ -1410,12 +1916,23 @@ "array-back": "^2.0.0", "fs-then-native": "^2.0.0", "mkdirp2": "^1.0.3" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } } }, "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "caniuse-lite": { @@ -1425,12 +1942,12 @@ "dev": true }, "capture-exit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", - "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "dev": true, "requires": { - "rsvp": "^3.3.3" + "rsvp": "^4.8.4" } }, "caseless": { @@ -1440,12 +1957,20 @@ "dev": true }, "catharsis": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", - "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.10.tgz", + "integrity": "sha512-l2OUaz/3PU3MZylspVFJvwHCVfWyvcduPq4lv3AzZ2pJzZCo7kNKFNyatwujD7XgvGkNAE/Jhhbh2uARNwNkfw==", "dev": true, "requires": { - "underscore-contrib": "~0.3.0" + "lodash": "^4.17.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + } } }, "chalk": { @@ -1503,15 +2028,15 @@ "dev": true }, "codecov": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz", - "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.5.0.tgz", + "integrity": "sha512-/OsWOfIHaQIr7aeZ4pY0UC1PZT6kimoKFOFYFNb6wxo3iw12nRrh+mNGH72rnXxNsq6SGfesVPizm/6Q3XqcFQ==", "dev": true, "requires": { "argv": "^0.0.2", "ignore-walk": "^3.0.1", - "js-yaml": "^3.12.0", - "request": "^2.87.0", + "js-yaml": "^3.13.1", + "teeny-request": "^3.11.3", "urlgrey": "^0.4.4" } }, @@ -1551,25 +2076,32 @@ "dev": true }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "command-line-args": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz", - "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", + "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", "dev": true, "requires": { - "argv-tools": "^0.1.1", - "array-back": "^2.0.0", - "find-replace": "^2.0.1", + "array-back": "^3.0.1", + "find-replace": "^3.0.0", "lodash.camelcase": "^4.3.0", - "typical": "^2.6.1" + "typical": "^4.0.0" + }, + "dependencies": { + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true + } } }, "command-line-tool": { @@ -1583,6 +2115,17 @@ "command-line-args": "^5.0.0", "command-line-usage": "^4.1.0", "typical": "^2.6.1" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } } }, "command-line-usage": { @@ -1595,12 +2138,23 @@ "array-back": "^2.0.0", "table-layout": "^0.4.2", "typical": "^2.6.1" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } } }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, "common-sequence": { @@ -1609,16 +2163,10 @@ "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=", "dev": true }, - "compare-versions": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", - "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==", - "dev": true - }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "concat-map": { @@ -1698,9 +2246,9 @@ "dev": true }, "cssstyle": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", - "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", + "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", "dev": true, "requires": { "cssom": "0.3.x" @@ -1772,15 +2320,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1865,29 +2404,61 @@ "dev": true }, "diff-sequences": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.0.0.tgz", - "integrity": "sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", + "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", "dev": true }, "dmd": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.12.tgz", - "integrity": "sha512-79w644JdsB2TthYpVl2bDurX7i9Abaegg2E7X46Ajc135aASTMXxrHzJ9mOa5X5nbmnXwlBYiF68K+1baX+BzQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dmd/-/dmd-4.0.0.tgz", + "integrity": "sha512-J+4CgbQiMuJHiU9dvTVN8iOOZGeR3bef1wBqz6eVvvX17jkpkKVd8TeeutA/FJAeFbLQfXnyQ3o4qY7W+c5cxQ==", "dev": true, "requires": { - "array-back": "^2.0.0", + "array-back": "^3.1.0", "cache-point": "^0.4.1", "common-sequence": "^1.0.2", "file-set": "^2.0.0", - "handlebars": "^4.0.11", - "marked": "^0.3.16", + "handlebars": "^4.1.2", + "marked": "^0.6.2", "object-get": "^2.1.0", - "reduce-flatten": "^1.0.1", - "reduce-unique": "^1.0.0", + "reduce-flatten": "^2.0.0", + "reduce-unique": "^2.0.1", "reduce-without": "^1.0.1", "test-value": "^3.0.0", - "walk-back": "^3.0.0" + "walk-back": "^3.0.1" + }, + "dependencies": { + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + } + } + }, + "doctrine": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", + "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "dev": true, + "requires": { + "esutils": "^1.1.6", + "isarray": "0.0.1" + }, + "dependencies": { + "esutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", + "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } } }, "domexception": { @@ -1904,7 +2475,6 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "optional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -1925,6 +2495,12 @@ "once": "^1.4.0" } }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1959,6 +2535,21 @@ "is-symbol": "^1.0.2" } }, + "es6-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1966,9 +2557,9 @@ "dev": true }, "escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", "dev": true, "requires": { "esprima": "^3.1.3", @@ -2012,13 +2603,10 @@ "dev": true }, "exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "dev": true, - "requires": { - "merge": "^1.2.0" - } + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true }, "execa": { "version": "1.0.0", @@ -2092,16 +2680,17 @@ } }, "expect": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.1.0.tgz", - "integrity": "sha512-lVcAPhaYkQcIyMS+F8RVwzbm1jro20IG8OkvxQ6f1JfqhVZyyudCwYogQ7wnktlf14iF3ii7ArIUO/mqvrW9Gw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", + "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", "dev": true, "requires": { + "@jest/types": "^24.8.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-regex-util": "^24.0.0" + "jest-get-type": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-regex-util": "^24.3.0" }, "dependencies": { "ansi-styles": { @@ -2220,9 +2809,9 @@ "dev": true }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-json-stable-stringify": { @@ -2247,23 +2836,38 @@ } }, "file-set": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.0.tgz", - "integrity": "sha512-cCWXfw+nrYoIoUVmEF7Xsw91lGWuObtSnTEZ7AmdvZou1A/6Xx237HfxdQyC/ayKRvQSMbNOBwg62OjN5JxbXw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.1.tgz", + "integrity": "sha512-XgOUUpgR6FbbfYcniLw0qm1Am7PnNYIAkd+eXxRt42LiYhjaso0WiuQ+VmrNdtwotyM+cLCfZ56AZrySP3QnKA==", "dev": true, "requires": { "array-back": "^2.0.0", - "glob": "^7.1.2" - } - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" + "glob": "^7.1.3" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "fill-range": { @@ -2290,13 +2894,12 @@ } }, "find-replace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", - "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "requires": { - "array-back": "^2.0.0", - "test-value": "^3.0.0" + "array-back": "^3.0.1" } }, "find-up": { @@ -2321,25 +2924,14 @@ "dev": true }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "1.0.6", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - } } }, "fragment-cache": { @@ -2352,9 +2944,9 @@ } }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.0.1.tgz", + "integrity": "sha512-W+XLrggcDzlle47X/XnS7FXrXu9sDo+Ze9zpndeBxdgv88FHLm1HtmkhEwavruS6koanBjp098rUpHs65EmG7A==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -2381,14 +2973,14 @@ "dev": true }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -2466,12 +3058,12 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -2642,24 +3234,24 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, @@ -2687,13 +3279,13 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -2832,7 +3424,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -3023,12 +3615,12 @@ "dev": true }, "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "^5.3.0", + "ajv": "^6.5.5", "har-schema": "^2.0.0" } }, @@ -3130,6 +3722,33 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3189,6 +3808,12 @@ "loose-envify": "^1.0.0" } }, + "inversify": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-5.0.1.tgz", + "integrity": "sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ==", + "dev": true + }, "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", @@ -3287,9 +3912,9 @@ "dev": true }, "is-generator-fn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.0.0.tgz", - "integrity": "sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, "is-number": { @@ -3376,66 +4001,44 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul-api": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.0.tgz", - "integrity": "sha512-+Ygg4t1StoiNlBGc6x0f8q/Bv26FbZqP/+jegzfNpU7Q8o+4ZRoJxJPhBkgE/UonpAjtxnE4zCZIyJX+MwLRMQ==", - "dev": true, - "requires": { - "async": "^2.6.1", - "compare-versions": "^3.2.1", - "fileset": "^2.0.3", - "istanbul-lib-coverage": "^2.0.3", - "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.1.0", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.0", - "js-yaml": "^3.12.0", - "make-dir": "^1.3.0", - "minimatch": "^3.0.4", - "once": "^1.4.0" - } - }, "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, - "istanbul-lib-hook": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz", - "integrity": "sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, "istanbul-lib-instrument": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", - "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", - "dev": true, - "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.3", - "semver": "^5.5.0" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz", + "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==", + "dev": true + } } }, "istanbul-lib-report": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz", - "integrity": "sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "supports-color": "^6.0.0" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" }, "dependencies": { "supports-color": { @@ -3450,15 +4053,15 @@ } }, "istanbul-lib-source-maps": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz", - "integrity": "sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "dependencies": { @@ -3486,30 +4089,44 @@ } }, "istanbul-reports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.1.0.tgz", - "integrity": "sha512-azQdSX+dtTtkQEfqq20ICxWi6eOHXyHIgMFw1VOOVi8iIPWeCWRgCyFh/CsBKIhcgskMI8ExXmU7rjXTRCIJ+A==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { - "handlebars": "^4.0.11" + "handlebars": "^4.1.2" + }, + "dependencies": { + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "jest": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.1.0.tgz", - "integrity": "sha512-+q91L65kypqklvlRFfXfdzUKyngQLOcwGhXQaLmVHv+d09LkNXuBuGxlofTFW42XMzu3giIcChchTsCNUjQ78A==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", + "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", "dev": true, "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.1.0" + "jest-cli": "^24.8.0" }, "dependencies": { - "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -3530,73 +4147,27 @@ "supports-color": "^5.3.0" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, "jest-cli": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.1.0.tgz", - "integrity": "sha512-U/iyWPwOI0T1CIxVLtk/2uviOTJ/OiSWJSe8qt6X1VkbbgP+nrtLJlmT9lPBe4lK78VNFJtrJ7pttcNv/s7yCw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", + "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", + "@jest/core": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "chalk": "^2.0.1", "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.1.15", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "istanbul-api": "^2.0.8", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-source-maps": "^3.0.1", - "jest-changed-files": "^24.0.0", - "jest-config": "^24.1.0", - "jest-environment-jsdom": "^24.0.0", - "jest-get-type": "^24.0.0", - "jest-haste-map": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-regex-util": "^24.0.0", - "jest-resolve-dependencies": "^24.1.0", - "jest-runner": "^24.1.0", - "jest-runtime": "^24.1.0", - "jest-snapshot": "^24.1.0", - "jest-util": "^24.0.0", - "jest-validate": "^24.0.0", - "jest-watcher": "^24.0.0", - "jest-worker": "^24.0.0", - "micromatch": "^3.1.10", - "node-notifier": "^5.2.1", - "p-each-series": "^1.0.0", - "pirates": "^4.0.0", + "jest-config": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", "prompts": "^2.0.1", - "realpath-native": "^1.0.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "string-length": "^2.0.0", - "strip-ansi": "^5.0.0", - "which": "^1.2.12", + "realpath-native": "^1.1.0", "yargs": "^12.0.2" } }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", - "dev": true, - "requires": { - "ansi-regex": "^4.0.0" - } - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -3609,36 +4180,39 @@ } }, "jest-changed-files": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.0.0.tgz", - "integrity": "sha512-nnuU510R9U+UX0WNb5XFEcsrMqriSiRLeO9KWDFgPrpToaQm60prfQYpxsXigdClpvNot5bekDY440x9dNGnsQ==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", + "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", "dev": true, "requires": { + "@jest/types": "^24.8.0", "execa": "^1.0.0", "throat": "^4.0.0" } }, "jest-config": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.1.0.tgz", - "integrity": "sha512-FbbRzRqtFC6eGjG5VwsbW4E5dW3zqJKLWYiZWhB0/4E5fgsMw8GODLbGSrY5t17kKOtCWb/Z7nsIThRoDpuVyg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", + "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "babel-jest": "^24.1.0", + "@jest/test-sequencer": "^24.8.0", + "@jest/types": "^24.8.0", + "babel-jest": "^24.8.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.0.0", - "jest-environment-node": "^24.0.0", - "jest-get-type": "^24.0.0", - "jest-jasmine2": "^24.1.0", - "jest-regex-util": "^24.0.0", - "jest-resolve": "^24.1.0", - "jest-util": "^24.0.0", - "jest-validate": "^24.0.0", + "jest-environment-jsdom": "^24.8.0", + "jest-environment-node": "^24.8.0", + "jest-get-type": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", "micromatch": "^3.1.10", - "pretty-format": "^24.0.0", - "realpath-native": "^1.0.2" + "pretty-format": "^24.8.0", + "realpath-native": "^1.1.0" }, "dependencies": { "ansi-styles": { @@ -3673,15 +4247,15 @@ } }, "jest-diff": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.0.0.tgz", - "integrity": "sha512-XY5wMpRaTsuMoU+1/B2zQSKQ9RdE9gsLkGydx3nvApeyPijLA8GtEvIcPwISRCer+VDf9W1mStTYYq6fPt8ryA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", + "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", "dev": true, "requires": { "chalk": "^2.0.1", - "diff-sequences": "^24.0.0", - "jest-get-type": "^24.0.0", - "pretty-format": "^24.0.0" + "diff-sequences": "^24.3.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" }, "dependencies": { "ansi-styles": { @@ -3716,24 +4290,25 @@ } }, "jest-docblock": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.0.0.tgz", - "integrity": "sha512-KfAKZ4SN7CFOZpWg4i7g7MSlY0M+mq7K0aMqENaG2vHuhC9fc3vkpU/iNN9sOus7v3h3Y48uEjqz3+Gdn2iptA==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", + "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", "dev": true, "requires": { "detect-newline": "^2.1.0" } }, "jest-each": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.0.0.tgz", - "integrity": "sha512-gFcbY4Cu55yxExXMkjrnLXov3bWO3dbPAW7HXb31h/DNWdNc/6X8MtxGff8nh3/MjkF9DpVqnj0KsPKuPK0cpA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", + "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", "dev": true, "requires": { + "@jest/types": "^24.8.0", "chalk": "^2.0.1", - "jest-get-type": "^24.0.0", - "jest-util": "^24.0.0", - "pretty-format": "^24.0.0" + "jest-get-type": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0" }, "dependencies": { "ansi-styles": { @@ -3768,46 +4343,56 @@ } }, "jest-environment-jsdom": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.0.0.tgz", - "integrity": "sha512-1YNp7xtxajTRaxbylDc2pWvFnfDTH5BJJGyVzyGAKNt/lEULohwEV9zFqTgG4bXRcq7xzdd+sGFws+LxThXXOw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", + "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", "dev": true, "requires": { - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0", + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0", "jsdom": "^11.5.1" } }, "jest-environment-node": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.0.0.tgz", - "integrity": "sha512-62fOFcaEdU0VLaq8JL90TqwI7hLn0cOKOl8vY2n477vRkCJRojiRRtJVRzzCcgFvs6gqU97DNqX5R0BrBP6Rxg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", + "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", "dev": true, "requires": { - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0" + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0" } }, "jest-get-type": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.0.0.tgz", - "integrity": "sha512-z6/Eyf6s9ZDGz7eOvl+fzpuJmN9i0KyTt1no37/dHu8galssxz5ZEgnc1KaV8R31q1khxyhB4ui/X5ZjjPk77w==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", + "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", "dev": true }, "jest-haste-map": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.0.0.tgz", - "integrity": "sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.0.tgz", + "integrity": "sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==", "dev": true, "requires": { + "@jest/types": "^24.8.0", + "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", - "jest-serializer": "^24.0.0", - "jest-util": "^24.0.0", - "jest-worker": "^24.0.0", + "jest-serializer": "^24.4.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", "micromatch": "^3.1.10", - "sane": "^3.0.0" + "sane": "^4.0.3", + "walker": "^1.0.7" }, "dependencies": { "graceful-fs": { @@ -3819,22 +4404,26 @@ } }, "jest-jasmine2": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz", - "integrity": "sha512-H+o76SdSNyCh9fM5K8upK45YTo/DiFx5w2YAzblQebSQmukDcoVBVeXynyr7DDnxh+0NTHYRCLwJVf3tC518wg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", + "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.1.0", + "expect": "^24.8.0", "is-generator-fn": "^2.0.0", - "jest-each": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-snapshot": "^24.1.0", - "jest-util": "^24.0.0", - "pretty-format": "^24.0.0", + "jest-each": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0", "throat": "^4.0.0" }, "dependencies": { @@ -3870,24 +4459,24 @@ } }, "jest-leak-detector": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.0.0.tgz", - "integrity": "sha512-ZYHJYFeibxfsDSKowjDP332pStuiFT2xfc5R67Rjm/l+HFJWJgNIOCOlQGeXLCtyUn3A23+VVDdiCcnB6dTTrg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", + "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", "dev": true, "requires": { - "pretty-format": "^24.0.0" + "pretty-format": "^24.8.0" } }, "jest-matcher-utils": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.0.0.tgz", - "integrity": "sha512-LQTDmO+aWRz1Tf9HJg+HlPHhDh1E1c65kVwRFo5mwCVp5aQDzlkz4+vCvXhOKFjitV2f0kMdHxnODrXVoi+rlA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", + "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.0.0", - "jest-get-type": "^24.0.0", - "pretty-format": "^24.0.0" + "jest-diff": "^24.8.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" }, "dependencies": { "ansi-styles": { @@ -3922,12 +4511,15 @@ } }, "jest-message-util": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.0.0.tgz", - "integrity": "sha512-J9ROJIwz/IeC+eV1XSwnRK4oAwPuhmxEyYx1+K5UI+pIYwFZDSrfZaiWTdq0d2xYFw4Xiu+0KQWsdsQpgJMf3Q==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", + "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", "slash": "^2.0.0", @@ -3972,26 +4564,37 @@ } }, "jest-mock": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.0.0.tgz", - "integrity": "sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", + "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", "dev": true }, "jest-regex-util": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.0.0.tgz", - "integrity": "sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", + "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", "dev": true }, "jest-resolve": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.1.0.tgz", - "integrity": "sha512-TPiAIVp3TG6zAxH28u/6eogbwrvZjBMWroSLBDkwkHKrqxB/RIdwkWDye4uqPlZIXWIaHtifY3L0/eO5Z0f2wg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", "dev": true, "requires": { + "@jest/types": "^24.8.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", - "realpath-native": "^1.0.0" + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" }, "dependencies": { "ansi-styles": { @@ -4026,33 +4629,39 @@ } }, "jest-resolve-dependencies": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz", - "integrity": "sha512-2VwPsjd3kRPu7qe2cpytAgowCObk5AKeizfXuuiwgm1a9sijJDZe8Kh1sFj6FKvSaNEfCPlBVkZEJa2482m/Uw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", + "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", "dev": true, "requires": { - "jest-regex-util": "^24.0.0", - "jest-snapshot": "^24.1.0" + "@jest/types": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.8.0" } }, "jest-runner": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.1.0.tgz", - "integrity": "sha512-CDGOkT3AIFl16BLL/OdbtYgYvbAprwJ+ExKuLZmGSCSldwsuU2dEGauqkpvd9nphVdAnJUcP12e/EIlnTX0QXg==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", + "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", "dev": true, "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.1.0", - "jest-docblock": "^24.0.0", - "jest-haste-map": "^24.0.0", - "jest-jasmine2": "^24.1.0", - "jest-leak-detector": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-runtime": "^24.1.0", - "jest-util": "^24.0.0", - "jest-worker": "^24.0.0", + "jest-config": "^24.8.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-leak-detector": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" }, @@ -4090,9 +4699,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -4111,32 +4720,33 @@ } }, "jest-runtime": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.1.0.tgz", - "integrity": "sha512-59/BY6OCuTXxGeDhEMU7+N33dpMQyXq7MLK07cNSIY/QYt2QZgJ7Tjx+rykBI0skAoigFl0A5tmT8UdwX92YuQ==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", + "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", + "@jest/console": "^24.7.1", + "@jest/environment": "^24.8.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/yargs": "^12.0.2", "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", "exit": "^0.1.2", - "fast-json-stable-stringify": "^2.0.0", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.1.0", - "jest-haste-map": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-regex-util": "^24.0.0", - "jest-resolve": "^24.1.0", - "jest-snapshot": "^24.1.0", - "jest-util": "^24.0.0", - "jest-validate": "^24.0.0", - "micromatch": "^3.1.10", - "realpath-native": "^1.0.0", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", - "write-file-atomic": "2.4.1", "yargs": "^12.0.2" }, "dependencies": { @@ -4161,9 +4771,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4198,26 +4808,28 @@ } }, "jest-serializer": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.0.0.tgz", - "integrity": "sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw==", + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", + "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", "dev": true }, "jest-snapshot": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.1.0.tgz", - "integrity": "sha512-th6TDfFqEmXvuViacU1ikD7xFb7lQsPn2rJl7OEmnfIVpnrx3QNY2t3PE88meeg0u/mQ0nkyvmC05PBqO4USFA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", + "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", "dev": true, "requires": { "@babel/types": "^7.0.0", + "@jest/types": "^24.8.0", "chalk": "^2.0.1", - "jest-diff": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-resolve": "^24.1.0", + "expect": "^24.8.0", + "jest-diff": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.0.0", + "pretty-format": "^24.8.0", "semver": "^5.5.0" }, "dependencies": { @@ -4253,16 +4865,20 @@ } }, "jest-util": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.0.0.tgz", - "integrity": "sha512-QxsALc4wguYS7cfjdQSOr5HTkmjzkHgmZvIDkcmPfl1ib8PNV8QUWLwbKefCudWS0PRKioV+VbQ0oCUPC691fQ==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", + "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", "dev": true, "requires": { + "@jest/console": "^24.7.1", + "@jest/fake-timers": "^24.8.0", + "@jest/source-map": "^24.3.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", "is-ci": "^2.0.0", - "jest-message-util": "^24.0.0", "mkdirp": "^0.5.1", "slash": "^2.0.0", "source-map": "^0.6.0" @@ -4318,16 +4934,17 @@ } }, "jest-validate": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.0.0.tgz", - "integrity": "sha512-vMrKrTOP4BBFIeOWsjpsDgVXATxCspC9S1gqvbJ3Tnn/b9ACsJmteYeVx9830UMV28Cob1RX55x96Qq3Tfad4g==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", + "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", "dev": true, "requires": { + "@jest/types": "^24.8.0", "camelcase": "^5.0.0", "chalk": "^2.0.1", - "jest-get-type": "^24.0.0", + "jest-get-type": "^24.8.0", "leven": "^2.1.0", - "pretty-format": "^24.0.0" + "pretty-format": "^24.8.0" }, "dependencies": { "ansi-styles": { @@ -4340,9 +4957,9 @@ } }, "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chalk": { @@ -4368,14 +4985,17 @@ } }, "jest-watcher": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.0.0.tgz", - "integrity": "sha512-GxkW2QrZ4YxmW1GUWER05McjVDunBlKMFfExu+VsGmXJmpej1saTEKvONdx5RJBlVdpPI5x6E3+EDQSIGgl53g==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", + "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", "dev": true, "requires": { + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/yargs": "^12.0.9", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.0.0", + "jest-util": "^24.8.0", "string-length": "^2.0.0" }, "dependencies": { @@ -4411,9 +5031,9 @@ } }, "jest-worker": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0.tgz", - "integrity": "sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", "dev": true, "requires": { "merge-stream": "^1.0.1", @@ -4448,64 +5068,65 @@ } }, "js2xmlparser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", - "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.0.tgz", + "integrity": "sha512-WuNgdZOXVmBk5kUPMcTcVUpbGRzLfNkv7+7APq7WiDihpXVKrgxo6wwRpRl9OQeEBgKCVk9mR7RbzrnNWC8oBw==", "dev": true, "requires": { - "xmlcreate": "^1.0.1" + "xmlcreate": "^2.0.0" } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "dev": true }, "jsdoc": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", - "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", - "dev": true, - "requires": { - "babylon": "7.0.0-beta.19", - "bluebird": "~3.5.0", - "catharsis": "~0.8.9", - "escape-string-regexp": "~1.0.5", - "js2xmlparser": "~3.0.0", - "klaw": "~2.0.0", - "marked": "~0.3.6", - "mkdirp": "~0.5.1", - "requizzle": "~0.2.1", - "strip-json-comments": "~2.0.1", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.2.tgz", + "integrity": "sha512-S2vzg99C5+gb7FWlrK4TVdyzVPGGkdvpDkCEJH1JABi2PKzPeLu5/zZffcJUifgWUJqXWl41Hoc+MmuM2GukIg==", + "dev": true, + "requires": { + "@babel/parser": "^7.4.4", + "bluebird": "^3.5.4", + "catharsis": "^0.8.10", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.0", + "klaw": "^3.0.0", + "markdown-it": "^8.4.2", + "markdown-it-anchor": "^5.0.2", + "marked": "^0.6.2", + "mkdirp": "^0.5.1", + "requizzle": "^0.2.2", + "strip-json-comments": "^3.0.1", "taffydb": "2.6.2", - "underscore": "~1.8.3" + "underscore": "~1.9.1" }, "dependencies": { - "babylon": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", - "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true } } }, "jsdoc-api": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-4.0.3.tgz", - "integrity": "sha512-dfYq9JgB+XahY0XfSEw93PmXmocjwYcvJ5aMuQUJ/OdDRGWamf2SSOk3W06Bsj8qdjp/UdefzqpP/mpwsvHuvA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-5.0.1.tgz", + "integrity": "sha512-bntcT/3No4dPJZs9KX0AN3vrX/7P6PwDXVKANCXYpa0WJsbud41yAunoMxGFS4APHwmDoWl8E0ZuowLCOiOOFw==", "dev": true, "requires": { - "array-back": "^2.0.0", + "array-back": "^3.1.0", "cache-point": "^0.4.1", "collect-all": "^1.0.3", - "file-set": "^2.0.0", + "file-set": "^2.0.1", "fs-then-native": "^2.0.0", - "jsdoc": "~3.5.5", + "jsdoc": "^3.6.1", "object-to-spawn-args": "^1.1.1", "temp-path": "^1.0.0", - "walk-back": "^3.0.0" + "walk-back": "^3.0.1" } }, "jsdoc-parse": { @@ -4520,21 +5141,32 @@ "reduce-extract": "^1.0.0", "sort-array": "^2.0.0", "test-value": "^3.0.0" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } } }, "jsdoc-to-markdown": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-4.0.1.tgz", - "integrity": "sha512-LHJRoLoLyDdxNcColgkLoB/rFG5iRP+PNJjMILI0x+95IdEAtyjSt0wJ6ZlKxRpkhBYtQXTQQ119hMqPIUZzTQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-5.0.0.tgz", + "integrity": "sha512-3gKEnbay7dSdyvtMDDkUf4r7pmBVgs3aqeT0Cg/ngTILPpJUzf8iKgASIo5psF007L45OIJtIuRX5VL/YUXKaA==", "dev": true, "requires": { - "array-back": "^2.0.0", + "array-back": "^3.1.0", "command-line-tool": "^0.8.0", "config-master": "^3.1.0", - "dmd": "^3.0.10", - "jsdoc-api": "^4.0.1", + "dmd": "^4.0.0", + "jsdoc-api": "^5.0.1", "jsdoc-parse": "^3.0.1", - "walk-back": "^3.0.0" + "walk-back": "^3.0.1" } }, "jsdom": { @@ -4590,9 +5222,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stringify-safe": { @@ -4638,18 +5270,18 @@ } }, "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", "dev": true, "requires": { "graceful-fs": "^4.1.9" } }, "kleur": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.2.tgz", - "integrity": "sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, "lcid": { @@ -4683,6 +5315,15 @@ "type-check": "~0.3.2" } }, + "linkify-it": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", + "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -4761,12 +5402,27 @@ } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } }, "make-error": { @@ -4808,29 +5464,48 @@ "object-visit": "^1.0.0" } }, + "markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "markdown-it-anchor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.1.0.tgz", + "integrity": "sha512-wJOmyXzDUxI8iuowEsaQAKMQBButhSw8j64SpgcaL75QZYC/OSZV66Fnr50lfMLYNGtV0rJdw2fmLwXCT6T+bw==", + "dev": true + }, "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", + "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", "dev": true }, "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", + "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" } }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", @@ -4870,24 +5545,24 @@ } }, "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "mime-db": "~1.36.0" + "mime-db": "1.40.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { @@ -4948,9 +5623,9 @@ "dev": true }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true, "optional": true }, @@ -4999,6 +5674,12 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -5034,17 +5715,6 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "normalize-path": { @@ -5072,9 +5742,9 @@ "dev": true }, "nwsapi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.0.tgz", - "integrity": "sha512-ZG3bLAvdHmhIjaQ/Db1qvBxsGvFMLIRpQszyqbg31VJ53UP++uZX1/gf3Ut96pdwN9AuDwlMqIYLm0UPCdUeHg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", "dev": true }, "oauth-sign": { @@ -5112,9 +5782,9 @@ "dev": true }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-to-spawn-args": { @@ -5243,15 +5913,15 @@ "dev": true }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -5273,9 +5943,9 @@ "dev": true }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "parse-json": { @@ -5346,9 +6016,9 @@ "dev": true }, "pirates": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", - "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" @@ -5404,19 +6074,21 @@ "dev": true }, "pretty-format": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.0.0.tgz", - "integrity": "sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", + "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", "dev": true, "requires": { + "@jest/types": "^24.8.0", "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0" + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { @@ -5443,9 +6115,9 @@ "dev": true }, "prompts": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.2.tgz", - "integrity": "sha512-Pc/c53d2WZHJWZr78/BhZ5eHsdQtltbyBjHoA4T0cs/4yKJqCcoOHrq2SNKwtspVE0C+ebqAR5u0/mXwrHaADQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", + "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", "dev": true, "requires": { "kleur": "^3.0.2", @@ -5459,9 +6131,9 @@ "dev": true }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", "dev": true }, "pump": { @@ -5475,9 +6147,9 @@ } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { @@ -5486,6 +6158,12 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "react-is": { + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "dev": true + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -5523,9 +6201,9 @@ } }, "realpath-native": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz", - "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", "dev": true, "requires": { "util.promisify": "^1.0.0" @@ -5568,9 +6246,9 @@ "dev": true }, "reduce-unique": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/reduce-unique/-/reduce-unique-1.0.0.tgz", - "integrity": "sha1-flhrz4ek4ytter2Cd/rWzeyfSAM=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/reduce-unique/-/reduce-unique-2.0.1.tgz", + "integrity": "sha512-x4jH/8L1eyZGR785WY+ePtyMNhycl1N2XOLxhCbzZFaqF4AXjLzqSxa2UHgJ2ZVR/HHyPOvl1L7xRnW8ye5MdA==", "dev": true }, "reduce-without": { @@ -5603,6 +6281,12 @@ } } }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -5723,26 +6407,52 @@ "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } } }, "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", "dev": true, "requires": { - "lodash": "^4.13.1" + "lodash": "^4.17.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + } } }, "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", "dev": true, "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" } }, "require-directory": { @@ -5752,33 +6462,36 @@ "dev": true }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "requizzle": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", - "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.2.tgz", + "integrity": "sha512-oJ6y7JcUJkblRGhMByGNcszeLgU0qDxNKFCiUZR1XyzHyVsev+Mxb1tyygxLd1ORsKee1SA5BInFdUwY64GE/A==", "dev": true, "requires": { - "underscore": "~1.6.0" + "lodash": "^4.17.11" }, "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true } } }, "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } }, "resolve-cwd": { "version": "2.0.0", @@ -5833,9 +6546,9 @@ } }, "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", + "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==", "dev": true }, "safe-buffer": { @@ -5860,26 +6573,25 @@ "dev": true }, "sane": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-3.1.0.tgz", - "integrity": "sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", "dev": true, "requires": { + "@cnakazawa/watch": "^1.0.3", "anymatch": "^2.0.0", - "capture-exit": "^1.2.0", - "exec-sh": "^0.2.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", "execa": "^1.0.0", "fb-watchman": "^2.0.0", - "fsevents": "^1.2.3", "micromatch": "^3.1.4", "minimist": "^1.1.1", - "walker": "~1.0.5", - "watch": "~0.18.0" + "walker": "~1.0.5" }, "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -6160,9 +6872,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", "dev": true }, "split-string": { @@ -6181,9 +6893,9 @@ "dev": true }, "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -6341,9 +7053,9 @@ "dev": true }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, "supports-color": { @@ -6369,6 +7081,17 @@ "lodash.padend": "^4.6.1", "typical": "^2.6.1", "wordwrapjs": "^3.0.0" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } } }, "taffydb": { @@ -6377,6 +7100,17 @@ "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", "dev": true }, + "teeny-request": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-3.11.3.tgz", + "integrity": "sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1", + "node-fetch": "^2.2.0", + "uuid": "^3.3.2" + } + }, "temp-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", @@ -6384,15 +7118,31 @@ "dev": true }, "test-exclude": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.1.0.tgz", - "integrity": "sha512-gwf0S2fFsANC55fSeSqpb8BYk6w3FDvwZxfNjeF6FRgvFa43r+7wRiA/Q0IxoRU37wB/LE8IQ4221BsNucTaCA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "requires": { - "arrify": "^1.0.1", + "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", - "require-main-filename": "^1.0.1" + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "test-value": { @@ -6403,6 +7153,17 @@ "requires": { "array-back": "^2.0.0", "typical": "^2.6.1" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } } }, "throat": { @@ -6455,13 +7216,13 @@ } }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "tr46": { @@ -6471,14 +7232,6 @@ "dev": true, "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } } }, "trim-right": { @@ -6488,9 +7241,9 @@ "dev": true }, "ts-jest": { - "version": "23.10.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.10.5.tgz", - "integrity": "sha512-MRCs9qnGoyKgFc8adDEntAOP64fWK1vZKnOYU1o2HxaqjdJvGqmkLCPCnVq1/If4zkUmEjKPnCiUisTrlX2p2A==", + "version": "24.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", + "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", "dev": true, "requires": { "bs-logger": "0.x", @@ -6521,7 +7274,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -6543,23 +7296,24 @@ "dev": true }, "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.17.0.tgz", + "integrity": "sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w==", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^3.2.0", "glob": "^7.1.1", - "js-yaml": "^3.7.0", + "js-yaml": "^3.13.1", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", - "tsutils": "^2.27.2" + "tsutils": "^2.29.0" }, "dependencies": { "ansi-styles": { @@ -6582,15 +7336,6 @@ "supports-color": "^5.3.0" } }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6602,6 +7347,76 @@ } } }, + "tslint-config-airbnb": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/tslint-config-airbnb/-/tslint-config-airbnb-5.11.1.tgz", + "integrity": "sha512-hkaittm2607vVMe8eotANGN1CimD5tor7uoY3ypg2VTtEcDB/KGWYbJOz58t8LI4cWSyWtgqYQ5F0HwKxxhlkQ==", + "dev": true, + "requires": { + "tslint-consistent-codestyle": "^1.14.1", + "tslint-eslint-rules": "^5.4.0", + "tslint-microsoft-contrib": "~5.2.1" + } + }, + "tslint-consistent-codestyle": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.15.1.tgz", + "integrity": "sha512-38Y3Dz4zcABe/PlPAQSGNEWPGVq0OzcIQR7SEU6dNujp/SgvhxhJOhIhI9gY4r0I3/TNtvVQwARWor9O9LPZWg==", + "dev": true, + "requires": { + "@fimbul/bifrost": "^0.17.0", + "tslib": "^1.7.1", + "tsutils": "^2.29.0" + } + }, + "tslint-eslint-rules": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", + "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==", + "dev": true, + "requires": { + "doctrine": "0.7.2", + "tslib": "1.9.0", + "tsutils": "^3.0.0" + }, + "dependencies": { + "tslib": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", + "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", + "dev": true + }, + "tsutils": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.14.0.tgz", + "integrity": "sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "tslint-microsoft-contrib": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz", + "integrity": "sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==", + "dev": true, + "requires": { + "tsutils": "^2.27.2 <2.29.0" + }, + "dependencies": { + "tsutils": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", + "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, "tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", @@ -6624,8 +7439,7 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true }, "type-check": { "version": "0.3.2", @@ -6643,9 +7457,9 @@ "dev": true }, "typescript": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", - "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.1.tgz", + "integrity": "sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw==", "dev": true }, "typical": { @@ -6654,77 +7468,38 @@ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", "dev": true }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, + "optional": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.20.0", "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "optional": true } } }, "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, - "underscore-contrib": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", - "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", - "dev": true, - "requires": { - "underscore": "1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -6806,6 +7581,15 @@ } } }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -6877,9 +7661,9 @@ } }, "walk-back": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.0.tgz", - "integrity": "sha1-I1h4ejXakQMtrV6S+AsSNw2HlcU=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.1.tgz", + "integrity": "sha512-umiNB2qLO731Sxbp6cfZ9pwURJzTnftxE4Gc7hq8n/ehkuXC//s9F65IEIJA2ZytQZ1ZOsm/Fju4IWx0bivkUQ==", "dev": true }, "walker": { @@ -6891,24 +7675,6 @@ "makeerror": "1.0.x" } }, - "watch": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", - "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", - "dev": true, - "requires": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", @@ -7037,9 +7803,9 @@ "dev": true }, "xmlcreate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", - "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.1.tgz", + "integrity": "sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA==", "dev": true }, "y18n": { @@ -7091,6 +7857,12 @@ "wrap-ansi": "^2.0.0" } }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -7113,9 +7885,9 @@ }, "dependencies": { "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true } } diff --git a/package.json b/package.json index 32f6b78c..f77448a7 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,12 @@ { "name": "prototyped.js", - "version": "1.0.0", + "version": "1.0.1", "description": "Common typescript ready prototypes available in both es5 and es6", - "author": "Ardalan Amini [https://ardalanamini.com]", + "author": { + "name": "Ardalan Amini", + "email": "ardalanamini22@gmail.com", + "url": "https://ardalanamini.com" + }, "license": "MIT", "homepage": "https://prototyped.js.org", "repository": { @@ -90,7 +94,7 @@ "today", "tomorrow", "yesterday", - "function", + "func", "cache", "defer", "isFunction", @@ -163,6 +167,8 @@ "scripts": { "prepublishOnly": "npm test && npm run lint && npm run doc && npm run build && npm run regenerate:package.json", "build": "node scripts/build.js", + "build:tsc": "tsc", + "watch:tsc": "npm run build:tsc -- --watch", "doc": "node scripts/doc.js", "lint": "tslint -p tsconfig.json -c tslint.json --exclude '**/*.d.ts'", "test": "jest", @@ -171,22 +177,21 @@ "regenerate:package.json": "node scripts/regenerate-package-json.js" }, "devDependencies": { - "@types/jest": "^24.0.0", - "@types/node": "^10.12.24", + "@types/jest": "^24.0.13", + "@types/node": "^12.0.4", "babel-core": "^6.26.3", "babel-preset-env": "^1.7.0", - "codecov": "^3.1.0", - "fs-extra": "^7.0.1", + "codecov": "^3.5.0", + "fs-extra": "^8.0.1", "fs-readdir-recursive": "^1.1.0", - "jest": "^24.1.0", - "jsdoc-to-markdown": "^4.0.1", + "jest": "^24.8.0", + "jsdoc-to-markdown": "^5.0.0", "pre-commit": "^1.2.2", "rimraf": "^2.6.3", - "ts-jest": "^23.10.5", - "tslint": "^5.12.1", - "typescript": "^3.3.3", - "uglify-es": "^3.3.9", - "uglify-js": "^3.4.9" + "ts-jest": "^24.0.2", + "tslint": "^5.17.0", + "tslint-config-airbnb": "^5.11.1", + "typescript": "^3.5.1" }, "jest": { "moduleFileExtensions": [ diff --git a/scripts/build.js b/scripts/build.js index f5db12ec..45717bfd 100755 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,81 +1,69 @@ #!/usr/bin/env node -const path = require('path') -const rimraf = require('rimraf') -const {spawn} = require('child_process') -const fs = require('fs') -const fse = require('fs-extra') -const readdir = require('fs-readdir-recursive') -const babel = require('babel-core') -const UglifyJs = require('uglify-js') -const UglifyEs = require('uglify-es') +const path = require("path"); +const rimraf = require("rimraf"); +const { spawn } = require("child_process"); +const fs = require("fs"); +const fse = require("fs-extra"); +const readdir = require("fs-readdir-recursive"); +const babel = require("babel-core"); -const startTime = new Date().getTime() +const startTime = new Date().getTime(); -const es6Dir = path.join(__dirname, '..', 'es6') -const es5Dir = path.join(__dirname, '..', 'es5') +const es6Dir = path.join(__dirname, "..", "es6"); +const es5Dir = path.join(__dirname, "..", "es5"); -rimraf.sync(es6Dir) -rimraf.sync(es5Dir) +rimraf.sync(es6Dir); +rimraf.sync(es5Dir); -const tsc = spawn(path.join(__dirname, '..', 'node_modules', '.bin', 'tsc')) +const tsc = spawn(path.join(__dirname, "..", "node_modules", ".bin", "tsc")); -tsc.stdout.on('data', (data) => console.log(`stdout: ${data}`)) +tsc.stdout.on("data", data => console.log(`stdout: ${data}`)); -tsc.stderr.on('data', (data) => console.log(`stderr: ${data}`)) +tsc.stderr.on("data", data => console.log(`stderr: ${data}`)); -tsc.on('close', (code) => { - const dtsFileNames = readdir(es6Dir, (filename) => filename.indexOf('.') === -1 || /\.d\.ts$/.test(filename)) +tsc.on("close", code => { + const dtsFileNames = readdir( + es6Dir, + filename => filename.indexOf(".") === -1 || /\.d\.ts$/.test(filename), + ); - fs.mkdirSync(es5Dir) + fs.mkdirSync(es5Dir); - dtsFileNames.forEach((filename) => { - let distPath = path.join(es5Dir, filename) + dtsFileNames.forEach(filename => { + let distPath = path.join(es5Dir, filename); - if (!fs.existsSync(path.dirname(distPath))) fse.mkdirsSync(path.dirname(distPath)) + if (!fs.existsSync(path.dirname(distPath))) + fse.mkdirsSync(path.dirname(distPath)); - fs.copyFileSync(path.join(es6Dir, filename), distPath) - }) + fs.copyFileSync(path.join(es6Dir, filename), distPath); + }); - const es5FileNames = readdir(es6Dir, (filename) => /(? /(? { - let filePath = path.join(es6Dir, filename) - let distPath = path.join(es5Dir, filename) - let content = fs.readFileSync(filePath, 'utf8') - - content = content.replace('Object.defineProperty(exports, "__esModule", { value: true });', '') + es5FileNames.forEach(filename => { + let filePath = path.join(es6Dir, filename); + let distPath = path.join(es5Dir, filename); + let content = fs.readFileSync(filePath, "utf8"); content = babel.transform(content, { - presets: 'env' - }) - - content = UglifyJs.minify(content.code, { - toplevel: true, - }) - - if (content.error) throw new Error(content.error) - - fs.writeFileSync(distPath, content.code, 'utf8') - }) - - const es6FileNames = readdir(es6Dir, (filename) => /(? { - let filePath = path.join(es6Dir, filename) - let content = fs.readFileSync(filePath, 'utf8') + if (content.error) throw new Error(content.error); - content = content.replace('Object.defineProperty(exports, "__esModule", { value: true });', '') + fs.writeFileSync(distPath, content.code, "utf8"); + }); - content = UglifyEs.minify(content, { - toplevel: true, - }) + const es6FileNames = readdir(es6Dir, filename => /(? { + const filePath = path.join(es6Dir, filename); - fs.writeFileSync(filePath, content.code, 'utf8') - }) + fs.writeFileSync(filePath, fs.readFileSync(filePath, "utf8"), "utf8"); + }); - if (code === 0) console.log(`finished in ${new Date().getTime() - startTime}ms`) - else console.log(`child process exited with code ${code}`) -}) + if (code === 0) + console.log(`finished in ${new Date().getTime() - startTime}ms`); + else console.log(`child process exited with code ${code}`); +}); diff --git a/scripts/doc.js b/scripts/doc.js index 547e92a3..43112d94 100644 --- a/scripts/doc.js +++ b/scripts/doc.js @@ -1,7 +1,7 @@ #!/usr/bin/env node const path = require("path"); -const rimraf = require("rimraf"); +// const rimraf = require("rimraf"); const {execSync} = require("child_process"); const fs = require("fs"); @@ -10,12 +10,12 @@ const startTime = new Date().getTime(); const DOCS_DIR = path.resolve(__dirname, "..", "docs"); const DOCS_PATH = path.resolve(DOCS_DIR, "README.md"); -rimraf.sync(DOCS_DIR); +// rimraf.sync(DOCS_DIR); -fs.mkdirSync(DOCS_DIR); +// fs.mkdirSync(DOCS_DIR); -fs.writeFileSync(path.resolve(DOCS_DIR, "CNAME"), "prototyped.js.org", "utf8"); -fs.writeFileSync(path.resolve(DOCS_DIR, "_config.yml"), "theme: jekyll-theme-cayman", "utf8"); +// fs.writeFileSync(path.resolve(DOCS_DIR, "CNAME"), "prototyped.js.org", "utf8"); +// fs.writeFileSync(path.resolve(DOCS_DIR, "_config.yml"), "theme: jekyll-theme-cayman", "utf8"); execSync(path.resolve(__dirname, "..", "node_modules", ".bin", "tsc")); diff --git a/src/array/all/index.ts b/src/array/all/index.ts index 8611dba3..b973efe5 100644 --- a/src/array/all/index.ts +++ b/src/array/all/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { @@ -8,7 +8,8 @@ declare global { } /** - * Returns `true` if the provided predicate function returns `true` for all elements in a collection, `false` otherwise + * Returns `true` if the provided predicate function + * returns `true` for all elements in a collection,`false` otherwise * @memberof Array.prototype * @function all * @param {Function} [fn=Boolean] diff --git a/src/array/all/method.ts b/src/array/all/method.ts index adece748..50ea4e4f 100644 --- a/src/array/all/method.ts +++ b/src/array/all/method.ts @@ -1,3 +1,6 @@ -const all = (arr: T[], fn: (value: T, index: number, array: T[]) => boolean = Boolean) => arr.every(fn); +const all = ( + arr: T[], + fn: (value: T, index: number, array: T[]) => boolean = Boolean, +) => arr.every(fn); export = all; diff --git a/src/array/all/test.ts b/src/array/all/test.ts index 10fdc8e5..6f4a1c20 100644 --- a/src/array/all/test.ts +++ b/src/array/all/test.ts @@ -1,12 +1,12 @@ -import "./index"; +import "."; describe("Array.prototype.all", () => { test("[4, 2, 3].all((x) => x > 1) returns true", () => { - expect([4, 2, 3].all((x) => x > 1)).toBe(true); + expect([4, 2, 3].all(x => x > 1)).toBe(true); }); test("[4, 2, 3].all((x) => x > 2) returns false", () => { - expect([4, 2, 3].all((x) => x > 2)).toBe(false); + expect([4, 2, 3].all(x => x > 2)).toBe(false); }); test("[1, 2, 3].all() returns true", () => { diff --git a/src/array/any/index.ts b/src/array/any/index.ts index d58c6409..7c80ef49 100644 --- a/src/array/any/index.ts +++ b/src/array/any/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { @@ -8,7 +8,8 @@ declare global { } /** - * Returns `true` if the provided predicate function returns `true` for at least one element in a collection, + * Returns `true` if the provided predicate function + * returns `true` for at least one element in a collection, * `false` otherwise * @memberof Array.prototype * @function any diff --git a/src/array/any/method.ts b/src/array/any/method.ts index 8e83d5c2..c74ccf11 100644 --- a/src/array/any/method.ts +++ b/src/array/any/method.ts @@ -1,3 +1,6 @@ -const method = (arr: T[], fn: (value: T, index: number, array: T[]) => boolean = Boolean) => arr.some(fn); +const method = ( + arr: T[], + fn: (value: T, index: number, array: T[]) => boolean = Boolean, +) => arr.some(fn); export = method; diff --git a/src/array/any/test.ts b/src/array/any/test.ts index d494388b..287648eb 100644 --- a/src/array/any/test.ts +++ b/src/array/any/test.ts @@ -1,8 +1,8 @@ -import "./index"; +import "."; describe("Array.prototype.any", () => { test("[0, 1, 2, 0].any((x) => x >= 2) returns true", () => { - expect([0, 1, 2, 0].any((x) => x >= 2)).toBe(true); + expect([0, 1, 2, 0].any(x => x >= 2)).toBe(true); }); test("[0, 0, 0].any() returns false", () => { diff --git a/src/array/append/index.ts b/src/array/append/index.ts index 370652f7..31f09e22 100644 --- a/src/array/append/index.ts +++ b/src/array/append/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/append/test.ts b/src/array/append/test.ts index 89288d93..b8fb412b 100644 --- a/src/array/append/test.ts +++ b/src/array/append/test.ts @@ -1,13 +1,15 @@ -import "./index"; +import "."; describe("Array.prototype.append", () => { test("myArray = [1, 2, 3] & myArray.append(0) results myArray to be [1, 2, 3, 0]", () => { - expect((() => { - const myArray = [1, 2, 3]; + expect( + (() => { + const myArray = [1, 2, 3]; - myArray.append(0); + myArray.append(0); - return myArray; - })()).toEqual([1, 2, 3, 0]); + return myArray; + })(), + ).toEqual([1, 2, 3, 0]); }); }); diff --git a/src/array/average/index.ts b/src/array/average/index.ts index e0fd913b..2afb813f 100644 --- a/src/array/average/index.ts +++ b/src/array/average/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/average/method.ts b/src/array/average/method.ts index bddc9fb0..f789c34c 100644 --- a/src/array/average/method.ts +++ b/src/array/average/method.ts @@ -1,5 +1,6 @@ -import * as sum from "../sum/method"; +import sum from "../sum/method"; -const method = (arr: T[], path?: string) => sum(arr, path) / arr.length; +const method = (arr: T[], path?: string) => + sum(arr, path) / arr.length; export = method; diff --git a/src/array/average/test.ts b/src/array/average/test.ts index e15c739e..1df0a6e2 100644 --- a/src/array/average/test.ts +++ b/src/array/average/test.ts @@ -1,15 +1,17 @@ -import "./index"; +import "."; describe("Array.prototype.average", () => { test("[1, 2, 3].average() returns 2", () => { expect([1, 2, 3].average()).toBe(2); }); - test("[{a: 1}, {a: 2}, {a: 3}].average(\"a\") returns 2", () => { + test('[{a: 1}, {a: 2}, {a: 3}].average("a") returns 2', () => { expect([{ a: 1 }, { a: 2 }, { a: 3 }].average("a")).toBe(2); }); - test("[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].average(\"a.b\") returns 2", () => { - expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].average("a.b")).toBe(2); + test('[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].average("a.b") returns 2', () => { + expect( + [{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].average("a.b"), + ).toBe(2); }); }); diff --git a/src/array/chunk/index.ts b/src/array/chunk/index.ts index 55420fd7..b9a960a2 100644 --- a/src/array/chunk/index.ts +++ b/src/array/chunk/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/chunk/method.ts b/src/array/chunk/method.ts index f9f9a63d..522ef606 100644 --- a/src/array/chunk/method.ts +++ b/src/array/chunk/method.ts @@ -3,7 +3,7 @@ const method = (arr: T[], size: number): T[][] => { { length: Math.ceil(arr.length / size), }, - (value, index) => arr.slice(index * size, index * size + size) + (value, index) => arr.slice(index * size, index * size + size), ); }; diff --git a/src/array/chunk/test.ts b/src/array/chunk/test.ts index bbfaadb0..5c6dc3d1 100644 --- a/src/array/chunk/test.ts +++ b/src/array/chunk/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.chunk", () => { test("[1, 2, 3, 4, 5].chunk(2) returns [[1,2],[3,4],[5]]", () => { diff --git a/src/array/clone/index.ts b/src/array/clone/index.ts index ffd4c7c7..29c39872 100644 --- a/src/array/clone/index.ts +++ b/src/array/clone/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/clone/method.ts b/src/array/clone/method.ts index 9e4c0940..b4d23f18 100644 --- a/src/array/clone/method.ts +++ b/src/array/clone/method.ts @@ -1,5 +1,6 @@ import { deepClone } from "../../utils"; -const method = (arr: T[], deep = false): T[] => deep ? deepClone(arr) : [...arr]; +const method = (arr: T[], deep = false): T[] => + deep ? deepClone(arr) : [...arr]; export = method; diff --git a/src/array/clone/test.ts b/src/array/clone/test.ts index 65af4e6d..934cf0d9 100644 --- a/src/array/clone/test.ts +++ b/src/array/clone/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.clone", () => { test("[].clone() returns []", () => { @@ -24,7 +24,7 @@ describe("Array.prototype.clone", () => { expect(a).not.toEqual(b); }); - test("[1, { foo: \"bar\" }, 3].clone(true) returns [1, { foo: \"bar\" }, 3]", () => { + test('[1, { foo: "bar" }, 3].clone(true) returns [1, { foo: "bar" }, 3]', () => { const a = [1, { foo: "bar" }, 3]; const b = a.clone(true); diff --git a/src/array/compact/index.ts b/src/array/compact/index.ts index 01a8bd61..6928b138 100644 --- a/src/array/compact/index.ts +++ b/src/array/compact/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/compact/test.ts b/src/array/compact/test.ts index 78af3921..c84c95fe 100644 --- a/src/array/compact/test.ts +++ b/src/array/compact/test.ts @@ -1,8 +1,9 @@ -import "./index"; +import "."; describe("Array.prototype.compact", () => { - test("[0,1,false,2,\"\",3,\"a\",\"e\" * 23,NaN,\"s\",34].compact() returns [1,2,3,\"a\",\"s\",34]", () => { - expect([0, 1, false, 2, "", 3, "a", "e" as any * 23, NaN, "s", 34].compact()) - .toEqual([1, 2, 3, "a", "s", 34]); + test('[0,1,false,2,"",3,"a","e" * 23,NaN,"s",34].compact() returns [1,2,3,"a","s",34]', () => { + expect( + [0, 1, false, 2, "", 3, "a", ("e" as any) * 23, NaN, "s", 34].compact(), + ).toEqual([1, 2, 3, "a", "s", 34]); }); }); diff --git a/src/array/contains/index.ts b/src/array/contains/index.ts index 2bcd126c..72de171e 100644 --- a/src/array/contains/index.ts +++ b/src/array/contains/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/contains/method.ts b/src/array/contains/method.ts index d31a9e53..0a7f6b47 100644 --- a/src/array/contains/method.ts +++ b/src/array/contains/method.ts @@ -1,3 +1,3 @@ -const method = (arr: T[], value: T) => arr.indexOf(value) !== -1; +const method = (arr: T[], value: T) => arr.includes(value); export = method; diff --git a/src/array/contains/test.ts b/src/array/contains/test.ts index eb1264c5..f4aff47b 100644 --- a/src/array/contains/test.ts +++ b/src/array/contains/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.contains", () => { test("[1, 2, 3].contains(2) returns true", () => { diff --git a/src/array/count/index.ts b/src/array/count/index.ts index 487556e7..99d0b553 100644 --- a/src/array/count/index.ts +++ b/src/array/count/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/count/method.ts b/src/array/count/method.ts index 2d7c5972..313e6195 100644 --- a/src/array/count/method.ts +++ b/src/array/count/method.ts @@ -1,5 +1,4 @@ -const method = (arr: T[], value: T) => value ? - arr.reduce((a, v) => a + Number(v === value), 0) : - arr.length; +const method = (arr: T[], value: T) => + value ? arr.reduce((a, v) => a + Number(v === value), 0) : arr.length; export = method; diff --git a/src/array/count/test.ts b/src/array/count/test.ts index 8607feb1..aa7a2256 100644 --- a/src/array/count/test.ts +++ b/src/array/count/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.count", () => { test("[1, 1, 2, 1, 2, 3].count() returns 6", () => { diff --git a/src/array/countBy/index.ts b/src/array/countBy/index.ts index bb8ff790..945b7ad5 100644 --- a/src/array/countBy/index.ts +++ b/src/array/countBy/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { @@ -8,7 +8,8 @@ declare global { } /** - * Groups the elements of an array based on the given function and returns the count of elements in each group + * Groups the elements of an array based on the given function and + * returns the count of elements in each group * @memberof Array.prototype * @function countBy * @param {String|Function} fn diff --git a/src/array/countBy/method.ts b/src/array/countBy/method.ts index 84ef1f8b..69f29935 100644 --- a/src/array/countBy/method.ts +++ b/src/array/countBy/method.ts @@ -1,9 +1,14 @@ -const method = (arr: T[], fn: string | ((value: T, index: number, arr: T[]) => any)) => - arr.map(typeof fn === "function" ? fn : (value) => (value as any)[fn]) +const method = ( + arr: T[], + fn: string | ((value: T, index: number, arr: T[]) => any), +) => + arr + .map(typeof fn === "function" ? fn : value => (value as any)[fn]) .reduce((prev: { [key: string]: any }, value: string) => { prev[value] = (prev[value] || 0) + 1; return prev; + // tslint:disable-next-line: align }, {}); export = method; diff --git a/src/array/countBy/test.ts b/src/array/countBy/test.ts index b675494a..14baed4d 100644 --- a/src/array/countBy/test.ts +++ b/src/array/countBy/test.ts @@ -1,11 +1,11 @@ -import "./index"; +import "."; describe("Array.prototype.countBy", () => { test("[6.1, 4.2, 6.3].countBy(Math.floor) returns {4: 1, 6: 2}", () => { - expect([6.1, 4.2, 6.3].countBy(Math.floor)).toEqual({4: 1, 6: 2}); + expect([6.1, 4.2, 6.3].countBy(Math.floor)).toEqual({ 4: 1, 6: 2 }); }); - test("[\"one\", \"two\", \"three\"].countBy(\"length\") returns {3: 2, 5: 1}", () => { - expect(["one", "two", "three"].countBy("length")).toEqual({3: 2, 5: 1}); + test('["one", "two", "three"].countBy("length") returns {3: 2, 5: 1}', () => { + expect(["one", "two", "three"].countBy("length")).toEqual({ 3: 2, 5: 1 }); }); }); diff --git a/src/array/crossJoin/index.ts b/src/array/crossJoin/index.ts index c7747869..1852e6e9 100644 --- a/src/array/crossJoin/index.ts +++ b/src/array/crossJoin/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { @@ -8,7 +8,8 @@ declare global { } /** - * Cross joins the array's values among the given arrays, returning a Cartesian product with all possible permutations + * Cross joins the array's values among the given arrays, + * returning a Cartesian product with all possible permutations * @memberof Array.prototype * @function crossJoin * @param {Array} array diff --git a/src/array/crossJoin/method.ts b/src/array/crossJoin/method.ts index 7ec60b5f..880470bf 100644 --- a/src/array/crossJoin/method.ts +++ b/src/array/crossJoin/method.ts @@ -1,10 +1,7 @@ const method = (arr: T[], arr2: P[]) => { const joined: Array<[T, P]> = []; - arr.forEach((item) => arr2.forEach((value) => joined.push([ - item, - value, - ]))); + arr.forEach(item => arr2.forEach(value => joined.push([item, value]))); return joined; }; diff --git a/src/array/crossJoin/test.ts b/src/array/crossJoin/test.ts index 690646a1..ebd6136e 100644 --- a/src/array/crossJoin/test.ts +++ b/src/array/crossJoin/test.ts @@ -1,7 +1,12 @@ -import "./index"; +import "."; describe("Array.prototype.crossJoin", () => { - test("[1, 2].crossJoin([\"a\", \"b\"]); returns [[1, \"a\"], [1, \"b\"], [2, \"a\"], [2, \"b\"]]", () => { - expect([1, 2].crossJoin(["a", "b"])).toEqual([[1, "a"], [1, "b"], [2, "a"], [2, "b"]]); + test('[1, 2].crossJoin(["a", "b"]); returns [[1, "a"], [1, "b"], [2, "a"], [2, "b"]]', () => { + expect([1, 2].crossJoin(["a", "b"])).toEqual([ + [1, "a"], + [1, "b"], + [2, "a"], + [2, "b"], + ]); }); }); diff --git a/src/array/deepFlatten/index.ts b/src/array/deepFlatten/index.ts index 111efb5c..edc25e64 100644 --- a/src/array/deepFlatten/index.ts +++ b/src/array/deepFlatten/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/deepFlatten/method.ts b/src/array/deepFlatten/method.ts index ddbf1007..365b2572 100644 --- a/src/array/deepFlatten/method.ts +++ b/src/array/deepFlatten/method.ts @@ -1,3 +1,4 @@ -const method = (arr: any[]): any[] => [].concat(...arr.map((v) => (Array.isArray(v) ? method(v) : v))); +const method = (arr: any[]): any[] => + [].concat(...arr.map(v => (Array.isArray(v) ? method(v) : v))); export = method; diff --git a/src/array/deepFlatten/test.ts b/src/array/deepFlatten/test.ts index 903957c2..d2d45a03 100644 --- a/src/array/deepFlatten/test.ts +++ b/src/array/deepFlatten/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.deepFlatten", () => { test("[1, [2], [[3], 4], 5].deepFlatten() returns [1,2,3,4,5]", () => { diff --git a/src/array/diff/index.ts b/src/array/diff/index.ts index 54d06b2d..e25d2b4d 100644 --- a/src/array/diff/index.ts +++ b/src/array/diff/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { @@ -9,7 +9,8 @@ declare global { /** * Returns the difference between this and another array - * if `comp` is given, filters out all values from an array for which the comparator function does not return true + * if `comp` is given, filters out all values from an array for which the comparator function + * does not return true * @memberof Array.prototype * @function diff * @param {Array} array diff --git a/src/array/diff/method.ts b/src/array/diff/method.ts index 1d0b5bb3..3f1921f3 100644 --- a/src/array/diff/method.ts +++ b/src/array/diff/method.ts @@ -1,5 +1,9 @@ -const method = (arr: T[], array: P[], comp?: (a: T, b: P) => boolean): any[] => { - if (comp) return arr.filter((a) => array.findIndex((b) => comp(a, b)) === -1); +const method = ( + arr: T[], + array: P[], + comp?: (a: T, b: P) => boolean, +): any[] => { + if (comp) return arr.filter(a => array.findIndex(b => comp(a, b)) === -1); const set = new Set(array); diff --git a/src/array/diff/test.ts b/src/array/diff/test.ts index d5266ab9..e304ec94 100644 --- a/src/array/diff/test.ts +++ b/src/array/diff/test.ts @@ -1,12 +1,17 @@ -import "./index"; +import "."; describe("Array.prototype.diff", () => { test("[1, 2, 3].diff([1, 2, 4]) returns [3]", () => { expect([1, 2, 3].diff([1, 2, 4])).toEqual([3]); }); + // tslint:disable-next-line: max-line-length test("[1, 1.2, 1.5, 3, 0].diff([1.9, 3, 0], (a, b) => Math.round(a) === Math.round(b)) returns [1, 1.2]", () => { - expect([1, 1.2, 1.5, 3, 0].diff([1.9, 3, 0], (a, b) => Math.round(a) === Math.round(b))) - .toEqual([1, 1.2]); + expect( + [1, 1.2, 1.5, 3, 0].diff( + [1.9, 3, 0], + (a, b) => Math.round(a) === Math.round(b), + ), + ).toEqual([1, 1.2]); }); }); diff --git a/src/array/distinct/index.ts b/src/array/distinct/index.ts index 26291371..077469c9 100644 --- a/src/array/distinct/index.ts +++ b/src/array/distinct/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/distinct/method.ts b/src/array/distinct/method.ts index 73d4948b..077626bc 100644 --- a/src/array/distinct/method.ts +++ b/src/array/distinct/method.ts @@ -1,13 +1,16 @@ -import * as isString from "../../string/isString/method"; +import isString from "../../string/isString/method"; import { pathToKeys } from "../../utils"; -const method = (arr: T[], fn?: string | ((value: T, index: number, array: T[]) => any)) => { +const method = ( + arr: T[], + fn?: string | ((value: T, index: number, array: T[]) => any), +) => { if (!fn) return [...new Set(arr)]; if (isString(fn)) { const keys = pathToKeys(fn); - fn = (value) => keys.reduce((prev: any, cur) => prev[cur], value); + fn = value => keys.reduce((prev: any, cur) => prev[cur], value); } const length = arr.length; diff --git a/src/array/distinct/test.ts b/src/array/distinct/test.ts index 9196a4dc..a1b4e214 100644 --- a/src/array/distinct/test.ts +++ b/src/array/distinct/test.ts @@ -1,16 +1,26 @@ -import "./index"; +import "."; describe("Array.prototype.distinct", () => { test("[1, 2, 2, 3, 4, 4, 5].distinct() returns [1,2,3,4,5]", () => { expect([1, 2, 2, 3, 4, 4, 5].distinct()).toEqual([1, 2, 3, 4, 5]); }); - test("[{foo:{bar:[0,1]}}, {foo:{bar:[4,1]}}].distinct(\"foo.bar[1]\") returns [{foo:{bar:[0,1]}}]", () => { - expect([{ foo: { bar: [0, 1] } }, { foo: { bar: [4, 1] } }].distinct("foo.bar[1]")) - .toEqual([{ foo: { bar: [0, 1] } }]); + // tslint:disable-next-line: max-line-length + test('[{foo:{bar:[0,1]}}, {foo:{bar:[4,1]}}].distinct("foo.bar[1]") returns [{foo:{bar:[0,1]}}]', () => { + expect( + [{ foo: { bar: [0, 1] } }, { foo: { bar: [4, 1] } }].distinct( + "foo.bar[1]", + ), + ).toEqual([{ foo: { bar: [0, 1] } }]); }); test("[1, 2, 2.2, 3, 4.9, 4, 5].distinct(Math.floor) returns [1,2,3,4.9,5]", () => { - expect([1, 2, 2.2, 3, 4.9, 4, 5].distinct(Math.floor)).toEqual([1, 2, 3, 4.9, 5]); + expect([1, 2, 2.2, 3, 4.9, 4, 5].distinct(Math.floor)).toEqual([ + 1, + 2, + 3, + 4.9, + 5, + ]); }); }); diff --git a/src/array/distinctBy/index.ts b/src/array/distinctBy/index.ts index cb976da8..b0927d09 100644 --- a/src/array/distinctBy/index.ts +++ b/src/array/distinctBy/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/distinctBy/method.ts b/src/array/distinctBy/method.ts index aaccbd73..24c083b7 100644 --- a/src/array/distinctBy/method.ts +++ b/src/array/distinctBy/method.ts @@ -1,7 +1,7 @@ const method = (arr: T[], fn: (a: T, b: T) => boolean) => { const distinct: T[] = []; - arr.forEach((a) => { + arr.forEach(a => { let had = false; for (let i = 0; i < distinct.length; i++) { diff --git a/src/array/distinctBy/test.ts b/src/array/distinctBy/test.ts index 6b61e862..d44059d8 100644 --- a/src/array/distinctBy/test.ts +++ b/src/array/distinctBy/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.distinctBy", () => { test("[1, 2, 2, 3, 4, 4, 5].distinctBy((a, b) => a === b) returns [1,2,3,4,5]", () => { diff --git a/src/array/empty/index.ts b/src/array/empty/index.ts index 6cdb1a19..151d7c50 100644 --- a/src/array/empty/index.ts +++ b/src/array/empty/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/empty/test.ts b/src/array/empty/test.ts index e7342853..77abe050 100644 --- a/src/array/empty/test.ts +++ b/src/array/empty/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.empty", () => { test("[1,2].empty()", () => { diff --git a/src/array/equals/index.ts b/src/array/equals/index.ts index 9adbee75..90aff37f 100644 --- a/src/array/equals/index.ts +++ b/src/array/equals/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/equals/method.ts b/src/array/equals/method.ts index e23d25eb..6a860477 100644 --- a/src/array/equals/method.ts +++ b/src/array/equals/method.ts @@ -1,12 +1,12 @@ -import * as range from "../range/method"; -import * as objectEquals from "../../object/equals/method"; +import objectEquals from "../../object/equals/method"; +import range from "../range/method"; const method = (arr: T[], value: any): boolean => { if (!Array.isArray(value)) return false; if (arr.length !== value.length) return false; - return range(arr.length - 1).every((key) => objectEquals(arr[key], value[key])); + return range(arr.length - 1).every(key => objectEquals(arr[key], value[key])); }; export = method; diff --git a/src/array/equals/test.ts b/src/array/equals/test.ts index 86d61872..c18e6f8d 100644 --- a/src/array/equals/test.ts +++ b/src/array/equals/test.ts @@ -1,12 +1,25 @@ -import "./index"; +import "."; describe("Array.prototype.equals", () => { - test("[1,2,{hello: [\"world\", true]}].equals([1,2,{hello: [\"world\", true]}]) returns true", () => { - expect([1, 2, { hello: ["world", true] }].equals([1, 2, { hello: ["world", true] }])).toBe(true); + test('[1,2,{hello: ["world", true]}].equals([1,2,{hello: ["world", true]}]) returns true', () => { + expect( + [1, 2, { hello: ["world", true] }].equals([ + 1, + 2, + { hello: ["world", true] }, + ]), + ).toBe(true); }); - test("[1,2,{hello: [\"world\", true]}].equals([1,2,{hello: [\"world\", null]}]) returns false", () => { - expect([1, 2, { hello: ["world", true] }].equals([1, 2, { hello: ["world", null] }])).toBe(false); + // tslint:disable-next-line: max-line-length + test('[1,2,{hello: ["world", true]}].equals([1,2,{hello: ["world", null]}]) returns false', () => { + expect( + [1, 2, { hello: ["world", true] }].equals([ + 1, + 2, + { hello: ["world", null] }, + ]), + ).toBe(false); }); test("[1,2,3].equals([2,1,3]) returns false", () => { diff --git a/src/array/everyNth/index.ts b/src/array/everyNth/index.ts index c8fe7db2..32e377c5 100644 --- a/src/array/everyNth/index.ts +++ b/src/array/everyNth/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/everyNth/method.ts b/src/array/everyNth/method.ts index e2da2272..8c640512 100644 --- a/src/array/everyNth/method.ts +++ b/src/array/everyNth/method.ts @@ -1,3 +1,4 @@ -const method = (arr: T[], nth: number) => arr.filter((e, i) => i % nth === nth - 1); +const method = (arr: T[], nth: number) => + arr.filter((e, i) => i % nth === nth - 1); export = method; diff --git a/src/array/everyNth/test.ts b/src/array/everyNth/test.ts index 516ff312..b9d8d4bc 100644 --- a/src/array/everyNth/test.ts +++ b/src/array/everyNth/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Array.prototype.everyNth", () => { test("[1, 2, 3, 4, 5, 6].everyNth() returns [ 2, 4, 6 ]", () => { - expect([1, 2, 3, 4, 5, 6].everyNth(2)) - .toEqual([2, 4, 6]); + expect([1, 2, 3, 4, 5, 6].everyNth(2)).toEqual([2, 4, 6]); }); }); diff --git a/src/array/first/index.ts b/src/array/first/index.ts index fde98da4..a3a28d12 100644 --- a/src/array/first/index.ts +++ b/src/array/first/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/first/test.ts b/src/array/first/test.ts index d5a24fd6..db780105 100644 --- a/src/array/first/test.ts +++ b/src/array/first/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.first", () => { test("[1, 2, 3].first() returns 1", () => { diff --git a/src/array/flatten/index.ts b/src/array/flatten/index.ts index b82114c2..34881916 100644 --- a/src/array/flatten/index.ts +++ b/src/array/flatten/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/flatten/method.ts b/src/array/flatten/method.ts index 805d9ea9..d9fc2180 100644 --- a/src/array/flatten/method.ts +++ b/src/array/flatten/method.ts @@ -1,5 +1,10 @@ -const method = (arr: T[], depth: number = 1): any[] => depth !== 1 ? - arr.reduce((prev, value) => prev.concat(Array.isArray(value) ? method(value, depth - 1) : value), [] as any[]) : - arr.reduce((prev, value) => prev.concat(value), [] as any[]); +const method = (arr: T[], depth: number = 1): any[] => + depth !== 1 + ? arr.reduce( + (prev, value) => + prev.concat(Array.isArray(value) ? method(value, depth - 1) : value), + [] as any[], + ) + : arr.reduce((prev, value) => prev.concat(value), [] as any[]); export = method; diff --git a/src/array/flatten/test.ts b/src/array/flatten/test.ts index 242718e0..febeca28 100644 --- a/src/array/flatten/test.ts +++ b/src/array/flatten/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.flatten", () => { test("[1, [2], 3, 4].flatten() returns [1, 2, 3, 4]", () => { @@ -6,6 +6,14 @@ describe("Array.prototype.flatten", () => { }); test("[1, [2, [3, [4, 5], 6], 7], 8].flatten(2) returns [1, 2, 3, [4, 5], 6, 7, 8]", () => { - expect([1, [2, [3, [4, 5], 6], 7], 8].flatten(2)).toEqual([1, 2, 3, [4, 5], 6, 7, 8]); + expect([1, [2, [3, [4, 5], 6], 7], 8].flatten(2)).toEqual([ + 1, + 2, + 3, + [4, 5], + 6, + 7, + 8, + ]); }); }); diff --git a/src/array/get/index.ts b/src/array/get/index.ts index 3cdbaabc..4d8b4cb9 100644 --- a/src/array/get/index.ts +++ b/src/array/get/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/get/method.ts b/src/array/get/method.ts index a91c0b21..2f3a8759 100644 --- a/src/array/get/method.ts +++ b/src/array/get/method.ts @@ -1,5 +1,7 @@ -const method = (arr: T[], index: number, def: P = null as any) => (index >= arr.length) ? - def : - arr[index]; +const method = ( + arr: T[], + index: number, + def: P = null as any, +) => (index >= arr.length ? def : arr[index]); export = method; diff --git a/src/array/get/test.ts b/src/array/get/test.ts index 677f03e1..65dffb05 100644 --- a/src/array/get/test.ts +++ b/src/array/get/test.ts @@ -1,7 +1,7 @@ -import "./index"; +import "."; describe("Array.prototype.get", () => { - test("[1, 2, 3].get(0, \"default value\") returns 1", () => { + test('[1, 2, 3].get(0, "default value") returns 1', () => { expect([1, 2, 3].get(0, "default value")).toBe(1); }); diff --git a/src/array/groupBy/index.ts b/src/array/groupBy/index.ts index 28ce3d8d..fe9cf140 100644 --- a/src/array/groupBy/index.ts +++ b/src/array/groupBy/index.ts @@ -1,9 +1,11 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { - groupBy(fn: string | ((item: any, index: number, array: any[]) => any)): { [key: string]: T[] }; + groupBy( + fn: string | ((item: any, index: number, array: any[]) => any), + ): { [key: string]: T[] }; } } diff --git a/src/array/groupBy/method.ts b/src/array/groupBy/method.ts index 4a448bb9..35a9dcab 100644 --- a/src/array/groupBy/method.ts +++ b/src/array/groupBy/method.ts @@ -1,10 +1,14 @@ const method = ( - arr: T[], fn: string | ((item: T, index: number, array: T[]) => any)): { [key: string]: T[] } => { - return arr.map(typeof fn === "function" ? fn : (value) => (value as any)[fn]) + arr: T[], + fn: string | ((item: T, index: number, array: T[]) => any), +): { [key: string]: T[] } => { + return arr + .map(typeof fn === "function" ? fn : value => (value as any)[fn]) .reduce((prev, value, i) => { prev[value] = (prev[value] || []).concat(arr[i]); return prev; + // tslint:disable-next-line: align }, {}); }; diff --git a/src/array/groupBy/test.ts b/src/array/groupBy/test.ts index a5d9b116..4cb5e50f 100644 --- a/src/array/groupBy/test.ts +++ b/src/array/groupBy/test.ts @@ -1,13 +1,18 @@ -import "./index"; +import "."; describe("Array.prototype.groupBy", () => { test("[6.1, 4.2, 6.3].groupBy(Math.floor) returns {4: [4.2], 6: [6.1, 6.3]}", () => { - expect([6.1, 4.2, 6.3].groupBy(Math.floor)) - .toEqual({ 4: [4.2], 6: [6.1, 6.3] }); + expect([6.1, 4.2, 6.3].groupBy(Math.floor)).toEqual({ + 4: [4.2], + 6: [6.1, 6.3], + }); }); - test("[\"one\", \"two\", \"three\"].groupBy(\"length\") returns {3: [\"one\", \"two\"], 5: [\"three\"]}", () => { - expect(["one", "two", "three"].groupBy("length")) - .toEqual({ 3: ["one", "two"], 5: ["three"] }); + // tslint:disable-next-line: max-line-length + test('["one", "two", "three"].groupBy("length") returns {3: ["one", "two"], 5: ["three"]}', () => { + expect(["one", "two", "three"].groupBy("length")).toEqual({ + 3: ["one", "two"], + 5: ["three"], + }); }); }); diff --git a/src/array/implode/index.ts b/src/array/implode/index.ts index 5cf52a49..c94ec04b 100644 --- a/src/array/implode/index.ts +++ b/src/array/implode/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { @@ -15,6 +15,7 @@ declare global { * @param {String} [separator=", "] * @returns {String} * @example - * [{a: {b: 'first'}}, {a: {b: 'second'}}, {a: {b: 'third'}}].implode('a.b', ', '); // 'first, second, third' + * [{a: {b: 'first'}}, {a: {b: 'second'}}, {a: {b: 'third'}}].implode('a.b', ', '); + * // 'first, second, third' */ addPrototype(Array, "implode", method); diff --git a/src/array/implode/method.ts b/src/array/implode/method.ts index 313a6f2c..146d68af 100644 --- a/src/array/implode/method.ts +++ b/src/array/implode/method.ts @@ -4,7 +4,12 @@ const method = (arr: T[], path: string, separator = ", "): string => { const keys = pathToKeys(path); return arr - .map((item) => keys.reduce((prev, cur) => (prev && (prev as any)[cur]) || undefined, item)) + .map(item => + keys.reduce( + (prev, cur) => (prev && (prev as any)[cur]) || undefined, + item, + ), + ) .filter(Boolean) .join(separator); }; diff --git a/src/array/implode/test.ts b/src/array/implode/test.ts index c515e98a..569ea8d9 100644 --- a/src/array/implode/test.ts +++ b/src/array/implode/test.ts @@ -1,19 +1,31 @@ -import "./index"; +import "."; describe("Array.prototype.implode", () => { test( - "[{a: {b: \"first\"}}, {a: {b: \"second\"}}, {a: {b: \"third\"}}].implode(\"a.b\", \", \")" + - " returns \"first, second, third\"", + '[{a: {b: "first"}}, {a: {b: "second"}}, {a: {b: "third"}}].implode("a.b", ", ")' + + ' returns "first, second, third"', () => { - expect([{ a: { b: "first" } }, { a: { b: "second" } }, { a: { b: "third" } }].implode("a.b", ", ")) - .toBe("first, second, third"); - }); + expect( + [ + { a: { b: "first" } }, + { a: { b: "second" } }, + { a: { b: "third" } }, + ].implode("a.b", ", "), + ).toBe("first, second, third"); + }, + ); test( - "[{a: {b: \"first\"}}, {a: {b: \"second\"}}, {a: {b: \"third\"}}].implode(\"a.c\")" + - " returns \"\"", + '[{a: {b: "first"}}, {a: {b: "second"}}, {a: {b: "third"}}].implode("a.c")' + + ' returns ""', () => { - expect([{ a: { b: "first" } }, { a: { b: "second" } }, { a: { b: "third" } }].implode("a.c")) - .toBe(""); - }); + expect( + [ + { a: { b: "first" } }, + { a: { b: "second" } }, + { a: { b: "third" } }, + ].implode("a.c"), + ).toBe(""); + }, + ); }); diff --git a/src/array/indexOfAll/index.ts b/src/array/indexOfAll/index.ts index c54705fb..64fc97bf 100644 --- a/src/array/indexOfAll/index.ts +++ b/src/array/indexOfAll/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/indexOfAll/test.ts b/src/array/indexOfAll/test.ts index 7f358d2f..01e0ba10 100644 --- a/src/array/indexOfAll/test.ts +++ b/src/array/indexOfAll/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.indexOfAll", () => { test("[1, 2, 3, 1, 2, 3].indexOfAll(1) returns [0,3]", () => { diff --git a/src/array/initial/index.ts b/src/array/initial/index.ts index aa45dc0a..e0f412a1 100644 --- a/src/array/initial/index.ts +++ b/src/array/initial/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/initial/test.ts b/src/array/initial/test.ts index e54cbd49..5e10ac64 100644 --- a/src/array/initial/test.ts +++ b/src/array/initial/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.initial", () => { test("[1, 2, 3].initial() returns [1, 2]", () => { diff --git a/src/array/intersect/index.ts b/src/array/intersect/index.ts index d640258b..3cac9fca 100644 --- a/src/array/intersect/index.ts +++ b/src/array/intersect/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/intersect/method.ts b/src/array/intersect/method.ts index 458bf5b7..f5706ab1 100644 --- a/src/array/intersect/method.ts +++ b/src/array/intersect/method.ts @@ -1,7 +1,7 @@ const method = (arr: T[], array: any[]): T[] => { const set = new Set(array); - return arr.filter((item) => set.has(item)); + return arr.filter(item => set.has(item)); }; export = method; diff --git a/src/array/intersect/test.ts b/src/array/intersect/test.ts index dae0894c..db45e6e6 100644 --- a/src/array/intersect/test.ts +++ b/src/array/intersect/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.intersect", () => { test("[1, 2, 3].intersect([4, 3, 2]) returns [2,3]", () => { diff --git a/src/array/isEmpty/index.ts b/src/array/isEmpty/index.ts index 451b1798..93b7192a 100644 --- a/src/array/isEmpty/index.ts +++ b/src/array/isEmpty/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/isEmpty/test.ts b/src/array/isEmpty/test.ts index efe5110c..4508de52 100644 --- a/src/array/isEmpty/test.ts +++ b/src/array/isEmpty/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.isEmpty", () => { test("[1,2].isEmpty() returns false", () => { diff --git a/src/array/last/index.ts b/src/array/last/index.ts index b13e35cf..da1872a8 100644 --- a/src/array/last/index.ts +++ b/src/array/last/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/last/test.ts b/src/array/last/test.ts index 2369b0a9..22e069bc 100644 --- a/src/array/last/test.ts +++ b/src/array/last/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.last", () => { test("[1, 2, 3].last() returns 3", () => { diff --git a/src/array/limit/index.ts b/src/array/limit/index.ts index 26787a7d..c1450336 100644 --- a/src/array/limit/index.ts +++ b/src/array/limit/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/limit/test.ts b/src/array/limit/test.ts index 31669a3f..2d355a50 100644 --- a/src/array/limit/test.ts +++ b/src/array/limit/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.limit", () => { test("[2, 1, 2, 5].limit(2) returns [2,1]", () => { diff --git a/src/array/max/index.ts b/src/array/max/index.ts index 1df0726e..687e75af 100644 --- a/src/array/max/index.ts +++ b/src/array/max/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/max/method.ts b/src/array/max/method.ts index 081faaa7..f7f7b094 100644 --- a/src/array/max/method.ts +++ b/src/array/max/method.ts @@ -6,7 +6,11 @@ const method = (arr: T[], path?: string) => { if (path) { const keys = pathToKeys(path); - reducer = (item: T) => keys.reduce((prev, curr) => (prev && (prev as any)[curr]) || -Infinity, item); + reducer = (item: T) => + keys.reduce( + (prev, curr) => (prev && (prev as any)[curr]) || -Infinity, + item, + ); } return arr.reduce((prev, cur) => Math.max(prev, reducer(cur)), -Infinity); diff --git a/src/array/max/test.ts b/src/array/max/test.ts index d6689067..da218810 100644 --- a/src/array/max/test.ts +++ b/src/array/max/test.ts @@ -1,19 +1,21 @@ -import "./index"; +import "."; describe("Array.prototype.max", () => { test("[1, 2, 3].max() returns 3", () => { expect([1, 2, 3].max()).toBe(3); }); - test("[{a: 1}, {a: 2}, {a: 3}].max(\"a\") returns 3", () => { + test('[{a: 1}, {a: 2}, {a: 3}].max("a") returns 3', () => { expect([{ a: 1 }, { a: 2 }, { a: 3 }].max("a")).toBe(3); }); - test("[{a: 1}, {a: 2}, {a: 3}].max(\"b\") returns -Infinity", () => { + test('[{a: 1}, {a: 2}, {a: 3}].max("b") returns -Infinity', () => { expect([{ a: 1 }, { a: 2 }, { a: 3 }].max("b")).toBe(-Infinity); }); - test("[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].max(\"a.b\") returns 3", () => { - expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].max("a.b")).toBe(3); + test('[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].max("a.b") returns 3', () => { + expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].max("a.b")).toBe( + 3, + ); }); }); diff --git a/src/array/median/index.ts b/src/array/median/index.ts index b31c500d..22659984 100644 --- a/src/array/median/index.ts +++ b/src/array/median/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/median/method.ts b/src/array/median/method.ts index b3882217..0aad109f 100644 --- a/src/array/median/method.ts +++ b/src/array/median/method.ts @@ -9,7 +9,8 @@ const method = (arr: T[], path?: string): number => { if (path) { const keys = pathToKeys(path); - reducer = (item: T) => keys.reduce((prev, curr) => (prev && (prev as any)[curr]) || prev, item); + reducer = (item: T) => + keys.reduce((prev, curr) => (prev && (prev as any)[curr]) || prev, item); } if (items.length % 2) return reducer(items[half]); diff --git a/src/array/median/test.ts b/src/array/median/test.ts index 951e8c57..22afc75d 100644 --- a/src/array/median/test.ts +++ b/src/array/median/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.median", () => { test("[1, 1, 2, 4].median() returns 1.5", () => { @@ -9,15 +9,19 @@ describe("Array.prototype.median", () => { expect([1, 1, 2].median()).toBe(1); }); - test("[{foo: 10}, {foo: 10}, {foo: 20}, {foo: 40}].median(\"foo\") returns 15", () => { - expect([{ foo: 10 }, { foo: 10 }, { foo: 20 }, { foo: 40 }].median("foo")).toBe(15); + test('[{foo: 10}, {foo: 10}, {foo: 20}, {foo: 40}].median("foo") returns 15', () => { + expect( + [{ foo: 10 }, { foo: 10 }, { foo: 20 }, { foo: 40 }].median("foo"), + ).toBe(15); }); - test("[{foo: 10}, {foo: 10}, {foo: 20}, {foo: 40}].median(\"bar\") returns NaN", () => { - expect([{ foo: 10 }, { foo: 10 }, { foo: 20 }, { foo: 40 }].median("bar")).toBe(NaN); + test('[{foo: 10}, {foo: 10}, {foo: 20}, {foo: 40}].median("bar") returns NaN', () => { + expect( + [{ foo: 10 }, { foo: 10 }, { foo: 20 }, { foo: 40 }].median("bar"), + ).toBe(NaN); }); - test("[{foo: 10}, {foo: 10}, {foo: 20}].median(\"foo\") returns 10", () => { + test('[{foo: 10}, {foo: 10}, {foo: 20}].median("foo") returns 10', () => { expect([{ foo: 10 }, { foo: 10 }, { foo: 20 }].median("foo")).toBe(10); }); }); diff --git a/src/array/merge/index.ts b/src/array/merge/index.ts index f2e4727a..4022afa2 100644 --- a/src/array/merge/index.ts +++ b/src/array/merge/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/merge/method.ts b/src/array/merge/method.ts index 097167e6..6a23dfd0 100644 --- a/src/array/merge/method.ts +++ b/src/array/merge/method.ts @@ -1,4 +1,4 @@ -const method = (arr: T[], arr2: any[]): void => { +const method = (arr: T[], arr2: any[]): void => { arr.push(...arr2); }; diff --git a/src/array/merge/test.ts b/src/array/merge/test.ts index 7a0833d3..f214a399 100644 --- a/src/array/merge/test.ts +++ b/src/array/merge/test.ts @@ -1,6 +1,7 @@ -import "./index"; +import "."; describe("Array.prototype.merge", () => { + // tslint:disable-next-line: max-line-length test("myArray = [1, 2, 3] & myArray.merge([0, 6 , 2]) results myArray to be [1, 2, 3, 0, 6, 2]", () => { const myArray = [1, 2, 3]; diff --git a/src/array/methods.ts b/src/array/methods.ts index ea24001d..660ba146 100644 --- a/src/array/methods.ts +++ b/src/array/methods.ts @@ -1,65 +1,65 @@ -import * as all from "./all/method"; -import * as any from "./any/method"; -import * as append from "./append/method"; -import * as average from "./average/method"; -import * as chunk from "./chunk/method"; -import * as clone from "./clone/method"; -import * as compact from "./compact/method"; -import * as contains from "./contains/method"; -import * as count from "./count/method"; -import * as countBy from "./countBy/method"; -import * as crossJoin from "./crossJoin/method"; -import * as deepFlatten from "./deepFlatten/method"; -import * as diff from "./diff/method"; -import * as distinct from "./distinct/method"; -import * as distinctBy from "./distinctBy/method"; -import * as empty from "./empty/method"; -import * as equals from "./equals/method"; -import * as everyNth from "./everyNth/method"; -import * as first from "./first/method"; -import * as flatten from "./flatten/method"; -import * as get from "./get/method"; -import * as groupBy from "./groupBy/method"; -import * as implode from "./implode/method"; -import * as indexOfAll from "./indexOfAll/method"; -import * as initial from "./initial/method"; -import * as intersect from "./intersect/method"; -import * as isEmpty from "./isEmpty/method"; -import * as last from "./last/method"; -import * as limit from "./limit/method"; -import * as max from "./max/method"; -import * as median from "./median/method"; -import * as merge from "./merge/method"; -import * as min from "./min/method"; -import * as nest from "./nest/method"; -import * as orderBy from "./orderBy/method"; -import * as pad from "./pad/method"; -import * as partition from "./partition/method"; -import * as pluck from "./pluck/method"; -import * as prepend from "./prepend/method"; -import * as pull from "./pull/method"; -import * as range from "./range/method"; -import * as repeat from "./repeat/method"; -import * as sample from "./sample/method"; -import * as shuffle from "./shuffle/method"; -import * as skip from "./skip/method"; -import * as sortBy from "./sortBy/method"; -import * as sum from "./sum/method"; -import * as tail from "./tail/method"; -import * as toCSV from "./toCSV/method"; -import * as union from "./union/method"; -import * as unwind from "./unwind/method"; -import * as where from "./where/method"; -import * as whereBetween from "./whereBetween/method"; -import * as whereIn from "./whereIn/method"; -import * as whereLike from "./whereLike/method"; -import * as whereNotBetween from "./whereNotBetween/method"; -import * as whereNotIn from "./whereNotIn/method"; -import * as whereNotLike from "./whereNotLike/method"; -import * as whereNotNull from "./whereNotNull/method"; -import * as whereNull from "./whereNull/method"; -import * as zip from "./zip/method"; -import * as zipObject from "./zipObject/method"; +import all from "./all/method"; +import any from "./any/method"; +import append from "./append/method"; +import average from "./average/method"; +import chunk from "./chunk/method"; +import clone from "./clone/method"; +import compact from "./compact/method"; +import contains from "./contains/method"; +import count from "./count/method"; +import countBy from "./countBy/method"; +import crossJoin from "./crossJoin/method"; +import deepFlatten from "./deepFlatten/method"; +import diff from "./diff/method"; +import distinct from "./distinct/method"; +import distinctBy from "./distinctBy/method"; +import empty from "./empty/method"; +import equals from "./equals/method"; +import everyNth from "./everyNth/method"; +import first from "./first/method"; +import flatten from "./flatten/method"; +import get from "./get/method"; +import groupBy from "./groupBy/method"; +import implode from "./implode/method"; +import indexOfAll from "./indexOfAll/method"; +import initial from "./initial/method"; +import intersect from "./intersect/method"; +import isEmpty from "./isEmpty/method"; +import last from "./last/method"; +import limit from "./limit/method"; +import max from "./max/method"; +import median from "./median/method"; +import merge from "./merge/method"; +import min from "./min/method"; +import nest from "./nest/method"; +import orderBy from "./orderBy/method"; +import pad from "./pad/method"; +import partition from "./partition/method"; +import pluck from "./pluck/method"; +import prepend from "./prepend/method"; +import pull from "./pull/method"; +import range from "./range/method"; +import repeat from "./repeat/method"; +import sample from "./sample/method"; +import shuffle from "./shuffle/method"; +import skip from "./skip/method"; +import sortBy from "./sortBy/method"; +import sum from "./sum/method"; +import tail from "./tail/method"; +import toCSV from "./toCSV/method"; +import union from "./union/method"; +import unwind from "./unwind/method"; +import where from "./where/method"; +import whereBetween from "./whereBetween/method"; +import whereIn from "./whereIn/method"; +import whereLike from "./whereLike/method"; +import whereNotBetween from "./whereNotBetween/method"; +import whereNotIn from "./whereNotIn/method"; +import whereNotLike from "./whereNotLike/method"; +import whereNotNull from "./whereNotNull/method"; +import whereNull from "./whereNull/method"; +import zip from "./zip/method"; +import zipObject from "./zipObject/method"; export { all, diff --git a/src/array/min/index.ts b/src/array/min/index.ts index 2c41f9c7..fe445445 100644 --- a/src/array/min/index.ts +++ b/src/array/min/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/min/method.ts b/src/array/min/method.ts index d53c2a6e..f74b41ab 100644 --- a/src/array/min/method.ts +++ b/src/array/min/method.ts @@ -6,7 +6,11 @@ const method = (arr: T[], path?: string): number => { if (path) { const keys = pathToKeys(path); - reducer = (item: T) => keys.reduce((prev, curr) => (prev && (prev as any)[curr]) || +Infinity, item); + reducer = (item: T) => + keys.reduce( + (prev, curr) => (prev && (prev as any)[curr]) || +Infinity, + item, + ); } return arr.reduce((prev, cur) => Math.min(prev, reducer(cur)), +Infinity); diff --git a/src/array/min/test.ts b/src/array/min/test.ts index 9e78211d..65df12a5 100644 --- a/src/array/min/test.ts +++ b/src/array/min/test.ts @@ -1,19 +1,21 @@ -import "./index"; +import "."; describe("Array.prototype.min", () => { test("[1, 2, 3].min() returns 1", () => { expect([1, 2, 3].min()).toBe(1); }); - test("[{a: 1}, {a: 2}, {a: 3}].min(\"a\") returns 1", () => { + test('[{a: 1}, {a: 2}, {a: 3}].min("a") returns 1', () => { expect([{ a: 1 }, { a: 2 }, { a: 3 }].min("a")).toBe(1); }); - test("[{a: 1}, {a: 2}, {a: 3}].min(\"b\") returns +Infinity", () => { + test('[{a: 1}, {a: 2}, {a: 3}].min("b") returns +Infinity', () => { expect([{ a: 1 }, { a: 2 }, { a: 3 }].min("b")).toBe(+Infinity); }); - test("[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].min(\"a.b\") returns 1", () => { - expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].min("a.b")).toBe(1); + test('[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].min("a.b") returns 1', () => { + expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].min("a.b")).toBe( + 1, + ); }); }); diff --git a/src/array/nest/index.ts b/src/array/nest/index.ts index dce1dfcb..fc25ca30 100644 --- a/src/array/nest/index.ts +++ b/src/array/nest/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/nest/method.ts b/src/array/nest/method.ts index ea6bd628..f8312bdb 100644 --- a/src/array/nest/method.ts +++ b/src/array/nest/method.ts @@ -1,7 +1,12 @@ const filter = (arr: any[], link: string, key: string, id: any = null): any[] => - arr.filter((item) => item[link] === id) - .map((item) => ({ ...item, children: filter(arr, link, key, item[key]) })); + arr + .filter(item => item[link] === id) + .map(item => ({ ...item, children: filter(arr, link, key, item[key]) })); -const method = (arr: T[], link: string = "parent_id", key: string = "id") => filter(arr, link, key); +const method = ( + arr: T[], + link: string = "parent_id", + key: string = "id", +) => filter(arr, link, key); export = method; diff --git a/src/array/nest/test.ts b/src/array/nest/test.ts index 548a7688..c220bb58 100644 --- a/src/array/nest/test.ts +++ b/src/array/nest/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.nest", () => { test("Array.prototype.nest (1)", () => { diff --git a/src/array/orderBy/index.ts b/src/array/orderBy/index.ts index c5704ced..aa934226 100644 --- a/src/array/orderBy/index.ts +++ b/src/array/orderBy/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/orderBy/method.ts b/src/array/orderBy/method.ts index deb5874b..8dacd57c 100644 --- a/src/array/orderBy/method.ts +++ b/src/array/orderBy/method.ts @@ -1,25 +1,29 @@ -import * as contains from "../contains/method"; import { pathToKeys } from "../../utils"; +import contains from "../contains/method"; -const method = (arr: T[], field?: string, order: "asc" | "desc" = "asc") => { - if (field && contains(["asc", "desc"], field)) { - order = field as ("asc" | "desc"); - field = undefined; - } +const method = ( + arr: T[], + field?: string, + order: "asc" | "desc" = "asc", +) => { + if (field && contains(["asc", "desc"], field)) { + order = field as ("asc" | "desc"); + field = undefined; + } - const iterator: (a: any, b: any) => number = - order === "asc" ? - ((a, b) => (a > b ? 1 : (a < b ? -1 : 0))) : - ((a, b) => (a < b ? 1 : (a > b ? -1 : 0))); + const iterator: (a: any, b: any) => number = + order === "asc" + ? (a, b) => (a > b ? 1 : a < b ? -1 : 0) + : (a, b) => (a < b ? 1 : a > b ? -1 : 0); - if (field) { - const keys = pathToKeys(field as string); - const reducer = (item: any) => keys.reduce((prev, cur) => prev[cur], item); + if (field) { + const keys = pathToKeys(field as string); + const reducer = (item: any) => keys.reduce((prev, cur) => prev[cur], item); - return arr.sort((a, b) => iterator(reducer(a), reducer(b))); - } + return arr.sort((a, b) => iterator(reducer(a), reducer(b))); + } - return arr.sort(iterator); + return arr.sort(iterator); }; export = method; diff --git a/src/array/orderBy/test.ts b/src/array/orderBy/test.ts index cc9ad3ac..f77cef63 100644 --- a/src/array/orderBy/test.ts +++ b/src/array/orderBy/test.ts @@ -1,16 +1,18 @@ -import "./index"; +import "."; describe("Array.prototype.orderBy", () => { test("[2, 1, 2, 5].orderBy() returns [1,2,2,5]", () => { expect([2, 1, 2, 5].orderBy()).toEqual([1, 2, 2, 5]); }); - test("[2, 1, 2, 5].orderBy(\"desc\") returns [5,2,2,1]", () => { + test('[2, 1, 2, 5].orderBy("desc") returns [5,2,2,1]', () => { expect([2, 1, 2, 5].orderBy("desc")).toEqual([5, 2, 2, 1]); }); - test("[{count:1},{count:20},{count:15}].orderBy(\"count\",\"asc\") returns [{count:1},{count:15},{count:20}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].orderBy("count", "asc")) - .toEqual([{ count: 1 }, { count: 15 }, { count: 20 }]); + // tslint:disable-next-line: max-line-length + test('[{count:1},{count:20},{count:15}].orderBy("count","asc") returns [{count:1},{count:15},{count:20}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].orderBy("count", "asc"), + ).toEqual([{ count: 1 }, { count: 15 }, { count: 20 }]); }); }); diff --git a/src/array/pad/index.ts b/src/array/pad/index.ts index 0f761f8a..2e58b69e 100644 --- a/src/array/pad/index.ts +++ b/src/array/pad/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/pad/test.ts b/src/array/pad/test.ts index 24419c9c..20dbf83e 100644 --- a/src/array/pad/test.ts +++ b/src/array/pad/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.pad", () => { test("[1, 2, 3].pad(2) returns [1, 2, 3]", () => { diff --git a/src/array/partition/index.ts b/src/array/partition/index.ts index 9d6640a8..7b3dfbf0 100644 --- a/src/array/partition/index.ts +++ b/src/array/partition/index.ts @@ -1,20 +1,23 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { - partition(fn: (value: T, index: number, array: any[]) => boolean): [T[], any[]]; + partition(fn: (value: T, index: number, array: T[]) => boolean): [T[], T[]]; } } /** - * Groups the elements into two arrays, depending on the provided function's truthiness for each element + * Groups the elements into two arrays, + * depending on the provided function's truthiness for each element * @memberof Array.prototype * @function partition * @param {Function} fn * @returns {Array} * @example - * const users = [{ user: 'barney', age: 36, active: false }, { user: 'fred', age: 40, active: true }]; + * const users = [ + * { user: 'barney', age: 36, active: false }, { user: 'fred', age: 40, active: true } + * ]; * users.partition(o => o.active); // [ * [{ 'user': 'fred', 'age': 40, 'active': true }], * [{ 'user': 'barney', 'age': 36, 'active': false }] diff --git a/src/array/partition/method.ts b/src/array/partition/method.ts index b5e4cbf4..28f91a85 100644 --- a/src/array/partition/method.ts +++ b/src/array/partition/method.ts @@ -1,11 +1,14 @@ -const method = (arr: T[], fn: (value: T, index: number, array: T[]) => boolean): [T[], T[]] => { +const method = ( + arr: T[], + fn: (value: T, index: number, array: T[]) => boolean, +): [T[], T[]] => { return arr.reduce( (prev: any, value, index, array) => { prev[fn(value, index, array) ? 0 : 1].push(value); return prev; }, - [[] as T[], [] as T[]] + [[] as T[], [] as T[]], ); }; diff --git a/src/array/partition/test.ts b/src/array/partition/test.ts index 6deaa133..788ba62e 100644 --- a/src/array/partition/test.ts +++ b/src/array/partition/test.ts @@ -1,10 +1,16 @@ -import "./index"; +import "."; describe("Array.prototype.partition", () => { - test( - "[{ user: \"barney\", active: false }, { user: \"fred\", active: true }].partition(o => o.active) returns " + - "[[{ user: \"fred\", active: true }],[{ user: \"barney\", active: false }]]", () => { - expect([{ user: "barney", active: false }, { user: "fred", active: true }].partition((o) => o.active)) - .toEqual([[{ user: "fred", active: true }], [{ user: "barney", active: false }]]); - }); + test(// tslint:disable-next-line: max-line-length + '[{ user: "barney", active: false }, { user: "fred", active: true }].partition(o => o.active) returns [[{ user: "fred", active: true }],[{ user: "barney", active: false }]]', () => { + expect( + [ + { user: "barney", active: false }, + { user: "fred", active: true }, + ].partition(o => o.active), + ).toEqual([ + [{ user: "fred", active: true }], + [{ user: "barney", active: false }], + ]); + }); }); diff --git a/src/array/pluck/index.ts b/src/array/pluck/index.ts index edfff94b..c0b682b4 100644 --- a/src/array/pluck/index.ts +++ b/src/array/pluck/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/pluck/method.ts b/src/array/pluck/method.ts index 4932bad9..e85c5a3e 100644 --- a/src/array/pluck/method.ts +++ b/src/array/pluck/method.ts @@ -3,7 +3,9 @@ import { pathToKeys } from "../../utils"; const method = (arr: T[], path: string) => { const keys = pathToKeys(path); - return arr.map((item) => keys.reduce((prev, cur) => (prev && (prev as any)[cur]) || undefined, item)); + return arr.map(item => + keys.reduce((prev, cur) => (prev && (prev as any)[cur]) || undefined, item), + ); }; export = method; diff --git a/src/array/pluck/test.ts b/src/array/pluck/test.ts index 0740afdf..f770c1f0 100644 --- a/src/array/pluck/test.ts +++ b/src/array/pluck/test.ts @@ -1,18 +1,23 @@ -import "./index"; +import "."; describe("Array.prototype.pluck", () => { - test("[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].pluck(\"a\") returns [{b: 1}, {b: 2}, {b: 3}]", () => { - expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].pluck("a")) - .toEqual([{ b: 1 }, { b: 2 }, { b: 3 }]); + // tslint:disable-next-line: max-line-length + test('[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].pluck("a") returns [{b: 1}, {b: 2}, {b: 3}]', () => { + expect( + [{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].pluck("a"), + ).toEqual([{ b: 1 }, { b: 2 }, { b: 3 }]); }); - test("[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].pluck(\"a.b\") returns [1, 2, 3]", () => { - expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].pluck("a.b")) - .toEqual([1, 2, 3]); + test('[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].pluck("a.b") returns [1, 2, 3]', () => { + expect( + [{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].pluck("a.b"), + ).toEqual([1, 2, 3]); }); - test("[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].pluck(\"a.c\") returns [undefined, undefined, undefined]", () => { - expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].pluck("a.c")) - .toEqual([undefined, undefined, undefined]); + // tslint:disable-next-line: max-line-length + test('[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].pluck("a.c") returns [undefined, undefined, undefined]', () => { + expect( + [{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].pluck("a.c"), + ).toEqual([undefined, undefined, undefined]); }); }); diff --git a/src/array/prepend/index.ts b/src/array/prepend/index.ts index 902fd970..051d5ff8 100644 --- a/src/array/prepend/index.ts +++ b/src/array/prepend/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/prepend/method.ts b/src/array/prepend/method.ts index 145dc541..628480ed 100644 --- a/src/array/prepend/method.ts +++ b/src/array/prepend/method.ts @@ -1,4 +1,4 @@ -const method = (arr: T[], value: any): void => { +const method = (arr: T[], value: any): void => { const array = [...arr]; arr.length = 0; diff --git a/src/array/prepend/test.ts b/src/array/prepend/test.ts index c6fe8942..e24d99a2 100644 --- a/src/array/prepend/test.ts +++ b/src/array/prepend/test.ts @@ -1,13 +1,15 @@ -import "./index"; +import "."; describe("Array.prototype.prepend", () => { test("myArray = [1, 2, 3] & myArray.prepend(0) results myArray to be [0, 1, 2, 3]", () => { - expect((() => { - const myArray = [1, 2, 3]; + expect( + (() => { + const myArray = [1, 2, 3]; - myArray.prepend(0); + myArray.prepend(0); - return myArray; - })()).toEqual([0, 1, 2, 3]); + return myArray; + })(), + ).toEqual([0, 1, 2, 3]); }); }); diff --git a/src/array/pull/index.ts b/src/array/pull/index.ts index 96075dea..75ffdd1c 100644 --- a/src/array/pull/index.ts +++ b/src/array/pull/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/pull/method.ts b/src/array/pull/method.ts index 50118134..75a68c6f 100644 --- a/src/array/pull/method.ts +++ b/src/array/pull/method.ts @@ -1,9 +1,9 @@ const method = (arr: T[], ...args: T[]): void => { - const pulled = arr.filter((value) => !(args as any).includes(value)); + const pulled = arr.filter(value => !(args as any).includes(value)); arr.length = 0; - pulled.forEach((value) => arr.push(value)); + pulled.forEach(value => arr.push(value)); }; export = method; diff --git a/src/array/pull/test.ts b/src/array/pull/test.ts index 6e65beb3..76b0fdab 100644 --- a/src/array/pull/test.ts +++ b/src/array/pull/test.ts @@ -1,14 +1,15 @@ -import "./index"; +import "."; describe("Array.prototype.pull", () => { test( - "myArray = [\"a\", \"b\", \"c\", \"a\", \"b\", \"c\"] & myArray.pull(\"a\", \"c\") results " + - "myArray to be [ \"b\", \"b\" ]", + 'myArray = ["a", "b", "c", "a", "b", "c"] & myArray.pull("a", "c") results ' + + 'myArray to be [ "b", "b" ]', () => { const myArray = ["a", "b", "c", "a", "b", "c"]; myArray.pull("a", "c"); expect(myArray).toEqual(["b", "b"]); - }); + }, + ); }); diff --git a/src/array/range/index.ts b/src/array/range/index.ts index 05831368..99cf5b50 100644 --- a/src/array/range/index.ts +++ b/src/array/range/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface ArrayConstructor { diff --git a/src/array/range/method.ts b/src/array/range/method.ts index 067356ad..1ad36413 100644 --- a/src/array/range/method.ts +++ b/src/array/range/method.ts @@ -1,5 +1,6 @@ -const method = (end: number, start: number = 0, step: number = 1): number[] => Array.from({ - length: Math.ceil((end + 1 - start) / step), -}).map((value, index) => index * step + start); +const method = (end: number, start: number = 0, step: number = 1): number[] => + Array.from({ + length: Math.ceil((end + 1 - start) / step), + }).map((value, index) => index * step + start); export = method; diff --git a/src/array/range/test.ts b/src/array/range/test.ts index 1c2e5cda..b2ea5bd5 100644 --- a/src/array/range/test.ts +++ b/src/array/range/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.range", () => { test("Array.range(5) returns [0,1,2,3,4,5]", () => { diff --git a/src/array/repeat/index.ts b/src/array/repeat/index.ts index 0cb7950e..e18b3dd2 100644 --- a/src/array/repeat/index.ts +++ b/src/array/repeat/index.ts @@ -1,8 +1,8 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface ArrayConstructor { - repeat(n: number, value?: any): any[]; + repeat(n: number, value?: T): T[]; } } diff --git a/src/array/repeat/method.ts b/src/array/repeat/method.ts index 5b5f1744..70c234f5 100644 --- a/src/array/repeat/method.ts +++ b/src/array/repeat/method.ts @@ -1,3 +1,4 @@ -const method = (n: number, value: T = 0 as any): T[] => Array(n).fill(value); +const method = (n: number, value: T = 0 as any): T[] => + Array(n).fill(value); export = method; diff --git a/src/array/repeat/test.ts b/src/array/repeat/test.ts index 787e2e90..fdcf9826 100644 --- a/src/array/repeat/test.ts +++ b/src/array/repeat/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.repeat", () => { test("Array.repeat(5, 2) returns [2,2,2,2,2]", () => { diff --git a/src/array/sample/index.ts b/src/array/sample/index.ts index 84c414e6..0bd322d0 100644 --- a/src/array/sample/index.ts +++ b/src/array/sample/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/sample/method.ts b/src/array/sample/method.ts index 11cabbc1..2c97313e 100644 --- a/src/array/sample/method.ts +++ b/src/array/sample/method.ts @@ -1,3 +1,4 @@ -const method = (arr: T[]): T => arr[Math.floor(Math.random() * arr.length)]; +const method = (arr: T[]): T => + arr[Math.floor(Math.random() * arr.length)]; export = method; diff --git a/src/array/sample/test.ts b/src/array/sample/test.ts index 53628a49..5549ecfd 100644 --- a/src/array/sample/test.ts +++ b/src/array/sample/test.ts @@ -1,7 +1,7 @@ -import "./index"; +import "."; describe("Array.prototype.sample", () => { - test("[\"a\", \"b\", \"c\", \"d\"].sample() returns \"a\" or \"b\" or \"c\" or \"d\"", () => { + test('["a", "b", "c", "d"].sample() returns "a" or "b" or "c" or "d"', () => { expect(["a", "b", "c", "d"].sample()).toMatch(/[abcd]/); }); }); diff --git a/src/array/shuffle/index.ts b/src/array/shuffle/index.ts index 671257c2..696fa2cd 100644 --- a/src/array/shuffle/index.ts +++ b/src/array/shuffle/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/shuffle/test.ts b/src/array/shuffle/test.ts index d0a0c711..38e7304f 100644 --- a/src/array/shuffle/test.ts +++ b/src/array/shuffle/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.shuffle", () => { test("[1, 2, 3].shuffle() returns somthing like [2,3,1]", () => { diff --git a/src/array/skip/index.ts b/src/array/skip/index.ts index 4eb00a55..cca19ad3 100644 --- a/src/array/skip/index.ts +++ b/src/array/skip/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/skip/test.ts b/src/array/skip/test.ts index f3765cc8..e4d15201 100644 --- a/src/array/skip/test.ts +++ b/src/array/skip/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.skip", () => { test("[2, 1, 2, 5].skip(1) returns [1,2,5]", () => { diff --git a/src/array/sortBy/index.ts b/src/array/sortBy/index.ts index a6b8bfc7..7cb06651 100644 --- a/src/array/sortBy/index.ts +++ b/src/array/sortBy/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { @@ -8,7 +8,8 @@ declare global { } /** - * Groups the elements of an array based on the given function and returns the count of elements in each group + * Groups the elements of an array based on the given function and + * returns the count of elements in each group * @memberof Array.prototype * @function sortBy * @param {String|Function} fn diff --git a/src/array/sortBy/method.ts b/src/array/sortBy/method.ts index 299c6608..f7995b8d 100644 --- a/src/array/sortBy/method.ts +++ b/src/array/sortBy/method.ts @@ -1,4 +1,4 @@ -import * as isString from "../../string/isString/method"; +import isString from "../../string/isString/method"; import { pathToKeys } from "../../utils"; const method = (arr: T[], fn: string | ((value: T) => number)) => { @@ -7,7 +7,8 @@ const method = (arr: T[], fn: string | ((value: T) => number)) => { if (isString(fn)) { const keys = pathToKeys(fn); - reducer = (value): number => keys.reduce((prev, cur) => (prev as any)[cur], value) as any; + reducer = (value): number => + keys.reduce((prev, cur) => (prev as any)[cur], value) as any; } return arr.sort((a, b) => reducer(a) - reducer(b)); diff --git a/src/array/sortBy/test.ts b/src/array/sortBy/test.ts index 07d4b0d2..2492bccd 100644 --- a/src/array/sortBy/test.ts +++ b/src/array/sortBy/test.ts @@ -1,13 +1,20 @@ -import "./index"; +import "."; describe("Array.prototype.sortBy", () => { test("['five', 'three', 'one'].sortBy('length') returns ['one', 'five', 'three']", () => { - expect(["five", "three", "one"].sortBy("length")) - .toEqual(["one", "five", "three"]); + expect(["five", "three", "one"].sortBy("length")).toEqual([ + "one", + "five", + "three", + ]); }); + // tslint:disable-next-line: max-line-length test("['five', 'three', 'one'].sortBy((value) => -value.length) returns ['three', 'five', 'one']", () => { - expect(["five", "three", "one"].sortBy((value) => -value.length)) - .toEqual(["three", "five", "one"]); + expect(["five", "three", "one"].sortBy(value => -value.length)).toEqual([ + "three", + "five", + "one", + ]); }); }); diff --git a/src/array/sum/index.ts b/src/array/sum/index.ts index 20e0c7a8..316547b3 100644 --- a/src/array/sum/index.ts +++ b/src/array/sum/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/sum/method.ts b/src/array/sum/method.ts index 390bc966..e6ee87d1 100644 --- a/src/array/sum/method.ts +++ b/src/array/sum/method.ts @@ -4,7 +4,11 @@ const method = (arr: T[], path?: string): number => { if (path) { const keys = pathToKeys(path); - const reducer = (item: T): number => keys.reduce((prev, cur) => (prev && (prev as any)[cur]) || 0, item) as any; + const reducer = (item: T): number => + keys.reduce( + (prev, cur) => (prev && (prev as any)[cur]) || 0, + item, + ) as any; return arr.reduce((prev, cur) => prev + reducer(cur), 0); } diff --git a/src/array/sum/test.ts b/src/array/sum/test.ts index 4db0ec3f..bc2a584a 100644 --- a/src/array/sum/test.ts +++ b/src/array/sum/test.ts @@ -1,19 +1,21 @@ -import "./index"; +import "."; describe("Array.prototype.sum", () => { test("[1, 2, 3].sum() returns 6", () => { expect([1, 2, 3].sum()).toBe(6); }); - test("[{a: 1}, {a: 2}, {a: 3}].sum(\"a\") returns 6", () => { + test('[{a: 1}, {a: 2}, {a: 3}].sum("a") returns 6', () => { expect([{ a: 1 }, { a: 2 }, { a: 3 }].sum("a")).toBe(6); }); - test("[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].sum(\"a.b\") returns 6", () => { - expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].sum("a.b")).toBe(6); + test('[{a: {b: 1}}, {a: {b: 2}}, {a: {b: 3}}].sum("a.b") returns 6', () => { + expect([{ a: { b: 1 } }, { a: { b: 2 } }, { a: { b: 3 } }].sum("a.b")).toBe( + 6, + ); }); - test("[{a: 1}, {a: 2}, {a: 3}].sum(\"b\") returns 0", () => { + test('[{a: 1}, {a: 2}, {a: 3}].sum("b") returns 0', () => { expect([{ a: 1 }, { a: 2 }, { a: 3 }].sum("b")).toBe(0); }); }); diff --git a/src/array/tail/index.ts b/src/array/tail/index.ts index 790fcad2..9478491d 100644 --- a/src/array/tail/index.ts +++ b/src/array/tail/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/tail/method.ts b/src/array/tail/method.ts index 9da4431f..b352941c 100644 --- a/src/array/tail/method.ts +++ b/src/array/tail/method.ts @@ -1,3 +1,3 @@ -const method = (arr: T[]): T[] => arr.length > 1 ? arr.slice(1) : []; +const method = (arr: T[]): T[] => (arr.length > 1 ? arr.slice(1) : []); export = method; diff --git a/src/array/tail/test.ts b/src/array/tail/test.ts index 4e8621f9..f68b63a3 100644 --- a/src/array/tail/test.ts +++ b/src/array/tail/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.tail", () => { test("[1, 2, 3].tail() returns [2, 3]", () => { diff --git a/src/array/toCSV/index.ts b/src/array/toCSV/index.ts index 6c8a6999..3e67be05 100644 --- a/src/array/toCSV/index.ts +++ b/src/array/toCSV/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/toCSV/method.ts b/src/array/toCSV/method.ts index ca108340..dd1959d7 100644 --- a/src/array/toCSV/method.ts +++ b/src/array/toCSV/method.ts @@ -1,4 +1,4 @@ -const toCSV = (arr: T[], delimiter = ",") => arr - .map((v: any) => v.map((x: any) => `"${x}"`).join(delimiter)).join("\n"); +const toCSV = (arr: T[], delimiter = ",") => + arr.map((v: any) => v.map((x: any) => `"${x}"`).join(delimiter)).join("\n"); export = toCSV; diff --git a/src/array/toCSV/test.ts b/src/array/toCSV/test.ts index 9c61ae9b..aa5458a4 100644 --- a/src/array/toCSV/test.ts +++ b/src/array/toCSV/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.toCSV", () => { test("[['a', 'b'], ['c', 'd']].toCSV() returns '\"a\",\"b\"\\n\"c\",\"d\"'", () => { diff --git a/src/array/union/index.ts b/src/array/union/index.ts index 3916de37..ded74785 100644 --- a/src/array/union/index.ts +++ b/src/array/union/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/union/method.ts b/src/array/union/method.ts index 968561f5..1629a3ea 100644 --- a/src/array/union/method.ts +++ b/src/array/union/method.ts @@ -1,3 +1,4 @@ -const method = (arr: T[], array: P[]): Array => Array.from(new Set([...arr, ...array])); +const method = (arr: T[], array: P[]): Array => + Array.from(new Set([...arr, ...array])); export = method; diff --git a/src/array/union/test.ts b/src/array/union/test.ts index ae7d49f1..270941fc 100644 --- a/src/array/union/test.ts +++ b/src/array/union/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Array.prototype.union", () => { test("[1, 2, 3].union([4, 3, 2]) returns [1,2,3,4]", () => { diff --git a/src/array/unwind/index.ts b/src/array/unwind/index.ts index 919e8edc..419e019c 100644 --- a/src/array/unwind/index.ts +++ b/src/array/unwind/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/unwind/method.ts b/src/array/unwind/method.ts index dc19c2ee..5c88f99b 100644 --- a/src/array/unwind/method.ts +++ b/src/array/unwind/method.ts @@ -1,11 +1,16 @@ const method = (arr: T[], path: string) => { - return arr.reduce((prev, cur) => { - const values: any[] = (cur as any)[path]; + return arr.reduce( + (prev, cur) => { + const values: any[] = (cur as any)[path]; - values.forEach((value) => prev.push(Object.assign({}, cur, { [path]: value }) as any)); + values.forEach(value => + prev.push(Object.assign({}, cur, { [path]: value }) as any), + ); - return prev; - }, [] as P[]); + return prev; + }, + [] as P[], + ); }; export = method; diff --git a/src/array/unwind/test.ts b/src/array/unwind/test.ts index 36a98629..b997e176 100644 --- a/src/array/unwind/test.ts +++ b/src/array/unwind/test.ts @@ -1,9 +1,18 @@ -import "./index"; +import "."; describe("Array.prototype.unwind", () => { - test("[{foo: [\"bar 1\", \"bar 2\"]}, {foo: [\"bar 3\", \"bar 4\", \"bar 5\"]}].unwind(\"foo\")", - () => { - expect([{ foo: ["bar 1", "bar 2"] }, { foo: ["bar 3", "bar 4", "bar 5"] }].unwind("foo")) - .toEqual([{ foo: "bar 1" }, { foo: "bar 2" }, { foo: "bar 3" }, { foo: "bar 4" }, { foo: "bar 5" }]); - }); + test('[{foo: ["bar 1", "bar 2"]}, {foo: ["bar 3", "bar 4", "bar 5"]}].unwind("foo")', () => { + expect( + [ + { foo: ["bar 1", "bar 2"] }, + { foo: ["bar 3", "bar 4", "bar 5"] }, + ].unwind("foo"), + ).toEqual([ + { foo: "bar 1" }, + { foo: "bar 2" }, + { foo: "bar 3" }, + { foo: "bar 4" }, + { foo: "bar 5" }, + ]); + }); }); diff --git a/src/array/where/index.ts b/src/array/where/index.ts index 055a5bcc..37485f14 100644 --- a/src/array/where/index.ts +++ b/src/array/where/index.ts @@ -1,13 +1,13 @@ -import * as method from "./method"; -import * as types from "../../types"; -import { addPrototype } from "../../utils"; +import { addPrototype, Operator } from "../../utils"; +import method from "./method"; declare global { interface Array { where(value: any): T[]; where(field: string, value: any): T[]; - where(operator: types.Operator, value: any): T[]; - where(field: string, operator: types.Operator, value: any): T[]; + // tslint:disable-next-line: unified-signatures + where(operator: Operator, value: any): T[]; + where(field: string, operator: Operator, value: any): T[]; } } diff --git a/src/array/where/method.ts b/src/array/where/method.ts index e72f0b12..06f2464d 100644 --- a/src/array/where/method.ts +++ b/src/array/where/method.ts @@ -1,50 +1,63 @@ -import * as types from "../../types"; -import * as contains from "../contains/method"; -import { filter } from "../../utils"; +import { filter, Operator, OPERATOR } from "../../utils"; +import contains from "../contains/method"; + +const OPERATORS = [ + OPERATOR.LT, + OPERATOR.LTE, + OPERATOR.EQ, + OPERATOR.NE, + OPERATOR.GTE, + OPERATOR.GT, +]; const method = ( - arr: T[], field: string | types.Operator | any, - operator?: types.Operator | any, value?: any + arr: T[], + field: string | Operator | any, + operator?: Operator | any, + value?: any, ) => { - if (operator === undefined) { - value = field as any; - field = undefined; - operator = "="; - } else if (value === undefined) - if (!contains(["<", "<=", "=", "<>", ">=", ">"], field)) { - value = operator as any; - operator = "="; - } else { - value = operator as any; - operator = field as types.Operator; - field = undefined; - } - - let iterator: (item: any) => boolean; - switch (operator) { - case "<": - iterator = (item) => item < value; - break; - case "<=": - iterator = (item) => item <= value; - break; - case "=": - iterator = (item) => item === value; - break; - case "<>": - iterator = (item) => item !== value; - break; - case ">=": - iterator = (item) => item >= value; - break; - case ">": - iterator = (item) => item > value; - break; - default: - throw new TypeError(`Expected 'operator' to be one of ['<', '<=', '=', '<>', '>=', '>'], got ${operator}`); + if (operator === undefined) { + value = field as any; + field = undefined; + operator = OPERATOR.EQ; + } else if (value === undefined) { + if (!contains(OPERATORS, field)) { + value = operator as any; + operator = OPERATOR.EQ; + } else { + value = operator as any; + operator = field as Operator; + field = undefined; } + } + + let iterator: (item: any) => boolean; + switch (operator) { + case OPERATOR.LT: + iterator = item => item < value; + break; + case OPERATOR.LTE: + iterator = item => item <= value; + break; + case OPERATOR.EQ: + iterator = item => item === value; + break; + case OPERATOR.NE: + iterator = item => item !== value; + break; + case OPERATOR.GTE: + iterator = item => item >= value; + break; + case OPERATOR.GT: + iterator = item => item > value; + break; + default: + throw new TypeError( + `Expected 'operator' to be one of ${OPERATORS}, got ${operator}`, + ); + } - return filter(arr, field, iterator); + return filter(arr, field, iterator); }; export = method; diff --git a/src/array/where/test.ts b/src/array/where/test.ts index 60eda6e8..2ae589ec 100644 --- a/src/array/where/test.ts +++ b/src/array/where/test.ts @@ -1,39 +1,49 @@ -import "./index"; +import "."; describe("Array.prototype.where", () => { test("[1, 2, 2, 3, 4, 4, 5].where(4) returns [4,4]", () => { expect([1, 2, 2, 3, 4, 4, 5].where(4)).toEqual([4, 4]); }); - test("[1, 2, 2, 3, 4, 4, 5].where(\"<\", 4) returns [1,2,2,3]", () => { + test('[1, 2, 2, 3, 4, 4, 5].where("<", 4) returns [1,2,2,3]', () => { expect([1, 2, 2, 3, 4, 4, 5].where("<", 4)).toEqual([1, 2, 2, 3]); }); - test("[1, 2, 2, 3, 4, 4, 5].where(\"<=\", 4) returns [1,2,2,3,4,4]", () => { + test('[1, 2, 2, 3, 4, 4, 5].where("<=", 4) returns [1,2,2,3,4,4]', () => { expect([1, 2, 2, 3, 4, 4, 5].where("<=", 4)).toEqual([1, 2, 2, 3, 4, 4]); }); - test("[{count:1}, {count:20}, {count:15}].where(\"count\", 15) returns [{count:15}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].where("count", 15)).toEqual([{ count: 15 }]); + test('[{count:1}, {count:20}, {count:15}].where("count", 15) returns [{count:15}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].where("count", 15), + ).toEqual([{ count: 15 }]); }); - test("[{count:1}, {count:20}, {count:15}].where(\"count\", \"<>\", 15) returns [{count:15}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].where("count", "<>", 15)) - .toEqual([{ count: 1 }, { count: 20 }]); + test('[{count:1}, {count:20}, {count:15}].where("count", "<>", 15) returns [{count:15}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].where("count", "<>", 15), + ).toEqual([{ count: 1 }, { count: 20 }]); }); - test("[{count:1}, {count:20}, {count:15}].where(\"count\", \">=\", 15) returns [{count:20},{count:15}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].where("count", ">=", 15)) - .toEqual([{ count: 20 }, { count: 15 }]); + test('[{count:1}, {count:20}, {count:15}].where("count", ">=", 15) returns [{count:20},{count:15}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].where("count", ">=", 15), + ).toEqual([{ count: 20 }, { count: 15 }]); }); - test("[{count:1}, {count:20}, {count:15}].where(\"count\", \">\", 15) returns [{count:20}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].where("count", ">", 15)) - .toEqual([{ count: 20 }]); + test('[{count:1}, {count:20}, {count:15}].where("count", ">", 15) returns [{count:20}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].where("count", ">", 15), + ).toEqual([{ count: 20 }]); }); - test("[{count:1}, {count:20}, {count:15}].where(\"count\", \"like\", 15) throws TypeError", () => { - expect(() => [{ count: 1 }, { count: 20 }, { count: 15 }].where("count", "like" as any, 15)) - .toThrowError(TypeError); + test('[{count:1}, {count:20}, {count:15}].where("count", "like", 15) throws TypeError', () => { + expect(() => + [{ count: 1 }, { count: 20 }, { count: 15 }].where( + "count", + "like" as any, + 15, + ), + ).toThrowError(TypeError); }); }); diff --git a/src/array/whereBetween/index.ts b/src/array/whereBetween/index.ts index 25554360..befe0afe 100644 --- a/src/array/whereBetween/index.ts +++ b/src/array/whereBetween/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/whereBetween/method.ts b/src/array/whereBetween/method.ts index 53ae7f73..6888236f 100644 --- a/src/array/whereBetween/method.ts +++ b/src/array/whereBetween/method.ts @@ -1,15 +1,20 @@ import { filter } from "../../utils"; -const method = (arr: T[], field: string | any, start: any, end?: any) => { - if (end === undefined) { - end = start as any; - start = field as any; - field = undefined as any; - } +const method = ( + arr: T[], + field: string | any, + start: any, + end?: any, +) => { + if (end === undefined) { + end = start as any; + start = field as any; + field = undefined as any; + } - const iterator = (item: any) => item >= start && item <= end; + const iterator = (item: any) => item >= start && item <= end; - return filter(arr, field, iterator); + return filter(arr, field, iterator); }; export = method; diff --git a/src/array/whereBetween/test.ts b/src/array/whereBetween/test.ts index b964b078..d574c52d 100644 --- a/src/array/whereBetween/test.ts +++ b/src/array/whereBetween/test.ts @@ -1,12 +1,14 @@ -import "./index"; +import "."; describe("Array.prototype.whereBetween", () => { test("[1, 2, 2, 3, 4, 4, 5].whereBetween(3,4) returns [3,4,4]", () => { expect([1, 2, 2, 3, 4, 4, 5].whereBetween(3, 4)).toEqual([3, 4, 4]); }); - test("[{count:1}, {count:20}, {count:15}].whereBetween(\"count\", 1, 15) returns [{count:1},{count:15}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].whereBetween("count", 1, 15)) - .toEqual([{ count: 1 }, { count: 15 }]); + // tslint:disable-next-line: max-line-length + test('[{count:1}, {count:20}, {count:15}].whereBetween("count", 1, 15) returns [{count:1},{count:15}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].whereBetween("count", 1, 15), + ).toEqual([{ count: 1 }, { count: 15 }]); }); }); diff --git a/src/array/whereIn/index.ts b/src/array/whereIn/index.ts index d936a56e..21895520 100644 --- a/src/array/whereIn/index.ts +++ b/src/array/whereIn/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/whereIn/method.ts b/src/array/whereIn/method.ts index 4b5b5ab2..c6443706 100644 --- a/src/array/whereIn/method.ts +++ b/src/array/whereIn/method.ts @@ -1,14 +1,14 @@ import { filter } from "../../utils"; const method = (arr: T[], field: string | any[], value?: any[]) => { - if (value === undefined) { - value = field as any[]; - field = undefined as any; - } + if (value === undefined) { + value = field as any[]; + field = undefined as any; + } - const iterator = (item: T) => (value as any[]).indexOf(item) !== -1; + const iterator = (item: T) => (value as any[]).indexOf(item) !== -1; - return filter(arr, field as string, iterator); + return filter(arr, field as string, iterator); }; export = method; diff --git a/src/array/whereIn/test.ts b/src/array/whereIn/test.ts index 25b2dec9..647d0062 100644 --- a/src/array/whereIn/test.ts +++ b/src/array/whereIn/test.ts @@ -1,12 +1,14 @@ -import "./index"; +import "."; describe("Array.prototype.whereIn", () => { test("[1, 2, 2, 3, 4, 4, 5].whereIn([3,4]) returns [3,4,4]", () => { expect([1, 2, 2, 3, 4, 4, 5].whereIn([3, 4])).toEqual([3, 4, 4]); }); - test("[{count:1}, {count:20}, {count:15}].whereIn(\"count\", [1, 15]) returns [{count:1},{count:15}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].whereIn("count", [1, 15])) - .toEqual([{ count: 1 }, { count: 15 }]); + // tslint:disable-next-line: max-line-length + test('[{count:1}, {count:20}, {count:15}].whereIn("count", [1, 15]) returns [{count:1},{count:15}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].whereIn("count", [1, 15]), + ).toEqual([{ count: 1 }, { count: 15 }]); }); }); diff --git a/src/array/whereLike/index.ts b/src/array/whereLike/index.ts index 891d58fe..d6990931 100644 --- a/src/array/whereLike/index.ts +++ b/src/array/whereLike/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { @@ -17,6 +17,7 @@ declare global { * @returns {Array} * @example * ["foo", "bar", "hello", "world"].whereLike("o"); // ["foo","hello","world"] - * [{foo:"hello"}, {foo:"bar"}, {foo:"world"}].whereLike("foo", /o/i); // [{foo:"hello"},{foo:"world"}] + * [{foo:"hello"}, {foo:"bar"}, {foo:"world"}] + * .whereLike("foo", /o/i); // [{foo:"hello"},{foo:"world"}] */ addPrototype(Array, "whereLike", method); diff --git a/src/array/whereLike/method.ts b/src/array/whereLike/method.ts index ccb8f0da..cfa2bf03 100644 --- a/src/array/whereLike/method.ts +++ b/src/array/whereLike/method.ts @@ -1,17 +1,21 @@ -import * as isString from "../../string/isString/method"; +import isString from "../../string/isString/method"; import { filter } from "../../utils"; -const method = (arr: T[], field: string | RegExp, value?: string | RegExp) => { - if (value === undefined) { - value = field as string | RegExp; - field = undefined as any; - } +const method = ( + arr: T[], + field: string | RegExp, + value?: string | RegExp, +) => { + if (value === undefined) { + value = field as string | RegExp; + field = undefined as any; + } - if (isString(value)) value = new RegExp(value, "i"); + if (isString(value)) value = new RegExp(value, "i"); - const iterator = (item: any) => (value as RegExp).test(item); + const iterator = (item: any) => (value as RegExp).test(item); - return filter(arr, field as string, iterator); + return filter(arr, field as string, iterator); }; export = method; diff --git a/src/array/whereLike/test.ts b/src/array/whereLike/test.ts index 35e7a59e..8165967a 100644 --- a/src/array/whereLike/test.ts +++ b/src/array/whereLike/test.ts @@ -1,14 +1,21 @@ -import "./index"; +import "."; describe("Array.prototype.whereLike", () => { - test("[\"foo\", \"bar\", \"hello\", \"world\"].whereLike(\"o\") returns [\"foo\",\"hello\",\"world\"]", () => { - expect(["foo", "bar", "hello", "world"].whereLike("o")).toEqual(["foo", "hello", "world"]); + test('["foo", "bar", "hello", "world"].whereLike("o") returns ["foo","hello","world"]', () => { + expect(["foo", "bar", "hello", "world"].whereLike("o")).toEqual([ + "foo", + "hello", + "world", + ]); }); - test( - "[{foo:\"hello\"},{foo:\"bar\"},{foo:\"world\"}].whereLike(\"foo\",/o/i) returns [{foo:\"hello\"},{foo:\"world\"}]", - () => { - expect([{ foo: "hello" }, { foo: "bar" }, { foo: "world" }].whereLike("foo", /o/i)) - .toEqual([{ foo: "hello" }, { foo: "world" }]); - }); + // tslint:disable-next-line: max-line-length + test('[{foo:"hello"},{foo:"bar"},{foo:"world"}].whereLike("foo",/o/i) returns [{foo:"hello"},{foo:"world"}]', () => { + expect( + [{ foo: "hello" }, { foo: "bar" }, { foo: "world" }].whereLike( + "foo", + /o/i, + ), + ).toEqual([{ foo: "hello" }, { foo: "world" }]); + }); }); diff --git a/src/array/whereNotBetween/index.ts b/src/array/whereNotBetween/index.ts index faceab3a..6dd83694 100644 --- a/src/array/whereNotBetween/index.ts +++ b/src/array/whereNotBetween/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/whereNotBetween/method.ts b/src/array/whereNotBetween/method.ts index d0ebec60..0ad4889f 100644 --- a/src/array/whereNotBetween/method.ts +++ b/src/array/whereNotBetween/method.ts @@ -1,15 +1,20 @@ import { filter } from "../../utils"; -const method = (arr: T[], field: string | any, start: any, end?: any) => { - if (end === undefined) { - end = start as any; - start = field as any; - field = undefined as any; - } +const method = ( + arr: T[], + field: string | any, + start: any, + end?: any, +) => { + if (end === undefined) { + end = start as any; + start = field as any; + field = undefined as any; + } - const iterator = (item: any) => item < start || item > end; + const iterator = (item: any) => item < start || item > end; - return filter(arr, field, iterator); + return filter(arr, field, iterator); }; export = method; diff --git a/src/array/whereNotBetween/test.ts b/src/array/whereNotBetween/test.ts index a61b012c..9b28523f 100644 --- a/src/array/whereNotBetween/test.ts +++ b/src/array/whereNotBetween/test.ts @@ -1,12 +1,18 @@ -import "./index"; +import "."; describe("Array.prototype.whereNotBetween", () => { test("[1, 2, 2, 3, 4, 4, 5].whereNotBetween(3,4) returns [1,2,2,5]", () => { expect([1, 2, 2, 3, 4, 4, 5].whereNotBetween(3, 4)).toEqual([1, 2, 2, 5]); }); - test("[{count:1}, {count:20}, {count:15}].whereNotBetween(\"count\", 1, 15) returns [{count:20}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].whereNotBetween("count", 1, 15)) - .toEqual([{ count: 20 }]); + // tslint:disable-next-line: max-line-length + test('[{count:1}, {count:20}, {count:15}].whereNotBetween("count", 1, 15) returns [{count:20}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].whereNotBetween( + "count", + 1, + 15, + ), + ).toEqual([{ count: 20 }]); }); }); diff --git a/src/array/whereNotIn/index.ts b/src/array/whereNotIn/index.ts index 7a269545..3e8d57f2 100644 --- a/src/array/whereNotIn/index.ts +++ b/src/array/whereNotIn/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/whereNotIn/method.ts b/src/array/whereNotIn/method.ts index 35dc4a03..8e70532e 100644 --- a/src/array/whereNotIn/method.ts +++ b/src/array/whereNotIn/method.ts @@ -1,14 +1,14 @@ import { filter } from "../../utils"; const method = (arr: T[], field: string | any[], value?: any[]) => { - if (value === undefined) { - value = field as any[]; - field = undefined as any; - } + if (value === undefined) { + value = field as any[]; + field = undefined as any; + } - const iterator = (item: any) => (value as any[]).indexOf(item) === -1; + const iterator = (item: any) => (value as any[]).indexOf(item) === -1; - return filter(arr, field as string, iterator); + return filter(arr, field as string, iterator); }; export = method; diff --git a/src/array/whereNotIn/test.ts b/src/array/whereNotIn/test.ts index e5f07416..87804ce0 100644 --- a/src/array/whereNotIn/test.ts +++ b/src/array/whereNotIn/test.ts @@ -1,12 +1,14 @@ -import "./index"; +import "."; describe("Array.prototype.whereNotIn", () => { test("[1, 2, 2, 3, 4, 4, 5].whereNotIn([3,4]) returns [1,2,2,5]", () => { expect([1, 2, 2, 3, 4, 4, 5].whereNotIn([3, 4])).toEqual([1, 2, 2, 5]); }); - test("[{count:1}, {count:20}, {count:15}].whereNotIn(\"count\", [1, 15]) returns [{count:20}]", () => { - expect([{ count: 1 }, { count: 20 }, { count: 15 }].whereNotIn("count", [1, 15])) - .toEqual([{ count: 20 }]); + // tslint:disable-next-line: max-line-length + test('[{count:1}, {count:20}, {count:15}].whereNotIn("count", [1, 15]) returns [{count:20}]', () => { + expect( + [{ count: 1 }, { count: 20 }, { count: 15 }].whereNotIn("count", [1, 15]), + ).toEqual([{ count: 20 }]); }); }); diff --git a/src/array/whereNotLike/index.ts b/src/array/whereNotLike/index.ts index 848b916b..05ac24aa 100644 --- a/src/array/whereNotLike/index.ts +++ b/src/array/whereNotLike/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/whereNotLike/method.ts b/src/array/whereNotLike/method.ts index b3304d2b..db2b2b88 100644 --- a/src/array/whereNotLike/method.ts +++ b/src/array/whereNotLike/method.ts @@ -1,17 +1,21 @@ -import * as isString from "../../string/isString/method"; +import isString from "../../string/isString/method"; import { filter } from "../../utils"; -const method = (arr: T[], field: string | RegExp, value?: string | RegExp) => { - if (value === undefined) { - value = field as string | RegExp; - field = undefined as any; - } +const method = ( + arr: T[], + field: string | RegExp, + value?: string | RegExp, +) => { + if (value === undefined) { + value = field as string | RegExp; + field = undefined as any; + } - if (isString(value)) value = new RegExp(value, "i"); + if (isString(value)) value = new RegExp(value, "i"); - const iterator = (item: any) => !(value as RegExp).test(item); + const iterator = (item: any) => !(value as RegExp).test(item); - return filter(arr, field as string, iterator); + return filter(arr, field as string, iterator); }; export = method; diff --git a/src/array/whereNotLike/test.ts b/src/array/whereNotLike/test.ts index 2d740b1a..65fa6603 100644 --- a/src/array/whereNotLike/test.ts +++ b/src/array/whereNotLike/test.ts @@ -1,14 +1,17 @@ -import "./index"; +import "."; describe("Array.prototype.whereNotLike", () => { - test("[\"foo\", \"bar\", \"hello\", \"world\"].whereNotLike(\"o\") returns [\"bar\"]", () => { + test('["foo", "bar", "hello", "world"].whereNotLike("o") returns ["bar"]', () => { expect(["foo", "bar", "hello", "world"].whereNotLike("o")).toEqual(["bar"]); }); - test( - "[{foo:\"hello\"}, {foo:\"bar\"}, {foo:\"world\"}].whereNotLike(\"foo\", /o/i) returns [{foo:\"bar\"}]", - () => { - expect([{ foo: "hello" }, { foo: "bar" }, { foo: "world" }].whereNotLike("foo", /o/i)) - .toEqual([{ foo: "bar" }]); - }); + // tslint:disable-next-line: max-line-length + test('[{foo:"hello"}, {foo:"bar"}, {foo:"world"}].whereNotLike("foo", /o/i) returns [{foo:"bar"}]', () => { + expect( + [{ foo: "hello" }, { foo: "bar" }, { foo: "world" }].whereNotLike( + "foo", + /o/i, + ), + ).toEqual([{ foo: "bar" }]); + }); }); diff --git a/src/array/whereNotNull/index.ts b/src/array/whereNotNull/index.ts index 298e6e6f..a412f02b 100644 --- a/src/array/whereNotNull/index.ts +++ b/src/array/whereNotNull/index.ts @@ -1,10 +1,9 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { - whereNotNull(): T[]; - whereNotNull(field: string): T[]; + whereNotNull(field?: string): T[]; } } diff --git a/src/array/whereNotNull/method.ts b/src/array/whereNotNull/method.ts index 514c165f..66e06e50 100644 --- a/src/array/whereNotNull/method.ts +++ b/src/array/whereNotNull/method.ts @@ -1,9 +1,9 @@ import { filter } from "../../utils"; const method = (arr: T[], field?: string) => { - const iterator = (item: any) => item !== null && item !== undefined; + const iterator = (item: any) => item !== null && item !== undefined; - return filter(arr, field, iterator); + return filter(arr, field, iterator); }; export = method; diff --git a/src/array/whereNotNull/test.ts b/src/array/whereNotNull/test.ts index ee451698..fcc35f92 100644 --- a/src/array/whereNotNull/test.ts +++ b/src/array/whereNotNull/test.ts @@ -1,12 +1,19 @@ -import "./index"; +import "."; describe("Array.prototype.whereNotNull", () => { test("[1, 2, 2, 3, null, undefined, 5].whereNotNull() returns [1,2,2,3,5]", () => { - expect([1, 2, 2, 3, null, undefined, 5].whereNotNull()).toEqual([1, 2, 2, 3, 5]); + expect([1, 2, 2, 3, null, undefined, 5].whereNotNull()).toEqual([ + 1, + 2, + 2, + 3, + 5, + ]); }); - test("[{count:1}, {count:null}, {foo:15}].whereNotNull(\"count\") returns [{count:1}]", () => { - expect([{ count: 1 }, { count: null }, { foo: 15 }].whereNotNull("count")) - .toEqual([{ count: 1 }]); + test('[{count:1}, {count:null}, {foo:15}].whereNotNull("count") returns [{count:1}]', () => { + expect( + [{ count: 1 }, { count: null }, { foo: 15 }].whereNotNull("count"), + ).toEqual([{ count: 1 }]); }); }); diff --git a/src/array/whereNull/index.ts b/src/array/whereNull/index.ts index 9509d067..65ca1371 100644 --- a/src/array/whereNull/index.ts +++ b/src/array/whereNull/index.ts @@ -1,10 +1,10 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { whereNull(): Array; - whereNull(field: string): Array; + whereNull(field: string): T[]; } } diff --git a/src/array/whereNull/method.ts b/src/array/whereNull/method.ts index b6204352..3093cb27 100644 --- a/src/array/whereNull/method.ts +++ b/src/array/whereNull/method.ts @@ -1,9 +1,9 @@ import { filter } from "../../utils"; const method = (arr: T[], field?: string) => { - const iterator = (item: any) => item === null || item === undefined; + const iterator = (item: any) => item === null || item === undefined; - return filter(arr, field, iterator); + return filter(arr, field, iterator); }; export = method; diff --git a/src/array/whereNull/test.ts b/src/array/whereNull/test.ts index 90756b9e..a4125029 100644 --- a/src/array/whereNull/test.ts +++ b/src/array/whereNull/test.ts @@ -1,12 +1,17 @@ -import "./index"; +import "."; describe("Array.prototype.whereNull", () => { test("[1, 2, 2, 3, null, undefined, 5].whereNull() returns [null, undefined]", () => { - expect([1, 2, 2, 3, null, undefined, 5].whereNull()).toEqual([null, undefined]); + expect([1, 2, 2, 3, null, undefined, 5].whereNull()).toEqual([ + null, + undefined, + ]); }); - test("[{count:1}, {count:null}, {foo:15}].whereNull(\"count\") returns [{count:null},{foo:15}]", () => { - expect([{ count: 1 }, { count: null }, { foo: 15 }].whereNull("count")) - .toEqual([{ count: null }, { foo: 15 }]); + // tslint:disable-next-line: max-line-length + test('[{count:1}, {count:null}, {foo:15}].whereNull("count") returns [{count:null},{foo:15}]', () => { + expect( + [{ count: 1 }, { count: null }, { foo: 15 }].whereNull("count"), + ).toEqual([{ count: null }, { foo: 15 }]); }); }); diff --git a/src/array/zip/index.ts b/src/array/zip/index.ts index b57b68d7..a6b155f9 100644 --- a/src/array/zip/index.ts +++ b/src/array/zip/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/zip/method.ts b/src/array/zip/method.ts index 87bc0b13..f6622510 100644 --- a/src/array/zip/method.ts +++ b/src/array/zip/method.ts @@ -1,9 +1,11 @@ const method = (arr: T[], ...arrays: any[][]): any[][] => { arrays = [arr, ...arrays]; - return Array.from({ length: Math.max(...arrays.map((x) => x.length)) }).map((_, i) => { - return Array.from({ length: arrays.length }, (_, k) => arrays[k][i]); - }); + return Array.from({ length: Math.max(...arrays.map(x => x.length)) }).map( + (_, i) => { + return Array.from({ length: arrays.length }, (__, k) => arrays[k][i]); + }, + ); }; export = method; diff --git a/src/array/zip/test.ts b/src/array/zip/test.ts index 770aad7e..1073b86c 100644 --- a/src/array/zip/test.ts +++ b/src/array/zip/test.ts @@ -1,11 +1,17 @@ -import "./index"; +import "."; describe("Array.prototype.zip", () => { - test("[\"a\", \"b\"].zip([1, 2], [true, false]) returns [[\"a\", 1, true], [\"b\", 2, false]]", () => { - expect(["a", "b"].zip([1, 2], [true, false])).toEqual([["a", 1, true], ["b", 2, false]]); + test('["a", "b"].zip([1, 2], [true, false]) returns [["a", 1, true], ["b", 2, false]]', () => { + expect(["a", "b"].zip([1, 2], [true, false])).toEqual([ + ["a", 1, true], + ["b", 2, false], + ]); }); - test("[\"a\"].zip([1, 2], [true, false]) returns [[\"a\", 1, true], [undefined, 2, false]]", () => { - expect(["a"].zip([1, 2], [true, false])).toEqual([["a", 1, true], [undefined, 2, false]]); + test('["a"].zip([1, 2], [true, false]) returns [["a", 1, true], [undefined, 2, false]]', () => { + expect(["a"].zip([1, 2], [true, false])).toEqual([ + ["a", 1, true], + [undefined, 2, false], + ]); }); }); diff --git a/src/array/zipObject/index.ts b/src/array/zipObject/index.ts index eeb7b1cf..5a9e3a24 100644 --- a/src/array/zipObject/index.ts +++ b/src/array/zipObject/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Array { diff --git a/src/array/zipObject/method.ts b/src/array/zipObject/method.ts index d19624f9..647f18db 100644 --- a/src/array/zipObject/method.ts +++ b/src/array/zipObject/method.ts @@ -1,5 +1,8 @@ const method = (arr: T[], array: any[]): object => { - return arr.reduce((obj: any, prop, index) => ((obj[prop] = array[index]), obj), {}); + return arr.reduce( + (obj: any, prop, index) => ((obj[prop] = array[index]), obj), + {}, + ); }; export = method; diff --git a/src/array/zipObject/test.ts b/src/array/zipObject/test.ts index 4498e606..e5a05f7f 100644 --- a/src/array/zipObject/test.ts +++ b/src/array/zipObject/test.ts @@ -1,11 +1,15 @@ -import "./index"; +import "."; describe("Array.prototype.zipObject", () => { - test("[\"a\", \"b\", \"c\"].zipObject([1, 2]) returns {a: 1, b: 2, c: undefined}", () => { - expect(["a", "b", "c"].zipObject([1, 2])).toEqual({ a: 1, b: 2, c: undefined }); + test('["a", "b", "c"].zipObject([1, 2]) returns {a: 1, b: 2, c: undefined}', () => { + expect(["a", "b", "c"].zipObject([1, 2])).toEqual({ + a: 1, + b: 2, + c: undefined, + }); }); - test("[\"a\", \"b\"].zipObject([1, 2, 3]) returns {a: 1, b: 2}", () => { + test('["a", "b"].zipObject([1, 2, 3]) returns {a: 1, b: 2}', () => { expect(["a", "b"].zipObject([1, 2, 3])).toEqual({ a: 1, b: 2 }); }); }); diff --git a/src/boolean/isBoolean/index.ts b/src/boolean/isBoolean/index.ts index 88d4ec61..2eef0890 100644 --- a/src/boolean/isBoolean/index.ts +++ b/src/boolean/isBoolean/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface BooleanConstructor { diff --git a/src/boolean/isBoolean/test.ts b/src/boolean/isBoolean/test.ts index d0386585..a839d550 100644 --- a/src/boolean/isBoolean/test.ts +++ b/src/boolean/isBoolean/test.ts @@ -1,13 +1,11 @@ -import "./index"; +import "."; describe("Boolean.isBoolean", () => { - test("Boolean.isBoolean(\"foo bar\") returns false", () => { - expect(Boolean.isBoolean("foo bar")) - .toBe(false); + test('Boolean.isBoolean("foo bar") returns false', () => { + expect(Boolean.isBoolean("foo bar")).toBe(false); }); test("Boolean.isBoolean(false) returns true", () => { - expect(Boolean.isBoolean(false)) - .toBe(true); + expect(Boolean.isBoolean(false)).toBe(true); }); }); diff --git a/src/boolean/methods.ts b/src/boolean/methods.ts index ae4ebabb..469faf49 100644 --- a/src/boolean/methods.ts +++ b/src/boolean/methods.ts @@ -1,5 +1,3 @@ -import * as isBoolean from "./isBoolean/method"; +import isBoolean from "./isBoolean/method"; -export { - isBoolean, -}; +export { isBoolean }; diff --git a/src/date/equals/index.ts b/src/date/equals/index.ts index 93b24cf6..f48eb4fc 100644 --- a/src/date/equals/index.ts +++ b/src/date/equals/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Date { diff --git a/src/date/equals/method.ts b/src/date/equals/method.ts index bff4e9cf..4bba0b66 100644 --- a/src/date/equals/method.ts +++ b/src/date/equals/method.ts @@ -1,5 +1,6 @@ -import * as isDate from "../isDate/method"; +import isDate from "../isDate/method"; -const method = (date: Date, value: any): boolean => isDate(value) && (date.getTime() === value.getTime()); +const method = (date: Date, value: any): boolean => + isDate(value) && date.getTime() === value.getTime(); export = method; diff --git a/src/date/equals/test.ts b/src/date/equals/test.ts index 81144e1c..d8af135e 100644 --- a/src/date/equals/test.ts +++ b/src/date/equals/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Date.prototype.equals", () => { test("date1.equals(new Date(date1)) returns true", () => { @@ -9,7 +9,7 @@ describe("Date.prototype.equals", () => { test("(new Date()).equals(new Date()) returns false", () => { const date1 = new Date(); - while ((new Date()).getTime() === date1.getTime()) { } + while (new Date().getTime() === date1.getTime()) {} const date2 = new Date(); expect(date1.equals(date2)).toBe(false); }); diff --git a/src/date/isDate/index.ts b/src/date/isDate/index.ts index 74c67f09..21f8ae4e 100644 --- a/src/date/isDate/index.ts +++ b/src/date/isDate/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface DateConstructor { diff --git a/src/date/isDate/method.ts b/src/date/isDate/method.ts index 5342a686..feedf060 100644 --- a/src/date/isDate/method.ts +++ b/src/date/isDate/method.ts @@ -1,4 +1,5 @@ -const method = (arg: any): arg is Date => arg instanceof Date || +const method = (arg: any): arg is Date => + arg instanceof Date || Object.prototype.toString.call(arg) === "[object Date]"; export = method; diff --git a/src/date/isDate/test.ts b/src/date/isDate/test.ts index 3be7a81a..55bcf4d0 100644 --- a/src/date/isDate/test.ts +++ b/src/date/isDate/test.ts @@ -1,13 +1,11 @@ -import "./index"; +import "."; describe("Date.isDate", () => { - test("Date.isDate(\"foo bar\") returns false", () => { - expect(Date.isDate("foo bar")) - .toBe(false); + test('Date.isDate("foo bar") returns false', () => { + expect(Date.isDate("foo bar")).toBe(false); }); test("Date.isDate(new Date()) returns true", () => { - expect(Date.isDate(new Date())) - .toBe(true); + expect(Date.isDate(new Date())).toBe(true); }); }); diff --git a/src/date/methods.ts b/src/date/methods.ts index b05977ad..702c8760 100644 --- a/src/date/methods.ts +++ b/src/date/methods.ts @@ -1,13 +1,7 @@ -import * as equals from "./equals/method"; -import * as isDate from "./isDate/method"; -import * as today from "./today/method"; -import * as tomorrow from "./tomorrow/method"; -import * as yesterday from "./yesterday/method"; +import equals from "./equals/method"; +import isDate from "./isDate/method"; +import today from "./today/method"; +import tomorrow from "./tomorrow/method"; +import yesterday from "./yesterday/method"; -export { - equals, - isDate, - today, - tomorrow, - yesterday, -}; +export { equals, isDate, today, tomorrow, yesterday }; diff --git a/src/date/today/index.ts b/src/date/today/index.ts index 9307ee21..f184a1ce 100644 --- a/src/date/today/index.ts +++ b/src/date/today/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface DateConstructor { diff --git a/src/date/today/method.ts b/src/date/today/method.ts index 9f2c0697..0b313ac4 100644 --- a/src/date/today/method.ts +++ b/src/date/today/method.ts @@ -1,9 +1,13 @@ -import * as pad from "../../string/pad/method"; +import pad from "../../string/pad/method"; const method = () => { const now = new Date(); - return `${now.getFullYear()}-${pad(`${now.getMonth() + 1}`, -2, "0")}-${pad(`${now.getDate()}`, -2, "0")}`; + return `${now.getFullYear()}-${pad(`${now.getMonth() + 1}`, -2, "0")}-${pad( + `${now.getDate()}`, + -2, + "0", + )}`; }; export = method; diff --git a/src/date/today/test.ts b/src/date/today/test.ts index b7a5aff5..873a163b 100644 --- a/src/date/today/test.ts +++ b/src/date/today/test.ts @@ -1,11 +1,16 @@ -import "./index"; -import * as pad from "../../string/pad/method"; +import "."; +import pad from "../../string/pad/method"; describe("Date.today", () => { test("Date.today() returns today's date", () => { const now = new Date(); - expect(Date.today()) - .toEqual(`${now.getFullYear()}-${pad(`${now.getMonth() + 1}`, -2, "0")}-${pad(`${now.getDate()}`, -2, "0")}`); + expect(Date.today()).toEqual( + `${now.getFullYear()}-${pad(`${now.getMonth() + 1}`, -2, "0")}-${pad( + `${now.getDate()}`, + -2, + "0", + )}`, + ); }); }); diff --git a/src/date/tomorrow/index.ts b/src/date/tomorrow/index.ts index ca90bb2c..1f45b3c4 100644 --- a/src/date/tomorrow/index.ts +++ b/src/date/tomorrow/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface DateConstructor { diff --git a/src/date/tomorrow/method.ts b/src/date/tomorrow/method.ts index 344a4825..5b39a380 100644 --- a/src/date/tomorrow/method.ts +++ b/src/date/tomorrow/method.ts @@ -1,11 +1,15 @@ -import * as pad from "../../string/pad/method"; +import pad from "../../string/pad/method"; const method = () => { const now = new Date(); now.setDate(now.getDate() + 1); - return `${now.getFullYear()}-${pad(`${now.getMonth() + 1}`, -2, "0")}-${pad(`${now.getDate()}`, -2, "0")}`; + return `${now.getFullYear()}-${pad(`${now.getMonth() + 1}`, -2, "0")}-${pad( + `${now.getDate()}`, + -2, + "0", + )}`; }; export = method; diff --git a/src/date/tomorrow/test.ts b/src/date/tomorrow/test.ts index 4b789ac0..8efe1c7a 100644 --- a/src/date/tomorrow/test.ts +++ b/src/date/tomorrow/test.ts @@ -1,19 +1,22 @@ -import "./index"; -import * as pad from "../../string/pad/method"; +import "."; +import pad from "../../string/pad/method"; describe("Date.tomorrow", () => { test("Date.tomorrow() returns tomorrow's date", () => { const now = new Date(); - const tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1); + const tomorrow = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate() + 1, + ); - expect(Date.tomorrow()) - .toEqual(`${ - tomorrow.getFullYear() - }-${ - pad(`${tomorrow.getMonth() + 1}`, -2, "0") - }-${ - pad(`${tomorrow.getDate()}`, -2, "0") - }`); + expect(Date.tomorrow()).toEqual( + `${tomorrow.getFullYear()}-${pad( + `${tomorrow.getMonth() + 1}`, + -2, + "0", + )}-${pad(`${tomorrow.getDate()}`, -2, "0")}`, + ); }); }); diff --git a/src/date/yesterday/index.ts b/src/date/yesterday/index.ts index 142ccd6b..137211e9 100644 --- a/src/date/yesterday/index.ts +++ b/src/date/yesterday/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface DateConstructor { diff --git a/src/date/yesterday/method.ts b/src/date/yesterday/method.ts index 6f8b1f91..d69438c0 100644 --- a/src/date/yesterday/method.ts +++ b/src/date/yesterday/method.ts @@ -1,11 +1,15 @@ -import * as pad from "../../string/pad/method"; +import pad from "../../string/pad/method"; const method = () => { const now = new Date(); now.setDate(now.getDate() - 1); - return `${now.getFullYear()}-${pad(`${now.getMonth() + 1}`, -2, "0")}-${pad(`${now.getDate()}`, -2, "0")}`; + return `${now.getFullYear()}-${pad(`${now.getMonth() + 1}`, -2, "0")}-${pad( + `${now.getDate()}`, + -2, + "0", + )}`; }; export = method; diff --git a/src/date/yesterday/test.ts b/src/date/yesterday/test.ts index c1d381b7..c8c9de7a 100644 --- a/src/date/yesterday/test.ts +++ b/src/date/yesterday/test.ts @@ -1,19 +1,22 @@ -import "./index"; -import * as pad from "../../string/pad/method"; +import "."; +import pad from "../../string/pad/method"; describe("Date.yesterday", () => { test("Date.yesterday() returns yesterday's date", () => { const now = new Date(); - const yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1); + const yesterday = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate() - 1, + ); - expect(Date.yesterday()) - .toEqual(`${ - yesterday.getFullYear() - }-${ - pad(`${yesterday.getMonth() + 1}`, -2, "0") - }-${ - pad(`${yesterday.getDate()}`, -2, "0") - }`); + expect(Date.yesterday()).toEqual( + `${yesterday.getFullYear()}-${pad( + `${yesterday.getMonth() + 1}`, + -2, + "0", + )}-${pad(`${yesterday.getDate()}`, -2, "0")}`, + ); }); }); diff --git a/src/function/cache/index.ts b/src/function/cache/index.ts index b330f9c4..df265641 100644 --- a/src/function/cache/index.ts +++ b/src/function/cache/index.ts @@ -1,4 +1,5 @@ -import * as method from "./method"; +import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Function { @@ -18,6 +19,6 @@ declare global { * test.cache(); // takes a second to log 'test' * test.cache(); // instantly logs the second 'test' */ -Function.prototype.cache = function(...args) { +Function.prototype.cache = function cache(...args) { return method(this)(...args); }; diff --git a/src/function/cache/method.ts b/src/function/cache/method.ts index 6240c691..3a31dbcf 100644 --- a/src/function/cache/method.ts +++ b/src/function/cache/method.ts @@ -5,7 +5,9 @@ const method = (func: Function): any => { const cached = (...args: any[]) => { const key = JSON.stringify(args); - return cache.has(key) ? cache.get(key) : cache.set(key, func.call(func, ...args)) && cache.get(key); + return cache.has(key) + ? cache.get(key) + : cache.set(key, func.call(func, ...args)) && cache.get(key); }; func.cached = cache; diff --git a/src/function/cache/test.ts b/src/function/cache/test.ts index 9da0b089..983dd5f9 100644 --- a/src/function/cache/test.ts +++ b/src/function/cache/test.ts @@ -1,13 +1,11 @@ -import "./index"; +import "."; describe("Function.prototype.cache", () => { test("Math.max.cache(1, 22, 15) returns 22", () => { - expect(Math.max.cache(1, 22, 15)) - .toBe(22); + expect(Math.max.cache(1, 22, 15)).toBe(22); }); test("Math.max.cache(1, 22, 15) returns 22", () => { - expect(Math.max.cache(1, 22, 15)) - .toBe(22); + expect(Math.max.cache(1, 22, 15)).toBe(22); }); }); diff --git a/src/function/defer/index.ts b/src/function/defer/index.ts index 120b9d1c..47254509 100644 --- a/src/function/defer/index.ts +++ b/src/function/defer/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Function { diff --git a/src/function/defer/method.ts b/src/function/defer/method.ts index 357fb037..74922c41 100644 --- a/src/function/defer/method.ts +++ b/src/function/defer/method.ts @@ -1,4 +1,5 @@ // tslint:disable-next-line:ban-types -const method = (func: Function, ...args: any[]): any => setTimeout(func, 1, ...args); +const method = (func: Function, ...args: any[]): any => + setTimeout(func, 1, ...args); export = method; diff --git a/src/function/isFunction/index.ts b/src/function/isFunction/index.ts index 683c8a10..73d577c4 100644 --- a/src/function/isFunction/index.ts +++ b/src/function/isFunction/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface FunctionConstructor { diff --git a/src/function/isFunction/method.ts b/src/function/isFunction/method.ts index 637a9ada..31ea504a 100644 --- a/src/function/isFunction/method.ts +++ b/src/function/isFunction/method.ts @@ -1,4 +1,4 @@ // tslint:disable-next-line:ban-types -const method = (arg: any): arg is Function => arg instanceof Function; +const method = (arg: any): arg is Function => typeof arg === "function"; export = method; diff --git a/src/function/isFunction/test.ts b/src/function/isFunction/test.ts index 310c29d6..901e58eb 100644 --- a/src/function/isFunction/test.ts +++ b/src/function/isFunction/test.ts @@ -1,13 +1,15 @@ -import "./index"; +import "."; describe("Function.isFunction", () => { test("Function.isFunction(2) returns false", () => { - expect(Function.isFunction(2)) - .toBe(false); + expect(Function.isFunction(2)).toBe(false); }); test("Function.isFunction((() => {})) returns true", () => { - expect(Function.isFunction((() => {}))) - .toBe(true); + expect(Function.isFunction(() => {})).toBe(true); + }); + + test("Function.isFunction(jest.fn()) returns true", () => { + expect(Function.isFunction(jest.fn())).toBe(true); }); }); diff --git a/src/function/methods.ts b/src/function/methods.ts index 3ccbab85..4890484f 100644 --- a/src/function/methods.ts +++ b/src/function/methods.ts @@ -1,11 +1,6 @@ -import * as cache from "./cache/method"; -import * as defer from "./defer/method"; -import * as isFunction from "./isFunction/method"; -import * as once from "./once/method"; +import cache from "./cache/method"; +import defer from "./defer/method"; +import isFunction from "./isFunction/method"; +import once from "./once/method"; -export { - cache, - defer, - isFunction, - once, -}; +export { cache, defer, isFunction, once }; diff --git a/src/function/once/index.ts b/src/function/once/index.ts index 77124d6c..03ec2ea4 100644 --- a/src/function/once/index.ts +++ b/src/function/once/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Function { diff --git a/src/globals/isBrowser/index.ts b/src/globals/isBrowser/index.ts index 193b9ff9..1fee4a12 100644 --- a/src/globals/isBrowser/index.ts +++ b/src/globals/isBrowser/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { namespace NodeJS { diff --git a/src/globals/isBrowser/method.ts b/src/globals/isBrowser/method.ts index eaa231b6..e823b109 100644 --- a/src/globals/isBrowser/method.ts +++ b/src/globals/isBrowser/method.ts @@ -1,4 +1,4 @@ -import * as contains from "../../array/contains/method"; +import contains from "../../array/contains/method"; const method = () => !contains([typeof window, typeof document], "undefined"); diff --git a/src/globals/isBrowser/test.ts b/src/globals/isBrowser/test.ts index 356e6b3e..e3abc4f9 100644 --- a/src/globals/isBrowser/test.ts +++ b/src/globals/isBrowser/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; beforeAll(() => { // Jest creates virtual ones ! diff --git a/src/globals/methods.ts b/src/globals/methods.ts index 6fb1c288..8678cd2f 100644 --- a/src/globals/methods.ts +++ b/src/globals/methods.ts @@ -1,5 +1,3 @@ -import * as isBrowser from "./isBrowser/method"; +import isBrowser from "./isBrowser/method"; -export { - isBrowser, -}; +export { isBrowser }; diff --git a/src/math/average/index.ts b/src/math/average/index.ts index 33a332a3..ebc08396 100644 --- a/src/math/average/index.ts +++ b/src/math/average/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/average/method.ts b/src/math/average/method.ts index b04d96ad..29125aa7 100644 --- a/src/math/average/method.ts +++ b/src/math/average/method.ts @@ -1,4 +1,4 @@ -import * as sum from "../../array/sum/method"; +import sum from "../../array/sum/method"; const method = (...nums: number[]): number => sum(nums) / nums.length; diff --git a/src/math/average/test.ts b/src/math/average/test.ts index 7a75a70a..784b0f90 100644 --- a/src/math/average/test.ts +++ b/src/math/average/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.average", () => { test("Math.average(1, 2, 3) returns 2", () => { - expect(Math.average(1, 2, 3)) - .toBe(2); + expect(Math.average(1, 2, 3)).toBe(2); }); }); diff --git a/src/math/degreesToRads/index.ts b/src/math/degreesToRads/index.ts index db8eddda..19aa2344 100644 --- a/src/math/degreesToRads/index.ts +++ b/src/math/degreesToRads/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/degreesToRads/test.ts b/src/math/degreesToRads/test.ts index df695019..b4551955 100644 --- a/src/math/degreesToRads/test.ts +++ b/src/math/degreesToRads/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.degreesToRads", () => { test("Math.degreesToRads(180) returns 3.141592653589793", () => { - expect(Math.degreesToRads(180)) - .toBe(3.141592653589793); + expect(Math.degreesToRads(180)).toBe(3.141592653589793); }); }); diff --git a/src/math/factorial/index.ts b/src/math/factorial/index.ts index a5658f1f..741ea09b 100644 --- a/src/math/factorial/index.ts +++ b/src/math/factorial/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/factorial/method.ts b/src/math/factorial/method.ts index 9ecabc72..9aed2361 100644 --- a/src/math/factorial/method.ts +++ b/src/math/factorial/method.ts @@ -1,3 +1,3 @@ -const method = (n: number): number => n <= 1 ? 1 : n * Math.factorial(n - 1); +const method = (n: number): number => (n <= 1 ? 1 : n * Math.factorial(n - 1)); export = method; diff --git a/src/math/factorial/test.ts b/src/math/factorial/test.ts index 229aaf29..c7b044bf 100644 --- a/src/math/factorial/test.ts +++ b/src/math/factorial/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.factorial", () => { test("Math.factorial(6) returns 720", () => { - expect(Math.factorial(6)) - .toBe(720); + expect(Math.factorial(6)).toBe(720); }); }); diff --git a/src/math/fibonacci/index.ts b/src/math/fibonacci/index.ts index 2b2485d3..5bcbd787 100644 --- a/src/math/fibonacci/index.ts +++ b/src/math/fibonacci/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/fibonacci/method.ts b/src/math/fibonacci/method.ts index 503f55e0..fb3f9b52 100644 --- a/src/math/fibonacci/method.ts +++ b/src/math/fibonacci/method.ts @@ -1,6 +1,8 @@ -const method = (nth: number): number[] => Array.from({ length: nth }).reduce( - (prev: any, value, index) => prev.concat(index > 1 ? prev[index - 1] + prev[index - 2] : index), - [] -); +const method = (nth: number): number[] => + Array.from({ length: nth }).reduce( + (prev: any, value, index) => + prev.concat(index > 1 ? prev[index - 1] + prev[index - 2] : index), + [], + ) as any; export = method; diff --git a/src/math/fibonacci/test.ts b/src/math/fibonacci/test.ts index b1e09d67..447bbd93 100644 --- a/src/math/fibonacci/test.ts +++ b/src/math/fibonacci/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.fibonacci", () => { test("Math.fibonacci(6) returns [0, 1, 1, 2, 3, 5]", () => { - expect(Math.fibonacci(6)) - .toEqual([0, 1, 1, 2, 3, 5]); + expect(Math.fibonacci(6)).toEqual([0, 1, 1, 2, 3, 5]); }); }); diff --git a/src/math/gcd/index.ts b/src/math/gcd/index.ts index b88876aa..5297ddff 100644 --- a/src/math/gcd/index.ts +++ b/src/math/gcd/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/gcd/test.ts b/src/math/gcd/test.ts index 8f04d547..bb3b1a9c 100644 --- a/src/math/gcd/test.ts +++ b/src/math/gcd/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.gcd", () => { test("Math.gcd(...[12, 8, 32]) returns 4", () => { - expect(Math.gcd(...[12, 8, 32])) - .toBe(4); + expect(Math.gcd(...[12, 8, 32])).toBe(4); }); }); diff --git a/src/math/isDivisible/index.ts b/src/math/isDivisible/index.ts index 21ab7eed..662aee96 100644 --- a/src/math/isDivisible/index.ts +++ b/src/math/isDivisible/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/isDivisible/test.ts b/src/math/isDivisible/test.ts index 55b20aad..1a2a5845 100644 --- a/src/math/isDivisible/test.ts +++ b/src/math/isDivisible/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.isDivisible", () => { test("Math.isDivisible(6, 3) returns true", () => { - expect(Math.isDivisible(6, 3)) - .toBe(true); + expect(Math.isDivisible(6, 3)).toBe(true); }); }); diff --git a/src/math/isEven/index.ts b/src/math/isEven/index.ts index 871c9dd5..a22b0f8a 100644 --- a/src/math/isEven/index.ts +++ b/src/math/isEven/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/isEven/test.ts b/src/math/isEven/test.ts index 08b21cf5..00c1a5f1 100644 --- a/src/math/isEven/test.ts +++ b/src/math/isEven/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.isEven", () => { test("Math.isEven(3) returns false", () => { - expect(Math.isEven(3)) - .toBe(false); + expect(Math.isEven(3)).toBe(false); }); }); diff --git a/src/math/isPrime/index.ts b/src/math/isPrime/index.ts index 7f1a73a1..176e56c6 100644 --- a/src/math/isPrime/index.ts +++ b/src/math/isPrime/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/isPrime/test.ts b/src/math/isPrime/test.ts index d681ce8c..4c47f436 100644 --- a/src/math/isPrime/test.ts +++ b/src/math/isPrime/test.ts @@ -1,13 +1,11 @@ -import "./index"; +import "."; describe("Math.isPrime", () => { test("Math.isPrime(4) returns false", () => { - expect(Math.isPrime(4)) - .toBe(false); + expect(Math.isPrime(4)).toBe(false); }); test("Math.isPrime(11) returns true", () => { - expect(Math.isPrime(11)) - .toBe(true); + expect(Math.isPrime(11)).toBe(true); }); }); diff --git a/src/math/lcm/index.ts b/src/math/lcm/index.ts index 511c4b51..f3f56b64 100644 --- a/src/math/lcm/index.ts +++ b/src/math/lcm/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/lcm/method.ts b/src/math/lcm/method.ts index 4b82628d..c47ce3e3 100644 --- a/src/math/lcm/method.ts +++ b/src/math/lcm/method.ts @@ -1,7 +1,8 @@ const method = (...nums: number[]): number => { - const gcd: (x: number, y: number) => number = (x, y) => (!y ? x : gcd(y, x % y)); + const gcd: (x: number, y: number) => number = (x, y) => + !y ? x : gcd(y, x % y); - const lcm: (x: number, y: number) => number = (x, y) => x * y / gcd(x, y); + const lcm: (x: number, y: number) => number = (x, y) => (x * y) / gcd(x, y); return nums.reduce((a, b) => lcm(a, b)); }; diff --git a/src/math/lcm/test.ts b/src/math/lcm/test.ts index 02b8fca4..c7d1b6d7 100644 --- a/src/math/lcm/test.ts +++ b/src/math/lcm/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.lcm", () => { test("Math.lcm(12, 7) returns 84", () => { - expect(Math.lcm(12, 7)) - .toBe(84); + expect(Math.lcm(12, 7)).toBe(84); }); }); diff --git a/src/math/methods.ts b/src/math/methods.ts index 12bea862..1449851c 100644 --- a/src/math/methods.ts +++ b/src/math/methods.ts @@ -1,14 +1,14 @@ -import * as average from "./average/method"; -import * as degreesToRads from "./degreesToRads/method"; -import * as factorial from "./factorial/method"; -import * as fibonacci from "./fibonacci/method"; -import * as gcd from "./gcd/method"; -import * as isDivisible from "./isDivisible/method"; -import * as isEven from "./isEven/method"; -import * as isPrime from "./isPrime/method"; -import * as lcm from "./lcm/method"; -import * as primes from "./primes/method"; -import * as radsToDegrees from "./radsToDegrees/method"; +import average from "./average/method"; +import degreesToRads from "./degreesToRads/method"; +import factorial from "./factorial/method"; +import fibonacci from "./fibonacci/method"; +import gcd from "./gcd/method"; +import isDivisible from "./isDivisible/method"; +import isEven from "./isEven/method"; +import isPrime from "./isPrime/method"; +import lcm from "./lcm/method"; +import primes from "./primes/method"; +import radsToDegrees from "./radsToDegrees/method"; export { average, diff --git a/src/math/primes/index.ts b/src/math/primes/index.ts index db48fbd8..9b16fcee 100644 --- a/src/math/primes/index.ts +++ b/src/math/primes/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/primes/method.ts b/src/math/primes/method.ts index c759dd63..52add12a 100644 --- a/src/math/primes/method.ts +++ b/src/math/primes/method.ts @@ -1,10 +1,11 @@ -import * as range from "../../array/range/method"; +import range from "../../array/range/method"; const method = (num: number): number[] => { let arr = range(num, 2); - range(Math.floor(Math.sqrt(num)), 2) - .forEach((x) => arr = arr.filter((y) => y % x !== 0 || y === x)); + range(Math.floor(Math.sqrt(num)), 2).forEach( + x => (arr = arr.filter(y => y % x !== 0 || y === x)), + ); return arr; }; diff --git a/src/math/primes/test.ts b/src/math/primes/test.ts index d9ef57ab..835c2f5b 100644 --- a/src/math/primes/test.ts +++ b/src/math/primes/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.primes", () => { test("Math.primes(10) returns [2, 3, 5, 7]", () => { - expect(Math.primes(10)) - .toEqual([2, 3, 5, 7]); + expect(Math.primes(10)).toEqual([2, 3, 5, 7]); }); }); diff --git a/src/math/radsToDegrees/index.ts b/src/math/radsToDegrees/index.ts index c33305d3..4a5c17bf 100644 --- a/src/math/radsToDegrees/index.ts +++ b/src/math/radsToDegrees/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface Math { diff --git a/src/math/radsToDegrees/test.ts b/src/math/radsToDegrees/test.ts index 7d640b2c..0bd3ca5a 100644 --- a/src/math/radsToDegrees/test.ts +++ b/src/math/radsToDegrees/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Math.radsToDegrees", () => { test("Math.radsToDegrees(Math.PI / 2) returns 90", () => { - expect(Math.radsToDegrees(Math.PI / 2)) - .toBe(90); + expect(Math.radsToDegrees(Math.PI / 2)).toBe(90); }); }); diff --git a/src/methods.ts b/src/methods.ts index c07a9e8d..674eb5b1 100644 --- a/src/methods.ts +++ b/src/methods.ts @@ -8,14 +8,4 @@ import * as number from "./number/methods"; import * as object from "./object/methods"; import * as string from "./string/methods"; -export { - array, - boolean, - date, - func as function, - globals, - math, - number, - object, - string, -}; +export { array, boolean, date, func, globals, math, number, object, string }; diff --git a/src/number/digitize/index.ts b/src/number/digitize/index.ts index 30200e63..10b15146 100644 --- a/src/number/digitize/index.ts +++ b/src/number/digitize/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Number { diff --git a/src/number/digitize/method.ts b/src/number/digitize/method.ts index 8747eb56..b95ede23 100644 --- a/src/number/digitize/method.ts +++ b/src/number/digitize/method.ts @@ -1,3 +1,3 @@ -const method = (num: number): number[] => [...`${num}`].map((n) => +n); +const method = (num: number): number[] => [...`${num}`].map(n => +n); export = method; diff --git a/src/number/digitize/test.ts b/src/number/digitize/test.ts index 67e94864..966490cc 100644 --- a/src/number/digitize/test.ts +++ b/src/number/digitize/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Number.prototype.digitize", () => { test("(123).digitize() returns [1, 2, 3]", () => { diff --git a/src/number/equals/index.ts b/src/number/equals/index.ts index 30ad6166..e63b636c 100644 --- a/src/number/equals/index.ts +++ b/src/number/equals/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Number { diff --git a/src/number/equals/test.ts b/src/number/equals/test.ts index a4f28918..e5ce17ab 100644 --- a/src/number/equals/test.ts +++ b/src/number/equals/test.ts @@ -1,7 +1,7 @@ -import "./index"; +import "."; describe("Number.prototype.equals", () => { - test("(22).equals(\"22\") returns false", () => { + test('(22).equals("22") returns false', () => { expect((22).equals("22")).toBe(false); }); diff --git a/src/number/inRange/index.ts b/src/number/inRange/index.ts index 89897eaf..edb9c557 100644 --- a/src/number/inRange/index.ts +++ b/src/number/inRange/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface Number { diff --git a/src/number/inRange/method.ts b/src/number/inRange/method.ts index c739a52f..9b526514 100644 --- a/src/number/inRange/method.ts +++ b/src/number/inRange/method.ts @@ -1,3 +1,4 @@ -const method = (num: number, end: number, start = 0) => start <= num && num <= end; +const method = (num: number, end: number, start = 0) => + start <= num && num <= end; export = method; diff --git a/src/number/inRange/test.ts b/src/number/inRange/test.ts index 39c7d660..0cc0b287 100644 --- a/src/number/inRange/test.ts +++ b/src/number/inRange/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Number.prototype.inRange", () => { test("(4).inRange(8) returns true", () => { diff --git a/src/number/isNumber/index.ts b/src/number/isNumber/index.ts index bbf0913f..8acf9897 100644 --- a/src/number/isNumber/index.ts +++ b/src/number/isNumber/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface NumberConstructor { diff --git a/src/number/isNumber/method.ts b/src/number/isNumber/method.ts index 6f8bb209..8383cc5c 100644 --- a/src/number/isNumber/method.ts +++ b/src/number/isNumber/method.ts @@ -1,3 +1,4 @@ -const method = (arg: any): arg is number => typeof arg === "number" || arg instanceof Number; +const method = (arg: any): arg is number => + typeof arg === "number" || arg instanceof Number; export = method; diff --git a/src/number/isNumber/test.ts b/src/number/isNumber/test.ts index a9279d31..b2684116 100644 --- a/src/number/isNumber/test.ts +++ b/src/number/isNumber/test.ts @@ -1,24 +1,20 @@ -import "./index"; +import "."; describe("Number.isNumber", () => { - test("Number.isNumber(\"foo bar\") returns false", () => { - expect(Number.isNumber("foo bar")) - .toBe(false); + test('Number.isNumber("foo bar") returns false', () => { + expect(Number.isNumber("foo bar")).toBe(false); }); - test("Number.isNumber(\"2\") returns false", () => { - expect(Number.isNumber("2")) - .toBe(false); + test('Number.isNumber("2") returns false', () => { + expect(Number.isNumber("2")).toBe(false); }); test("Number.isNumber(new Number(2)) returns true", () => { // tslint:disable-next-line - expect(Number.isNumber(new Number(2))) - .toBe(true); + expect(Number.isNumber(new Number(2))).toBe(true); }); test("Number.isNumber(2) returns true", () => { - expect(Number.isNumber(2)) - .toBe(true); + expect(Number.isNumber(2)).toBe(true); }); }); diff --git a/src/number/methods.ts b/src/number/methods.ts index 839b2e05..3d5b8a29 100644 --- a/src/number/methods.ts +++ b/src/number/methods.ts @@ -1,11 +1,6 @@ -import * as digitize from "./digitize/method"; -import * as equals from "./equals/method"; -import * as inRange from "./inRange/method"; -import * as isNumber from "./isNumber/method"; +import digitize from "./digitize/method"; +import equals from "./equals/method"; +import inRange from "./inRange/method"; +import isNumber from "./isNumber/method"; -export { - digitize, - equals, - inRange, - isNumber, -}; +export { digitize, equals, inRange, isNumber }; diff --git a/src/object/assign/index.ts b/src/object/assign/index.ts index 24416ddc..aa2d1bad 100644 --- a/src/object/assign/index.ts +++ b/src/object/assign/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/assign/method.ts b/src/object/assign/method.ts index d6da5c11..627e307b 100644 --- a/src/object/assign/method.ts +++ b/src/object/assign/method.ts @@ -1,3 +1,4 @@ -const method = (obj: object, ...sources: object[]): object => Object.assign(obj, ...sources); +const method = (obj: object, ...sources: object[]): object => + Object.assign(obj, ...sources); export = method; diff --git a/src/object/assign/test.ts b/src/object/assign/test.ts index cde80abd..11198577 100644 --- a/src/object/assign/test.ts +++ b/src/object/assign/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Object.prototype.$assign", () => { test("{ a: 0 }.$assign({ a: 1 }, { b: 2 }) returns { a: 1, b: 2 }", () => { diff --git a/src/object/camelCaseKeys/index.ts b/src/object/camelCaseKeys/index.ts index 816e6139..0ead56cf 100644 --- a/src/object/camelCaseKeys/index.ts +++ b/src/object/camelCaseKeys/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/camelCaseKeys/method.ts b/src/object/camelCaseKeys/method.ts index 9a1b51fa..60fe2043 100644 --- a/src/object/camelCaseKeys/method.ts +++ b/src/object/camelCaseKeys/method.ts @@ -1,10 +1,10 @@ -import * as forEach from "../forEach/method"; -import * as camelCase from "../../string/camelCase/method"; +import camelCase from "../../string/camelCase/method"; +import forEach from "../forEach/method"; const method = (obj: object): object => { const result: { [key: string]: any } = {}; - forEach(obj, (value, key) => result[camelCase(key)] = value); + forEach(obj, (value, key) => (result[camelCase(key)] = value)); return result; }; diff --git a/src/object/camelCaseKeys/test.ts b/src/object/camelCaseKeys/test.ts index 58fd36a4..607325dd 100644 --- a/src/object/camelCaseKeys/test.ts +++ b/src/object/camelCaseKeys/test.ts @@ -1,11 +1,13 @@ -import "./index"; +import "."; describe("Object.prototype.$camelCaseKeys", () => { test( - "{ First_name: \"Adam\", \"last-name\": \"Smith\" }.$camelCaseKeys() returns " + - "{firstName: \"Adam\", lastName: \"Smith\"}", + '{ First_name: "Adam", "last-name": "Smith" }.$camelCaseKeys() returns ' + + '{firstName: "Adam", lastName: "Smith"}', () => { - expect({ "First_name": "Adam", "last-name": "Smith" }.$camelCaseKeys()) - .toEqual({ firstName: "Adam", lastName: "Smith" }); - }); + expect( + { First_name: "Adam", "last-name": "Smith" }.$camelCaseKeys(), + ).toEqual({ firstName: "Adam", lastName: "Smith" }); + }, + ); }); diff --git a/src/object/clone/index.ts b/src/object/clone/index.ts index bd765101..7d1e7a4e 100644 --- a/src/object/clone/index.ts +++ b/src/object/clone/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/clone/method.ts b/src/object/clone/method.ts index 9153981b..21d6db09 100644 --- a/src/object/clone/method.ts +++ b/src/object/clone/method.ts @@ -1,7 +1,6 @@ import { deepClone } from "../../utils"; -const method = (obj: object, deep: boolean = false): object => deep ? - deepClone(obj) : - Object.assign({}, obj); +const method = (obj: object, deep: boolean = false): object => + deep ? deepClone(obj) : Object.assign({}, obj); export = method; diff --git a/src/object/clone/test.ts b/src/object/clone/test.ts index 800782e9..2f229fa7 100644 --- a/src/object/clone/test.ts +++ b/src/object/clone/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Object.prototype.$clone", () => { test("{ foo: 'bar', obj: { a: 1, b: 2 } }.$clone()", () => { diff --git a/src/object/defaults/index.ts b/src/object/defaults/index.ts index 6c3610cd..2fc860cd 100644 --- a/src/object/defaults/index.ts +++ b/src/object/defaults/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/defaults/method.ts b/src/object/defaults/method.ts index 63bbb16a..c5aa02ab 100644 --- a/src/object/defaults/method.ts +++ b/src/object/defaults/method.ts @@ -1,4 +1,4 @@ -// @ts-ignore -const method = (obj: object, ...sources: object[]): object => Object.assign(...sources.reverse(), obj); +const method = (obj: object, ...sources: object[]): object => + Object.assign(sources.pop()!, ...sources.reverse(), obj); export = method; diff --git a/src/object/defaults/test.ts b/src/object/defaults/test.ts index 7677cf9f..23a695b5 100644 --- a/src/object/defaults/test.ts +++ b/src/object/defaults/test.ts @@ -1,7 +1,10 @@ -import "./index"; +import "."; describe("Object.prototype.$defaults", () => { test("{ a: 0 }.$defaults({ a: 1, b: 2 }, { b: 3 }) returns { a: 0, b: 2 }", () => { - expect({ a: 0 }.$defaults({ a: 1, b: 2 }, { b: 3 })).toEqual({ a: 0, b: 2 }); + expect({ a: 0 }.$defaults({ a: 1, b: 2 }, { b: 3 })).toEqual({ + a: 0, + b: 2, + }); }); }); diff --git a/src/object/dig/index.ts b/src/object/dig/index.ts index a0fe67b1..6c533242 100644 --- a/src/object/dig/index.ts +++ b/src/object/dig/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/dig/method.ts b/src/object/dig/method.ts index 918558c6..5215c946 100644 --- a/src/object/dig/method.ts +++ b/src/object/dig/method.ts @@ -1,11 +1,13 @@ -import * as values from "../values/method"; +import values from "../values/method"; -const method = (obj: object, target: string): any => - target in obj - ? (obj as any)[target] - : values(obj).reduce((acc, val) => { - if (acc !== undefined) return acc; - if (typeof val === "object") return method(val, target); - }, undefined); +const method = (obj: object, target: string): any => { + if (target in obj) return (obj as any)[target]; + + return values(obj).reduce((acc, val) => { + if (acc !== undefined) return acc; + if (typeof val === "object") return method(val, target); + // tslint:disable-next-line: align + }, undefined); +}; export = method; diff --git a/src/object/dig/test.ts b/src/object/dig/test.ts index a273c0a5..8b7c07a8 100644 --- a/src/object/dig/test.ts +++ b/src/object/dig/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Object.prototype.$dig", () => { const data = { @@ -10,15 +10,15 @@ describe("Object.prototype.$dig", () => { }, }; - test("data.$dig(\"foo\") returns \"bar\"", () => { + test('data.$dig("foo") returns "bar"', () => { expect(data.$dig("foo")).toBe("bar"); }); - test("data.$dig(\"level3\") returns \"some data\"", () => { + test('data.$dig("level3") returns "some data"', () => { expect(data.$dig("level3")).toBe("some data"); }); - test("data.$dig(\"level4\") returns undefined", () => { + test('data.$dig("level4") returns undefined', () => { expect(data.$dig("level4")).toBe(undefined); }); }); diff --git a/src/object/empty/index.ts b/src/object/empty/index.ts index c31e2031..2590aaea 100644 --- a/src/object/empty/index.ts +++ b/src/object/empty/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/empty/method.ts b/src/object/empty/method.ts index 1eec0882..a6ed49fa 100644 --- a/src/object/empty/method.ts +++ b/src/object/empty/method.ts @@ -1,10 +1,9 @@ -import * as size from "../size/method"; - const method = (obj: object) => { const keys = Object.keys(obj); - for (let i = 0; i < keys.length; i++) + for (let i = 0; i < keys.length; i++) { delete (obj as any)[keys[i]]; + } }; export = method; diff --git a/src/object/empty/test.ts b/src/object/empty/test.ts index 85ce0709..93c4ea55 100644 --- a/src/object/empty/test.ts +++ b/src/object/empty/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Object.prototype.$empty", () => { test("{ a: 1 }.$empty()", () => { diff --git a/src/object/equals/index.ts b/src/object/equals/index.ts index 0d3ab1cf..f5492d13 100644 --- a/src/object/equals/index.ts +++ b/src/object/equals/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/equals/method.ts b/src/object/equals/method.ts index 730439ca..33deea53 100644 --- a/src/object/equals/method.ts +++ b/src/object/equals/method.ts @@ -1,6 +1,6 @@ -import * as isObject from "../isObject/method"; -import * as isDate from "../../date/isDate/method"; -import * as dateEquals from "../../date/equals/method"; +import dateEquals from "../../date/equals/method"; +import isDate from "../../date/isDate/method"; +import isObject from "../isObject/method"; const method = (obj: { [key: string]: any }, obj2: any): boolean => { if (obj === obj2) return true; @@ -15,7 +15,7 @@ const method = (obj: { [key: string]: any }, obj2: any): boolean => { if (keys.length !== Object.keys(obj2).length) return false; - return keys.every((k) => method(obj[k], (obj2 as any)[k])); + return keys.every(k => method(obj[k], (obj2 as any)[k])); }; export = method; diff --git a/src/object/equals/test.ts b/src/object/equals/test.ts index b398d108..0ffdad44 100644 --- a/src/object/equals/test.ts +++ b/src/object/equals/test.ts @@ -1,14 +1,21 @@ -import "./index"; +import "."; describe("Object.prototype.$equals", () => { + // tslint:disable-next-line: max-line-length test("{ a: [2, { e: 3 }], b: [4], c: 'foo' }.$equals({ a: [2, { e: 3 }], b: [4], c: 'foo' }) returns true", () => { - expect({ a: [2, { e: 3 }], b: [4], c: "foo" }.$equals({ a: [2, { e: 3 }], b: [4], c: "foo" })) - .toBe(true); + expect( + { a: [2, { e: 3 }], b: [4], c: "foo" }.$equals({ + a: [2, { e: 3 }], + b: [4], + c: "foo", + }), + ).toBe(true); }); test("{ a: [2, { e: 3 }], b: [4], c: 'foo' }.$equals(new Date()) returns false", () => { - expect({ a: [2, { e: 3 }], b: [4], c: "foo" }.$equals(new Date())) - .toBe(false); + expect({ a: [2, { e: 3 }], b: [4], c: "foo" }.$equals(new Date())).toBe( + false, + ); }); test("date.$equals({ a: 1 }) returns false", () => { diff --git a/src/object/flatten/index.ts b/src/object/flatten/index.ts index 78d8f31a..aba71b18 100644 --- a/src/object/flatten/index.ts +++ b/src/object/flatten/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/flatten/method.ts b/src/object/flatten/method.ts index 739a7cbc..592e1d31 100644 --- a/src/object/flatten/method.ts +++ b/src/object/flatten/method.ts @@ -1,5 +1,5 @@ -import * as isPlainObject from "../isPlainObject/method"; -import * as forEach from "../forEach/method"; +import forEach from "../forEach/method"; +import isPlainObject from "../isPlainObject/method"; const method = (obj: { [key: string]: any }): { [key: string]: any } => { const result: { [key: string]: any } = {}; @@ -18,7 +18,7 @@ const method = (obj: { [key: string]: any }): { [key: string]: any } => { if (isPlainObject(value)) { const flat = method(value); - forEach(flat, (subValue, subKey) => { + forEach(flat, (subValue, subKey: string) => { const separator = /^\[/.test(subKey) ? "" : "."; result[`${key}${separator}${subKey}`] = subValue; diff --git a/src/object/flatten/test.ts b/src/object/flatten/test.ts index 1d875042..49800da7 100644 --- a/src/object/flatten/test.ts +++ b/src/object/flatten/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Object.prototype.$flatten", () => { test("1", () => { @@ -19,9 +19,7 @@ describe("Object.prototype.$flatten", () => { [2], ], object: { - array: [ - { number: 3 }, - ], + array: [{ number: 3 }], }, date: new Date(), buffer: Buffer.alloc(2), @@ -29,15 +27,15 @@ describe("Object.prototype.$flatten", () => { }; expect(obj.$flatten()).toEqual({ - "string": "foo", - "number": 1, + string: "foo", + number: 1, "array[0]": "one", "array[1].string": "two", "array[2][0]": 2, "object.array[0].number": 3, - "date": obj.date, - "buffer": obj.buffer, - "class": obj.class, + date: obj.date, + buffer: obj.buffer, + class: obj.class, }); }); }); diff --git a/src/object/forEach/index.ts b/src/object/forEach/index.ts index cfdffab3..0b19d474 100644 --- a/src/object/forEach/index.ts +++ b/src/object/forEach/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/forEach/method.ts b/src/object/forEach/method.ts index 8669b140..a70b70f9 100644 --- a/src/object/forEach/method.ts +++ b/src/object/forEach/method.ts @@ -1,4 +1,9 @@ -const method = (obj: object, fn: (value: any, key: string, object: object) => void) => - Object.keys(obj).forEach((key) => fn((obj as { [key: string]: any })[key], key, obj)); +const method = ( + obj: T, + fn: (value: T[K], key: K, object: T) => void, +) => + Object.keys(obj).forEach(key => + fn((obj as { [key: string]: any })[key], key as K, obj), + ); export = method; diff --git a/src/object/forEach/test.ts b/src/object/forEach/test.ts index cf950c14..9b8721d9 100644 --- a/src/object/forEach/test.ts +++ b/src/object/forEach/test.ts @@ -1,15 +1,20 @@ -import "./index"; +import "."; describe("Object.prototype.$forEach", () => { test( - "{fred: { user: \"fred\", age: 40 }, pebbles: { user: \"pebbles\", age: 1 }}.$forEach(u => u.age) returns " + - "{ fred: 40, pebbles: 1 }", + // tslint:disable-next-line: max-line-length + '{fred: { user: "fred", age: 40 }, pebbles: { user: "pebbles", age: 1 }}.$forEach(u => u.age) returns ' + + "{ fred: 40, pebbles: 1 }", () => { - const obj = { fred: { user: "fred", age: 40 }, pebbles: { user: "pebbles", age: 1 } }; + const obj = { + fred: { user: "fred", age: 40 }, + pebbles: { user: "pebbles", age: 1 }, + }; const result: any = {}; - obj.$forEach((u, k) => result[k] = u.age); + obj.$forEach((u, k) => (result[k] = u.age)); expect(result).toEqual({ fred: 40, pebbles: 1 }); - }); + }, + ); }); diff --git a/src/object/get/index.ts b/src/object/get/index.ts index 13ca47a6..7883f24d 100644 --- a/src/object/get/index.ts +++ b/src/object/get/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/get/method.ts b/src/object/get/method.ts index 14f4c529..f813aa46 100644 --- a/src/object/get/method.ts +++ b/src/object/get/method.ts @@ -1,6 +1,6 @@ import { pathToKeys } from "../../utils"; -const method = (obj: { [key: string]: any }, key: string): any => pathToKeys(key) - .reduce((prev, cur) => prev[cur], obj); +const method = (obj: { [key: string]: any }, key: string): any => + pathToKeys(key).reduce((prev, cur) => prev[cur], obj); export = method; diff --git a/src/object/get/test.ts b/src/object/get/test.ts index 7b91dc5b..ca95a9f4 100644 --- a/src/object/get/test.ts +++ b/src/object/get/test.ts @@ -1,8 +1,10 @@ -import "./index"; +import "."; describe("Object.prototype.$get", () => { + // tslint:disable-next-line: max-line-length test("{ selector: { to: { val: 'val to select' } } }.$get('selector.to.val') returns 'val to select'", () => { - expect({ selector: { to: { val: "val to select" } } }.$get("selector.to.val")) - .toBe("val to select"); + expect( + { selector: { to: { val: "val to select" } } }.$get("selector.to.val"), + ).toBe("val to select"); }); }); diff --git a/src/object/invert/index.ts b/src/object/invert/index.ts index 3972e862..3d622fe6 100644 --- a/src/object/invert/index.ts +++ b/src/object/invert/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/invert/method.ts b/src/object/invert/method.ts index 33b71b7b..101cf2b2 100644 --- a/src/object/invert/method.ts +++ b/src/object/invert/method.ts @@ -3,6 +3,7 @@ const method = (obj: { [key: string]: any }): object => { acc[obj[key]] = key; return acc; + // tslint:disable-next-line: align }, {}); }; diff --git a/src/object/invert/test.ts b/src/object/invert/test.ts index b69624fb..304853c2 100644 --- a/src/object/invert/test.ts +++ b/src/object/invert/test.ts @@ -1,8 +1,10 @@ -import "./index"; +import "."; describe("Object.prototype.$invert", () => { - test("{ name: \"John\", age: 20 }.$invert() returns { 20: \"age\", John: \"name\" }", () => { - expect({ name: "John", age: 20 }.$invert()) - .toEqual({ 20: "age", John: "name" }); + test('{ name: "John", age: 20 }.$invert() returns { 20: "age", John: "name" }', () => { + expect({ name: "John", age: 20 }.$invert()).toEqual({ + 20: "age", + John: "name", + }); }); }); diff --git a/src/object/isEmpty/index.ts b/src/object/isEmpty/index.ts index 1c1d5699..7c729dc6 100644 --- a/src/object/isEmpty/index.ts +++ b/src/object/isEmpty/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/isEmpty/method.ts b/src/object/isEmpty/method.ts index 1b0c43a5..d49cada3 100644 --- a/src/object/isEmpty/method.ts +++ b/src/object/isEmpty/method.ts @@ -1,4 +1,4 @@ -import * as size from "../size/method"; +import size from "../size/method"; const method = (obj: object) => size(obj) === 0; diff --git a/src/object/isEmpty/test.ts b/src/object/isEmpty/test.ts index 50385a3f..4827d33f 100644 --- a/src/object/isEmpty/test.ts +++ b/src/object/isEmpty/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Object.prototype.$isEmpty", () => { test("{ a: 1 }.$isEmpty() returns false", () => { diff --git a/src/object/isObject/index.ts b/src/object/isObject/index.ts index 7121bdb7..eb8584f2 100644 --- a/src/object/isObject/index.ts +++ b/src/object/isObject/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface ObjectConstructor { diff --git a/src/object/isObject/test.ts b/src/object/isObject/test.ts index d5d1d435..231dac5d 100644 --- a/src/object/isObject/test.ts +++ b/src/object/isObject/test.ts @@ -1,12 +1,12 @@ -import "./index"; +import "."; describe("Object.isObject", () => { test("Object.isObject(2) returns false", () => { expect(Object.isObject(2)).toBe(false); }); - test("Object.isObject({foo: \"bar\"}) returns true", () => { - expect(Object.isObject({foo: "bar"})).toBe(true); + test('Object.isObject({foo: "bar"}) returns true', () => { + expect(Object.isObject({ foo: "bar" })).toBe(true); }); test("Object.isObject([1, 2]) returns true", () => { diff --git a/src/object/isObjectLike/index.ts b/src/object/isObjectLike/index.ts index 9150e54f..b90142a1 100644 --- a/src/object/isObjectLike/index.ts +++ b/src/object/isObjectLike/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface ObjectConstructor { diff --git a/src/object/isObjectLike/method.ts b/src/object/isObjectLike/method.ts index a88c5d19..bc934b41 100644 --- a/src/object/isObjectLike/method.ts +++ b/src/object/isObjectLike/method.ts @@ -1,4 +1,4 @@ -import * as isObject from "../isObject/method"; +import isObject from "../isObject/method"; const method = (arg: any): arg is object => { if (!isObject(arg)) return false; diff --git a/src/object/isObjectLike/test.ts b/src/object/isObjectLike/test.ts index 1bbee2cb..c19fe85b 100644 --- a/src/object/isObjectLike/test.ts +++ b/src/object/isObjectLike/test.ts @@ -1,12 +1,12 @@ -import "./index"; +import "."; describe("Object.isObjectLike", () => { test("Object.isObjectLike(2) returns false", () => { expect(Object.isObjectLike(2)).toBe(false); }); - test("Object.isObjectLike({foo: \"bar\"}) returns true", () => { - expect(Object.isObjectLike({foo: "bar"})).toBe(true); + test('Object.isObjectLike({foo: "bar"}) returns true', () => { + expect(Object.isObjectLike({ foo: "bar" })).toBe(true); }); test("Object.isObjectLike([1, 2]) returns true", () => { diff --git a/src/object/isPlainObject/index.ts b/src/object/isPlainObject/index.ts index 1b60c35a..d6622c19 100644 --- a/src/object/isPlainObject/index.ts +++ b/src/object/isPlainObject/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface ObjectConstructor { diff --git a/src/object/isPlainObject/method.ts b/src/object/isPlainObject/method.ts index b3ca2e67..8aea7483 100644 --- a/src/object/isPlainObject/method.ts +++ b/src/object/isPlainObject/method.ts @@ -1,12 +1,13 @@ -import * as isObjectLike from "../isObjectLike/method"; +import isObjectLike from "../isObjectLike/method"; const method = (arg: any): arg is object => { if (!isObjectLike(arg)) return false; let proto = arg; - while (Object.getPrototypeOf(proto) !== null) + while (Object.getPrototypeOf(proto) !== null) { proto = Object.getPrototypeOf(proto); + } return Object.getPrototypeOf(arg) === proto; }; diff --git a/src/object/isPlainObject/test.ts b/src/object/isPlainObject/test.ts index 3252db1c..caea1e6d 100644 --- a/src/object/isPlainObject/test.ts +++ b/src/object/isPlainObject/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; describe("Object.isPlainObject", () => { test("Object.isPlainObject(2) returns false", () => { @@ -7,13 +7,13 @@ describe("Object.isPlainObject", () => { test("Object.isPlainObject(new Foo) returns false", () => { class Foo { - a = 1; + public a = 1; } expect(Object.isPlainObject(new Foo())).toBe(false); }); - test("Object.isPlainObject({foo: \"bar\"}) returns true", () => { + test('Object.isPlainObject({foo: "bar"}) returns true', () => { expect(Object.isPlainObject({ foo: "bar" })).toBe(true); }); diff --git a/src/object/kebabCaseKeys/index.ts b/src/object/kebabCaseKeys/index.ts index 0ac65a44..f42dc446 100644 --- a/src/object/kebabCaseKeys/index.ts +++ b/src/object/kebabCaseKeys/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/kebabCaseKeys/method.ts b/src/object/kebabCaseKeys/method.ts index 4b44ff84..43bda2a4 100644 --- a/src/object/kebabCaseKeys/method.ts +++ b/src/object/kebabCaseKeys/method.ts @@ -1,10 +1,10 @@ -import * as forEach from "../forEach/method"; -import * as kebabCase from "../../string/kebabCase/method"; +import kebabCase from "../../string/kebabCase/method"; +import forEach from "../forEach/method"; const method = (obj: object): object => { const result: { [key: string]: any } = {}; - forEach(obj, (value, key) => result[kebabCase(key)] = value); + forEach(obj, (value, key) => (result[kebabCase(key)] = value)); return result; }; diff --git a/src/object/kebabCaseKeys/test.ts b/src/object/kebabCaseKeys/test.ts index dce2ec65..cb5fa622 100644 --- a/src/object/kebabCaseKeys/test.ts +++ b/src/object/kebabCaseKeys/test.ts @@ -1,11 +1,13 @@ -import "./index"; +import "."; describe("Object.prototype.$kebabCaseKeys", () => { test( - "{ First_name: \"Adam\", lastName: \"Smith\" }.$kebabCaseKeys() returns " + - "{firstName: \"Adam\", lastName: \"Smith\"}", + '{ First_name: "Adam", lastName: "Smith" }.$kebabCaseKeys() returns ' + + '{firstName: "Adam", lastName: "Smith"}', () => { - expect({ First_name: "Adam", lastName: "Smith" }.$kebabCaseKeys()) - .toEqual({ "first-name": "Adam", "last-name": "Smith" }); - }); + expect( + { First_name: "Adam", lastName: "Smith" }.$kebabCaseKeys(), + ).toEqual({ "first-name": "Adam", "last-name": "Smith" }); + }, + ); }); diff --git a/src/object/keys/index.ts b/src/object/keys/index.ts index e0e7495f..65d50b2b 100644 --- a/src/object/keys/index.ts +++ b/src/object/keys/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/keys/method.ts b/src/object/keys/method.ts index 290eadf2..6bd8fa22 100644 --- a/src/object/keys/method.ts +++ b/src/object/keys/method.ts @@ -1,3 +1,3 @@ -const method = (obj: object): string[] => Object.keys(obj); +const method = (obj: T): Array => Object.keys(obj) as any; export = method; diff --git a/src/object/keys/test.ts b/src/object/keys/test.ts index 96d2cec7..6b543d62 100644 --- a/src/object/keys/test.ts +++ b/src/object/keys/test.ts @@ -1,8 +1,11 @@ -import "./index"; +import "."; describe("Object.prototype.$keys", () => { - test("{ one: 1, two: 2, three: 3 }.$keys() returns [\"one\", \"two\", \"three\"]", () => { - expect({ one: 1, two: 2, three: 3 }.$keys()) - .toEqual(["one", "two", "three"]); + test('{ one: 1, two: 2, three: 3 }.$keys() returns ["one", "two", "three"]', () => { + expect({ one: 1, two: 2, three: 3 }.$keys()).toEqual([ + "one", + "two", + "three", + ]); }); }); diff --git a/src/object/lowerCaseKeys/index.ts b/src/object/lowerCaseKeys/index.ts index af1d3356..c9aa6c76 100644 --- a/src/object/lowerCaseKeys/index.ts +++ b/src/object/lowerCaseKeys/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/lowerCaseKeys/method.ts b/src/object/lowerCaseKeys/method.ts index 5d0e01d8..9322642e 100644 --- a/src/object/lowerCaseKeys/method.ts +++ b/src/object/lowerCaseKeys/method.ts @@ -1,9 +1,9 @@ -import * as forEach from "../forEach/method"; +import forEach from "../forEach/method"; const method = (obj: object): object => { const result: { [key: string]: any } = {}; - forEach(obj, (value, key) => result[key.toLowerCase()] = value); + forEach(obj, (value, key: string) => (result[key.toLowerCase()] = value)); return result; }; diff --git a/src/object/lowerCaseKeys/test.ts b/src/object/lowerCaseKeys/test.ts index 435980de..3820f086 100644 --- a/src/object/lowerCaseKeys/test.ts +++ b/src/object/lowerCaseKeys/test.ts @@ -1,8 +1,11 @@ -import "./index"; +import "."; describe("Object.prototype.$lowerCaseKeys", () => { - test("{ Name: \"Adam\", sUrnAME: \"Smith\" }.$lowerCaseKeys() returns {name: \"Adam\", surname: \"Smith\"}", () => { - expect({ Name: "Adam", sUrnAME: "Smith" }.$lowerCaseKeys()) - .toEqual({ name: "Adam", surname: "Smith" }); + // tslint:disable-next-line: max-line-length + test('{ Name: "Adam", sUrnAME: "Smith" }.$lowerCaseKeys() returns {name: "Adam", surname: "Smith"}', () => { + expect({ Name: "Adam", sUrnAME: "Smith" }.$lowerCaseKeys()).toEqual({ + name: "Adam", + surname: "Smith", + }); }); }); diff --git a/src/object/map/index.ts b/src/object/map/index.ts index fd31fde1..09cec641 100644 --- a/src/object/map/index.ts +++ b/src/object/map/index.ts @@ -1,9 +1,11 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { - $map(fn: (value: any, key: string, object: object) => { [key: string]: any }): object; + $map( + fn: (value: any, key: string, object: object) => { [key: string]: any }, + ): object; } } diff --git a/src/object/map/method.ts b/src/object/map/method.ts index da5f0710..c3e4f55a 100644 --- a/src/object/map/method.ts +++ b/src/object/map/method.ts @@ -1,10 +1,18 @@ -import * as forEach from "../forEach/method"; +import forEach from "../forEach/method"; +import keys from "../keys/method"; -const method = (obj: object, fn: (value: any, key: string, object: object) => { [key: string]: any }): object => { - return Object.keys(obj).reduce((prev: { [key: string]: any }, k) => { - forEach(fn((obj as { [key: string]: any })[k], k, obj), (value, key) => prev[key] = value); +const method = ( + obj: T, + fn: (value: T[K], key: K, object: T) => { [key: string]: any }, +): object => { + return keys(obj).reduce((prev: { [key: string]: any }, k) => { + forEach( + fn((obj as any)[k], k as K, obj), + (value, key) => (prev[key] = value), + ); return prev; + // tslint:disable-next-line: align }, {}); }; diff --git a/src/object/map/test.ts b/src/object/map/test.ts index 277154ab..c9568149 100644 --- a/src/object/map/test.ts +++ b/src/object/map/test.ts @@ -1,11 +1,17 @@ -import "./index"; +import "."; describe("Object.prototype.$map", () => { test( - "{fred: { user: \"fred\", age: 40 }, pebbles: { user: \"pebbles\", age: 1 }}.$map(u => u.age) returns " + - "{ fred: 40, pebbles: 1 }", + // tslint:disable-next-line: max-line-length + '{fred: { user: "fred", age: 40 }, pebbles: { user: "pebbles", age: 1 }}.$map(u => u.age) returns ' + + "{ fred: 40, pebbles: 1 }", () => { - expect({ fred: { user: "fred", age: 40 }, pebbles: { user: "pebbles", age: 1 } }.$map((u, k) => ({ [k]: u.age }))) - .toEqual({ fred: 40, pebbles: 1 }); - }); + expect( + { + fred: { user: "fred", age: 40 }, + pebbles: { user: "pebbles", age: 1 }, + }.$map((u, k) => ({ [k]: u.age })), + ).toEqual({ fred: 40, pebbles: 1 }); + }, + ); }); diff --git a/src/object/mapKeys/index.ts b/src/object/mapKeys/index.ts index d2d8c2b6..02780216 100644 --- a/src/object/mapKeys/index.ts +++ b/src/object/mapKeys/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/mapKeys/method.ts b/src/object/mapKeys/method.ts index e657ec2b..9ca304ec 100644 --- a/src/object/mapKeys/method.ts +++ b/src/object/mapKeys/method.ts @@ -1,9 +1,15 @@ -import * as forEach from "../forEach/method"; +import forEach from "../forEach/method"; -const method = (obj: object, fn: (value: any, key: string, object: object) => string): object => { +const method = ( + obj: T, + fn: (value: T[K], key: K, object: T) => string, +): object => { const result: { [key: string]: any } = {}; - forEach(obj, (value, key, object) => result[fn(value, key, object)] = value); + forEach( + obj, + (value, key, object) => (result[fn(value, key, object)] = value), + ); return result; }; diff --git a/src/object/mapKeys/test.ts b/src/object/mapKeys/test.ts index 761033b6..db9c7282 100644 --- a/src/object/mapKeys/test.ts +++ b/src/object/mapKeys/test.ts @@ -1,7 +1,10 @@ -import "./index"; +import "."; describe("Object.prototype.$mapKeys", () => { test("{ a: 1, b: 2 }.$mapKeys((val, key) => key + val) returns { a1: 1, b2: 2 }", () => { - expect({ a: 1, b: 2 }.$mapKeys((val, key) => key + val)).toEqual({ a1: 1, b2: 2 }); + expect({ a: 1, b: 2 }.$mapKeys((val, key) => key + val)).toEqual({ + a1: 1, + b2: 2, + }); }); }); diff --git a/src/object/mapValues/index.ts b/src/object/mapValues/index.ts index d67cf308..b95cbade 100644 --- a/src/object/mapValues/index.ts +++ b/src/object/mapValues/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/mapValues/method.ts b/src/object/mapValues/method.ts index ca454de6..77b74d0c 100644 --- a/src/object/mapValues/method.ts +++ b/src/object/mapValues/method.ts @@ -1,9 +1,15 @@ -import * as forEach from "../forEach/method"; +import forEach from "../forEach/method"; -const method = (obj: object, fn: (value: any, key: string, object: object) => any): object => { - const result: { [key: string]: any } = {}; +const method = ( + obj: T, + fn: (value: T[K], key: K, object: T) => any, +): object => { + const result: any = {}; - forEach(obj, (value, key, object) => result[key] = fn(value, key, object)); + forEach( + obj, + (value, key, object) => (result[key] = fn(value, key, object)), + ); return result; }; diff --git a/src/object/mapValues/test.ts b/src/object/mapValues/test.ts index c7a3e1c6..3817675b 100644 --- a/src/object/mapValues/test.ts +++ b/src/object/mapValues/test.ts @@ -1,11 +1,17 @@ -import "./index"; +import "."; describe("Object.prototype.$mapValues", () => { test( - "{fred: { user: \"fred\", age: 40 }, pebbles: { user: \"pebbles\", age: 1 }}.$mapValues(u => u.age) returns " + - "{ fred: 40, pebbles: 1 }", + // tslint:disable-next-line: max-line-length + '{fred: { user: "fred", age: 40 }, pebbles: { user: "pebbles", age: 1 }}.$mapValues(u => u.age) returns ' + + "{ fred: 40, pebbles: 1 }", () => { - expect({ fred: { user: "fred", age: 40 }, pebbles: { user: "pebbles", age: 1 } }.$mapValues((u) => u.age)) - .toEqual({ fred: 40, pebbles: 1 }); - }); + expect( + { + fred: { user: "fred", age: 40 }, + pebbles: { user: "pebbles", age: 1 }, + }.$mapValues(u => u.age), + ).toEqual({ fred: 40, pebbles: 1 }); + }, + ); }); diff --git a/src/object/merge/index.ts b/src/object/merge/index.ts index 67888cd9..74115028 100644 --- a/src/object/merge/index.ts +++ b/src/object/merge/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/merge/method.ts b/src/object/merge/method.ts index 66943e10..971e07f5 100644 --- a/src/object/merge/method.ts +++ b/src/object/merge/method.ts @@ -1,12 +1,15 @@ const method = (obj: object, ...objects: object[]): object => [obj, ...objects].reduce( - (prev: { [key: string]: any }, obj: { [key: string]: any }) => - Object.keys(obj).reduce((a, k) => { - prev[k] = prev.hasOwnProperty(k) ? [].concat(prev[k]).concat(obj[k]) : obj[k]; + (prev: { [key: string]: any }, obj2: { [key: string]: any }) => + Object.keys(obj2).reduce((a, k) => { + prev[k] = prev.hasOwnProperty(k) + ? [].concat(prev[k]).concat(obj2[k]) + : obj2[k]; return prev; + // tslint:disable-next-line: align }, {}), - {} + {}, ); export = method; diff --git a/src/object/merge/test.ts b/src/object/merge/test.ts index 91912cb7..64f1df21 100644 --- a/src/object/merge/test.ts +++ b/src/object/merge/test.ts @@ -1,11 +1,17 @@ -import "./index"; +import "."; describe("Object.prototype.$merge", () => { test( - "{a: [{ x: 2 }, { y: 4 }], b: 1}.$merge({a: { z: 3 }, b: [2, 3], c: \"foo\"}) returns " + - "{ a: [ { x: 2 }, { y: 4 }, { z: 3 } ], b: [ 1, 2, 3 ], c: \"foo\" }", + '{a: [{ x: 2 }, { y: 4 }], b: 1}.$merge({a: { z: 3 }, b: [2, 3], c: "foo"}) returns ' + + '{ a: [ { x: 2 }, { y: 4 }, { z: 3 } ], b: [ 1, 2, 3 ], c: "foo" }', () => { - expect({ a: [{ x: 2 }, { y: 4 }], b: 1 }.$merge({ a: { z: 3 }, b: [2, 3], c: "foo" })) - .toEqual({ a: [{ x: 2 }, { y: 4 }, { z: 3 }], b: [1, 2, 3], c: "foo" }); - }); + expect( + { a: [{ x: 2 }, { y: 4 }], b: 1 }.$merge({ + a: { z: 3 }, + b: [2, 3], + c: "foo", + }), + ).toEqual({ a: [{ x: 2 }, { y: 4 }, { z: 3 }], b: [1, 2, 3], c: "foo" }); + }, + ); }); diff --git a/src/object/methods.ts b/src/object/methods.ts index 977b36e3..e872a712 100644 --- a/src/object/methods.ts +++ b/src/object/methods.ts @@ -1,31 +1,31 @@ -import * as assign from "./assign/method"; -import * as camelCaseKeys from "./camelCaseKeys/method"; -import * as clone from "./clone/method"; -import * as defaults from "./defaults/method"; -import * as dig from "./dig/method"; -import * as empty from "./empty/method"; -import * as equals from "./equals/method"; -import * as flatten from "./flatten/method"; -import * as forEach from "./forEach/method"; -import * as get from "./get/method"; -import * as invert from "./invert/method"; -import * as isEmpty from "./isEmpty/method"; -import * as isObject from "./isObject/method"; -import * as isObjectLike from "./isObjectLike/method"; -import * as isPlainObject from "./isPlainObject/method"; -import * as kebabCaseKeys from "./kebabCaseKeys/method"; -import * as keys from "./keys/method"; -import * as lowerCaseKeys from "./lowerCaseKeys/method"; -import * as map from "./map/method"; -import * as mapKeys from "./mapKeys/method"; -import * as mapValues from "./mapValues/method"; -import * as merge from "./merge/method"; -import * as omit from "./omit/method"; -import * as reduce from "./reduce/method"; -import * as set from "./set/method"; -import * as size from "./size/method"; -import * as snakeCaseKeys from "./snakeCaseKeys/method"; -import * as values from "./values/method"; +import assign from "./assign/method"; +import camelCaseKeys from "./camelCaseKeys/method"; +import clone from "./clone/method"; +import defaults from "./defaults/method"; +import dig from "./dig/method"; +import empty from "./empty/method"; +import equals from "./equals/method"; +import flatten from "./flatten/method"; +import forEach from "./forEach/method"; +import get from "./get/method"; +import invert from "./invert/method"; +import isEmpty from "./isEmpty/method"; +import isObject from "./isObject/method"; +import isObjectLike from "./isObjectLike/method"; +import isPlainObject from "./isPlainObject/method"; +import kebabCaseKeys from "./kebabCaseKeys/method"; +import keys from "./keys/method"; +import lowerCaseKeys from "./lowerCaseKeys/method"; +import map from "./map/method"; +import mapKeys from "./mapKeys/method"; +import mapValues from "./mapValues/method"; +import merge from "./merge/method"; +import omit from "./omit/method"; +import reduce from "./reduce/method"; +import set from "./set/method"; +import size from "./size/method"; +import snakeCaseKeys from "./snakeCaseKeys/method"; +import values from "./values/method"; export { assign, diff --git a/src/object/omit/index.ts b/src/object/omit/index.ts index 406a5dda..a0d608c1 100644 --- a/src/object/omit/index.ts +++ b/src/object/omit/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/omit/method.ts b/src/object/omit/method.ts index db82df4a..a11be04b 100644 --- a/src/object/omit/method.ts +++ b/src/object/omit/method.ts @@ -1,11 +1,17 @@ -const method = (obj: object, arr: string[] | ((value: any, key: string, object: object) => any)): object => { +const method = ( + obj: object, + arr: string[] | ((value: any, key: string, object: object) => any), +): object => { let fn = arr as (value: any, key: string, object: object) => any; if (Array.isArray(arr)) fn = (v, k) => arr.indexOf(k) !== -1; return Object.keys(obj) - .filter((k) => !fn((obj as { [key: string]: any })[k], k, obj)) - .reduce((acc, key) => ((acc[key] = (obj as { [key: string]: any })[key]), acc), {} as { [key: string]: any }); + .filter(k => !fn((obj as { [key: string]: any })[k], k, obj)) + .reduce( + (acc, key) => ((acc[key] = (obj as { [key: string]: any })[key]), acc), + {} as { [key: string]: any }, + ); }; export = method; diff --git a/src/object/omit/test.ts b/src/object/omit/test.ts index 17ed85d9..0c483827 100644 --- a/src/object/omit/test.ts +++ b/src/object/omit/test.ts @@ -1,13 +1,13 @@ -import "./index"; +import "."; describe("Object.prototype.$omit", () => { test("{ a: 1, b: '2', c: 3 }.$omit(['b']) returns { a: 1, c: 3 }", () => { - expect({ a: 1, b: "2", c: 3 }.$omit(["b"])) - .toEqual({ a: 1, c: 3 }); + expect({ a: 1, b: "2", c: 3 }.$omit(["b"])).toEqual({ a: 1, c: 3 }); }); test("{ a: 1, b: '2', c: 3 }.$omit((x) => typeof x === 'number') returns { b: '2' }", () => { - expect({ a: 1, b: "2", c: 3 }.$omit((x) => typeof x === "number")) - .toEqual({ b: "2" }); + expect({ a: 1, b: "2", c: 3 }.$omit(x => typeof x === "number")).toEqual({ + b: "2", + }); }); }); diff --git a/src/object/reduce/index.ts b/src/object/reduce/index.ts index e74fd1bf..a4b5167d 100644 --- a/src/object/reduce/index.ts +++ b/src/object/reduce/index.ts @@ -1,9 +1,12 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { - $reduce(fn: (prev: T, value: any, key: string, object: object) => T, initialValue?: T): any; + $reduce( + fn: (prev: T, value: any, key: string, object: object) => T, + initialValue?: T, + ): any; } } diff --git a/src/object/reduce/method.ts b/src/object/reduce/method.ts index fc114d7b..fc8c0da8 100644 --- a/src/object/reduce/method.ts +++ b/src/object/reduce/method.ts @@ -1,13 +1,16 @@ -import * as forEach from "../forEach/method"; +import forEach from "../forEach/method"; -const method = ( - obj: object, - fn: (prev: any, value: any, key: string, object: object) => any, - initialValue: any = undefined +const method = ( + obj: T, + fn: (prev: P, value: T[K], key: K, object: T) => any, + initialValue: P = undefined as any, ) => { let reduced = initialValue; - forEach(obj, (value, key, object) => reduced = fn(reduced, value, key, object)); + forEach( + obj, + (value, key, object) => (reduced = fn(reduced, value, key, object)), + ); return reduced; }; diff --git a/src/object/reduce/test.ts b/src/object/reduce/test.ts index 4eb2b068..30a775f6 100644 --- a/src/object/reduce/test.ts +++ b/src/object/reduce/test.ts @@ -1,13 +1,23 @@ -import "./index"; +import "."; describe("Object.prototype.$reduce", () => { + // tslint:disable-next-line: max-line-length test("({foo:1, bar:2}).$reduce((prev, value, key) => [...prev, key + ':'' + value], []); ['foo:1', 'bar:2']", () => { - expect(({ foo: 1, bar: 2 }).$reduce((prev, value, key) => [...prev, key + ":" + value], [] as any[])) - .toEqual(["foo:1", "bar:2"]); + expect( + { foo: 1, bar: 2 }.$reduce( + (prev, value, key) => [...prev, `${key}:${value}`], + [] as any[], + ), + ).toEqual(["foo:1", "bar:2"]); }); + // tslint:disable-next-line: max-line-length test("({foo:1, bar:2}).$reduce((prev = [], value, key) => [...prev, key + ':'' + value]); ['foo:1', 'bar:2']", () => { - expect(({ foo: 1, bar: 2 }).$reduce((prev = [], value, key) => [...prev, key + ":" + value])) - .toEqual(["foo:1", "bar:2"]); + expect( + { foo: 1, bar: 2 }.$reduce((prev = [], value, key) => [ + ...prev, + `${key}:${value}`, + ]), + ).toEqual(["foo:1", "bar:2"]); }); }); diff --git a/src/object/set/index.ts b/src/object/set/index.ts index 68bd4e56..e9843187 100644 --- a/src/object/set/index.ts +++ b/src/object/set/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/set/method.ts b/src/object/set/method.ts index 35ec5894..233a2177 100644 --- a/src/object/set/method.ts +++ b/src/object/set/method.ts @@ -5,8 +5,9 @@ const method = (obj: object, path: string, value: any): any => { const length = keys.length; let i = 0; - for (; i < length - 1; i++) + for (; i < length - 1; i++) { obj = (obj as { [key: string]: any })[keys[i]]; + } (obj as { [key: string]: any })[keys[i]] = value; }; diff --git a/src/object/set/test.ts b/src/object/set/test.ts index 8e8af33c..89458521 100644 --- a/src/object/set/test.ts +++ b/src/object/set/test.ts @@ -1,6 +1,7 @@ -import "./index"; +import "."; describe("Object.prototype.$set", () => { + // tslint:disable-next-line: max-line-length test("{ selector: { to: { val: 'val to select' } } }.$set('selector.to.val', 'new value')", () => { const obj = { selector: { to: { val: "val to select" } } }; diff --git a/src/object/size/index.ts b/src/object/size/index.ts index f36e4fbd..bdbbac2a 100644 --- a/src/object/size/index.ts +++ b/src/object/size/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/size/method.ts b/src/object/size/method.ts index 6df00808..5238ade4 100644 --- a/src/object/size/method.ts +++ b/src/object/size/method.ts @@ -1,4 +1,4 @@ -const method = (obj: object): number => (obj as any).size || (obj as any).length || - Object.keys(obj).length; +const method = (obj: object): number => + (obj as any).size || (obj as any).length || Object.keys(obj).length; export = method; diff --git a/src/object/size/test.ts b/src/object/size/test.ts index 2b7b4c21..3c00ffda 100644 --- a/src/object/size/test.ts +++ b/src/object/size/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Object.prototype.$size", () => { test("{ one: 1, two: 2, three: 3 }.$size() returns 3", () => { - expect({ one: 1, two: 2, three: 3 }.$size()) - .toBe(3); + expect({ one: 1, two: 2, three: 3 }.$size()).toBe(3); }); }); diff --git a/src/object/snakeCaseKeys/index.ts b/src/object/snakeCaseKeys/index.ts index cf91398f..e8ca6da9 100644 --- a/src/object/snakeCaseKeys/index.ts +++ b/src/object/snakeCaseKeys/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/snakeCaseKeys/method.ts b/src/object/snakeCaseKeys/method.ts index 9dd6442a..be7b030d 100644 --- a/src/object/snakeCaseKeys/method.ts +++ b/src/object/snakeCaseKeys/method.ts @@ -1,10 +1,10 @@ -import * as forEach from "../forEach/method"; -import * as snakeCase from "../../string/snakeCase/method"; +import snakeCase from "../../string/snakeCase/method"; +import forEach from "../forEach/method"; const method = (obj: object): object => { const result: { [key: string]: any } = {}; - forEach(obj, (value, key) => result[snakeCase(key)] = value); + forEach(obj, (value, key) => (result[snakeCase(key)] = value)); return result; }; diff --git a/src/object/snakeCaseKeys/test.ts b/src/object/snakeCaseKeys/test.ts index b7a580ea..263543ff 100644 --- a/src/object/snakeCaseKeys/test.ts +++ b/src/object/snakeCaseKeys/test.ts @@ -1,11 +1,13 @@ -import "./index"; +import "."; describe("Object.prototype.$snakeCaseKeys", () => { test( - "{ FirstName: \"Adam\", \"last-name\": \"Smith\" }.$snakeCaseKeys() returns " + - "{first_name: \"Adam\", last_name: \"Smith\"}", + '{ FirstName: "Adam", "last-name": "Smith" }.$snakeCaseKeys() returns ' + + '{first_name: "Adam", last_name: "Smith"}', () => { - expect({ "FirstName": "Adam", "last-name": "Smith" }.$snakeCaseKeys()) - .toEqual({ first_name: "Adam", last_name: "Smith" }); - }); + expect( + { FirstName: "Adam", "last-name": "Smith" }.$snakeCaseKeys(), + ).toEqual({ first_name: "Adam", last_name: "Smith" }); + }, + ); }); diff --git a/src/object/values/index.ts b/src/object/values/index.ts index c5a49417..0b40e863 100644 --- a/src/object/values/index.ts +++ b/src/object/values/index.ts @@ -1,5 +1,5 @@ import { addPrototype } from "../../utils"; -import * as method from "./method"; +import method from "./method"; declare global { interface Object { diff --git a/src/object/values/method.ts b/src/object/values/method.ts index 752a2588..5cb839be 100644 --- a/src/object/values/method.ts +++ b/src/object/values/method.ts @@ -1,9 +1,14 @@ -import * as reduce from "../reduce/method"; +import reduce from "../reduce/method"; -const method = (obj: object): any[] => reduce(obj, (prev, value) => { - prev.push(value); +const method = (obj: T) => + reduce>( + obj, + (prev, value) => { + prev.push(value); - return prev; -}, []); + return prev; + }, + [], + ); export = method; diff --git a/src/object/values/test.ts b/src/object/values/test.ts index 604b8d45..d7a2476e 100644 --- a/src/object/values/test.ts +++ b/src/object/values/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("Object.prototype.$values", () => { test("{ one: 1, two: 2, three: 3 }.$values() returns [1, 2, 3]", () => { - expect({ one: 1, two: 2, three: 3 }.$values()) - .toEqual([1, 2, 3]); + expect({ one: 1, two: 2, three: 3 }.$values()).toEqual([1, 2, 3]); }); }); diff --git a/src/string/base64/index.ts b/src/string/base64/index.ts index 0c091052..a7bba0d1 100644 --- a/src/string/base64/index.ts +++ b/src/string/base64/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/base64/test.ts b/src/string/base64/test.ts index 0981cf92..d71fc631 100644 --- a/src/string/base64/test.ts +++ b/src/string/base64/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("String.prototype.base64", () => { - test("\"prototyped.js\".base64() returns \"cHJvdG90eXBlZC5qcw==\"", () => { - expect("prototyped.js".base64()) - .toBe("cHJvdG90eXBlZC5qcw=="); + test('"prototyped.js".base64() returns "cHJvdG90eXBlZC5qcw=="', () => { + expect("prototyped.js".base64()).toBe("cHJvdG90eXBlZC5qcw=="); }); }); diff --git a/src/string/base64Decode/index.ts b/src/string/base64Decode/index.ts index a9ccb22a..53af15e4 100644 --- a/src/string/base64Decode/index.ts +++ b/src/string/base64Decode/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/base64Decode/test.ts b/src/string/base64Decode/test.ts index c611bed4..f0b72e39 100644 --- a/src/string/base64Decode/test.ts +++ b/src/string/base64Decode/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("String.prototype.base64Decode", () => { - test("\"cHJvdG90eXBlZC5qcw==\".base64Decode() returns \"prototyped.js\"", () => { - expect("cHJvdG90eXBlZC5qcw==".base64Decode()) - .toBe("prototyped.js"); + test('"cHJvdG90eXBlZC5qcw==".base64Decode() returns "prototyped.js"', () => { + expect("cHJvdG90eXBlZC5qcw==".base64Decode()).toBe("prototyped.js"); }); }); diff --git a/src/string/camelCase/index.ts b/src/string/camelCase/index.ts index 4a3a8dbc..db4ca695 100644 --- a/src/string/camelCase/index.ts +++ b/src/string/camelCase/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/camelCase/method.ts b/src/string/camelCase/method.ts index c8b9a204..78724bfa 100644 --- a/src/string/camelCase/method.ts +++ b/src/string/camelCase/method.ts @@ -1,7 +1,11 @@ const method = (str: string) => { str = ( - str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+|[A-Z]|[0-9]+/g) || [""] - ).map((x) => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()).join(""); + str.match( + /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+|[A-Z]|[0-9]+/g, + ) || [""] + ) + .map(x => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()) + .join(""); return str.slice(0, 1).toLowerCase() + str.slice(1); }; diff --git a/src/string/camelCase/test.ts b/src/string/camelCase/test.ts index ea2836ef..130000d5 100644 --- a/src/string/camelCase/test.ts +++ b/src/string/camelCase/test.ts @@ -1,34 +1,40 @@ -import "./index"; +import "."; describe("String.prototype.camelCase", () => { - test("\"some_database_field_name\".camelCase() returns \"someDatabaseFieldName\"", () => { - expect("some_database_field_name".camelCase()) - .toBe("someDatabaseFieldName"); + test('"some_database_field_name".camelCase() returns "someDatabaseFieldName"', () => { + expect("some_database_field_name".camelCase()).toBe( + "someDatabaseFieldName", + ); }); - test("\"Some label that needs to be camelized\".camelCase() returns \"someLabelThatNeedsToBeCamelized\"", () => { - expect("Some label that needs to be camelized".camelCase()) - .toBe("someLabelThatNeedsToBeCamelized"); + // tslint:disable-next-line: max-line-length + test('"Some label that needs to be camelized".camelCase() returns "someLabelThatNeedsToBeCamelized"', () => { + expect("Some label that needs to be camelized".camelCase()).toBe( + "someLabelThatNeedsToBeCamelized", + ); }); - test("\"some-javascript-property\".camelCase() returns \"someJavascriptProperty\"", () => { - expect("some-javascript-property".camelCase()) - .toBe("someJavascriptProperty"); + test('"some-javascript-property".camelCase() returns "someJavascriptProperty"', () => { + expect("some-javascript-property".camelCase()).toBe( + "someJavascriptProperty", + ); }); - test("\"some-mixed_string with spaces_underscores-and-hyphens\".camelCase() returns " + - "\"someMixedStringWithSpacesUnderscoresAndHyphens\"", () => { - expect("some-mixed_string with spaces_underscores-and-hyphens".camelCase()) - .toBe("someMixedStringWithSpacesUnderscoresAndHyphens"); - }); + test( + '"some-mixed_string with spaces_underscores-and-hyphens".camelCase() returns ' + + '"someMixedStringWithSpacesUnderscoresAndHyphens"', + () => { + expect( + "some-mixed_string with spaces_underscores-and-hyphens".camelCase(), + ).toBe("someMixedStringWithSpacesUnderscoresAndHyphens"); + }, + ); - test("\"foo_bar-22\".camelCase() returns \"fooBar22\"", () => { - expect("foo_bar-22".camelCase()) - .toBe("fooBar22"); + test('"foo_bar-22".camelCase() returns "fooBar22"', () => { + expect("foo_bar-22".camelCase()).toBe("fooBar22"); }); - test("\"\".camelCase() returns \"\"", () => { - expect("".camelCase()) - .toBe(""); + test('"".camelCase() returns ""', () => { + expect("".camelCase()).toBe(""); }); }); diff --git a/src/string/capitalize/index.ts b/src/string/capitalize/index.ts index ded7d8d1..2df2b9c4 100644 --- a/src/string/capitalize/index.ts +++ b/src/string/capitalize/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/capitalize/method.ts b/src/string/capitalize/method.ts index 4da3d0c6..51a4c95c 100644 --- a/src/string/capitalize/method.ts +++ b/src/string/capitalize/method.ts @@ -1,7 +1,7 @@ const method = (str: string, allWords = false): string => { - if (allWords) return str.replace(/\b[a-z]/g, (char) => char.toUpperCase()); + if (allWords) return str.replace(/\b[a-z]/g, char => char.toUpperCase()); - return str.replace(/^[a-z]/, (char) => char.toUpperCase()); + return str.replace(/^[a-z]/, char => char.toUpperCase()); }; export = method; diff --git a/src/string/capitalize/test.ts b/src/string/capitalize/test.ts index 00cd0d65..d3944326 100644 --- a/src/string/capitalize/test.ts +++ b/src/string/capitalize/test.ts @@ -1,13 +1,11 @@ -import "./index"; +import "."; describe("String.prototype.capitalize", () => { - test("\"foo bar\".capitalize() returns \"Foo bar\"", () => { - expect("foo bar".capitalize()) - .toBe("Foo bar"); + test('"foo bar".capitalize() returns "Foo bar"', () => { + expect("foo bar".capitalize()).toBe("Foo bar"); }); - test("\"hello world\".capitalize(true) returns \"Hello World\"", () => { - expect("hello world".capitalize(true)) - .toBe("Hello World"); + test('"hello world".capitalize(true) returns "Hello World"', () => { + expect("hello world".capitalize(true)).toBe("Hello World"); }); }); diff --git a/src/string/chars/index.ts b/src/string/chars/index.ts index 26db76f6..074bfe5f 100644 --- a/src/string/chars/index.ts +++ b/src/string/chars/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/chars/test.ts b/src/string/chars/test.ts index b409fdfb..5ef587b4 100644 --- a/src/string/chars/test.ts +++ b/src/string/chars/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("String.prototype.chars", () => { - test("\"Hello\".chars() returns [\"H\", \"e\", \"l\", \"l\", \"o\"]", () => { - expect("Hello".chars()) - .toEqual(["H", "e", "l", "l", "o"]); + test('"Hello".chars() returns ["H", "e", "l", "l", "o"]', () => { + expect("Hello".chars()).toEqual(["H", "e", "l", "l", "o"]); }); }); diff --git a/src/string/contains/index.ts b/src/string/contains/index.ts index d6e29c30..3d6aaa51 100644 --- a/src/string/contains/index.ts +++ b/src/string/contains/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/contains/test.ts b/src/string/contains/test.ts index 79b1ba2b..509de759 100644 --- a/src/string/contains/test.ts +++ b/src/string/contains/test.ts @@ -1,13 +1,11 @@ -import "./index"; +import "."; describe("String.prototype.contains", () => { - test("\"javaScript & typescript\".contains(\"Typescript\"); // true", () => { - expect("javaScript & typescript".contains("Typescript")) - .toBe(true); + test('"javaScript & typescript".contains("Typescript"); // true', () => { + expect("javaScript & typescript".contains("Typescript")).toBe(true); }); - test("\"javaScript & typescript\".contains(\"Typescript\", true); // false", () => { - expect("javaScript & typescript".contains("Typescript", true)) - .toBe(false); + test('"javaScript & typescript".contains("Typescript", true); // false', () => { + expect("javaScript & typescript".contains("Typescript", true)).toBe(false); }); }); diff --git a/src/string/decapitalize/index.ts b/src/string/decapitalize/index.ts index 452b8c50..4f56c0fe 100644 --- a/src/string/decapitalize/index.ts +++ b/src/string/decapitalize/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/decapitalize/method.ts b/src/string/decapitalize/method.ts index 201f8718..d2d2e40c 100644 --- a/src/string/decapitalize/method.ts +++ b/src/string/decapitalize/method.ts @@ -1,7 +1,7 @@ const method = (str: string, allWords = false): string => { - if (allWords) return str.replace(/\b[A-Z]/g, (char) => char.toLowerCase()); + if (allWords) return str.replace(/\b[A-Z]/g, char => char.toLowerCase()); - return str.replace(/^[A-Z]/, (char) => char.toLowerCase()); + return str.replace(/^[A-Z]/, char => char.toLowerCase()); }; export = method; diff --git a/src/string/decapitalize/test.ts b/src/string/decapitalize/test.ts index d48ea7be..8baffa37 100644 --- a/src/string/decapitalize/test.ts +++ b/src/string/decapitalize/test.ts @@ -1,13 +1,11 @@ -import "./index"; +import "."; describe("String.prototype.decapitalize", () => { - test("\"Foo Bar\".decapitalize() returns \"foo Bar\"", () => { - expect("Foo Bar".decapitalize()) - .toBe("foo Bar"); + test('"Foo Bar".decapitalize() returns "foo Bar"', () => { + expect("Foo Bar".decapitalize()).toBe("foo Bar"); }); - test("\"Hello World\".decapitalize(true) returns \"hello world\"", () => { - expect("Hello World".decapitalize(true)) - .toBe("hello world"); + test('"Hello World".decapitalize(true) returns "hello world"', () => { + expect("Hello World".decapitalize(true)).toBe("hello world"); }); }); diff --git a/src/string/equals/index.ts b/src/string/equals/index.ts index 0d163610..264357d4 100644 --- a/src/string/equals/index.ts +++ b/src/string/equals/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/equals/test.ts b/src/string/equals/test.ts index 37bc0a86..3be49736 100644 --- a/src/string/equals/test.ts +++ b/src/string/equals/test.ts @@ -1,11 +1,11 @@ -import "./index"; +import "."; describe("String.prototype.equals", () => { - test("\"hello\".lines(\"hello\") returns true", () => { + test('"hello".lines("hello") returns true', () => { expect("hello".equals("hello")).toBe(true); }); - test("\"hello\".lines(\"Hello\") returns false", () => { + test('"hello".lines("Hello") returns false', () => { expect("hello".equals("Hello")).toBe(false); }); }); diff --git a/src/string/forEach/index.ts b/src/string/forEach/index.ts index 8a5fc407..4d11dc61 100644 --- a/src/string/forEach/index.ts +++ b/src/string/forEach/index.ts @@ -1,6 +1,5 @@ - -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/forEach/method.ts b/src/string/forEach/method.ts index 29c92ed0..94424e7c 100644 --- a/src/string/forEach/method.ts +++ b/src/string/forEach/method.ts @@ -1,4 +1,6 @@ -const method = (str: string, fn: (char: string, index: number, chars: string[]) => void) => - str.split("").forEach(fn); +const method = ( + str: string, + fn: (char: string, index: number, chars: string[]) => void, +) => str.split("").forEach(fn); export = method; diff --git a/src/string/forEach/test.ts b/src/string/forEach/test.ts index 2defff21..c6cdbbb9 100644 --- a/src/string/forEach/test.ts +++ b/src/string/forEach/test.ts @@ -1,7 +1,7 @@ -import "./index"; +import "."; describe("String.prototype.forEach", () => { - test("\"Hello\".forEach((char, i) => char == \"o\" && (index = i)); // index === 4", () => { + test('"Hello".forEach((char, i) => char == "o" && (index = i)); // index === 4', () => { let index = -1; "Hello".forEach((char, i) => char === "o" && (index = i)); diff --git a/src/string/humanize/index.ts b/src/string/humanize/index.ts index cb66a7e2..36b39329 100644 --- a/src/string/humanize/index.ts +++ b/src/string/humanize/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { @@ -14,6 +14,7 @@ declare global { * @function humanize * @returns {String} * @example - * ' capitalize dash-CamelCase_underscore trim '.humanize(); // 'Capitalize dash camel case underscore trim' + * ' capitalize dash-CamelCase_underscore trim '.humanize(); + * // 'Capitalize dash camel case underscore trim' */ addPrototype(String, "humanize", method); diff --git a/src/string/humanize/method.ts b/src/string/humanize/method.ts index 910fe981..e4952682 100644 --- a/src/string/humanize/method.ts +++ b/src/string/humanize/method.ts @@ -1,5 +1,11 @@ -const method = (str: string): string => ( - str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g) || [""] -).map((x) => x.toLowerCase()).join(" ").replace(/^[a-z]/, (char) => char.toUpperCase()); +const method = (str: string): string => + ( + str.match( + /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g, + ) || [""] + ) + .map(x => x.toLowerCase()) + .join(" ") + .replace(/^[a-z]/, char => char.toUpperCase()); export = method; diff --git a/src/string/humanize/test.ts b/src/string/humanize/test.ts index 1be984fa..2337fc7e 100644 --- a/src/string/humanize/test.ts +++ b/src/string/humanize/test.ts @@ -1,16 +1,17 @@ -import "./index"; +import "."; describe("String.prototype.humanize", () => { test( - "\" capitalize dash-CamelCase_underscore trim \".humanize() returns " + - "\"Capitalize dash camel case underscore trim\"", + '" capitalize dash-CamelCase_underscore trim ".humanize() returns ' + + '"Capitalize dash camel case underscore trim"', () => { - expect(" capitalize dash-CamelCase_underscore trim ".humanize()) - .toBe("Capitalize dash camel case underscore trim"); - }); + expect(" capitalize dash-CamelCase_underscore trim ".humanize()).toBe( + "Capitalize dash camel case underscore trim", + ); + }, + ); - test("\"\".humanize() returns \"\"", () => { - expect("".humanize()) - .toBe(""); + test('"".humanize() returns ""', () => { + expect("".humanize()).toBe(""); }); }); diff --git a/src/string/isEmpty/index.ts b/src/string/isEmpty/index.ts index 7020a57e..a947face 100644 --- a/src/string/isEmpty/index.ts +++ b/src/string/isEmpty/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/isEmpty/test.ts b/src/string/isEmpty/test.ts index dfa877ce..22a9323c 100644 --- a/src/string/isEmpty/test.ts +++ b/src/string/isEmpty/test.ts @@ -1,11 +1,11 @@ -import "./index"; +import "."; describe("String.prototype.isEmpty", () => { - test("\"123\".isEmpty() returns false", () => { + test('"123".isEmpty() returns false', () => { expect("123".isEmpty()).toBe(false); }); - test("\"\".isEmpty() returns true", () => { + test('"".isEmpty() returns true', () => { expect("".isEmpty()).toBe(true); }); }); diff --git a/src/string/isString/index.ts b/src/string/isString/index.ts index 16a9372e..c23ce90c 100644 --- a/src/string/isString/index.ts +++ b/src/string/isString/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface StringConstructor { diff --git a/src/string/isString/test.ts b/src/string/isString/test.ts index 36c1f9ee..5cf59b28 100644 --- a/src/string/isString/test.ts +++ b/src/string/isString/test.ts @@ -1,13 +1,11 @@ -import "./index"; +import "."; describe("String.isString", () => { test("String.isString(2) returns false", () => { - expect(String.isString(2)) - .toBe(false); + expect(String.isString(2)).toBe(false); }); - test("String.isString(\"foo bar\") returns true", () => { - expect(String.isString("foo bar")) - .toBe(true); + test('String.isString("foo bar") returns true', () => { + expect(String.isString("foo bar")).toBe(true); }); }); diff --git a/src/string/kebabCase/index.ts b/src/string/kebabCase/index.ts index c5c8de2d..941f2574 100644 --- a/src/string/kebabCase/index.ts +++ b/src/string/kebabCase/index.ts @@ -1,5 +1,6 @@ -import * as method from "./method"; +// tslint:disable: max-line-length import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/kebabCase/method.ts b/src/string/kebabCase/method.ts index 4a107ee1..cd11f1e9 100644 --- a/src/string/kebabCase/method.ts +++ b/src/string/kebabCase/method.ts @@ -1,5 +1,10 @@ -const method = (str: string): string => ( - str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+|[A-Z]|[0-9]+/g) || [""] -).map((x) => x.toLowerCase()).join("-"); +const method = (str: string): string => + ( + str.match( + /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+|[A-Z]|[0-9]+/g, + ) || [""] + ) + .map(x => x.toLowerCase()) + .join("-"); export = method; diff --git a/src/string/kebabCase/test.ts b/src/string/kebabCase/test.ts index bffd44f6..021ba3e5 100644 --- a/src/string/kebabCase/test.ts +++ b/src/string/kebabCase/test.ts @@ -1,42 +1,43 @@ -import "./index"; +import "."; describe("String.prototype.kebabCase", () => { - test("\"camelCase\".kebabCase() returns \"camel-case\"", () => { - expect("camelCase".kebabCase()) - .toBe("camel-case"); + test('"camelCase".kebabCase() returns "camel-case"', () => { + expect("camelCase".kebabCase()).toBe("camel-case"); }); - test("\"some text\".kebabCase() returns \"some-text\"", () => { - expect("some text".kebabCase()) - .toBe("some-text"); + test('"some text".kebabCase() returns "some-text"', () => { + expect("some text".kebabCase()).toBe("some-text"); }); - test("\"some-mixed_string With spaces_underscores-and-hyphens\".kebabCase() returns " + - "\"some-mixed-string-with-spaces-underscores-and-hyphens\"", () => { - expect("some-mixed_string With spaces_underscores-and-hyphens".kebabCase()) - .toBe("some-mixed-string-with-spaces-underscores-and-hyphens"); - }); + test( + '"some-mixed_string With spaces_underscores-and-hyphens".kebabCase() returns ' + + '"some-mixed-string-with-spaces-underscores-and-hyphens"', + () => { + expect( + "some-mixed_string With spaces_underscores-and-hyphens".kebabCase(), + ).toBe("some-mixed-string-with-spaces-underscores-and-hyphens"); + }, + ); - test("\"AllThe-small Things\".kebabCase() returns \"all-the-small-things\"", () => { - expect("AllThe-small Things".kebabCase()) - .toBe("all-the-small-things"); + test('"AllThe-small Things".kebabCase() returns "all-the-small-things"', () => { + expect("AllThe-small Things".kebabCase()).toBe("all-the-small-things"); }); - test( - "\"IAmListeningToFMWhileLoadingDifferentURLOnMyBrowserAndAlsoEditingSomeXMLAndHTML\".kebabCase() returns " + - "\"i-am-listening-to-fm-while-loading-different-url-on-my-browser-and-also-editing-some-xml-and-html\"", - () => { - expect("IAmListeningToFMWhileLoadingDifferentURLOnMyBrowserAndAlsoEditingSomeXMLAndHTML".kebabCase()) - .toBe("i-am-listening-to-fm-while-loading-different-url-on-my-browser-and-also-editing-some-xml-and-html"); - }); + test(// tslint:disable-next-line: max-line-length + '"IAmListeningToFMWhileLoadingDifferentURLOnMyBrowserAndAlsoEditingSomeXMLAndHTML".kebabCase() returns "i-am-listening-to-fm-while-loading-different-url-on-my-browser-and-also-editing-some-xml-and-html"', () => { + expect( + "IAmListeningToFMWhileLoadingDifferentURLOnMyBrowserAndAlsoEditingSomeXMLAndHTML".kebabCase(), + ).toBe( + // tslint:disable-next-line: max-line-length + "i-am-listening-to-fm-while-loading-different-url-on-my-browser-and-also-editing-some-xml-and-html", + ); + }); - test("\"foo_Bar22\".kebabCase() returns \"foo-bar-22\"", () => { - expect("foo_Bar22".kebabCase()) - .toBe("foo-bar-22"); + test('"foo_Bar22".kebabCase() returns "foo-bar-22"', () => { + expect("foo_Bar22".kebabCase()).toBe("foo-bar-22"); }); - test("\"\".kebabCase() returns \"\"", () => { - expect("".kebabCase()) - .toBe(""); + test('"".kebabCase() returns ""', () => { + expect("".kebabCase()).toBe(""); }); }); diff --git a/src/string/lines/index.ts b/src/string/lines/index.ts index 31c39b6c..7d8ab51f 100644 --- a/src/string/lines/index.ts +++ b/src/string/lines/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/lines/test.ts b/src/string/lines/test.ts index 24862cf0..951457f6 100644 --- a/src/string/lines/test.ts +++ b/src/string/lines/test.ts @@ -1,9 +1,14 @@ -import "./index"; +import "."; describe("String.prototype.lines", () => { - test("\"This\nis a\nmultiline\nstring.\n\".lines() returns [\"This\", \"is a\", \"multiline\", \"string.\" , \"\"]", - () => { - expect("This\nis a\nmultiline\nstring.\n".lines()) - .toEqual(["This", "is a", "multiline", "string.", ""]); - }); + // tslint:disable-next-line: max-line-length + test('"This\nis a\nmultiline\nstring.\n".lines() returns ["This", "is a", "multiline", "string." , ""]', () => { + expect("This\nis a\nmultiline\nstring.\n".lines()).toEqual([ + "This", + "is a", + "multiline", + "string.", + "", + ]); + }); }); diff --git a/src/string/map/index.ts b/src/string/map/index.ts index 8377d0a5..9d6896c2 100644 --- a/src/string/map/index.ts +++ b/src/string/map/index.ts @@ -1,7 +1,7 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; -export { }; +export {}; declare global { interface String { diff --git a/src/string/map/method.ts b/src/string/map/method.ts index dc1c7c0a..9e04fcc6 100644 --- a/src/string/map/method.ts +++ b/src/string/map/method.ts @@ -1,4 +1,10 @@ -const method = (str: string, fn: (char: string, index: number, chars: string[]) => string): string => - str.split("").map(fn).join(""); +const method = ( + str: string, + fn: (char: string, index: number, chars: string[]) => string, +): string => + str + .split("") + .map(fn) + .join(""); export = method; diff --git a/src/string/map/test.ts b/src/string/map/test.ts index b70b8944..f069d8d7 100644 --- a/src/string/map/test.ts +++ b/src/string/map/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("String.prototype.map", () => { - test("\"Hello\".map((char) => char == \"o\" ? \"O\" : char) returns \"HellO\"", () => { - expect("Hello".map((char) => char === "o" ? "O" : char)) - .toBe("HellO"); + test('"Hello".map((char) => char == "o" ? "O" : char) returns "HellO"', () => { + expect("Hello".map(char => (char === "o" ? "O" : char))).toBe("HellO"); }); }); diff --git a/src/string/mask/index.ts b/src/string/mask/index.ts index 5223e426..71f0ede2 100644 --- a/src/string/mask/index.ts +++ b/src/string/mask/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/mask/method.ts b/src/string/mask/method.ts index 423c7b39..90d195d8 100644 --- a/src/string/mask/method.ts +++ b/src/string/mask/method.ts @@ -1,3 +1,4 @@ -const method = (str: string, num = 4, mask = "*"): string => str.slice(0, -num).replace(/./g, mask) + str.slice(-num); +const method = (str: string, num = 4, mask = "*"): string => + str.slice(0, -num).replace(/./g, mask) + str.slice(-num); export = method; diff --git a/src/string/mask/test.ts b/src/string/mask/test.ts index 34561a32..40602ac1 100644 --- a/src/string/mask/test.ts +++ b/src/string/mask/test.ts @@ -1,18 +1,15 @@ -import "./index"; +import "."; describe("String.prototype.mask", () => { - test("\"1234567890\".mask() returns \"******7890\"", () => { - expect("1234567890".mask()) - .toBe("******7890"); + test('"1234567890".mask() returns "******7890"', () => { + expect("1234567890".mask()).toBe("******7890"); }); - test("\"1234567890\".mask(3) returns \"*******890\"", () => { - expect("1234567890".mask(3)) - .toBe("*******890"); + test('"1234567890".mask(3) returns "*******890"', () => { + expect("1234567890".mask(3)).toBe("*******890"); }); - test("\"1234567890\".mask(-4, \"$\") returns \"$$$$567890\"", () => { - expect("1234567890".mask(-4, "$")) - .toBe("$$$$567890"); + test('"1234567890".mask(-4, "$") returns "$$$$567890"', () => { + expect("1234567890".mask(-4, "$")).toBe("$$$$567890"); }); }); diff --git a/src/string/methods.ts b/src/string/methods.ts index 74184b0c..daaa6531 100644 --- a/src/string/methods.ts +++ b/src/string/methods.ts @@ -1,29 +1,29 @@ -import * as base64 from "./base64/method"; -import * as base64Decode from "./base64Decode/method"; -import * as camelCase from "./camelCase/method"; -import * as capitalize from "./capitalize/method"; -import * as chars from "./chars/method"; -import * as contains from "./contains/method"; -import * as decapitalize from "./decapitalize/method"; -import * as equals from "./equals/method"; -import * as forEach from "./forEach/method"; -import * as humanize from "./humanize/method"; -import * as isEmpty from "./isEmpty/method"; -import * as isString from "./isString/method"; -import * as kebabCase from "./kebabCase/method"; -import * as lines from "./lines/method"; -import * as map from "./map/method"; -import * as mask from "./mask/method"; -import * as pad from "./pad/method"; -import * as parseInt from "./parseInt/method"; -import * as pluralize from "./pluralize/method"; -import * as reduce from "./reduce/method"; -import * as repeat from "./repeat/method"; -import * as reverse from "./reverse/method"; -import * as snakeCase from "./snakeCase/method"; -import * as swapCase from "./swapCase/method"; -import * as truncate from "./truncate/method"; -import * as words from "./words/method"; +import base64 from "./base64/method"; +import base64Decode from "./base64Decode/method"; +import camelCase from "./camelCase/method"; +import capitalize from "./capitalize/method"; +import chars from "./chars/method"; +import contains from "./contains/method"; +import decapitalize from "./decapitalize/method"; +import equals from "./equals/method"; +import forEach from "./forEach/method"; +import humanize from "./humanize/method"; +import isEmpty from "./isEmpty/method"; +import isString from "./isString/method"; +import kebabCase from "./kebabCase/method"; +import lines from "./lines/method"; +import map from "./map/method"; +import mask from "./mask/method"; +import pad from "./pad/method"; +import parseInt from "./parseInt/method"; +import pluralize from "./pluralize/method"; +import reduce from "./reduce/method"; +import repeat from "./repeat/method"; +import reverse from "./reverse/method"; +import snakeCase from "./snakeCase/method"; +import swapCase from "./swapCase/method"; +import truncate from "./truncate/method"; +import words from "./words/method"; export { base64, diff --git a/src/string/pad/index.ts b/src/string/pad/index.ts index 7c582d50..4d4dc3c4 100644 --- a/src/string/pad/index.ts +++ b/src/string/pad/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/pad/method.ts b/src/string/pad/method.ts index bba0e519..04a6f914 100644 --- a/src/string/pad/method.ts +++ b/src/string/pad/method.ts @@ -1,4 +1,4 @@ -import * as repeat from "../repeat/method"; +import repeat from "../repeat/method"; const method = (str: string, size: number, value: string = " "): string => { const s = Math.abs(size); diff --git a/src/string/pad/test.ts b/src/string/pad/test.ts index 5648d637..c02b872d 100644 --- a/src/string/pad/test.ts +++ b/src/string/pad/test.ts @@ -1,15 +1,15 @@ -import "./index"; +import "."; describe("String.prototype.pad", () => { - test("\"123\".pad(2) returns \"123\"", () => { + test('"123".pad(2) returns "123"', () => { expect("123".pad(2)).toEqual("123"); }); - test("\"123\".pad(5) returns \"123 \"", () => { + test('"123".pad(5) returns "123 "', () => { expect("123".pad(5)).toEqual("123 "); }); - test("\"123\".pad(-5, \"1\") returns \"11123\"", () => { + test('"123".pad(-5, "1") returns "11123"', () => { expect("123".pad(-5, "1")).toEqual("11123"); }); }); diff --git a/src/string/parseInt/index.ts b/src/string/parseInt/index.ts index 745caa2d..40c1f66a 100644 --- a/src/string/parseInt/index.ts +++ b/src/string/parseInt/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/parseInt/method.ts b/src/string/parseInt/method.ts index 5b7a1fde..6c0b981f 100644 --- a/src/string/parseInt/method.ts +++ b/src/string/parseInt/method.ts @@ -1,3 +1,4 @@ -const method = (str: string, radix?: number): number => Number.parseInt(str, radix); +const method = (str: string, radix?: number): number => + Number.parseInt(str, radix); export = method; diff --git a/src/string/parseInt/test.ts b/src/string/parseInt/test.ts index 4ba07a47..9a949167 100644 --- a/src/string/parseInt/test.ts +++ b/src/string/parseInt/test.ts @@ -1,7 +1,7 @@ -import "./index"; +import "."; describe("String.prototype.parseInt", () => { - test("\"08\".parseInt() returns 8", () => { + test('"08".parseInt() returns 8', () => { expect("08".parseInt()).toBe(8); }); }); diff --git a/src/string/pluralize/index.ts b/src/string/pluralize/index.ts index 74e83461..a765aacf 100644 --- a/src/string/pluralize/index.ts +++ b/src/string/pluralize/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/pluralize/method.ts b/src/string/pluralize/method.ts index 39ce34f1..1fa1f5d9 100644 --- a/src/string/pluralize/method.ts +++ b/src/string/pluralize/method.ts @@ -1,24 +1,58 @@ -import * as isString from "../isString/method"; +import isString from "../isString/method"; const IRREGULAR_RULES = [ // Pronouns. - ["I", "we"], ["me", "us"], ["he", "they"], ["she", "they"], ["them", "them"], ["myself", "ourselves"], - ["yourself", "yourselves"], ["itself", "themselves"], ["herself", "themselves"], - ["himself", "themselves"], ["themself", "themselves"], ["is", "are"], ["was", "were"], ["has", "have"], - ["this", "these"], ["that", "those"], + ["I", "we"], + ["me", "us"], + ["he", "they"], + ["she", "they"], + ["them", "them"], + ["myself", "ourselves"], + ["yourself", "yourselves"], + ["itself", "themselves"], + ["herself", "themselves"], + ["himself", "themselves"], + ["themself", "themselves"], + ["is", "are"], + ["was", "were"], + ["has", "have"], + ["this", "these"], + ["that", "those"], // Words ending in with a consonant and `o`. - ["echo", "echoes"], ["dingo", "dingoes"], ["volcano", "volcanoes"], ["tornado", "tornadoes"], + ["echo", "echoes"], + ["dingo", "dingoes"], + ["volcano", "volcanoes"], + ["tornado", "tornadoes"], ["torpedo", "torpedoes"], // Ends with `us`. - ["genus", "genera"], ["viscus", "viscera"], + ["genus", "genera"], + ["viscus", "viscera"], // Ends with `ma`. - ["stigma", "stigmata"], ["stoma", "stomata"], ["dogma", "dogmata"], ["lemma", "lemmata"], - ["schema", "schemata"], ["anathema", "anathemata"], + ["stigma", "stigmata"], + ["stoma", "stomata"], + ["dogma", "dogmata"], + ["lemma", "lemmata"], + ["schema", "schemata"], + ["anathema", "anathemata"], // Other irregular rules. - ["ox", "oxen"], ["axe", "axes"], ["die", "dice"], ["yes", "yeses"], ["foot", "feet"], ["eave", "eaves"], - ["goose", "geese"], ["tooth", "teeth"], ["quiz", "quizzes"], ["human", "humans"], ["proof", "proofs"], - ["carve", "carves"], ["valve", "valves"], ["looey", "looies"], ["thief", "thieves"], ["groove", "grooves"], - ["pickaxe", "pickaxes"], ["whiskey", "whiskies"], + ["ox", "oxen"], + ["axe", "axes"], + ["die", "dice"], + ["yes", "yeses"], + ["foot", "feet"], + ["eave", "eaves"], + ["goose", "geese"], + ["tooth", "teeth"], + ["quiz", "quizzes"], + ["human", "humans"], + ["proof", "proofs"], + ["carve", "carves"], + ["valve", "valves"], + ["looey", "looies"], + ["thief", "thieves"], + ["groove", "grooves"], + ["pickaxe", "pickaxes"], + ["whiskey", "whiskies"], ]; const PLURALIZATION_RUES: Array<[RegExp | string, string]> = [ @@ -29,13 +63,23 @@ const PLURALIZATION_RUES: Array<[RegExp | string, string]> = [ [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, "$1es"], [/(e[mn]u)s?$/i, "$1s"], [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, "$1"], - [/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, "$1i"], + [ + // tslint:disable-next-line: max-line-length + /(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, + "$1i", + ], [/(alumn|alg|vertebr)(?:a|ae)$/i, "$1ae"], [/(seraph|cherub)(?:im)?$/i, "$1im"], [/(her|at|gr)o$/i, "$1oes"], - // tslint:disable:max-line-length - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, "$1a"], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, "$1a"], + [ + // tslint:disable:max-line-length + /(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, + "$1a", + ], + [ + /(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, + "$1a", + ], [/sis$/i, "ses"], [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, "$1$2ves"], [/([^aeiouy]|qu)y$/i, "$1ies"], @@ -56,17 +100,35 @@ const SINGULARIZATION_RULES: Array<[RegExp, string]> = [ [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, "$1fe"], [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, "$1f"], [/ies$/i, "y"], - [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, "$1ie"], + [ + /\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, + "$1ie", + ], [/\b(mon|smil)ies$/i, "$1ey"], [/\b((?:tit)?m|l)ice$/i, "$1ouse"], [/(seraph|cherub)im$/i, "$1"], - [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|ris)(?:es)?$/i, "$1"], - [/(analy|ba|diagno|parenthe|progno|synop|the|empha|cri)(?:sis|ses)$/i, "$1sis"], + [ + /(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|ris)(?:es)?$/i, + "$1", + ], + [ + /(analy|ba|diagno|parenthe|progno|synop|the|empha|cri)(?:sis|ses)$/i, + "$1sis", + ], [/(movie|twelve|abuse|e[mn]u)s$/i, "$1"], [/(test)(?:is|es)$/i, "$1is"], - [/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, "$1us"], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, "$1um"], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, "$1on"], + [ + /(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, + "$1us", + ], + [ + /(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, + "$1um", + ], + [ + /(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, + "$1on", + ], [/(alumn|alg|vertebr)ae$/i, "$1a"], [/(cod|mur|sil|vert|ind)ices$/i, "$1ex"], [/(matr|append)ices$/i, "$1ix"], @@ -78,15 +140,93 @@ const SINGULARIZATION_RULES: Array<[RegExp, string]> = [ const UNCOUNTABLE_RULES = [ // Singular words with no plurals. - "adulthood", "advice", "agenda", "aid", "alcohol", "ammo", "anime", "athletics", "audio", "bison", - "blood", "bream", "buffalo", "butter", "carp", "cash", "chassis", "chess", "clothing", "cod", "commerce", - "cooperation", "corps", "debris", "diabetes", "digestion", "elk", "energy", "equipment", "excretion", - "expertise", "flounder", "fun", "gallows", "garbage", "graffiti", "headquarters", "health", "herpes", - "highjinks", "homework", "housework", "information", "jeans", "justice", "kudos", "labour", "literature", - "machinery", "mackerel", "mail", "media", "mews", "moose", "music", "mud", "manga", "news", "pike", - "plankton", "pliers", "police", "pollution", "premises", "rain", "research", "rice", "salmon", "scissors", - "series", "sewage", "shambles", "shrimp", "species", "staff", "swine", "tennis", "traffic", "transportation", - "trout", "tuna", "wealth", "welfare", "whiting", "wildebeest", "wildlife", "you", + "adulthood", + "advice", + "agenda", + "aid", + "alcohol", + "ammo", + "anime", + "athletics", + "audio", + "bison", + "blood", + "bream", + "buffalo", + "butter", + "carp", + "cash", + "chassis", + "chess", + "clothing", + "cod", + "commerce", + "cooperation", + "corps", + "debris", + "diabetes", + "digestion", + "elk", + "energy", + "equipment", + "excretion", + "expertise", + "flounder", + "fun", + "gallows", + "garbage", + "graffiti", + "headquarters", + "health", + "herpes", + "highjinks", + "homework", + "housework", + "information", + "jeans", + "justice", + "kudos", + "labour", + "literature", + "machinery", + "mackerel", + "mail", + "media", + "mews", + "moose", + "music", + "mud", + "manga", + "news", + "pike", + "plankton", + "pliers", + "police", + "pollution", + "premises", + "rain", + "research", + "rice", + "salmon", + "scissors", + "series", + "sewage", + "shambles", + "shrimp", + "species", + "staff", + "swine", + "tennis", + "traffic", + "transportation", + "trout", + "tuna", + "wealth", + "welfare", + "whiting", + "wildebeest", + "wildlife", + "you", // RegExes. /[^aeiou]ese$/i, // "chinese", "japanese" /deer$/i, // "deer", "reindeer" @@ -112,7 +252,8 @@ const irregularSingles: { [keys: string]: string } = {}; * @param {RegExp|String} rule * @return {RegExp} */ -const sanitizeRule = (rule: RegExp | string) => isString(rule) ? new RegExp(`^${rule}$`, "i") : rule; +const sanitizeRule = (rule: RegExp | string) => + isString(rule) ? new RegExp(`^${rule}$`, "i") : rule; /** * Pass in a word token to produce a function that can replicate the case on @@ -131,8 +272,9 @@ const restoreCase = (word: string, token: string) => { if (word === word.toUpperCase()) return token.toUpperCase(); // Title cased words. E.g. "Title". - if (word[0] === word[0].toUpperCase()) + if (word[0] === word[0].toUpperCase()) { return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase(); + } // Lower cased words. E.g. "test". return token.toLowerCase(); @@ -147,40 +289,46 @@ const restoreCase = (word: string, token: string) => { * @param {Array} rules * @return {Function} */ -const replaceWord = (replaceMap: { [keys: string]: string }, keepMap: { [keys: string]: string }, rules: Array<[RegExp, string]>) => - (word: string) => { - // Get the correct token and case restoration functions. - const token = word.toLowerCase(); - - // Check against the keep object map. - if (keepMap.hasOwnProperty(token)) return restoreCase(word, token); - - // Check against the replacement map for a direct word replacement. - if (replaceMap.hasOwnProperty(token)) return restoreCase(word, replaceMap[token]); +const replaceWord = ( + replaceMap: { [keys: string]: string }, + keepMap: { [keys: string]: string }, + rules: Array<[RegExp, string]>, +) => (word: string) => { + // Get the correct token and case restoration functions. + const token = word.toLowerCase(); + + // Check against the keep object map. + if (keepMap.hasOwnProperty(token)) return restoreCase(word, token); + + // Check against the replacement map for a direct word replacement. + if (replaceMap.hasOwnProperty(token)) { + return restoreCase(word, replaceMap[token]); + } - // Run all the rules against the word. + // Run all the rules against the word. - if (!token.length || uncountables.hasOwnProperty(token)) return word; + if (!token.length || uncountables.hasOwnProperty(token)) return word; - let len = rules.length; + let len = rules.length; - // Iterate over the sanitization rules and use the first one to match. - while (len--) { - const rule = rules[len]; + // Iterate over the sanitization rules and use the first one to match. + while (len--) { + const rule = rules[len]; - if (rule[0].test(word)) - return word.replace(rule[0], (match, index, ...rest) => { - const args = [match, index].concat(rest); - const result = rule[1].replace(/\$(\d{1,2})/g, (match, index) => args[index] || ""); + if (rule[0].test(word)) { + return word.replace(rule[0], (match, index, ...rest) => { + const args = [match, index].concat(rest); + const result = rule[1].replace(/\$(\d{1,2})/g, (_, i) => args[i] || ""); - if (match === "") return restoreCase(word[index - 1], result); + if (match === "") return restoreCase(word[index - 1], result); - return restoreCase(match, result); - }); + return restoreCase(match, result); + }); } + } - return word; - }; + return word; +}; /** * Add a pluralization rule to the collection. @@ -190,7 +338,7 @@ const replaceWord = (replaceMap: { [keys: string]: string }, keepMap: { [keys: s * @param {String} replacement */ const addPluralRule = (rule: string | RegExp, replacement: string) => - pluralRules.push([sanitizeRule(rule), replacement]); + pluralRules.push([sanitizeRule(rule) as any, replacement]); /** * Add a singularization rule to the collection. @@ -200,21 +348,21 @@ const addPluralRule = (rule: string | RegExp, replacement: string) => * @param {String} replacement */ const addSingularRule = (rule: string | RegExp, replacement: string) => - singularRules.push([sanitizeRule(rule), replacement]); + singularRules.push([sanitizeRule(rule) as any, replacement]); -IRREGULAR_RULES.forEach((rule) => { - const plural = rule[1].toLowerCase(); +IRREGULAR_RULES.forEach(rule => { + const pl = rule[1].toLowerCase(); const single = rule[0].toLowerCase(); - irregularSingles[single] = plural; - irregularPlurals[plural] = single; + irregularSingles[single] = pl; + irregularPlurals[pl] = single; }); -PLURALIZATION_RUES.forEach((rule) => addPluralRule(rule[0], rule[1])); +PLURALIZATION_RUES.forEach(rule => addPluralRule(rule[0], rule[1])); -SINGULARIZATION_RULES.forEach((rule) => addSingularRule(rule[0], rule[1])); +SINGULARIZATION_RULES.forEach(rule => addSingularRule(rule[0], rule[1])); -UNCOUNTABLE_RULES.forEach((word) => { +UNCOUNTABLE_RULES.forEach(word => { if (isString(word)) { uncountables[word.toLowerCase()] = true; diff --git a/src/string/pluralize/test.ts b/src/string/pluralize/test.ts index 32ebaaf8..dd189642 100644 --- a/src/string/pluralize/test.ts +++ b/src/string/pluralize/test.ts @@ -1,4 +1,4 @@ -import "./index"; +import "."; /** * Standard singular/plural matches. @@ -8,156 +8,607 @@ import "./index"; */ const BASIC_TESTS = [ // Uncountables. - ["fish", "fish"], ["media", "media"], ["moose", "moose"], ["police", "police"], ["sheep", "sheep"], - ["series", "series"], ["species", "species"], ["agenda", "agenda"], ["news", "news"], - ["reindeer", "reindeer"], ["starfish", "starfish"], ["smallpox", "smallpox"], ["tennis", "tennis"], - ["chickenpox", "chickenpox"], ["shambles", "shambles"], ["garbage", "garbage"], ["you", "you"], - ["wildlife", "wildlife"], ["Staff", "Staff"], ["STAFF", "STAFF"], ["turquois", "turquois"], + ["fish", "fish"], + ["media", "media"], + ["moose", "moose"], + ["police", "police"], + ["sheep", "sheep"], + ["series", "series"], + ["species", "species"], + ["agenda", "agenda"], + ["news", "news"], + ["reindeer", "reindeer"], + ["starfish", "starfish"], + ["smallpox", "smallpox"], + ["tennis", "tennis"], + ["chickenpox", "chickenpox"], + ["shambles", "shambles"], + ["garbage", "garbage"], + ["you", "you"], + ["wildlife", "wildlife"], + ["Staff", "Staff"], + ["STAFF", "STAFF"], + ["turquois", "turquois"], ["carnivorous", "carnivorous"], // Latin. ["veniam", "veniam"], // Pluralization. - ["this", "these"], ["that", "those"], ["is", "are"], ["man", "men"], ["superman", "supermen"], - ["ox", "oxen"], ["bus", "buses"], ["airbus", "airbuses"], ["railbus", "railbuses"], ["wife", "wives"], - ["guest", "guests"], ["thing", "things"], ["mess", "messes"], ["guess", "guesses"], ["person", "people"], - ["meteor", "meteors"], ["chateau", "chateaus"], ["lap", "laps"], ["cough", "coughs"], ["death", "deaths"], - ["coach", "coaches"], ["boy", "boys"], ["toy", "toys"], ["guy", "guys"], ["girl", "girls"], - ["chair", "chairs"], ["toe", "toes"], ["tiptoe", "tiptoes"], ["tomato", "tomatoes"], - ["potato", "potatoes"], ["tornado", "tornadoes"], ["torpedo", "torpedoes"], ["hero", "heroes"], - ["superhero", "superheroes"], ["volcano", "volcanoes"], ["canto", "cantos"], ["hetero", "heteros"], - ["photo", "photos"], ["portico", "porticos"], ["quarto", "quartos"], ["kimono", "kimonos"], - ["albino", "albinos"], ["cherry", "cherries"], ["piano", "pianos"], ["pro", "pros"], ["combo", "combos"], - ["turbo", "turbos"], ["bar", "bars"], ["crowbar", "crowbars"], ["van", "vans"], ["tobacco", "tobaccos"], - ["afficionado", "afficionados"], ["monkey", "monkeys"], ["neutrino", "neutrinos"], ["rhino", "rhinos"], - ["steno", "stenos"], ["latino", "latinos"], ["casino", "casinos"], ["avocado", "avocados"], - ["commando", "commandos"], ["tuxedo", "tuxedos"], ["speedo", "speedos"], ["dingo", "dingoes"], - ["echo", "echoes"], ["nacho", "nachos"], ["motto", "mottos"], ["psycho", "psychos"], ["poncho", "ponchos"], - ["pass", "passes"], ["ghetto", "ghettos"], ["mango", "mangos"], ["lady", "ladies"], ["bath", "baths"], + ["this", "these"], + ["that", "those"], + ["is", "are"], + ["man", "men"], + ["superman", "supermen"], + ["ox", "oxen"], + ["bus", "buses"], + ["airbus", "airbuses"], + ["railbus", "railbuses"], + ["wife", "wives"], + ["guest", "guests"], + ["thing", "things"], + ["mess", "messes"], + ["guess", "guesses"], + ["person", "people"], + ["meteor", "meteors"], + ["chateau", "chateaus"], + ["lap", "laps"], + ["cough", "coughs"], + ["death", "deaths"], + ["coach", "coaches"], + ["boy", "boys"], + ["toy", "toys"], + ["guy", "guys"], + ["girl", "girls"], + ["chair", "chairs"], + ["toe", "toes"], + ["tiptoe", "tiptoes"], + ["tomato", "tomatoes"], + ["potato", "potatoes"], + ["tornado", "tornadoes"], + ["torpedo", "torpedoes"], + ["hero", "heroes"], + ["superhero", "superheroes"], + ["volcano", "volcanoes"], + ["canto", "cantos"], + ["hetero", "heteros"], + ["photo", "photos"], + ["portico", "porticos"], + ["quarto", "quartos"], + ["kimono", "kimonos"], + ["albino", "albinos"], + ["cherry", "cherries"], + ["piano", "pianos"], + ["pro", "pros"], + ["combo", "combos"], + ["turbo", "turbos"], + ["bar", "bars"], + ["crowbar", "crowbars"], + ["van", "vans"], + ["tobacco", "tobaccos"], + ["afficionado", "afficionados"], + ["monkey", "monkeys"], + ["neutrino", "neutrinos"], + ["rhino", "rhinos"], + ["steno", "stenos"], + ["latino", "latinos"], + ["casino", "casinos"], + ["avocado", "avocados"], + ["commando", "commandos"], + ["tuxedo", "tuxedos"], + ["speedo", "speedos"], + ["dingo", "dingoes"], + ["echo", "echoes"], + ["nacho", "nachos"], + ["motto", "mottos"], + ["psycho", "psychos"], + ["poncho", "ponchos"], + ["pass", "passes"], + ["ghetto", "ghettos"], + ["mango", "mangos"], + ["lady", "ladies"], + ["bath", "baths"], ["professional", "professionals"], ["dwarf", "dwarves"], // Proper spelling is "dwarfs". - ["encyclopedia", "encyclopedias"], ["louse", "lice"], ["roof", "roofs"], ["woman", "women"], - ["formula", "formulas"], ["polyhedron", "polyhedra"], + ["encyclopedia", "encyclopedias"], + ["louse", "lice"], + ["roof", "roofs"], + ["woman", "women"], + ["formula", "formulas"], + ["polyhedron", "polyhedra"], ["index", "indices"], // Maybe "indexes". - ["matrix", "matrices"], ["vertex", "vertices"], + ["matrix", "matrices"], + ["vertex", "vertices"], ["axe", "axes"], // Could also be plural of "ax". - ["pickaxe", "pickaxes"], ["crisis", "crises"], ["criterion", "criteria"], ["phenomenon", "phenomena"], - ["addendum", "addenda"], ["datum", "data"], ["forum", "forums"], ["millennium", "millennia"], - ["alumnus", "alumni"], ["medium", "mediums"], ["census", "censuses"], ["genus", "genera"], - ["dogma", "dogmata"], ["life", "lives"], ["hive", "hives"], ["kiss", "kisses"], ["dish", "dishes"], - ["human", "humans"], ["knife", "knives"], ["phase", "phases"], ["judge", "judges"], ["class", "classes"], - ["witch", "witches"], ["church", "churches"], ["massage", "massages"], ["prospectus", "prospectuses"], - ["syllabus", "syllabi"], ["viscus", "viscera"], ["cactus", "cacti"], ["hippopotamus", "hippopotamuses"], - ["octopus", "octopi"], ["platypus", "platypuses"], ["kangaroo", "kangaroos"], ["atlas", "atlases"], - ["stigma", "stigmata"], ["schema", "schemata"], ["phenomenon", "phenomena"], ["diagnosis", "diagnoses"], - ["mongoose", "mongooses"], ["mouse", "mice"], ["liturgist", "liturgists"], ["box", "boxes"], - ["gas", "gases"], ["self", "selves"], ["chief", "chiefs"], ["quiz", "quizzes"], ["child", "children"], - ["shelf", "shelves"], ["fizz", "fizzes"], ["tooth", "teeth"], ["thief", "thieves"], ["day", "days"], - ["loaf", "loaves"], ["fix", "fixes"], ["spy", "spies"], ["vertebra", "vertebrae"], ["clock", "clocks"], - ["lap", "laps"], ["cuff", "cuffs"], ["leaf", "leaves"], ["calf", "calves"], ["moth", "moths"], - ["mouth", "mouths"], ["house", "houses"], ["proof", "proofs"], ["hoof", "hooves"], ["elf", "elves"], - ["turf", "turfs"], ["craft", "crafts"], ["die", "dice"], ["penny", "pennies"], ["campus", "campuses"], - ["virus", "viri"], ["iris", "irises"], ["bureau", "bureaus"], ["kiwi", "kiwis"], ["wiki", "wikis"], - ["igloo", "igloos"], ["ninja", "ninjas"], ["pizza", "pizzas"], ["kayak", "kayaks"], ["canoe", "canoes"], - ["tiding", "tidings"], ["pea", "peas"], ["drive", "drives"], ["nose", "noses"], ["movie", "movies"], - ["status", "statuses"], ["alias", "aliases"], ["memorandum", "memorandums"], ["language", "languages"], - ["plural", "plurals"], ["word", "words"], ["multiple", "multiples"], ["reward", "rewards"], - ["sandwich", "sandwiches"], ["subway", "subways"], ["direction", "directions"], ["land", "lands"], - ["row", "rows"], ["grow", "grows"], ["flow", "flows"], ["rose", "roses"], ["raise", "raises"], - ["friend", "friends"], ["follower", "followers"], ["male", "males"], ["nail", "nails"], ["sex", "sexes"], - ["tape", "tapes"], ["ruler", "rulers"], ["king", "kings"], ["queen", "queens"], ["zero", "zeros"], - ["quest", "quests"], ["goose", "geese"], ["foot", "feet"], ["ex", "exes"], ["reflex", "reflexes"], - ["heat", "heats"], ["train", "trains"], ["test", "tests"], ["pie", "pies"], ["fly", "flies"], - ["eye", "eyes"], ["lie", "lies"], ["node", "nodes"], ["trade", "trades"], ["chinese", "chinese"], - ["please", "pleases"], ["japanese", "japanese"], ["regex", "regexes"], ["license", "licenses"], - ["zebra", "zebras"], ["general", "generals"], ["corps", "corps"], ["pliers", "pliers"], - ["flyer", "flyers"], ["scissors", "scissors"], ["fireman", "firemen"], ["chirp", "chirps"], - ["harp", "harps"], ["corpse", "corpses"], ["dye", "dyes"], ["move", "moves"], ["zombie", "zombies"], - ["variety", "varieties"], ["talkie", "talkies"], ["walkie-talkie", "walkie-talkies"], - ["groupie", "groupies"], ["goonie", "goonies"], ["lassie", "lassies"], ["genie", "genies"], - ["foodie", "foodies"], ["faerie", "faeries"], ["collie", "collies"], ["obloquy", "obloquies"], - ["looey", "looies"], ["osprey", "ospreys"], ["cover", "covers"], ["tie", "ties"], ["groove", "grooves"], - ["bee", "bees"], ["ave", "aves"], ["wave", "waves"], ["wolf", "wolves"], ["airwave", "airwaves"], - ["archive", "archives"], ["arch", "arches"], ["dive", "dives"], ["aftershave", "aftershaves"], - ["cave", "caves"], ["grave", "graves"], ["gift", "gifts"], ["nerve", "nerves"], ["nerd", "nerds"], - ["carve", "carves"], ["rave", "raves"], ["scarf", "scarves"], ["sale", "sales"], ["sail", "sails"], - ["swerve", "swerves"], ["love", "loves"], ["dove", "doves"], ["glove", "gloves"], ["wharf", "wharves"], - ["valve", "valves"], ["werewolf", "werewolves"], ["view", "views"], ["emu", "emus"], ["menu", "menus"], - ["wax", "waxes"], ["fax", "faxes"], ["nut", "nuts"], ["crust", "crusts"], ["lemma", "lemmata"], - ["anathema", "anathemata"], ["analysis", "analyses"], ["locus", "loci"], ["uterus", "uteri"], - ["curriculum", "curricula"], ["quorum", "quora"], ["genie", "genies"], ["genius", "geniuses"], - ["flower", "flowers"], ["crash", "crashes"], ["soul", "souls"], ["career", "careers"], - ["planet", "planets"], ["son", "sons"], ["sun", "suns"], ["drink", "drinks"], ["diploma", "diplomas"], - ["dilemma", "dilemmas"], ["grandma", "grandmas"], ["no", "nos"], ["yes", "yeses"], ["employ", "employs"], - ["employee", "employees"], ["history", "histories"], ["story", "stories"], ["purchase", "purchases"], - ["order", "orders"], ["key", "keys"], ["bomb", "bombs"], ["city", "cities"], ["sanity", "sanities"], - ["ability", "abilities"], ["activity", "activities"], ["cutie", "cuties"], ["validation", "validations"], - ["floaty", "floaties"], ["nicety", "niceties"], ["goalie", "goalies"], ["crawly", "crawlies"], - ["duty", "duties"], ["scrutiny", "scrutinies"], ["deputy", "deputies"], ["beauty", "beauties"], - ["bank", "banks"], ["family", "families"], ["tally", "tallies"], ["ally", "allies"], ["alley", "alleys"], - ["valley", "valleys"], ["medley", "medleys"], ["melody", "melodies"], ["trolly", "trollies"], - ["thunk", "thunks"], ["koala", "koalas"], ["special", "specials"], ["book", "books"], ["knob", "knobs"], - ["crab", "crabs"], ["plough", "ploughs"], ["high", "highs"], ["low", "lows"], ["hiccup", "hiccups"], - ["bonus", "bonuses"], ["circus", "circuses"], ["abacus", "abacuses"], ["phobia", "phobias"], - ["case", "cases"], ["lace", "laces"], ["trace", "traces"], ["mage", "mages"], ["lotus", "lotuses"], - ["motorbus", "motorbuses"], ["cutlas", "cutlases"], ["tequila", "tequilas"], ["liar", "liars"], - ["delta", "deltas"], ["visa", "visas"], ["flea", "fleas"], ["favela", "favelas"], ["cobra", "cobras"], - ["finish", "finishes"], ["gorilla", "gorillas"], ["mass", "masses"], ["face", "faces"], - ["rabbit", "rabbits"], ["adventure", "adventures"], ["breeze", "breezes"], ["brew", "brews"], - ["canopy", "canopies"], ["copy", "copies"], ["spy", "spies"], ["cave", "caves"], ["charge", "charges"], - ["cinema", "cinemas"], ["coffee", "coffees"], ["favourite", "favourites"], ["themself", "themselves"], - ["country", "countries"], ["issue", "issues"], ["authority", "authorities"], ["force", "forces"], - ["objective", "objectives"], ["present", "presents"], ["industry", "industries"], ["believe", "believes"], - ["century", "centuries"], ["category", "categories"], ["eve", "eves"], ["fee", "fees"], ["gene", "genes"], - ["try", "tries"], ["currency", "currencies"], ["pose", "poses"], ["cheese", "cheeses"], ["clue", "clues"], - ["cheer", "cheers"], ["litre", "litres"], ["money", "monies"], ["attorney", "attorneys"], - ["balcony", "balconies"], ["cockney", "cockneys"], ["donkey", "donkeys"], ["honey", "honeys"], - ["smiley", "smilies"], ["survey", "surveys"], ["whiskey", "whiskies"], ["volley", "volleys"], - ["tongue", "tongues"], ["suit", "suits"], ["suite", "suites"], ["cruise", "cruises"], ["eave", "eaves"], - ["consultancy", "consultancies"], ["pouch", "pouches"], ["wallaby", "wallabies"], ["abyss", "abysses"], - ["weekly", "weeklies"], ["whistle", "whistles"], ["utilise", "utilises"], ["utilize", "utilizes"], - ["mercy", "mercies"], ["mercenary", "mercenaries"], ["take", "takes"], ["flush", "flushes"], - ["gate", "gates"], ["evolve", "evolves"], ["slave", "slaves"], ["native", "natives"], - ["revolve", "revolves"], ["twelve", "twelves"], ["sleeve", "sleeves"], ["subjective", "subjectives"], - ["stream", "streams"], ["beam", "beams"], ["foam", "foams"], ["callus", "calluses"], ["use", "uses"], - ["beau", "beaus"], ["gateau", "gateaus"], ["fetus", "fetuses"], ["luau", "luaus"], ["pilau", "pilaus"], - ["shoe", "shoes"], ["sandshoe", "sandshoes"], ["zeus", "zeuses"], ["nucleus", "nuclei"], ["sky", "skies"], - ["beach", "beaches"], ["brush", "brushes"], ["hoax", "hoaxes"], ["scratch", "scratches"], - ["nanny", "nannies"], ["negro", "negroes"], ["taco", "tacos"], ["cafe", "cafes"], ["cave", "caves"], - ["giraffe", "giraffes"], ["goodwife", "goodwives"], ["housewife", "housewives"], ["safe", "safes"], - ["save", "saves"], ["pocketknife", "pocketknives"], ["tartufe", "tartufes"], ["tartuffe", "tartuffes"], - ["truffle", "truffles"], ["jefe", "jefes"], ["agrafe", "agrafes"], ["agraffe", "agraffes"], - ["bouffe", "bouffes"], ["carafe", "carafes"], ["chafe", "chafes"], ["pouffe", "pouffes"], - ["pouf", "poufs"], ["piaffe", "piaffes"], ["gaffe", "gaffes"], ["executive", "executives"], - ["cove", "coves"], ["dove", "doves"], ["fave", "faves"], ["positive", "positives"], ["solve", "solves"], - ["trove", "troves"], ["treasure", "treasures"], ["suave", "suaves"], ["bluff", "bluffs"], - ["half", "halves"], ["knockoff", "knockoffs"], ["handkerchief", "handkerchiefs"], ["reed", "reeds"], - ["reef", "reefs"], ["yourself", "yourselves"], ["sunroof", "sunroofs"], ["plateau", "plateaus"], - ["radius", "radii"], ["stratum", "strata"], ["stratus", "strati"], ["focus", "foci"], ["fungus", "fungi"], - ["appendix", "appendices"], ["seraph", "seraphim"], ["cherub", "cherubim"], ["memo", "memos"], - ["cello", "cellos"], ["automaton", "automata"], ["button", "buttons"], ["crayon", "crayons"], - ["captive", "captives"], ["abrasive", "abrasives"], ["archive", "archives"], ["additive", "additives"], - ["hive", "hives"], ["beehive", "beehives"], ["olive", "olives"], ["black olive", "black olives"], - ["chive", "chives"], ["adjective", "adjectives"], ["cattle drive", "cattle drives"], - ["explosive", "explosives"], ["executive", "executives"], ["negative", "negatives"], - ["fugitive", "fugitives"], ["progressive", "progressives"], ["laxative", "laxatives"], - ["incentive", "incentives"], ["relative", "relatives"], ["positive", "positives"], - ["perspective", "perspectives"], ["superlative", "superlatives"], ["afterlife", "afterlives"], - ["native", "natives"], ["detective", "detectives"], ["collective", "collectives"], - ["lowlife", "lowlives"], ["low-life", "low-lives"], ["strife", "strifes"], ["pony", "ponies"], - ["phony", "phonies"], ["felony", "felonies"], ["colony", "colonies"], ["symphony", "symphonies"], - ["semicolony", "semicolonies"], ["radiotelephony", "radiotelephonies"], ["company", "companies"], - ["ceremony", "ceremonies"], ["carnivore", "carnivores"], ["emphasis", "emphases"], ["abuse", "abuses"], - ["ass", "asses"], ["mile", "miles"], ["consensus", "consensuses"], ["coatdress", "coatdresses"], - ["courthouse", "courthouses"], ["playhouse", "playhouses"], ["crispness", "crispnesses"], - ["racehorse", "racehorses"], ["greatness", "greatnesses"], ["christmas", "christmases"], - ["zymase", "zymases"], ["accomplice", "accomplices"], ["amice", "amices"], ["titmouse", "titmice"], + ["pickaxe", "pickaxes"], + ["crisis", "crises"], + ["criterion", "criteria"], + ["phenomenon", "phenomena"], + ["addendum", "addenda"], + ["datum", "data"], + ["forum", "forums"], + ["millennium", "millennia"], + ["alumnus", "alumni"], + ["medium", "mediums"], + ["census", "censuses"], + ["genus", "genera"], + ["dogma", "dogmata"], + ["life", "lives"], + ["hive", "hives"], + ["kiss", "kisses"], + ["dish", "dishes"], + ["human", "humans"], + ["knife", "knives"], + ["phase", "phases"], + ["judge", "judges"], + ["class", "classes"], + ["witch", "witches"], + ["church", "churches"], + ["massage", "massages"], + ["prospectus", "prospectuses"], + ["syllabus", "syllabi"], + ["viscus", "viscera"], + ["cactus", "cacti"], + ["hippopotamus", "hippopotamuses"], + ["octopus", "octopi"], + ["platypus", "platypuses"], + ["kangaroo", "kangaroos"], + ["atlas", "atlases"], + ["stigma", "stigmata"], + ["schema", "schemata"], + ["phenomenon", "phenomena"], + ["diagnosis", "diagnoses"], + ["mongoose", "mongooses"], + ["mouse", "mice"], + ["liturgist", "liturgists"], + ["box", "boxes"], + ["gas", "gases"], + ["self", "selves"], + ["chief", "chiefs"], + ["quiz", "quizzes"], + ["child", "children"], + ["shelf", "shelves"], + ["fizz", "fizzes"], + ["tooth", "teeth"], + ["thief", "thieves"], + ["day", "days"], + ["loaf", "loaves"], + ["fix", "fixes"], + ["spy", "spies"], + ["vertebra", "vertebrae"], + ["clock", "clocks"], + ["lap", "laps"], + ["cuff", "cuffs"], + ["leaf", "leaves"], + ["calf", "calves"], + ["moth", "moths"], + ["mouth", "mouths"], + ["house", "houses"], + ["proof", "proofs"], + ["hoof", "hooves"], + ["elf", "elves"], + ["turf", "turfs"], + ["craft", "crafts"], + ["die", "dice"], + ["penny", "pennies"], + ["campus", "campuses"], + ["virus", "viri"], + ["iris", "irises"], + ["bureau", "bureaus"], + ["kiwi", "kiwis"], + ["wiki", "wikis"], + ["igloo", "igloos"], + ["ninja", "ninjas"], + ["pizza", "pizzas"], + ["kayak", "kayaks"], + ["canoe", "canoes"], + ["tiding", "tidings"], + ["pea", "peas"], + ["drive", "drives"], + ["nose", "noses"], + ["movie", "movies"], + ["status", "statuses"], + ["alias", "aliases"], + ["memorandum", "memorandums"], + ["language", "languages"], + ["plural", "plurals"], + ["word", "words"], + ["multiple", "multiples"], + ["reward", "rewards"], + ["sandwich", "sandwiches"], + ["subway", "subways"], + ["direction", "directions"], + ["land", "lands"], + ["row", "rows"], + ["grow", "grows"], + ["flow", "flows"], + ["rose", "roses"], + ["raise", "raises"], + ["friend", "friends"], + ["follower", "followers"], + ["male", "males"], + ["nail", "nails"], + ["sex", "sexes"], + ["tape", "tapes"], + ["ruler", "rulers"], + ["king", "kings"], + ["queen", "queens"], + ["zero", "zeros"], + ["quest", "quests"], + ["goose", "geese"], + ["foot", "feet"], + ["ex", "exes"], + ["reflex", "reflexes"], + ["heat", "heats"], + ["train", "trains"], + ["test", "tests"], + ["pie", "pies"], + ["fly", "flies"], + ["eye", "eyes"], + ["lie", "lies"], + ["node", "nodes"], + ["trade", "trades"], + ["chinese", "chinese"], + ["please", "pleases"], + ["japanese", "japanese"], + ["regex", "regexes"], + ["license", "licenses"], + ["zebra", "zebras"], + ["general", "generals"], + ["corps", "corps"], + ["pliers", "pliers"], + ["flyer", "flyers"], + ["scissors", "scissors"], + ["fireman", "firemen"], + ["chirp", "chirps"], + ["harp", "harps"], + ["corpse", "corpses"], + ["dye", "dyes"], + ["move", "moves"], + ["zombie", "zombies"], + ["variety", "varieties"], + ["talkie", "talkies"], + ["walkie-talkie", "walkie-talkies"], + ["groupie", "groupies"], + ["goonie", "goonies"], + ["lassie", "lassies"], + ["genie", "genies"], + ["foodie", "foodies"], + ["faerie", "faeries"], + ["collie", "collies"], + ["obloquy", "obloquies"], + ["looey", "looies"], + ["osprey", "ospreys"], + ["cover", "covers"], + ["tie", "ties"], + ["groove", "grooves"], + ["bee", "bees"], + ["ave", "aves"], + ["wave", "waves"], + ["wolf", "wolves"], + ["airwave", "airwaves"], + ["archive", "archives"], + ["arch", "arches"], + ["dive", "dives"], + ["aftershave", "aftershaves"], + ["cave", "caves"], + ["grave", "graves"], + ["gift", "gifts"], + ["nerve", "nerves"], + ["nerd", "nerds"], + ["carve", "carves"], + ["rave", "raves"], + ["scarf", "scarves"], + ["sale", "sales"], + ["sail", "sails"], + ["swerve", "swerves"], + ["love", "loves"], + ["dove", "doves"], + ["glove", "gloves"], + ["wharf", "wharves"], + ["valve", "valves"], + ["werewolf", "werewolves"], + ["view", "views"], + ["emu", "emus"], + ["menu", "menus"], + ["wax", "waxes"], + ["fax", "faxes"], + ["nut", "nuts"], + ["crust", "crusts"], + ["lemma", "lemmata"], + ["anathema", "anathemata"], + ["analysis", "analyses"], + ["locus", "loci"], + ["uterus", "uteri"], + ["curriculum", "curricula"], + ["quorum", "quora"], + ["genie", "genies"], + ["genius", "geniuses"], + ["flower", "flowers"], + ["crash", "crashes"], + ["soul", "souls"], + ["career", "careers"], + ["planet", "planets"], + ["son", "sons"], + ["sun", "suns"], + ["drink", "drinks"], + ["diploma", "diplomas"], + ["dilemma", "dilemmas"], + ["grandma", "grandmas"], + ["no", "nos"], + ["yes", "yeses"], + ["employ", "employs"], + ["employee", "employees"], + ["history", "histories"], + ["story", "stories"], + ["purchase", "purchases"], + ["order", "orders"], + ["key", "keys"], + ["bomb", "bombs"], + ["city", "cities"], + ["sanity", "sanities"], + ["ability", "abilities"], + ["activity", "activities"], + ["cutie", "cuties"], + ["validation", "validations"], + ["floaty", "floaties"], + ["nicety", "niceties"], + ["goalie", "goalies"], + ["crawly", "crawlies"], + ["duty", "duties"], + ["scrutiny", "scrutinies"], + ["deputy", "deputies"], + ["beauty", "beauties"], + ["bank", "banks"], + ["family", "families"], + ["tally", "tallies"], + ["ally", "allies"], + ["alley", "alleys"], + ["valley", "valleys"], + ["medley", "medleys"], + ["melody", "melodies"], + ["trolly", "trollies"], + ["thunk", "thunks"], + ["koala", "koalas"], + ["special", "specials"], + ["book", "books"], + ["knob", "knobs"], + ["crab", "crabs"], + ["plough", "ploughs"], + ["high", "highs"], + ["low", "lows"], + ["hiccup", "hiccups"], + ["bonus", "bonuses"], + ["circus", "circuses"], + ["abacus", "abacuses"], + ["phobia", "phobias"], + ["case", "cases"], + ["lace", "laces"], + ["trace", "traces"], + ["mage", "mages"], + ["lotus", "lotuses"], + ["motorbus", "motorbuses"], + ["cutlas", "cutlases"], + ["tequila", "tequilas"], + ["liar", "liars"], + ["delta", "deltas"], + ["visa", "visas"], + ["flea", "fleas"], + ["favela", "favelas"], + ["cobra", "cobras"], + ["finish", "finishes"], + ["gorilla", "gorillas"], + ["mass", "masses"], + ["face", "faces"], + ["rabbit", "rabbits"], + ["adventure", "adventures"], + ["breeze", "breezes"], + ["brew", "brews"], + ["canopy", "canopies"], + ["copy", "copies"], + ["spy", "spies"], + ["cave", "caves"], + ["charge", "charges"], + ["cinema", "cinemas"], + ["coffee", "coffees"], + ["favourite", "favourites"], + ["themself", "themselves"], + ["country", "countries"], + ["issue", "issues"], + ["authority", "authorities"], + ["force", "forces"], + ["objective", "objectives"], + ["present", "presents"], + ["industry", "industries"], + ["believe", "believes"], + ["century", "centuries"], + ["category", "categories"], + ["eve", "eves"], + ["fee", "fees"], + ["gene", "genes"], + ["try", "tries"], + ["currency", "currencies"], + ["pose", "poses"], + ["cheese", "cheeses"], + ["clue", "clues"], + ["cheer", "cheers"], + ["litre", "litres"], + ["money", "monies"], + ["attorney", "attorneys"], + ["balcony", "balconies"], + ["cockney", "cockneys"], + ["donkey", "donkeys"], + ["honey", "honeys"], + ["smiley", "smilies"], + ["survey", "surveys"], + ["whiskey", "whiskies"], + ["volley", "volleys"], + ["tongue", "tongues"], + ["suit", "suits"], + ["suite", "suites"], + ["cruise", "cruises"], + ["eave", "eaves"], + ["consultancy", "consultancies"], + ["pouch", "pouches"], + ["wallaby", "wallabies"], + ["abyss", "abysses"], + ["weekly", "weeklies"], + ["whistle", "whistles"], + ["utilise", "utilises"], + ["utilize", "utilizes"], + ["mercy", "mercies"], + ["mercenary", "mercenaries"], + ["take", "takes"], + ["flush", "flushes"], + ["gate", "gates"], + ["evolve", "evolves"], + ["slave", "slaves"], + ["native", "natives"], + ["revolve", "revolves"], + ["twelve", "twelves"], + ["sleeve", "sleeves"], + ["subjective", "subjectives"], + ["stream", "streams"], + ["beam", "beams"], + ["foam", "foams"], + ["callus", "calluses"], + ["use", "uses"], + ["beau", "beaus"], + ["gateau", "gateaus"], + ["fetus", "fetuses"], + ["luau", "luaus"], + ["pilau", "pilaus"], + ["shoe", "shoes"], + ["sandshoe", "sandshoes"], + ["zeus", "zeuses"], + ["nucleus", "nuclei"], + ["sky", "skies"], + ["beach", "beaches"], + ["brush", "brushes"], + ["hoax", "hoaxes"], + ["scratch", "scratches"], + ["nanny", "nannies"], + ["negro", "negroes"], + ["taco", "tacos"], + ["cafe", "cafes"], + ["cave", "caves"], + ["giraffe", "giraffes"], + ["goodwife", "goodwives"], + ["housewife", "housewives"], + ["safe", "safes"], + ["save", "saves"], + ["pocketknife", "pocketknives"], + ["tartufe", "tartufes"], + ["tartuffe", "tartuffes"], + ["truffle", "truffles"], + ["jefe", "jefes"], + ["agrafe", "agrafes"], + ["agraffe", "agraffes"], + ["bouffe", "bouffes"], + ["carafe", "carafes"], + ["chafe", "chafes"], + ["pouffe", "pouffes"], + ["pouf", "poufs"], + ["piaffe", "piaffes"], + ["gaffe", "gaffes"], + ["executive", "executives"], + ["cove", "coves"], + ["dove", "doves"], + ["fave", "faves"], + ["positive", "positives"], + ["solve", "solves"], + ["trove", "troves"], + ["treasure", "treasures"], + ["suave", "suaves"], + ["bluff", "bluffs"], + ["half", "halves"], + ["knockoff", "knockoffs"], + ["handkerchief", "handkerchiefs"], + ["reed", "reeds"], + ["reef", "reefs"], + ["yourself", "yourselves"], + ["sunroof", "sunroofs"], + ["plateau", "plateaus"], + ["radius", "radii"], + ["stratum", "strata"], + ["stratus", "strati"], + ["focus", "foci"], + ["fungus", "fungi"], + ["appendix", "appendices"], + ["seraph", "seraphim"], + ["cherub", "cherubim"], + ["memo", "memos"], + ["cello", "cellos"], + ["automaton", "automata"], + ["button", "buttons"], + ["crayon", "crayons"], + ["captive", "captives"], + ["abrasive", "abrasives"], + ["archive", "archives"], + ["additive", "additives"], + ["hive", "hives"], + ["beehive", "beehives"], + ["olive", "olives"], + ["black olive", "black olives"], + ["chive", "chives"], + ["adjective", "adjectives"], + ["cattle drive", "cattle drives"], + ["explosive", "explosives"], + ["executive", "executives"], + ["negative", "negatives"], + ["fugitive", "fugitives"], + ["progressive", "progressives"], + ["laxative", "laxatives"], + ["incentive", "incentives"], + ["relative", "relatives"], + ["positive", "positives"], + ["perspective", "perspectives"], + ["superlative", "superlatives"], + ["afterlife", "afterlives"], + ["native", "natives"], + ["detective", "detectives"], + ["collective", "collectives"], + ["lowlife", "lowlives"], + ["low-life", "low-lives"], + ["strife", "strifes"], + ["pony", "ponies"], + ["phony", "phonies"], + ["felony", "felonies"], + ["colony", "colonies"], + ["symphony", "symphonies"], + ["semicolony", "semicolonies"], + ["radiotelephony", "radiotelephonies"], + ["company", "companies"], + ["ceremony", "ceremonies"], + ["carnivore", "carnivores"], + ["emphasis", "emphases"], + ["abuse", "abuses"], + ["ass", "asses"], + ["mile", "miles"], + ["consensus", "consensuses"], + ["coatdress", "coatdresses"], + ["courthouse", "courthouses"], + ["playhouse", "playhouses"], + ["crispness", "crispnesses"], + ["racehorse", "racehorses"], + ["greatness", "greatnesses"], + ["christmas", "christmases"], + ["zymase", "zymases"], + ["accomplice", "accomplices"], + ["amice", "amices"], + ["titmouse", "titmice"], ["slice", "slices"], // Prototype inheritance. ["constructor", "constructors"], // Non-standard case. - ["randomWord", "randomWords"], ["camelCase", "camelCases"], ["PascalCase", "PascalCases"], - ["Alumnus", "Alumni"], ["CHICKEN", "CHICKENS"], ["日本語", "日本語"], ["한국", "한국"], - ["中文", "中文"], ["اللغة العربية", "اللغة العربية"], ["四 chicken", "四 chickens"], + ["randomWord", "randomWords"], + ["camelCase", "camelCases"], + ["PascalCase", "PascalCases"], + ["Alumnus", "Alumni"], + ["CHICKEN", "CHICKENS"], + ["日本語", "日本語"], + ["한국", "한국"], + ["中文", "中文"], + ["اللغة العربية", "اللغة العربية"], + ["四 chicken", "四 chickens"], ]; /** @@ -167,8 +618,13 @@ const BASIC_TESTS = [ * @type {Array} */ const SINGULAR_TESTS = [ - ["dingo", "dingos"], ["mango", "mangoes"], ["echo", "echos"], ["ghetto", "ghettoes"], - ["nucleus", "nucleuses"], ["bureau", "bureaux"], ["seraph", "seraphs"], + ["dingo", "dingos"], + ["mango", "mangoes"], + ["echo", "echos"], + ["ghetto", "ghettoes"], + ["nucleus", "nucleuses"], + ["bureau", "bureaux"], + ["seraph", "seraphs"], ]; /** @@ -178,14 +634,17 @@ const SINGULAR_TESTS = [ * @type {Array} */ const PLURAL_TESTS = [ - ["whisky", "whiskies"], ["plateaux", "plateaux"], ["axis", "axes"], ["automatum", "automata"], + ["whisky", "whiskies"], + ["plateaux", "plateaux"], + ["axis", "axes"], + ["automatum", "automata"], ["thou", "you"], ]; describe("String.prototype.pluralize", () => { describe("pluralize()", () => { - BASIC_TESTS.concat(PLURAL_TESTS).forEach((test) => { - it(test[0] + " -> " + test[1], () => { + BASIC_TESTS.concat(PLURAL_TESTS).forEach(test => { + it(`${test[0]} -> ${test[1]}`, () => { expect(test[0].pluralize()).toEqual(test[1]); }); }); @@ -193,32 +652,34 @@ describe("String.prototype.pluralize", () => { describe("automatically convert", () => { describe("pluralize(5)", () => { - BASIC_TESTS.concat(PLURAL_TESTS).forEach((test) => { + BASIC_TESTS.concat(PLURAL_TESTS).forEach(test => { // Make sure the word stays pluralized. - it("5 " + test[1] + " -> " + test[1], () => { + it(`5 ${test[1]} -> ${test[1]}`, () => { expect(test[1].pluralize(5)).toEqual(test[1]); }); // Make sure the word becomes a plural. - if (test[0] !== test[1]) - it("5 " + test[0] + " -> " + test[1], () => { + if (test[0] !== test[1]) { + it(`5 ${test[0]} -> ${test[1]}`, () => { expect(test[0].pluralize(5)).toEqual(test[1]); }); + } }); }); describe("pluralize(1)", () => { - BASIC_TESTS.concat(SINGULAR_TESTS).forEach((test) => { + BASIC_TESTS.concat(SINGULAR_TESTS).forEach(test => { // Make sure the word stays singular. - it("1 " + test[0] + " -> " + test[0], () => { + it(`1 ${test[0]} -> ${test[0]}`, () => { expect(test[0].pluralize(1)).toEqual(test[0]); }); // Make sure the word becomes singular. - if (test[0] !== test[1]) - it("1 " + test[1] + " -> " + test[0], () => { + if (test[0] !== test[1]) { + it(`1 ${test[1]} -> ${test[0]}`, () => { expect(test[1].pluralize(1)).toEqual(test[0]); }); + } }); }); }); diff --git a/src/string/reduce/index.ts b/src/string/reduce/index.ts index 0c350a53..40dac4d7 100644 --- a/src/string/reduce/index.ts +++ b/src/string/reduce/index.ts @@ -1,9 +1,12 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { - reduce(fn: (prev: T, char: string, index: number, chars: string[]) => T, initialValue?: T): any; + reduce( + fn: (prev: T, char: string, index: number, chars: string[]) => T, + initialValue?: T, + ): any; } } diff --git a/src/string/reduce/method.ts b/src/string/reduce/method.ts index 38f0e6e8..c788c00b 100644 --- a/src/string/reduce/method.ts +++ b/src/string/reduce/method.ts @@ -1,7 +1,7 @@ const method = ( str: string, fn: (prev: any, char: string, index: number, chars: string[]) => any, - initialValue: any = undefined + initialValue: any = undefined, ) => str.split("").reduce(fn, initialValue); export = method; diff --git a/src/string/reduce/test.ts b/src/string/reduce/test.ts index d396894c..ede8fca2 100644 --- a/src/string/reduce/test.ts +++ b/src/string/reduce/test.ts @@ -1,11 +1,11 @@ -import "./index"; +import "."; describe("String.prototype.reduce", () => { test("'123'.reduce((prev, char) => prev + (+char), 0) returns 6", () => { - expect("123".reduce((prev, char) => prev + (+char), 0)).toBe(6); + expect("123".reduce((prev, char) => prev + +char, 0)).toBe(6); }); test("'123'.reduce((prev = 0, char) => prev + (+char)) returns 6", () => { - expect("123".reduce((prev = 0, char) => prev + (+char))).toBe(6); + expect("123".reduce((prev = 0, char) => prev + +char)).toBe(6); }); }); diff --git a/src/string/repeat/index.ts b/src/string/repeat/index.ts index e7ca9ba6..2b750298 100644 --- a/src/string/repeat/index.ts +++ b/src/string/repeat/index.ts @@ -1,4 +1,4 @@ -import * as method from "./method"; +import method from "./method"; declare global { interface StringConstructor { diff --git a/src/string/repeat/method.ts b/src/string/repeat/method.ts index 570bd94b..9e12bb08 100644 --- a/src/string/repeat/method.ts +++ b/src/string/repeat/method.ts @@ -1,3 +1,6 @@ -const method = (n: number, value = " "): string => Array(n).fill(value).join(""); +const method = (n: number, value = " "): string => + Array(n) + .fill(value) + .join(""); export = method; diff --git a/src/string/repeat/test.ts b/src/string/repeat/test.ts index 74057239..e3157719 100644 --- a/src/string/repeat/test.ts +++ b/src/string/repeat/test.ts @@ -1,11 +1,11 @@ -import "./index"; +import "."; describe("String.repeat", () => { - test("String.repeat(5, \"2\") returns \"22222\"", () => { + test('String.repeat(5, "2") returns "22222"', () => { expect(String.repeat(5, "2")).toEqual("22222"); }); - test("String.repeat(2) returns \" \"", () => { + test('String.repeat(2) returns " "', () => { expect(String.repeat(2)).toEqual(" "); }); }); diff --git a/src/string/reverse/index.ts b/src/string/reverse/index.ts index 9a00c71f..d836c6e5 100644 --- a/src/string/reverse/index.ts +++ b/src/string/reverse/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/reverse/test.ts b/src/string/reverse/test.ts index d6f82cfa..f27a106c 100644 --- a/src/string/reverse/test.ts +++ b/src/string/reverse/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("String.prototype.reverse", () => { - test("\"foobar\".reverse() returns \"raboof\"", () => { - expect("foobar".reverse()) - .toBe("raboof"); + test('"foobar".reverse() returns "raboof"', () => { + expect("foobar".reverse()).toBe("raboof"); }); }); diff --git a/src/string/snakeCase/index.ts b/src/string/snakeCase/index.ts index dae26d77..5ef9eaea 100644 --- a/src/string/snakeCase/index.ts +++ b/src/string/snakeCase/index.ts @@ -1,5 +1,6 @@ -import * as method from "./method"; +// tslint:disable: max-line-length import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/snakeCase/method.ts b/src/string/snakeCase/method.ts index 0ef626f1..691dc536 100644 --- a/src/string/snakeCase/method.ts +++ b/src/string/snakeCase/method.ts @@ -1,5 +1,10 @@ -const method = (str: string): string => ( - str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+|[A-Z]|[0-9]+/g) || [""] -).map((x) => x.toLowerCase()).join("_"); +const method = (str: string): string => + ( + str.match( + /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+|[A-Z]|[0-9]+/g, + ) || [""] + ) + .map(x => x.toLowerCase()) + .join("_"); export = method; diff --git a/src/string/snakeCase/test.ts b/src/string/snakeCase/test.ts index f7725dd9..b763c36b 100644 --- a/src/string/snakeCase/test.ts +++ b/src/string/snakeCase/test.ts @@ -1,44 +1,43 @@ -import "./index"; +import "."; describe("String.prototype.snakeCase", () => { - test("\"camelCase\".snakeCase() returns \"camel_case\"", () => { - expect("camelCase".snakeCase()) - .toBe("camel_case"); + test('"camelCase".snakeCase() returns "camel_case"', () => { + expect("camelCase".snakeCase()).toBe("camel_case"); }); - test("\"some text\".snakeCase() returns \"some_text\"", () => { - expect("some text".snakeCase()) - .toBe("some_text"); + test('"some text".snakeCase() returns "some_text"', () => { + expect("some text".snakeCase()).toBe("some_text"); }); test( - "\"some-mixed_string With spaces_underscores-and-hyphens\".snakeCase() returns " + - "\"some_mixed_string_with_spaces_underscores_and_hyphens\"", + '"some-mixed_string With spaces_underscores-and-hyphens".snakeCase() returns ' + + '"some_mixed_string_with_spaces_underscores_and_hyphens"', () => { - expect("some-mixed_string With spaces_underscores-and-hyphens".snakeCase()) - .toBe("some_mixed_string_with_spaces_underscores_and_hyphens"); - }); + expect( + "some-mixed_string With spaces_underscores-and-hyphens".snakeCase(), + ).toBe("some_mixed_string_with_spaces_underscores_and_hyphens"); + }, + ); - test("\"AllThe-small Things\".snakeCase() returns \"all_the_small_things\"", () => { - expect("AllThe-small Things".snakeCase()) - .toBe("all_the_small_things"); + test('"AllThe-small Things".snakeCase() returns "all_the_small_things"', () => { + expect("AllThe-small Things".snakeCase()).toBe("all_the_small_things"); }); - test( - "\"IAmListeningToFMWhileLoadingDifferentURLOnMyBrowserAndAlsoEditingSomeXMLAndHTML\".snakeCase() returns " + - "\"i_am_listening_to_fm_while_loading_different_url_on_my_browser_and_also_editing_some_xml_and_html\"", - () => { - expect("IAmListeningToFMWhileLoadingDifferentURLOnMyBrowserAndAlsoEditingSomeXMLAndHTML".snakeCase()) - .toBe("i_am_listening_to_fm_while_loading_different_url_on_my_browser_and_also_editing_some_xml_and_html"); - }); + test(// tslint:disable-next-line: max-line-length + '"IAmListeningToFMWhileLoadingDifferentURLOnMyBrowserAndAlsoEditingSomeXMLAndHTML".snakeCase() returns "i_am_listening_to_fm_while_loading_different_url_on_my_browser_and_also_editing_some_xml_and_html"', () => { + expect( + "IAmListeningToFMWhileLoadingDifferentURLOnMyBrowserAndAlsoEditingSomeXMLAndHTML".snakeCase(), + ).toBe( + // tslint:disable-next-line: max-line-length + "i_am_listening_to_fm_while_loading_different_url_on_my_browser_and_also_editing_some_xml_and_html", + ); + }); - test("\"foo-Bar22\".snakeCase() returns \"foo_bar_22\"", () => { - expect("foo-Bar22".snakeCase()) - .toBe("foo_bar_22"); + test('"foo-Bar22".snakeCase() returns "foo_bar_22"', () => { + expect("foo-Bar22".snakeCase()).toBe("foo_bar_22"); }); - test("\"\".snakeCase() returns \"\"", () => { - expect("".snakeCase()) - .toBe(""); + test('"".snakeCase() returns ""', () => { + expect("".snakeCase()).toBe(""); }); }); diff --git a/src/string/swapCase/index.ts b/src/string/swapCase/index.ts index 511d37ea..d8562239 100644 --- a/src/string/swapCase/index.ts +++ b/src/string/swapCase/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/swapCase/method.ts b/src/string/swapCase/method.ts index f16d609c..eaa47fef 100644 --- a/src/string/swapCase/method.ts +++ b/src/string/swapCase/method.ts @@ -1,3 +1,6 @@ -const method = (str: string) => str.replace(/\S/g, (c) => c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase()); +const method = (str: string) => + str.replace(/\S/g, c => + c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase(), + ); export = method; diff --git a/src/string/swapCase/test.ts b/src/string/swapCase/test.ts index c9e85aa2..4e4486dd 100644 --- a/src/string/swapCase/test.ts +++ b/src/string/swapCase/test.ts @@ -1,8 +1,7 @@ -import "./index"; +import "."; describe("String.prototype.swapCase", () => { - test("\"Hello\".swapCase() returns \"hELLO\"", () => { - expect("Hello".swapCase()) - .toBe("hELLO"); + test('"Hello".swapCase() returns "hELLO"', () => { + expect("Hello".swapCase()).toBe("hELLO"); }); }); diff --git a/src/string/truncate/index.ts b/src/string/truncate/index.ts index c6629d57..007037d5 100644 --- a/src/string/truncate/index.ts +++ b/src/string/truncate/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/truncate/method.ts b/src/string/truncate/method.ts index 4367d67e..67cecdf5 100644 --- a/src/string/truncate/method.ts +++ b/src/string/truncate/method.ts @@ -1,7 +1,9 @@ const method = (str: string, num: number, truncateString = "..."): string => { const length = truncateString.length; - return str.length > num ? str.slice(0, num > length ? num - length : num) + truncateString : str; + return str.length > num + ? str.slice(0, num > length ? num - length : num) + truncateString + : str; }; export = method; diff --git a/src/string/truncate/test.ts b/src/string/truncate/test.ts index 47df515e..2cf76349 100644 --- a/src/string/truncate/test.ts +++ b/src/string/truncate/test.ts @@ -1,23 +1,19 @@ -import "./index"; +import "."; describe("String.prototype.truncate", () => { - test("\"boomerang\".truncate(7) returns \"boom...\"", () => { - expect("boomerang".truncate(7)) - .toBe("boom..."); + test('"boomerang".truncate(7) returns "boom..."', () => { + expect("boomerang".truncate(7)).toBe("boom..."); }); - test("\"boomerang\".truncate(7, \"....\") returns \"boo....\"", () => { - expect("boomerang".truncate(7, "....")) - .toBe("boo...."); + test('"boomerang".truncate(7, "....") returns "boo...."', () => { + expect("boomerang".truncate(7, "....")).toBe("boo...."); }); - test("\"boomerang\".truncate(10) returns \"boomerang\"", () => { - expect("boomerang".truncate(10)) - .toBe("boomerang"); + test('"boomerang".truncate(10) returns "boomerang"', () => { + expect("boomerang".truncate(10)).toBe("boomerang"); }); - test("\"boomerang\".truncate(2) returns \"bo...\"", () => { - expect("boomerang".truncate(2)) - .toBe("bo..."); + test('"boomerang".truncate(2) returns "bo..."', () => { + expect("boomerang".truncate(2)).toBe("bo..."); }); }); diff --git a/src/string/words/index.ts b/src/string/words/index.ts index 516f9c21..e62787e7 100644 --- a/src/string/words/index.ts +++ b/src/string/words/index.ts @@ -1,5 +1,5 @@ -import * as method from "./method"; import { addPrototype } from "../../utils"; +import method from "./method"; declare global { interface String { diff --git a/src/string/words/method.ts b/src/string/words/method.ts index d753c6f8..6b30cb63 100644 --- a/src/string/words/method.ts +++ b/src/string/words/method.ts @@ -1,3 +1,4 @@ -const method = (str: string, pattern = /[^a-zA-Z-]+/): string[] => str.split(pattern).filter(Boolean); +const method = (str: string, pattern = /[^a-zA-Z-]+/): string[] => + str.split(pattern).filter(Boolean); export = method; diff --git a/src/string/words/test.ts b/src/string/words/test.ts index 4cd5f9fb..11c3c92a 100644 --- a/src/string/words/test.ts +++ b/src/string/words/test.ts @@ -1,13 +1,15 @@ -import "./index"; +import "."; describe("String.prototype.words", () => { - test("\"I love javaScript!!\".words() returns [\"I\", \"love\", \"javaScript\"]", () => { - expect("I love javaScript!!".words()) - .toEqual(["I", "love", "javaScript"]); + test('"I love javaScript!!".words() returns ["I", "love", "javaScript"]', () => { + expect("I love javaScript!!".words()).toEqual(["I", "love", "javaScript"]); }); - test("\"python, javaScript & coffee\".words() returns [\"python\", \"javaScript\" ,\"coffee\"]", () => { - expect("python, javaScript & coffee".words()) - .toEqual(["python", "javaScript", "coffee"]); + test('"python, javaScript & coffee".words() returns ["python", "javaScript" ,"coffee"]', () => { + expect("python, javaScript & coffee".words()).toEqual([ + "python", + "javaScript", + "coffee", + ]); }); }); diff --git a/src/types.ts b/src/types.ts deleted file mode 100644 index a5bc757e..00000000 --- a/src/types.ts +++ /dev/null @@ -1 +0,0 @@ -export type Operator = "<" | "<=" | "=" | "<>" | ">=" | ">"; diff --git a/src/utils.test.ts b/src/utils.test.ts index 663417b6..56f338e1 100644 --- a/src/utils.test.ts +++ b/src/utils.test.ts @@ -2,8 +2,13 @@ import * as utils from "./utils"; describe("utils", () => { test("pathToKeys", () => { - expect(utils.pathToKeys("selector.to[0][11].value")) - .toEqual(["selector", "to", 0, 11, "value"]); + expect(utils.pathToKeys("selector.to[0][11].value")).toEqual([ + "selector", + "to", + 0, + 11, + "value", + ]); }); test("addPrototype to Object", () => { @@ -35,7 +40,8 @@ describe("utils", () => { }); test("deepClone Function", () => { - function a() { } + // tslint:disable-next-line: no-empty function-name + function a() {} expect(utils.deepClone(a)).toBe(a); }); diff --git a/src/utils.ts b/src/utils.ts index b14bd869..b2ee8ee4 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -6,16 +6,17 @@ * @example * pathToKeys("selector.to[0][11].value"); // ["selector", "to", 0, 11, "value"] */ -export const pathToKeys = (path: string) => path - .replace(/([^\.])\[/g, (m, match) => `${match}.[`) - .split(".") - .map((key) => { - const match = key.match(/^\[(\d+)\]$/); +export const pathToKeys = (path: string) => + path + .replace(/([^\.])\[/g, (m, match) => `${match}.[`) + .split(".") + .map(key => { + const match = key.match(/^\[(\d+)\]$/); - if (match) return +match[1]; + if (match) return +match[1]; - return key; - }); + return key; + }); /** * @@ -26,21 +27,21 @@ export const pathToKeys = (path: string) => path * @example * addPrototype(Object, "$size", function() {return this;}); */ -export const addPrototype = (obj: any, key: string, method: (...args: any[]) => any) => { +export const addPrototype = ( + obj: any, + key: string, + method: (...args: any[]) => any, +) => { const prototype = obj.prototype; if (prototype.hasOwnProperty(key)) return; - Object.defineProperty( - prototype, - key, - { - value(...args: any[]) { - return method.apply(0, [this].concat(args)); - }, - writable: true, - } - ); + Object.defineProperty(prototype, key, { + value(...args: any[]) { + return method.apply(0, [this].concat(args)); + }, + writable: true, + }); }; /** @@ -54,12 +55,15 @@ export const addPrototype = (obj: any, key: string, method: (...args: any[]) => * filter([1, 2, 3], undefined, (value) => value > 1); */ export const filter = ( - arr: T[], path: string | undefined, fn: (value: T, index: number, array: T[]) => any + arr: T[], + path: string | undefined, + fn: (value: T, index: number, array: T[]) => any, ) => { if (path) { const keys = pathToKeys(path); - const reducer = (item: T) => keys.reduce((prev, curr) => (prev as any)[curr], item); + const reducer = (item: T) => + keys.reduce((prev, curr) => (prev as any)[curr], item); return arr.filter((item, index, items) => fn(reducer(item), index, items)); } @@ -82,11 +86,13 @@ export const deepClone = (value: T): T => { const clone: any = Object.assign({}, value); - Object.keys(clone) - .forEach((key) => (clone[key] = typeof (value as any)[key] === "object" ? - deepClone((value as any)[key]) : - (value as any)[key]) - ); + Object.keys(clone).forEach( + key => + (clone[key] = + typeof (value as any)[key] === "object" + ? deepClone((value as any)[key]) + : (value as any)[key]), + ); if (Array.isArray(value)) { clone.length = value.length; @@ -96,3 +102,14 @@ export const deepClone = (value: T): T => { return clone; }; + +export type Operator = "<" | "<=" | "=" | "<>" | ">=" | ">"; + +export const enum OPERATOR { + LT = "<", + LTE = "<=", + EQ = "=", + NE = "<>", + GTE = ">=", + GT = ">", +} diff --git a/tsconfig.json b/tsconfig.json index 4906cac6..35fba942 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,65 @@ { - "compileOnSave": true, "compilerOptions": { - "module": "commonjs", - "target": "es6", - "rootDir": "src", - "outDir": "es6", - "declaration": true, - "strict": true + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "es6" /* Redirect output structure to the directory. */, + "rootDir": "src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ }, - "include": [ - "src/**/*" - ], - "exclude": [ - "**/test.ts", - "**/*.test.ts" - ] + "include": ["src"], + "exclude": ["**/test.ts", "**/*.test.ts"] } diff --git a/tslint.json b/tslint.json index e6851f43..725f1f2a 100644 --- a/tslint.json +++ b/tslint.json @@ -1,87 +1,16 @@ { "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], - "jsRules": {}, + "extends": ["tslint:recommended", "tslint-config-airbnb"], "rules": { - "trailing-comma": [ - true, - { - "multiline": { - "objects": "always", - "arrays": "always", - "functions": "never", - "typeLiterals": "ignore" - }, - "esSpecCompliant": true - } - ], - "ordered-imports": false, - "no-namespace": false, - "no-internal-module": false, - "interface-name": [ - true, - "never-prefix" - ], - "no-empty-interface": false, - "member-access": [ - true, - "no-public" - ], - "object-literal-sort-keys": false, - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-pascal-case", - "allow-leading-underscore" - ], - "no-angle-bracket-type-assertion": false, - "no-shadowed-variable": false, - "member-ordering": [ - true, - { - "order": [ - "private-static-field", - "public-static-field", - "private-instance-field", - "public-instance-field", - "private-constructor", - "public-constructor", - "protected-instance-method", - "private-instance-method", - "public-instance-method" - ] - } - ], - "no-console": false, - "no-empty": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-module", - "check-separator", - "check-rest-spread", - "check-type", - "check-type-operator", - "check-preblock" - ], - "forin": false, - "curly": [ - true, - "as-needed" - ], - "unified-signatures": false, + "import-name": false, + "interface-name": false, + "no-parameter-reassignment": false, + "no-increment-decrement": false, "prefer-for-of": false, - "no-bitwise": false, - "space-before-function-paren": ["error", { - "anonymous": "never", - "named": "always", - "asyncArrow": "always" - }] + "object-literal-sort-keys": false, + "ter-arrow-parens": false, + "quotemark": [true, "double", "avoid-escape"], + "prefer-array-literal": [true, { "allow-type-parameters": true }] }, - "rulesDirectory": [] -} \ No newline at end of file + "rulesDirectory": ["src"] +}