diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..9fe9394 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +src/bowser.js diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..9c5151b --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,6 @@ +extends: airbnb-base +rules: + no-underscore-dangle: 0 + no-void: 0 +plugins: + - ava diff --git a/package-lock.json b/package-lock.json index 6b9fbd5..6ebb5e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,12 +74,53 @@ "negotiator": "0.6.1" } }, + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, "after": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=", "dev": true }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, "ansi-align": { "version": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", @@ -88,6 +129,12 @@ "string-width": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" } }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "dev": true + }, "ansi-regex": { "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", @@ -1786,12 +1833,27 @@ "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=", "dev": true }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, "camelcase": { "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", @@ -1836,6 +1898,12 @@ } } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, "charm": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", @@ -1866,6 +1934,12 @@ "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", "dev": true }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, "clean-stack": { "version": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz", "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=", @@ -1903,6 +1977,18 @@ "string-width": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" } }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, "co-with-promise": { "version": "https://registry.npmjs.org/co-with-promise/-/co-with-promise-4.6.0.tgz", "integrity": "sha1-QT59tvWJOmC5Qs9JLEvsk9tBWrc=", @@ -1976,6 +2062,25 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, "configstore": { "version": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", "integrity": "sha1-CU7mYquD+tmRdnjeEU+q6o/NypA=", @@ -2011,6 +2116,12 @@ "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz" } }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -2134,6 +2245,67 @@ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", "dev": true }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deep-strict-equal": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz", + "integrity": "sha1-SgeBR6irV/ag1PVUckPNIvROtOQ=", + "dev": true, + "requires": { + "core-assert": "https://registry.npmjs.org/core-assert/-/core-assert-0.2.1.tgz" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + }, + "dependencies": { + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "glob": "7.1.2", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "2.0.1" + } + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + } + } + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -2171,6 +2343,15 @@ "integrity": "sha1-HMPIOkkNZ/ldkeOfatHy4Ia2MEg=", "dev": true }, + "doctrine": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz", + "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==", + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" + } + }, "dot-prop": { "version": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", @@ -2320,6 +2501,15 @@ } } }, + "enhance-visitors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", + "integrity": "sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, "equal-length": { "version": "https://registry.npmjs.org/equal-length/-/equal-length-1.0.1.tgz", "integrity": "sha1-IcoRLUirJLTh5//A5TOdMf38J0w=", @@ -2349,6 +2539,271 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "eslint": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.1.tgz", + "integrity": "sha512-UCJVV50RtLHYzBp1DZ8CMPtRSg4iVZvjgO9IJHIKyWU/AnJVjtdRikoUPLB29n5pzMB7TnsLQWf0V6VUJfoPfw==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "chalk": "2.3.0", + "concat-stream": "1.6.0", + "cross-spawn": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "debug": "3.1.0", + "doctrine": "2.0.2", + "eslint-scope": "3.7.1", + "espree": "3.5.2", + "esquery": "1.0.0", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.1.0", + "ignore": "3.3.7", + "imurmurhash": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "inquirer": "3.3.0", + "is-resolvable": "1.0.1", + "js-yaml": "3.10.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "natural-compare": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "require-uncached": "1.0.3", + "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "4.5.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "globals": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", + "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "4.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "eslint-config-airbnb-base": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", + "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", + "dev": true, + "requires": { + "eslint-restricted-globals": "0.1.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", + "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", + "dev": true, + "requires": { + "debug": "2.6.9", + "resolve": "1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", + "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "pkg-dir": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-ava": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-4.4.0.tgz", + "integrity": "sha1-wYZuH2LnDa8re19gz7xTv+Jnpxc=", + "dev": true, + "requires": { + "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "deep-strict-equal": "0.2.0", + "enhance-visitors": "1.0.0", + "espree": "3.5.2", + "espurify": "https://registry.npmjs.org/espurify/-/espurify-1.7.0.tgz", + "import-modules": "1.1.0", + "multimatch": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "pkg-up": "2.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", + "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "dev": true, + "requires": { + "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.1", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "3.0.4", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "isarray": "1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.0", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, "espower-location-detector": { "version": "https://registry.npmjs.org/espower-location-detector/-/espower-location-detector-1.0.0.tgz", "integrity": "sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU=", @@ -2360,6 +2815,16 @@ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" } }, + "espree": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", + "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-jsx": "3.0.1" + } + }, "esprima": { "version": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", @@ -2373,6 +2838,25 @@ "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz" } }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, "estraverse": { "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", @@ -2498,6 +2982,17 @@ } } }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, "extglob": { "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", @@ -2506,6 +3001,24 @@ "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" } }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "figures": { "version": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", @@ -2514,6 +3027,16 @@ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" } }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, "filename-regex": { "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=", @@ -2615,6 +3138,18 @@ } } }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, "fn-name": { "version": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=", @@ -3619,6 +4154,18 @@ } } }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -3800,6 +4347,15 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, "has-ansi": { "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", @@ -3828,6 +4384,12 @@ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", "dev": true }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -3926,12 +4488,43 @@ } } }, + "husky": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", + "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "dev": true, + "requires": { + "is-ci": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", + "normalize-path": "1.0.0", + "strip-indent": "2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + } + } + }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", "dev": true }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, "ignore-by-default": { "version": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", @@ -3942,6 +4535,12 @@ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true }, + "import-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-1.1.0.tgz", + "integrity": "sha1-dI23nFzEK7lwHvq0JPiU5yYA6dw=", + "dev": true + }, "imurmurhash": { "version": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", @@ -3977,6 +4576,65 @@ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", "dev": true }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "cli-cursor": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "4.5.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, "invariant": { "version": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", @@ -4110,6 +4768,30 @@ "symbol-observable": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz" } }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, "is-plain-obj": { "version": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", @@ -4135,6 +4817,12 @@ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "dev": true }, + "is-resolvable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz", + "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==", + "dev": true + }, "is-retry-allowed": { "version": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", @@ -4302,6 +4990,18 @@ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "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=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json3": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", @@ -4342,6 +5042,16 @@ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", "dev": true }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, "load-json-file": { "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", @@ -4413,6 +5123,12 @@ "integrity": "sha1-buMFc6A6GmDWcKYu8zwQzxr9vdQ=", "dev": true }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "dev": true + }, "lodash.debounce": { "version": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", @@ -4787,6 +5503,12 @@ "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=", "dev": true }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "nan": { "version": "https://registry.npmjs.org/nan/-/nan-2.6.1.tgz", "integrity": "sha1-jIT3sUyWuJ9X+8g4ASGA7IyjmgE=", @@ -4935,6 +5657,20 @@ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" } }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, "options": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", @@ -5077,11 +5813,23 @@ "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=", "dev": true }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, "path-key": { "version": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -5166,6 +5914,15 @@ } } }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + } + }, "plur": { "version": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", @@ -5174,6 +5931,18 @@ "irregular-plurals": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.3.0.tgz" } }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, "prepend-http": { "version": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", @@ -5235,6 +6004,12 @@ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, "proxy-addr": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", @@ -5538,12 +6313,39 @@ "integrity": "sha1-WhtS63Dr7UPrmC6XTIWrWVceVvo=", "dev": true }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, "resolve-cwd": { "version": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-1.0.0.tgz", "integrity": "sha1-Tq7qQe0EDRcCRX32SkKysH0kb58=", @@ -5582,6 +6384,30 @@ "glob": "7.1.2" } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, "safe-buffer": { "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", @@ -5986,17 +6812,68 @@ "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" } }, + "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=", + "dev": true + }, "styled_string": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/styled_string/-/styled_string-0.0.1.tgz", "integrity": "sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko=", "dev": true }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, "symbol-observable": { "version": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", "dev": true }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.0", + "lodash": "4.17.4", + "slice-ansi": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "4.5.0" + } + } + } + }, "tap-parser": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz", @@ -6061,6 +6938,12 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "through2": { "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", @@ -6160,6 +7043,15 @@ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + }, "to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", @@ -6181,6 +7073,15 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, "type-detect": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", @@ -6197,6 +7098,12 @@ "mime-types": "2.1.17" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "uid2": { "version": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=", @@ -6318,7 +7225,7 @@ "wide-align": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", "dev": true, "requires": { "string-width": "1.0.2" @@ -6374,11 +7281,26 @@ } } }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, "wrappy": { "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz", "integrity": "sha1-HmWWmWXMvC20VIxrhKbyxa7dRzk=", "dev": true }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + } + }, "write-file-atomic": { "version": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", diff --git a/package.json b/package.json index 753b7bb..d491d8d 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,11 @@ "babel-cli": "^6.26.0", "babel-preset-env": "^1.6.1", "babel-register": "^6.26.0", + "eslint": "^4.13.1", + "eslint-config-airbnb-base": "^12.1.0", + "eslint-plugin-ava": "^4.4.0", + "eslint-plugin-import": "^2.8.0", + "husky": "^0.14.3", "sinon": "^2.4.1", "testem": "^1.18.4", "yamljs": "^0.3.0" @@ -42,6 +47,7 @@ "test": "test" }, "scripts": { + "lint": "./node_modules/.bin/eslint ./src --fix", "testem": "testem", "test": "./node_modules/.bin/ava" }, diff --git a/src/new-bowser.js b/src/new-bowser.js index 0726b85..da1c47a 100644 --- a/src/new-bowser.js +++ b/src/new-bowser.js @@ -50,7 +50,7 @@ class Bowser { * @param {Object} range * @returns {Boolean} */ - static notInRange(range) {} + // static notInRange(range) {} // static filter(UACollection, range) {} diff --git a/src/parser-browsers.js b/src/parser-browsers.js index 023f57a..8d1b55b 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -25,7 +25,7 @@ import { getFirstMatch, - getSecondMatch + getSecondMatch, } from './utils'; const commonVersionIdentifier = /version\/(\d+(\.?_?\d+)+)/i; @@ -36,16 +36,16 @@ const browsersList = [ test: [/opera/i], describe(ua) { const browser = { - name: 'Opera' + name: 'Opera', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:opera)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, /* Opera > 13.0 */ @@ -53,157 +53,157 @@ const browsersList = [ test: [/opr|opios/i], describe(ua) { const browser = { - name: 'Opera' + name: 'Opera', }; - const version = getFirstMatch(/(?:opr|opios)[\s\/](\S+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); + const version = getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/SamsungBrowser/i], describe(ua) { const browser = { - name: 'Samsung Internet for Android' + name: 'Samsung Internet for Android', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/coast/i], describe(ua) { const browser = { - name: 'Opera Coast' + name: 'Opera Coast', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:coast)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/yabrowser/i], describe(ua) { const browser = { - name: 'Yandex Browser' + name: 'Yandex Browser', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/ucbrowser/i], describe(ua) { const browser = { - name: 'UC Browser' + name: 'UC Browser', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:ucbrowser)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/mxios/i], describe(ua) { const browser = { - name: 'Maxthon' + name: 'Maxthon', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:mxios)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:mxios)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/epiphany/i], describe(ua) { const browser = { - name: 'Epiphany' + name: 'Epiphany', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:epiphany)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/puffin/i], describe(ua) { const browser = { - name: 'Puffin' + name: 'Puffin', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:puffin)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/sleipnir/i], describe(ua) { const browser = { - name: 'Sleipnir' + name: 'Sleipnir', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:sleipnir)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/k-meleon/i], describe(ua) { const browser = { - name: 'K-Meleon' + name: 'K-Meleon', }; - const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:k-meleon)[\s\/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/msie|trident/i], describe(ua) { const browser = { - name: 'Internet Explorer' + name: 'Internet Explorer', }; const version = getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, ua); @@ -212,13 +212,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/edg([ea]|ios)/i], describe(ua) { const browser = { - name: 'Microsoft Edge' + name: 'Microsoft Edge', }; const version = getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, ua); @@ -228,13 +228,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/vivaldi/i], describe(ua) { const browser = { - name: 'Vivaldi' + name: 'Vivaldi', }; const version = getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, ua); @@ -243,13 +243,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/seamonkey/i], describe(ua) { const browser = { - name: 'SeaMonkey' + name: 'SeaMonkey', }; const version = getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, ua); @@ -258,13 +258,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/sailfish/i], describe(ua) { const browser = { - name: 'Sailfish' + name: 'Sailfish', }; const version = getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, ua); @@ -274,13 +274,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/silk/i], describe(ua) { const browser = { - name: 'Amazon Silk' + name: 'Amazon Silk', }; const version = getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, ua); @@ -289,13 +289,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/phantom/i], describe(ua) { const browser = { - name: 'PhantomJS' + name: 'PhantomJS', }; const version = getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, ua); @@ -304,13 +304,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/slimerjs/i], describe(ua) { const browser = { - name: 'SlimerJS' + name: 'SlimerJS', }; const version = getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, ua); @@ -319,13 +319,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/blackberry|\bbb\d+/i, /rim\stablet/i], describe(ua) { const browser = { - name: 'BlackBerry' + name: 'BlackBerry', }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, ua); @@ -334,13 +334,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/(web|hpw)os/i], describe(ua) { const browser = { - name: 'WebOS Browser' + name: 'WebOS Browser', }; const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.?_?\d+)+)/i, ua); @@ -349,13 +349,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/bada/i], describe(ua) { const browser = { - name: 'Bada' + name: 'Bada', }; const version = getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, ua); @@ -364,13 +364,13 @@ const browsersList = [ } return browser; - } + }, }, { test: [/tizen/i], describe(ua) { const browser = { - name: 'Tizen' + name: 'Tizen', }; const version = getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); @@ -379,58 +379,58 @@ const browsersList = [ } return browser; - } + }, }, { test: [/qupzilla/i], describe(ua) { const browser = { - name: 'QupZilla' + name: 'QupZilla', }; - const version = getFirstMatch(/(?:qupzilla)[\s\/](\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); + const version = getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/firefox|iceweasel|fxios/i], describe(ua) { const browser = { - name: 'Firefox' + name: 'Firefox', }; - const version = getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.?_?\d+)+)/i, ua); + const version = getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/chromium/i], describe(ua) { const browser = { - name: 'Chromium' + name: 'Chromium', }; - const version = getFirstMatch(/(?:chromium)[\s\/](\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); + const version = getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, ua) || getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; } return browser; - } + }, }, { test: [/chrome|crios|crmo/i], describe(ua) { const browser = { - name: 'Chrome' + name: 'Chrome', }; const version = getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua); @@ -439,7 +439,7 @@ const browsersList = [ } return browser; - } + }, }, /* Android Browser */ @@ -451,7 +451,7 @@ const browsersList = [ }, describe(ua) { const browser = { - name: 'Android Browser' + name: 'Android Browser', }; const version = getFirstMatch(commonVersionIdentifier, ua); @@ -460,7 +460,7 @@ const browsersList = [ } return browser; - } + }, }, /* Safari */ @@ -468,7 +468,7 @@ const browsersList = [ test: [/safari|applewebkit/i], describe(ua) { const browser = { - name: 'Safari' + name: 'Safari', }; const version = getFirstMatch(commonVersionIdentifier, ua); @@ -477,7 +477,7 @@ const browsersList = [ } return browser; - } + }, }, /* Googlebot */ @@ -485,7 +485,7 @@ const browsersList = [ test: [/googlebot/i], describe(ua) { const browser = { - name: 'Googlebot' + name: 'Googlebot', }; const version = getFirstMatch(/googlebot\/(\d+(\.\d+))/i, ua) || getFirstMatch(commonVersionIdentifier, ua); @@ -494,7 +494,7 @@ const browsersList = [ } return browser; - } + }, }, /* Something else */ @@ -503,10 +503,10 @@ const browsersList = [ describe(ua) { return { name: getFirstMatch(/^(.*)\/(.*) /, ua), - version: getSecondMatch(/^(.*)\/(.*) /, ua) + version: getSecondMatch(/^(.*)\/(.*) /, ua), }; - } - } + }, + }, ]; export default browsersList; diff --git a/src/parser-engines.js b/src/parser-engines.js index 9479752..7102c5f 100644 --- a/src/parser-engines.js +++ b/src/parser-engines.js @@ -1,5 +1,5 @@ import { - getFirstMatch + getFirstMatch, } from './utils'; /* @@ -15,9 +15,9 @@ export default [ const version = getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, ua); return { name: 'EdgeHTML', - version + version, }; - } + }, }, /* Trident */ @@ -25,7 +25,7 @@ export default [ test: [/trident/i], describe(ua) { const engine = { - name: 'Trident' + name: 'Trident', }; const version = getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, ua); @@ -35,7 +35,7 @@ export default [ } return engine; - } + }, }, /* Presto */ @@ -45,7 +45,7 @@ export default [ }, describe(ua) { const engine = { - name: 'Presto' + name: 'Presto', }; const version = getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, ua); @@ -55,7 +55,7 @@ export default [ } return engine; - } + }, }, /* Gecko */ @@ -67,7 +67,7 @@ export default [ }, describe(ua) { const engine = { - name: 'Gecko' + name: 'Gecko', }; const version = getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, ua); @@ -77,7 +77,7 @@ export default [ } return engine; - } + }, }, /* Blink */ @@ -85,9 +85,9 @@ export default [ test: [/(apple)?webkit\/537\.36/i], describe() { return { - name: 'Blink' + name: 'Blink', }; - } + }, }, /* WebKit */ @@ -95,7 +95,7 @@ export default [ test: [/(apple)?webkit/i], describe(ua) { const engine = { - name: 'WebKit' + name: 'WebKit', }; const version = getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, ua); @@ -105,6 +105,6 @@ export default [ } return engine; - } - } + }, + }, ]; diff --git a/src/parser-os.js b/src/parser-os.js index c570702..82e4e4f 100644 --- a/src/parser-os.js +++ b/src/parser-os.js @@ -1,5 +1,5 @@ import { - getFirstMatch + getFirstMatch, } from './utils'; function getWindowsVersionName(version) { @@ -26,9 +26,9 @@ export default [ const version = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, ua); return { name: 'Windows Phone', - version - } - } + version, + }; + }, }, /* Windows */ @@ -41,9 +41,9 @@ export default [ return { name: 'Windows', version, - versionName + versionName, }; - } + }, }, /* macOS */ @@ -53,9 +53,9 @@ export default [ const version = getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, ua).replace(/[_\s]/g, '.'); return { name: 'macOS', - version + version, }; - } + }, }, /* iOS */ @@ -66,9 +66,9 @@ export default [ return { name: 'iOS', - version + version, }; - } + }, }, /* Android */ @@ -79,12 +79,12 @@ export default [ return notLikeAndroid && butAndroid; }, describe(ua) { - const version = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i, ua); + const version = getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, ua); return { name: 'Android', - version + version, }; - } + }, }, /* WebOS */ @@ -94,9 +94,9 @@ export default [ const version = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i, ua); return { name: 'WebOS', - version + version, }; - } + }, }, /* BlackBerry */ @@ -109,9 +109,9 @@ export default [ return { name: 'BlackBerry', - version + version, }; - } + }, }, /* Bada */ @@ -122,22 +122,22 @@ export default [ return { name: 'Bada', - version + version, }; - } + }, }, /* Tizen */ { test: [/tizen/i], describe(ua) { - const version = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i, ua); + const version = getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, ua); return { name: 'Tizen', - version + version, }; - } + }, }, /* Linux */ @@ -145,8 +145,8 @@ export default [ test: [/linux/i], describe() { return { - name: 'Linux' - } - } - } -] + name: 'Linux', + }; + }, + }, +]; diff --git a/src/parser-platforms.js b/src/parser-platforms.js index 9fcedc9..8a4bd53 100644 --- a/src/parser-platforms.js +++ b/src/parser-platforms.js @@ -1,11 +1,11 @@ import { - getFirstMatch + getFirstMatch, } from './utils'; const TYPES_LABELS = { tablet: 'tablet', mobile: 'mobile', - desktop: 'desktop' + desktop: 'desktop', }; /* @@ -22,7 +22,7 @@ export default [ type: TYPES_LABELS.tablet, vendor: 'Nexus', }; - } + }, }, /* iPad */ @@ -32,9 +32,9 @@ export default [ return { type: TYPES_LABELS.tablet, vendor: 'Apple', - model: 'iPad' - } - } + model: 'iPad', + }; + }, }, /* Amazon Kindle Fire */ @@ -44,9 +44,9 @@ export default [ return { type: TYPES_LABELS.tablet, vendor: 'Amazon', - model: 'Kindle Fire HD 7' - } - } + model: 'Kindle Fire HD 7', + }; + }, }, /* Another Amazon Tablet with Silk */ @@ -55,9 +55,9 @@ export default [ describe() { return { type: TYPES_LABELS.tablet, - vendor: 'Amazon' - } - } + vendor: 'Amazon', + }; + }, }, /* Tablet */ @@ -65,9 +65,9 @@ export default [ test: [/tablet/i], describe() { return { - type: TYPES_LABELS.tablet + type: TYPES_LABELS.tablet, }; - } + }, }, /* iPod/iPhone */ @@ -82,9 +82,9 @@ export default [ return { type: TYPES_LABELS.mobile, vendor: 'Apple', - model: model + model, }; - } + }, }, /* Nexus Mobile */ @@ -93,9 +93,9 @@ export default [ describe() { return { type: TYPES_LABELS.mobile, - vendor: 'Nexus' + vendor: 'Nexus', }; - } + }, }, /* Mobile */ @@ -103,9 +103,9 @@ export default [ test: [/[^-]mobi/i], describe() { return { - type: TYPES_LABELS.mobile + type: TYPES_LABELS.mobile, }; - } + }, }, /* BlackBerry */ @@ -116,9 +116,9 @@ export default [ describe() { return { type: TYPES_LABELS.mobile, - vendor: 'BlackBerry' + vendor: 'BlackBerry', }; - } + }, }, /* Bada */ @@ -128,9 +128,9 @@ export default [ }, describe() { return { - type: TYPES_LABELS.mobile - } - } + type: TYPES_LABELS.mobile, + }; + }, }, /* Windows Phone */ @@ -141,9 +141,9 @@ export default [ describe() { return { type: TYPES_LABELS.mobile, - vendor: 'Microsoft' - } - } + vendor: 'Microsoft', + }; + }, }, /* Android Tablet */ @@ -154,9 +154,9 @@ export default [ }, describe() { return { - type: TYPES_LABELS.tablet - } - } + type: TYPES_LABELS.tablet, + }; + }, }, /* Android Mobile */ @@ -166,9 +166,9 @@ export default [ }, describe() { return { - type: TYPES_LABELS.mobile - } - } + type: TYPES_LABELS.mobile, + }; + }, }, /* desktop */ @@ -179,9 +179,9 @@ export default [ describe() { return { type: TYPES_LABELS.desktop, - vendor: 'Apple' + vendor: 'Apple', }; - } + }, }, /* Windows */ @@ -191,9 +191,9 @@ export default [ }, describe() { return { - type: TYPES_LABELS.desktop - } - } + type: TYPES_LABELS.desktop, + }; + }, }, /* Linux */ @@ -203,8 +203,8 @@ export default [ }, describe() { return { - type: TYPES_LABELS.desktop - } - } - } + type: TYPES_LABELS.desktop, + }; + }, + }, ]; diff --git a/src/parser.js b/src/parser.js index 2421928..ca203d8 100644 --- a/src/parser.js +++ b/src/parser.js @@ -11,7 +11,7 @@ class Parser { * @constructor */ constructor(UA) { - if (UA === void(0) || UA === null || UA === '') { + if (UA === void (0) || UA === null || UA === '') { throw new Error("UserAgent parameter can't be empty"); } @@ -47,15 +47,13 @@ class Parser { _parseBrowser() { this.parsedResult.browser = {}; - const browserDescriptor = browserParsersList.find(_browser => { + const browserDescriptor = browserParsersList.find((_browser) => { if (typeof _browser.test === 'function') { return _browser.test(this); } if (_browser.test instanceof Array) { - return _browser.test.some((condition) => { - return this.test(condition); - }); + return _browser.test.some(condition => this.test(condition)); } throw new Error("Browser's test function is not valid"); @@ -133,15 +131,13 @@ class Parser { _parseOS() { this.parsedResult.os = {}; - const os = osParsersList.find(_os => { + const os = osParsersList.find((_os) => { if (typeof _os.test === 'function') { return _os.test(this); } if (_os.test instanceof Array) { - return _os.test.some((condition) => { - return this.test(condition); - }); + return _os.test.some(condition => this.test(condition)); } throw new Error("Browser's test function is not valid"); @@ -160,7 +156,7 @@ class Parser { * @return {String} name of the OS — macOS, Windows, Linux, etc. */ getOSName(toLowerCase) { - const name = this.getOS().name; + const { name } = this.getOS(); if (toLowerCase) { return String(name).toLowerCase(); @@ -197,15 +193,13 @@ class Parser { _parsePlatform() { this.parsedResult.platform = {}; - const platform = platformParsersList.find(_platform => { + const platform = platformParsersList.find((_platform) => { if (typeof _platform.test === 'function') { return _platform.test(this); } if (_platform.test instanceof Array) { - return _platform.test.some((condition) => { - return this.test(condition); - }); + return _platform.test.some(condition => this.test(condition)); } throw new Error("Browser's test function is not valid"); @@ -238,15 +232,13 @@ class Parser { _parseEngine() { this.parsedResult.engine = {}; - const engine = enginesParsersList.find(_engine => { + const engine = enginesParsersList.find((_engine) => { if (typeof _engine.test === 'function') { return _engine.test(this); } if (_engine.test instanceof Array) { - return _engine.test.some((condition) => { - return this.test(condition); - }); + return _engine.test.some(condition => this.test(condition)); } throw new Error("Browser's test function is not valid"); diff --git a/src/utils.js b/src/utils.js index f6c622c..d10359a 100644 --- a/src/utils.js +++ b/src/utils.js @@ -32,7 +32,7 @@ class Utils { if (regexp.test(ua)) { return _const; } - return void(0); + return void (0); } }