diff --git a/LICENSE b/LICENSE index 23e6e81..7cd7baa 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ Pi-hole Web Interface -Copyright (C) 2017 Pi-hole, LLC (https://pi-hole.net) +Copyright (C) 2019 Pi-hole, LLC (https://pi-hole.net) This software is licensed under the European Union Public License diff --git a/make-fake-data.js b/make-fake-data.js index f6e56d4..a0b592b 100644 --- a/make-fake-data.js +++ b/make-fake-data.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Create fake API data -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Create fake API data + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ const faker = require("faker"); const fs = require("fs-extra"); diff --git a/package-lock.json b/package-lock.json index ac0ea03..f4e813f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -923,6 +923,27 @@ "regexpu-core": "^4.1.3" } }, + "@babel/polyfill": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", + "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", + "requires": { + "core-js": "^2.5.7", + "regenerator-runtime": "^0.12.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + } + } + }, "@babel/preset-env": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.3.tgz", @@ -1007,7 +1028,6 @@ "version": "7.1.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.5.tgz", "integrity": "sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA==", - "dev": true, "requires": { "regenerator-runtime": "^0.12.0" }, @@ -1015,8 +1035,7 @@ "regenerator-runtime": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" } } }, @@ -1192,12 +1211,13 @@ } }, "@coreui/coreui": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-2.0.3.tgz", - "integrity": "sha512-NT6uuR9hkxhxohN9w3A4DJ951J/Sj980cAw5+rd4U+PNxsFgVFs/FRGujcLJrQTpqvBjUYDOxJiazktzIpn4jg==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-2.1.6.tgz", + "integrity": "sha512-04uY01hOXOaED85U/3IrBQpstC6wEE7fOft7nybuFy7uikTgreep6dWeNflKzWbIAMHQRwi5G0B4ZKNhgHG86w==", "requires": { + "@babel/polyfill": "^7.2.5", "@coreui/coreui-plugin-npm-postinstall": "^1.0.2", - "bootstrap": "^4.1.1" + "bootstrap": "^4.2.1" } }, "@coreui/coreui-plugin-chartjs-custom-tooltips": { @@ -1221,108 +1241,68 @@ "integrity": "sha512-yeeoWp+bNS84nP1977Y8UCiQ9pssO+f4QuVj3i0/gYZFjjvOgxx0dnyWhtowD5sLYnCRMPlPpqyjwXze3SlkYg==" }, "@coreui/icons": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@coreui/icons/-/icons-0.2.0.tgz", - "integrity": "sha512-FPpi7tagGA3xGGGjYOMBUoLVjqNinrPOsM+AjpYiYW9jrAeuY+eZfToEPyGvdbIFgGBsi7qwpUfwmDR8KcGwow==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@coreui/icons/-/icons-0.3.0.tgz", + "integrity": "sha512-RbBi5K5hUA8LUI9mM/i1BTaLjlyoS6kHwKbxWsH62+/j9L9WF8gAiJUhrNjMt1br8TY9RLeolyQys0E9480fIg==" }, "@coreui/react": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@coreui/react/-/react-2.0.4.tgz", - "integrity": "sha512-HD34O3cZ4Zd1lXQZfk9r+SxwnEFjkEjS0hKV3YxirHRnpMSnpBV7OWd1bTK9Dt8ClQMwRuUka3A8uQWZ3FkCdw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@coreui/react/-/react-2.1.3.tgz", + "integrity": "sha512-9yqR3FhlG7agyAAFMwDo6RLjSrSU4IsV/DmYw2/xvnQyG9WJdoAb4+WIrXFdm5ZPdSltwc8ICk0m+e1g+qlqTA==", "requires": { - "@coreui/icons": "0.2.0", + "@coreui/icons": "0.3.0", "classnames": "^2.2.6", - "core-js": "^2.5.7", + "core-js": "^2.6.1", "prop-types": "^15.6.2", - "react-perfect-scrollbar": "^1.1.1", + "react-onclickout": "^2.0.8", + "react-perfect-scrollbar": "^1.4.4", "react-router-dom": "^4.3.1", - "reactstrap": "^6.1.0" + "reactstrap": "^7.0.2" }, "dependencies": { + "@babel/runtime": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", + "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@coreui/icons": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@coreui/icons/-/icons-0.3.0.tgz", + "integrity": "sha512-RbBi5K5hUA8LUI9mM/i1BTaLjlyoS6kHwKbxWsH62+/j9L9WF8gAiJUhrNjMt1br8TY9RLeolyQys0E9480fIg==" + }, "classnames": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "react-popper": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.10.4.tgz", - "integrity": "sha1-rypBXqIike3VBGeNev2opu4ylao=", - "requires": { - "popper.js": "^1.14.1", - "prop-types": "^15.6.1" - } - }, - "react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", - "requires": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" - } - }, - "react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", - "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" - } + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" }, "reactstrap": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-6.1.0.tgz", - "integrity": "sha512-ClxPR2aNGlnwxCI6tv9jRXA1MnsBSFs/Mus2cUJRVMGEEBuMoENhXilCCtR7yoQS0yJMmgGjM/Z37zRRy0k05g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-7.1.0.tgz", + "integrity": "sha512-wtc4RkgnGn1TsZ0AxOZ2OqT+b8YmCWZj/tErPujWLepxzlEEhveZGC+uDerdaHVSAzJUP2DTk605iper7hutQQ==", "requires": { + "@babel/runtime": "^7.2.0", "classnames": "^2.2.3", "lodash.isfunction": "^3.0.9", "lodash.isobject": "^3.0.2", "lodash.tonumber": "^4.0.3", "prop-types": "^15.5.8", + "react-lifecycles-compat": "^3.0.4", "react-popper": "^0.10.4", "react-transition-group": "^2.3.1" } }, - "warning": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.1.tgz", - "integrity": "sha512-rAVtTNZw+cQPjvGp1ox0XC5Q2IBFyqoqh+QII4J/oguyu83Bax1apbo2eqB8bHRS+fqYUBagys6lqUoVwKSmXQ==", - "requires": { - "loose-envify": "^1.0.0" - } + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" } } }, @@ -1399,9 +1379,9 @@ } }, "@types/node": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.0.tgz", - "integrity": "sha512-baXPuqA7EVcBUpA5so2K26DTzk7NCWBc9xrPMu9PbUMwgusJRm9zJBPhiDmJVEcnTQ3aOxUZeuFHpd9qMYDNRg==", + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==", "dev": true }, "@types/q": { @@ -1744,16 +1724,6 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, "append-transform": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", @@ -1886,6 +1856,17 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, + "array.prototype.flat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", + "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -2354,9 +2335,9 @@ }, "dependencies": { "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==", "dev": true }, "regenerator-runtime": { @@ -2888,9 +2869,9 @@ "dev": true }, "bootstrap": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.1.tgz", - "integrity": "sha512-SpiDSOcbg4J/PjVSt4ny5eY6j74VbVSjROY4Fb/WIUXBV9cnb5luyR4KnPvNoXuGnBK1T+nJIWqRsvU3yP8Mcg==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.2.1.tgz", + "integrity": "sha512-tt/7vIv3Gm2mnd/WeDx36nfGGHleil0Wg8IeB7eMrVkY0fZ5iTaBisSh8oNANc2IBsCc6vCgCNTIM/IEN0+50Q==" }, "bootstrap-daterangepicker": { "version": "3.0.3", @@ -3305,9 +3286,9 @@ "dev": true }, "chart.js": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.7.2.tgz", - "integrity": "sha512-90wl3V9xRZ8tnMvMlpcW+0Yg13BelsGS9P9t0ClaDxv/hdypHDr/YAGf+728m11P5ljwyB0ZHfPKCapZFqSqYA==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.7.3.tgz", + "integrity": "sha512-3+7k/DbR92m6BsMUYP6M0dMsMVZpMnwkUyNSAbqolHKsbIzH2Q4LWVEHHYq7v0fmEV8whXE0DrjANulw9j2K5g==", "requires": { "chartjs-color": "^2.1.0", "moment": "^2.10.2" @@ -3360,9 +3341,9 @@ } }, "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", + "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", "dev": true, "requires": { "domelementtype": "^1.3.0", @@ -3370,7 +3351,7 @@ "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "readable-stream": "^3.0.6" } }, "parse5": { @@ -3381,6 +3362,26 @@ "requires": { "@types/node": "*" } + }, + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } } } }, @@ -4892,6 +4893,18 @@ "dev": true, "requires": { "lodash.isequal": "^3.0" + }, + "dependencies": { + "lodash.isequal": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-3.0.4.tgz", + "integrity": "sha1-HDXrO27wzR/1F0Pj6jz3/f/ay2Q=", + "dev": true, + "requires": { + "lodash._baseisequal": "^3.0.0", + "lodash._bindcallback": "^3.0.0" + } + } } }, "deep-is": { @@ -5450,59 +5463,96 @@ "dev": true }, "enzyme": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.3.0.tgz", - "integrity": "sha512-l8csyPyLmtxskTz6pX9W8eDOyH1ckEtDttXk/vlFWCjv00SkjTjtoUrogqp4yEvMyneU9dUJoOLnqFoiHb8IHA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.8.0.tgz", + "integrity": "sha512-bfsWo5nHyZm1O1vnIsbwdfhU989jk+squU9NKvB+Puwo5j6/Wg9pN5CO0YJelm98Dao3NPjkDZk+vvgwpMwYxw==", "dev": true, "requires": { + "array.prototype.flat": "^1.2.1", "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.0.3", - "has": "^1.0.1", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.3", + "is-callable": "^1.1.4", "is-number-object": "^1.0.3", "is-string": "^1.0.4", "is-subset": "^0.1.1", - "lodash": "^4.17.4", - "object-inspect": "^1.5.0", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.6.0", "object-is": "^1.0.1", "object.assign": "^4.1.0", "object.entries": "^1.0.4", "object.values": "^1.0.4", "raf": "^3.4.0", - "rst-selector-parser": "^2.2.3" + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.1.2" + }, + "dependencies": { + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + } } }, "enzyme-adapter-react-16": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz", - "integrity": "sha512-kC8pAtU2Jk3OJ0EG8Y2813dg9Ol0TXi7UNxHzHiWs30Jo/hj7alc//G1YpKUsPP1oKl9X+Lkx+WlGJpPYA+nvw==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.7.1.tgz", + "integrity": "sha512-OQXKgfHWyHN3sFu2nKj3mhgRcqIPIJX6aOzq5AHVFES4R9Dw/vCBZFMPyaG81g2AZ5DogVh39P3MMNUbqNLTcw==", "dev": true, "requires": { - "enzyme-adapter-utils": "^1.3.0", - "lodash": "^4.17.4", - "object.assign": "^4.0.4", + "enzyme-adapter-utils": "^1.9.0", + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", "object.values": "^1.0.4", - "prop-types": "^15.6.0", - "react-reconciler": "^0.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.1", "react-test-renderer": "^16.0.0-0" + }, + "dependencies": { + "react-is": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz", + "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==", + "dev": true + } } }, "enzyme-adapter-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz", - "integrity": "sha512-vVXSt6uDv230DIv+ebCG66T1Pm36Kv+m74L1TrF4kaE7e1V7Q/LcxO0QRkajk5cA6R3uu9wJf5h13wOTezTbjA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.9.1.tgz", + "integrity": "sha512-LWc88BbKztLXlpRf5Ba/pSMJRaNezAwZBvis3N/IuB65ltZEh2E2obWU9B36pAbw7rORYeBUuqc79OL17ZzN1A==", "dev": true, "requires": { - "lodash": "^4.17.4", - "object.assign": "^4.0.4", - "prop-types": "^15.6.0" + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", + "prop-types": "^15.6.2", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } } }, "enzyme-matchers": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/enzyme-matchers/-/enzyme-matchers-6.0.2.tgz", - "integrity": "sha1-eU1OQyVNqqD//TpZHlhp/IYd7rI=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/enzyme-matchers/-/enzyme-matchers-7.0.1.tgz", + "integrity": "sha512-1HmUK3frVSt7kim8icdx5LimuQm+DlklBRfy+dSlKd4SRxwlDGEM1LYTxL21/2kUZNl1XVUT5k5mec/D3k5jWw==", "dev": true, "requires": { "circular-json-es6": "^2.0.1", @@ -5510,9 +5560,9 @@ } }, "enzyme-to-json": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.3.4.tgz", - "integrity": "sha1-Z8YEDpMRgvGDQYry659DIyWKp38=", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.3.5.tgz", + "integrity": "sha512-DmH1wJ68HyPqKSYXdQqB33ZotwfUhwQZW3IGXaNXgR69Iodaoj8TF/D9RjLdz4pEhGq2Tx2zwNUIjBuqoZeTgA==", "dev": true, "requires": { "lodash": "^4.17.4" @@ -6128,21 +6178,6 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, - "event-stream": { - "version": "3.3.4", - "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, "eventemitter3": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", @@ -6826,21 +6861,33 @@ } }, "fetch-mock": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-6.5.0.tgz", - "integrity": "sha512-vwvgI6OTwVZHJ1sSQRnkf7oR69NI/UCukNY7XXKxcaMeKVcAt0DtvGS8tZk/uNHP4sKLiSDUN8KGJcvWHDB+5w==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/fetch-mock/-/fetch-mock-7.3.0.tgz", + "integrity": "sha512-KxBeS8vsADFbWPVomuwxYqOJ2obZo6CidgkypjDPeu6zl+tAJvh2GfLDmJ8u//xgBGM9iOGwOxafeqAclilH2A==", "dev": true, "requires": { "babel-polyfill": "^6.26.0", "glob-to-regexp": "^0.4.0", - "path-to-regexp": "^2.2.1" + "path-to-regexp": "^2.2.1", + "whatwg-url": "^6.5.0" }, "dependencies": { "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } } } }, @@ -7453,12 +7500,6 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -7470,22 +7511,14 @@ } }, "fs-extra": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.0.tgz", - "integrity": "sha512-lk2cUCo8QzbiEWEbt7Cw3m27WMiRG321xsssbcIpfMhpRjrlC08WBOVQqj1/nQYYNnPtyIhP1oqLO3QwT2tPCw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } } }, "fs-write-stream-atomic": { @@ -9078,14 +9111,14 @@ "dev": true }, "i18next": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-11.3.2.tgz", - "integrity": "sha512-Y5yN46k4wcXOvucXrqADQRK1CyIplwjKQ5Sv2IYdukQWjr5Gf2Y7y+4AsjQbpCtLWzotcMd7YDmkrIYzVje6hg==" + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-13.1.4.tgz", + "integrity": "sha512-qPmjdQrUQ4AGzKBGBpPLC7XiJoqbV/dGmDW/xmwbzAk60eavTkZ+s5FqoSAP2YeurPF8XpNWQaDvXNSWzT0ZYw==" }, "i18next-browser-languagedetector": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-2.2.0.tgz", - "integrity": "sha512-fKhsaJzXY2anqAPxn9bgxc5NrTcu1GnYiIwGfNFPkpfFneutHnuReb4x4suOVNMf9RTuiCxfR+UAF8aHhv89SQ==" + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-2.2.4.tgz", + "integrity": "sha512-wPbtH18FdOuB245I8Bhma5/XSDdN/HpYlX+wga1eMy+slhaFQSnrWX6fp+aYSL2eEuj0RlfHeEVz6Fo/lxAj6A==" }, "i18next-xhr-backend": { "version": "1.5.1", @@ -9373,9 +9406,9 @@ "dev": true }, "ionicons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-3.0.0.tgz", - "integrity": "sha1-QLja9P16MRUL0AIWD2ZJbiKpjDw=" + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-4.5.1.tgz", + "integrity": "sha512-zqfkjpPKsdzzXePdE03IRw6xt7B6N3fcN/7NepyniuEWhKZLy7YpdZLegEwBmKeciXi7rIcv1O/hHJTdokUwXQ==" }, "ip": { "version": "1.1.5", @@ -10367,22 +10400,19 @@ } }, "jest-environment-enzyme": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/jest-environment-enzyme/-/jest-environment-enzyme-6.0.2.tgz", - "integrity": "sha1-iQUmYi1d6KggoYSdJoTwO8AG4O8=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-enzyme/-/jest-environment-enzyme-7.0.1.tgz", + "integrity": "sha512-sZm/6tKC+//S4ASPefXSZJDkflzvxMRQKt24GYuXO+34IUTmpT5LzYJETtd4KJI8W42qMcc1F4qHV5Itb6romg==", "dev": true, "requires": { "jest-environment-jsdom": "^22.4.1" }, "dependencies": { - "acorn-globals": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", - "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -10393,16 +10423,10 @@ "color-convert": "^1.9.0" } }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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", @@ -10411,27 +10435,12 @@ } }, "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "1.1.1" - } - }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "cssstyle": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", - "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", - "dev": true, - "requires": { - "cssom": "0.3.x" + "color-name": "1.1.3" } }, "jest-environment-jsdom": { @@ -10480,36 +10489,36 @@ } }, "jsdom": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", - "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", "dev": true, "requires": { - "abab": "^1.0.4", - "acorn": "^5.3.0", + "abab": "^2.0.0", + "acorn": "^5.5.3", "acorn-globals": "^4.1.0", "array-equal": "^1.0.0", "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.3.1 < 0.4.0", + "cssstyle": "^1.0.0", "data-urls": "^1.0.0", - "domexception": "^1.0.0", - "escodegen": "^1.9.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.2.0", - "nwsapi": "^2.0.0", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", "parse5": "4.0.0", "pn": "^1.1.0", - "request": "^2.83.0", + "request": "^2.87.0", "request-promise-native": "^1.0.5", "sax": "^1.2.4", "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.3", + "tough-cookie": "^2.3.4", "w3c-hr-time": "^1.0.1", "webidl-conversions": "^4.0.2", "whatwg-encoding": "^1.0.3", "whatwg-mimetype": "^2.1.0", "whatwg-url": "^6.4.1", - "ws": "^4.0.0", + "ws": "^5.2.0", "xml-name-validator": "^3.0.0" } }, @@ -10519,12 +10528,6 @@ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, - "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 - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10532,23 +10535,14 @@ "dev": true }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "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" } }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, "whatwg-url": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", @@ -10559,12 +10553,6 @@ "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true } } }, @@ -10664,14 +10652,14 @@ } }, "jest-enzyme": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/jest-enzyme/-/jest-enzyme-6.0.2.tgz", - "integrity": "sha1-vEZBad5sLVBgLgK7yUZEYFB/spU=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/jest-enzyme/-/jest-enzyme-7.0.1.tgz", + "integrity": "sha512-IpHjNin+7bsRthciMMo5HVA9TTKZCsBkOPsS4qdIZvImZx94no362wwPeustn0SY/REyXm39wHPsORknuXUWmA==", "dev": true, "requires": { - "enzyme-matchers": "^6.0.2", + "enzyme-matchers": "^7.0.1", "enzyme-to-json": "^3.3.0", - "jest-environment-enzyme": "^6.0.2" + "jest-environment-enzyme": "^7.0.1" } }, "jest-get-type": { @@ -11479,9 +11467,9 @@ "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" }, "js-base64": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.0.tgz", + "integrity": "sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g==", "dev": true }, "js-levenshtein": { @@ -12119,6 +12107,12 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", + "dev": true + }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -12138,14 +12132,10 @@ "dev": true }, "lodash.isequal": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-3.0.4.tgz", - "integrity": "sha1-HDXrO27wzR/1F0Pj6jz3/f/ay2Q=", - "dev": true, - "requires": { - "lodash._baseisequal": "^3.0.0", - "lodash._bindcallback": "^3.0.0" - } + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true }, "lodash.isfunction": { "version": "3.0.9", @@ -12321,12 +12311,6 @@ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -12635,6 +12619,12 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz", "integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==" }, + "moo": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "dev": true + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -12746,21 +12736,22 @@ "dev": true }, "nearley": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.13.0.tgz", - "integrity": "sha512-ioYYogSaZhFlCpRizQgY3UT3G1qFXmHGY/5ozoFE3dMfiCRAeJfh+IPE3/eh9gCZvqLhPCWb4bLt7Bqzo+1mLQ==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.16.0.tgz", + "integrity": "sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg==", "dev": true, "requires": { - "nomnom": "~1.6.2", + "commander": "^2.19.0", + "moo": "^0.4.3", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6", "semver": "^5.4.1" }, "dependencies": { "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true } } @@ -12793,9 +12784,9 @@ } }, "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", "dev": true }, "node-forge": { @@ -12918,9 +12909,9 @@ } }, "node-sass": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.4.tgz", - "integrity": "sha512-MXyurANsUoE4/6KmfMkwGcBzAnJQ5xJBGW7Ei6ea8KnUKuzHr/SguVBIi3uaUAHtZCPUYkvlJ3Ef5T5VAwVpaA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", + "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -12944,6 +12935,18 @@ "true-case-path": "^1.0.2" }, "dependencies": { + "ajv": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", @@ -12965,16 +12968,28 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, + "fast-deep-equal": { + "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 + }, "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" } }, + "json-schema-traverse": { + "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 + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -13034,79 +13049,19 @@ } }, "node-sass-chokidar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-sass-chokidar/-/node-sass-chokidar-1.3.0.tgz", - "integrity": "sha512-g8n2RUSo3nBSmqo6ShD2uyDjuN7X81YyuJO253VDw7bkL84TQ4DEO0MpD7gpsWMUL44avQigHgOL+peLD8Uwuw==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/node-sass-chokidar/-/node-sass-chokidar-1.3.4.tgz", + "integrity": "sha512-AEKBr58QFzU37Ubud90K1n+ljEpTDekJm5UCS8ZyoWgHoz2qx8f2vAaN8rECbqF1vYPid64NZBh98AKzHh9D9A==", "dev": true, "requires": { "async-foreach": "^0.1.3", - "chokidar": "^1.6.1", + "chokidar": "^2.0.4", "get-stdin": "^4.0.1", "glob": "^7.0.3", "meow": "^3.7.0", - "node-sass": "^4.7.2", + "node-sass": "^4.9.3", "sass-graph": "^2.1.1", "stdout-stream": "^1.4.0" - }, - "dependencies": { - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "nomnom": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", - "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", - "dev": true, - "requires": { - "colors": "0.5.x", - "underscore": "~1.4.4" - }, - "dependencies": { - "colors": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", - "dev": true - } } }, "nopt": { @@ -13152,17 +13107,17 @@ "dev": true }, "npm-run-all": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.3.tgz", - "integrity": "sha512-aOG0N3Eo/WW+q6sUIdzcV2COS8VnTZCmdji0VQIAZF3b+a3YWb0AD0vFIyjKec18A7beLGbaQ5jFTNI2bPt9Cg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.4", + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", "memorystream": "^0.3.1", "minimatch": "^3.0.4", - "ps-tree": "^1.1.0", + "pidtree": "^0.3.0", "read-pkg": "^3.0.0", "shell-quote": "^1.6.1", "string.prototype.padend": "^3.0.0" @@ -13178,9 +13133,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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", @@ -13189,20 +13144,14 @@ } }, "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "1.1.1" + "color-name": "1.1.3" } }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -13216,12 +13165,6 @@ "which": "^1.2.9" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -13234,15 +13177,6 @@ "strip-bom": "^3.0.0" } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -13280,21 +13214,15 @@ } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "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" @@ -13345,9 +13273,9 @@ "dev": true }, "nwsapi": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.4.tgz", - "integrity": "sha512-Zt6HRR6RcJkuj5/N9zeE7FN6YitRW//hK2wTOwX274IBphbY3Zf5+yn5mZ9v/SzAOTMjQNxZf9KkmPLWn0cV4g==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", + "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", "dev": true }, "oauth-sign": { @@ -13437,15 +13365,81 @@ } }, "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + } } }, "object.getownpropertydescriptors": { @@ -13843,15 +13837,6 @@ } } }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -13876,6 +13861,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "pidtree": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", + "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -13956,9 +13947,9 @@ "dev": true }, "popper.js": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.3.tgz", - "integrity": "sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU=" + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.6.tgz", + "integrity": "sha512-AGwHGQBKumlk/MDfrSOf0JHhJCImdDMcGNoqKmKkU+68GFazv3CQ6q9r7Ja1sKDZmYWTckY/uLyEznheTDycnA==" }, "portfinder": { "version": "1.0.20", @@ -18277,9 +18268,9 @@ "dev": true }, "prettier": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.3.tgz", - "integrity": "sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", + "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==", "dev": true }, "pretty-bytes": { @@ -18383,29 +18374,12 @@ } }, "prop-types": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", "requires": { - "fbjs": "^0.8.16", "loose-envify": "^1.3.1", "object-assign": "^4.1.1" - }, - "dependencies": { - "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.9" - } - } } }, "prop-types-extra": { @@ -18433,15 +18407,6 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", - "dev": true, - "requires": { - "event-stream": "~3.3.0" - } - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -18652,14 +18617,14 @@ } }, "react": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.4.1.tgz", - "integrity": "sha512-3GEs0giKp6E0Oh/Y9ZC60CmYgUPnp7voH9fbjWsvXtYFb4EWtgQub0ADSq0sJR0BbHc4FThLLtzlcFaFXIorwg==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz", + "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==", "requires": { - "fbjs": "^0.8.16", "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "prop-types": "^15.6.2", + "scheduler": "^0.12.0" } }, "react-app-polyfill": { @@ -18762,9 +18727,9 @@ } }, "react-chartjs-2": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-2.7.2.tgz", - "integrity": "sha512-ncTSOZjlI9j3aXGbsiXEoCtb6oS5nixYe9wLWK+3af1aq7K/vcFkzA9faA5Z/q+fgMDWLEa078cWAyzymxvvYg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-2.7.4.tgz", + "integrity": "sha512-lXTpBaDlk9rIMjRONjZd76dIUhEm3vOp2jOrJrsFG/UpFI5VqX8Xw83apVHTnUGJ968f8i/i/syLddls4NHy2g==", "requires": { "lodash": "^4.17.4", "prop-types": "^15.5.8" @@ -19023,14 +18988,14 @@ } }, "react-dom": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", - "integrity": "sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz", + "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==", "requires": { - "fbjs": "^0.8.16", "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "prop-types": "^15.6.2", + "scheduler": "^0.12.0" } }, "react-error-overlay": { @@ -19040,42 +19005,21 @@ "dev": true }, "react-i18next": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-7.6.1.tgz", - "integrity": "sha512-fyS70F3/YncuR9+h2VcmGQJOGmv0eUHMyjTPmaIDzrNRKxFnGcqgu7BFPC+69WJjZG2dTHBEhwEzmqi7Ia+qNQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-9.0.3.tgz", + "integrity": "sha512-N03buTFvhdMQsZMV5Bl283HNQpVfRmfCjUTvxxH3FieiQgDB4tcTgkPYj192CfxujNFfyKEj10hnN0Y670JPKQ==", "requires": { - "hoist-non-react-statics": "^2.3.1", - "html-parse-stringify2": "2.0.1", - "prop-types": "^15.6.0" + "@babel/runtime": "^7.1.2", + "hoist-non-react-statics": "3.0.1", + "html-parse-stringify2": "2.0.1" }, "dependencies": { - "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.9" - } - }, "hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" - }, - "prop-types": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.0.1.tgz", + "integrity": "sha512-1kXwPsOi0OGQIZNVMPvgWJ9tSnGMiMfJdihqEzrPEXlHOBh9AAHXX/QYmAJTXztnz/K+PQ8ryCb4eGaN6HlGbQ==", "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "react-is": "^16.3.2" } } } @@ -19085,6 +19029,16 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.4.1.tgz", "integrity": "sha512-xpb0PpALlFWNw/q13A+1aHeyJyLYCg0/cCHPUA43zYluZuIPHaHL3k8OBsTgQtxqW0FhyDEMvi8fZ/+7+r4OSQ==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-onclickout": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/react-onclickout/-/react-onclickout-2.0.8.tgz", + "integrity": "sha1-0XixP7h6SBNWdhtFSqYN9wabLaQ=" + }, "react-onclickoutside": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz", @@ -19104,14 +19058,12 @@ } }, "react-perfect-scrollbar": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/react-perfect-scrollbar/-/react-perfect-scrollbar-1.1.1.tgz", - "integrity": "sha512-pwCaygwZoJ3vi3wMKi/gvVkWgyDq3tCrtvuPzILya/fwTjjnE6eHG2vMGcPjmxOaxSka1ydOQrfAiUM/pCoKVg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/react-perfect-scrollbar/-/react-perfect-scrollbar-1.4.4.tgz", + "integrity": "sha512-Ivu3I8LiwJs4ZSxl0dS39uhtzElBQo1wTW2d+9CkR08UBGp9zWXWDVlG4AYGP3jGJrQZQIsBCznRROR0j6l3HQ==", "requires": { - "perfect-scrollbar": "^1.3.0", - "prop-types": "*", - "react": "^16.3.1", - "react-dom": "^16.3.1" + "perfect-scrollbar": "^1.4.0", + "prop-types": "^15.6.1" } }, "react-popper": { @@ -19123,18 +19075,6 @@ "prop-types": "^15.6.1" } }, - "react-reconciler": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.7.0.tgz", - "integrity": "sha512-50JwZ3yNyMS8fchN+jjWEJOH3Oze7UmhxeoJLn2j6f3NjpfCRbcmih83XTWmzqtar/ivd5f7tvQhvvhism2fgg==", - "dev": true, - "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" - } - }, "react-router": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", @@ -19306,47 +19246,83 @@ } }, "react-table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/react-table/-/react-table-6.8.2.tgz", - "integrity": "sha1-Olrvq8hZUzANFnhvowfDBhDbmtw=", + "version": "6.8.6", + "resolved": "https://registry.npmjs.org/react-table/-/react-table-6.8.6.tgz", + "integrity": "sha1-oK2LSDkxkFLVvvwBJgP7Fh5S7eM=", "requires": { "classnames": "^2.2.5" } }, "react-test-renderer": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.4.1.tgz", - "integrity": "sha512-wyyiPxRZOTpKnNIgUBOB6xPLTpIzwcQMIURhZvzUqZzezvHjaGNsDPBhMac5fIY3Jf5NuKxoGvV64zDSOECPPQ==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.7.0.tgz", + "integrity": "sha512-tFbhSjknSQ6+ttzmuGdv+SjQfmvGcq3PFKyPItohwhhOBmRoTf1We3Mlt3rJtIn85mjPXOkKV+TaKK4irvk9Yg==", "dev": true, "requires": { - "fbjs": "^0.8.16", "object-assign": "^4.1.1", - "prop-types": "^15.6.0", - "react-is": "^16.4.1" + "prop-types": "^15.6.2", + "react-is": "^16.7.0", + "scheduler": "^0.12.0" + }, + "dependencies": { + "react-is": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz", + "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==", + "dev": true + } } }, "react-transition-group": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.3.1.tgz", - "integrity": "sha512-hu4/LAOFSKjWt1+1hgnOv3ldxmt6lvZGTWz4KUkFrqzXrNDIVSu6txIcPszw7PNduR8en9YTN55JLRyd/L1ZiQ==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.5.3.tgz", + "integrity": "sha512-2DGFck6h99kLNr8pOFk+z4Soq3iISydwOFeeEVPjTN6+Y01CmvbWmnN02VuTWyFdnRtIDPe+wy2q6Ui8snBPZg==", "requires": { "dom-helpers": "^3.3.1", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1" + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + }, + "dependencies": { + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + } } }, "reactstrap": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-6.1.0.tgz", - "integrity": "sha512-ClxPR2aNGlnwxCI6tv9jRXA1MnsBSFs/Mus2cUJRVMGEEBuMoENhXilCCtR7yoQS0yJMmgGjM/Z37zRRy0k05g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-7.1.0.tgz", + "integrity": "sha512-wtc4RkgnGn1TsZ0AxOZ2OqT+b8YmCWZj/tErPujWLepxzlEEhveZGC+uDerdaHVSAzJUP2DTk605iper7hutQQ==", "requires": { + "@babel/runtime": "^7.2.0", "classnames": "^2.2.3", "lodash.isfunction": "^3.0.9", "lodash.isobject": "^3.0.2", "lodash.tonumber": "^4.0.3", "prop-types": "^15.5.8", + "react-lifecycles-compat": "^3.0.4", "react-popper": "^0.10.4", "react-transition-group": "^2.3.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", + "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + } } }, "read-pkg": { @@ -20309,31 +20285,6 @@ "lodash": "^4.0.0", "scss-tokenizer": "^0.2.3", "yargs": "^7.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } } }, "sass-loader": { @@ -20425,6 +20376,15 @@ "xmlchars": "^1.3.1" } }, + "scheduler": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", + "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -21057,15 +21017,6 @@ } } }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2" - } - }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -21155,50 +21106,12 @@ "dev": true }, "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "dev": true, "requires": { "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "stealthy-require": { @@ -21217,15 +21130,6 @@ "readable-stream": "^2.0.2" } }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, "stream-each": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", @@ -21304,6 +21208,17 @@ "function-bind": "^1.0.2" } }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" + } + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -22070,11 +21985,6 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "ua-parser-js": { - "version": "0.7.14", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.14.tgz", - "integrity": "sha1-EQ1T+kw/MmwSEpK76skE0uAzh8o=" - }, "uglify-js": { "version": "3.4.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", @@ -22246,12 +22156,6 @@ } } }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", - "dev": true - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -23749,13 +23653,12 @@ } }, "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" + "async-limiter": "~1.0.0" } }, "xml-name-validator": { diff --git a/package.json b/package.json index 27f10b0..3f7b857 100644 --- a/package.json +++ b/package.json @@ -4,46 +4,46 @@ "private": true, "homepage": "/admin", "devDependencies": { - "enzyme": "^3.3.0", - "enzyme-adapter-react-16": "^1.1.1", + "enzyme": "^3.8.0", + "enzyme-adapter-react-16": "^1.7.1", "faker": "^4.1.0", - "fetch-mock": "^6.5.0", - "fs-extra": "^6.0.0", - "jest-enzyme": "^6.0.2", + "fetch-mock": "^7.3.0", + "fs-extra": "^7.0.1", + "jest-enzyme": "^7.0.1", "multi-progress": "^2.0.0", - "node-fetch": "^2.1.2", - "node-sass-chokidar": "^1.3.0", - "npm-run-all": "^4.1.3", - "prettier": "^1.14.3", + "node-fetch": "^2.3.0", + "node-sass-chokidar": "^1.3.4", + "npm-run-all": "^4.1.5", + "prettier": "^1.15.3", "react-scripts": "^2.1.3", - "react-test-renderer": "^16.4.1" + "react-test-renderer": "^16.7.0" }, "dependencies": { - "@coreui/coreui": "^2.0.2", + "@coreui/coreui": "^2.1.6", "@coreui/coreui-plugin-chartjs-custom-tooltips": "^1.2.0", - "@coreui/icons": "0.2.0", - "@coreui/react": "^2.0.4", + "@coreui/icons": "0.3.0", + "@coreui/react": "^2.1.3", "@fortawesome/fontawesome-free": "^5.6.3", - "bootstrap": "^4.1.1", + "bootstrap": "^4.2.1", "bootstrap-daterangepicker": "^3.0.3", - "chart.js": "^2.7.2", - "i18next": "^11.3.2", - "i18next-browser-languagedetector": "^2.2.0", + "chart.js": "^2.7.3", + "i18next": "^13.1.4", + "i18next-browser-languagedetector": "^2.2.4", "i18next-xhr-backend": "^1.5.1", - "ionicons": "^3.0.0", + "ionicons": "^4.5.1", "lodash.debounce": "^4.0.8", "moment": "^2.23.0", - "prop-types": "^15.6.1", - "react": "^16.4.1", + "prop-types": "^15.6.2", + "react": "^16.7.0", "react-bootstrap-daterangepicker": "^4.1.0", "react-bootstrap-typeahead": "^3.2.4", - "react-chartjs-2": "^2.7.2", - "react-dom": "^16.4.1", - "react-i18next": "^7.6.1", + "react-chartjs-2": "^2.7.4", + "react-dom": "^16.7.0", + "react-i18next": "^9.0.3", "react-router-dom": "^4.3.1", - "react-table": "^6.8.2", - "react-transition-group": "^2.3.1", - "reactstrap": "^6.1.0", + "react-table": "^6.8.6", + "react-transition-group": "^2.5.3", + "reactstrap": "^7.1.0", "sha.js": "^2.4.11", "simple-line-icons": "^2.4.1" }, diff --git a/src/components/common/Alert.js b/src/components/common/Alert.js index 8669ee3..40437d3 100644 --- a/src/components/common/Alert.js +++ b/src/components/common/Alert.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Alert component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Alert component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import PropTypes from "prop-types"; diff --git a/src/components/common/Alert.test.js b/src/components/common/Alert.test.js index 5f33193..9596dee 100644 --- a/src/components/common/Alert.test.js +++ b/src/components/common/Alert.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Alert component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Alert component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/common/BoxedLayoutButton.js b/src/components/common/BoxedLayoutButton.js index 8ff17e1..070347d 100755 --- a/src/components/common/BoxedLayoutButton.js +++ b/src/components/common/BoxedLayoutButton.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2018 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Boxed layout button -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Boxed layout button + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; diff --git a/src/components/common/BoxedLayoutButton.test.js b/src/components/common/BoxedLayoutButton.test.js index 8785a9f..08a55e5 100644 --- a/src/components/common/BoxedLayoutButton.test.js +++ b/src/components/common/BoxedLayoutButton.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* BoxedLayoutButton component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * BoxedLayoutButton component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/common/Footer.js b/src/components/common/Footer.js index ff79d34..7c9de0d 100644 --- a/src/components/common/Footer.js +++ b/src/components/common/Footer.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Footer component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Footer component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import FooterUpdateStatus from "./FooterUpdateStatus"; const Footer = props => { @@ -32,4 +32,4 @@ const Footer = props => { ); }; -export default translate(["common", "footer"])(Footer); +export default withNamespaces(["common", "footer"])(Footer); diff --git a/src/components/common/Footer.test.js b/src/components/common/Footer.test.js index 405b9e4..5ba3a5b 100644 --- a/src/components/common/Footer.test.js +++ b/src/components/common/Footer.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Footer component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Footer component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/common/FooterUpdateStatus.js b/src/components/common/FooterUpdateStatus.js index 1cdb7c1..53dddf2 100644 --- a/src/components/common/FooterUpdateStatus.js +++ b/src/components/common/FooterUpdateStatus.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* FooterUpdateStatus component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * FooterUpdateStatus component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { Link } from "react-router-dom"; const FooterUpdateStatus = props => { @@ -27,4 +27,4 @@ const FooterUpdateStatus = props => { } }; -export default translate("footer")(FooterUpdateStatus); +export default withNamespaces("footer")(FooterUpdateStatus); diff --git a/src/components/common/Header.js b/src/components/common/Header.js index 61c15ce..7c52f2b 100644 --- a/src/components/common/Header.js +++ b/src/components/common/Header.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Header component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Header component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { Link } from "react-router-dom"; diff --git a/src/components/common/NavButton.js b/src/components/common/NavButton.js index c480fa0..83edd74 100644 --- a/src/components/common/NavButton.js +++ b/src/components/common/NavButton.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* A button in the sidebar -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * A button in the sidebar + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ /* eslint-disable jsx-a11y/anchor-is-valid */ diff --git a/src/components/common/NavDropdown.js b/src/components/common/NavDropdown.js index 12a7340..a76c42c 100644 --- a/src/components/common/NavDropdown.js +++ b/src/components/common/NavDropdown.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* A dropdown in the sidebar -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * A dropdown in the sidebar + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ /* eslint-disable jsx-a11y/anchor-is-valid */ diff --git a/src/components/common/Sidebar.js b/src/components/common/Sidebar.js index ca793bd..70e737a 100644 --- a/src/components/common/Sidebar.js +++ b/src/components/common/Sidebar.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Sidebar component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Sidebar component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { NavLink } from "react-router-dom"; import { Nav, NavItem } from "reactstrap"; import logo from "../../img/logo.svg"; @@ -102,4 +102,4 @@ const Sidebar = ({ items, ...props }) => { ); }; -export default translate(["common", "location"])(Sidebar); +export default withNamespaces(["common", "location"])(Sidebar); diff --git a/src/components/common/Sidebar.test.js b/src/components/common/Sidebar.test.js index 2f5f5a7..3c6176c 100644 --- a/src/components/common/Sidebar.test.js +++ b/src/components/common/Sidebar.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Sidebar component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Sidebar component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/common/StatusBadge.js b/src/components/common/StatusBadge.js index ce1a9c7..a6b7dbb 100644 --- a/src/components/common/StatusBadge.js +++ b/src/components/common/StatusBadge.js @@ -1,3 +1,13 @@ +/* Pi-hole: A black hole for Internet advertisements + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Status badge component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ + import React, { Component } from "react"; import PropTypes from "prop-types"; import { translate } from "react-i18next"; diff --git a/src/components/common/StatusBadge.test.js b/src/components/common/StatusBadge.test.js index 534dd46..6e1e17c 100644 --- a/src/components/common/StatusBadge.test.js +++ b/src/components/common/StatusBadge.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* SummaryStats component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * SummaryStats component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/common/WithAPIData.js b/src/components/common/WithAPIData.js index eb0c88a..575d393 100644 --- a/src/components/common/WithAPIData.js +++ b/src/components/common/WithAPIData.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* WithAPIData Component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * WithAPIData Component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import { Component } from "react"; import PropTypes from "prop-types"; diff --git a/src/components/dashboard/ChartTooltip.js b/src/components/dashboard/ChartTooltip.js index e5238c0..ecd0401 100644 --- a/src/components/dashboard/ChartTooltip.js +++ b/src/components/dashboard/ChartTooltip.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Chart Tooltip component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Chart Tooltip component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; @@ -67,10 +67,12 @@ class ChartTooltip extends Component { // Transform and sort the tooltip data let data = []; if (tooltip.body) { - data = tooltip.body.map(body => body.lines).map((item, i) => ({ - data: item[0], - colors: tooltip.labelColors[i] - })); + data = tooltip.body + .map(body => body.lines) + .map((item, i) => ({ + data: item[0], + colors: tooltip.labelColors[i] + })); } data.sort((a, b) => a.data.split(": ")[0].localeCompare(b.data.split(": ")[0]) diff --git a/src/components/dashboard/ClientsGraph.js b/src/components/dashboard/ClientsGraph.js index 3ed3ebf..0d2e992 100644 --- a/src/components/dashboard/ClientsGraph.js +++ b/src/components/dashboard/ClientsGraph.js @@ -1,18 +1,18 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Clients Graph component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Clients Graph component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import ReactDOM from "react-dom"; import PropTypes from "prop-types"; import { Line } from "react-chartjs-2"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { padNumber } from "../../util"; import api from "../../util/api"; import ChartTooltip from "./ChartTooltip"; @@ -193,7 +193,7 @@ export const loadingProps = { datasets: [] }; -export const TranslatedClientsGraph = translate("dashboard")(ClientsGraph); +export const TranslatedClientsGraph = withNamespaces("dashboard")(ClientsGraph); export default props => ( { i < colors.length ? colors[i] : "#" + - parseInt("" + Math.random() * 0xffffff, 10) - .toString(16) - .padStart(6, "0") + parseInt("" + Math.random() * 0xffffff, 10) + .toString(16) + .padStart(6, "0") ); i++; diff --git a/src/components/dashboard/GenericDoughnutChart.test.js b/src/components/dashboard/GenericDoughnutChart.test.js index 399dd52..c9f90a2 100644 --- a/src/components/dashboard/GenericDoughnutChart.test.js +++ b/src/components/dashboard/GenericDoughnutChart.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* GenericDoughnutChart component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * GenericDoughnutChart component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/dashboard/QueriesGraph.js b/src/components/dashboard/QueriesGraph.js index 4245919..7c43ba5 100644 --- a/src/components/dashboard/QueriesGraph.js +++ b/src/components/dashboard/QueriesGraph.js @@ -1,17 +1,17 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Queries Graph component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Queries Graph component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; import { Line } from "react-chartjs-2"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { padNumber } from "../../util"; import api from "../../util/api"; import { WithAPIData } from "../common/WithAPIData"; @@ -183,7 +183,7 @@ export const loadingProps = { blocked_over_time: [] }; -export const TranslatedQueriesGraph = translate("dashboard")(QueriesGraph); +export const TranslatedQueriesGraph = withNamespaces("dashboard")(QueriesGraph); export default props => ( ( /> ); -export default translate("dashboard")(QueryTypesChart); +export default withNamespaces("dashboard")(QueryTypesChart); diff --git a/src/components/dashboard/SummaryStats.js b/src/components/dashboard/SummaryStats.js index 4a54c93..bdb811e 100644 --- a/src/components/dashboard/SummaryStats.js +++ b/src/components/dashboard/SummaryStats.js @@ -1,16 +1,16 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Summary Stats component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Summary Stats component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component, Fragment } from "react"; import PropTypes from "prop-types"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { WithAPIData } from "../common/WithAPIData"; import api from "../../util/api"; @@ -129,7 +129,7 @@ export const initialProps = { uniqueClients: "---" }; -export const TranslatedSummaryStats = translate(["common", "dashboard"])( +export const TranslatedSummaryStats = withNamespaces(["common", "dashboard"])( SummaryStats ); diff --git a/src/components/dashboard/SummaryStats.test.js b/src/components/dashboard/SummaryStats.test.js index 1808986..4749387 100644 --- a/src/components/dashboard/SummaryStats.test.js +++ b/src/components/dashboard/SummaryStats.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* SummaryStats component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * SummaryStats component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/dashboard/TopBlocked.js b/src/components/dashboard/TopBlocked.js index a284f08..8141f97 100644 --- a/src/components/dashboard/TopBlocked.js +++ b/src/components/dashboard/TopBlocked.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Top Blocked component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Top Blocked component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../../util/api"; import TopTable from "./TopTable"; @@ -74,4 +74,4 @@ const TopBlocked = ({ t, ...props }) => ( /> ); -export default translate(["common", "dashboard"])(TopBlocked); +export default withNamespaces(["common", "dashboard"])(TopBlocked); diff --git a/src/components/dashboard/TopBlocked.test.js b/src/components/dashboard/TopBlocked.test.js index 2bd92e4..9821d34 100644 --- a/src/components/dashboard/TopBlocked.test.js +++ b/src/components/dashboard/TopBlocked.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* TopBlocked component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * TopBlocked component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { transformData, generateRows } from "./TopBlocked"; diff --git a/src/components/dashboard/TopClients.js b/src/components/dashboard/TopClients.js index 6e78b04..a57e934 100644 --- a/src/components/dashboard/TopClients.js +++ b/src/components/dashboard/TopClients.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Top Clients component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Top Clients component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../../util/api"; import TopTable from "./TopTable"; @@ -74,4 +74,4 @@ const TopClients = ({ t, ...props }) => ( /> ); -export default translate(["common", "dashboard"])(TopClients); +export default withNamespaces(["common", "dashboard"])(TopClients); diff --git a/src/components/dashboard/TopClients.test.js b/src/components/dashboard/TopClients.test.js index 5a7e5c4..d94f40c 100644 --- a/src/components/dashboard/TopClients.test.js +++ b/src/components/dashboard/TopClients.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* TopClients component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * TopClients component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { transformData, generateRows } from "./TopClients"; diff --git a/src/components/dashboard/TopDomains.js b/src/components/dashboard/TopDomains.js index e4f8263..778deed 100644 --- a/src/components/dashboard/TopDomains.js +++ b/src/components/dashboard/TopDomains.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Top Domains component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Top Domains component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../../util/api"; import TopTable from "./TopTable"; @@ -74,4 +74,4 @@ const TopDomains = ({ t, ...props }) => ( /> ); -export default translate(["common", "dashboard"])(TopDomains); +export default withNamespaces(["common", "dashboard"])(TopDomains); diff --git a/src/components/dashboard/TopDomains.test.js b/src/components/dashboard/TopDomains.test.js index 97bc8d8..c2473b9 100644 --- a/src/components/dashboard/TopDomains.test.js +++ b/src/components/dashboard/TopDomains.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* TopDomains component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * TopDomains component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { generateRows, transformData } from "./TopDomains"; diff --git a/src/components/dashboard/TopTable.js b/src/components/dashboard/TopTable.js index d5abb5c..f8fb645 100644 --- a/src/components/dashboard/TopTable.js +++ b/src/components/dashboard/TopTable.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Generic top items component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Generic top items component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; diff --git a/src/components/dashboard/TopTable.test.js b/src/components/dashboard/TopTable.test.js index b1d3cc4..fe10196 100644 --- a/src/components/dashboard/TopTable.test.js +++ b/src/components/dashboard/TopTable.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* TopTable component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * TopTable component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/dashboard/UpstreamsChart.js b/src/components/dashboard/UpstreamsChart.js index d73fd38..54c9eff 100644 --- a/src/components/dashboard/UpstreamsChart.js +++ b/src/components/dashboard/UpstreamsChart.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Upstream Servers / Forward Destinations Chart component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Upstream Servers / Forward Destinations Chart component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../../util/api"; import GenericDoughnutChart from "./GenericDoughnutChart"; @@ -27,4 +27,4 @@ const UpstreamsChart = ({ t }) => ( /> ); -export default translate("dashboard")(UpstreamsChart); +export default withNamespaces("dashboard")(UpstreamsChart); diff --git a/src/components/list/DomainInput.js b/src/components/list/DomainInput.js index 8429e72..5b243c1 100644 --- a/src/components/list/DomainInput.js +++ b/src/components/list/DomainInput.js @@ -1,16 +1,16 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Domain Input component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Domain Input component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../../util/api"; class DomainInput extends Component { @@ -86,4 +86,4 @@ DomainInput.defaultProps = { placeholder: "" }; -export default translate(["common", "lists"])(DomainInput); +export default withNamespaces(["common", "lists"])(DomainInput); diff --git a/src/components/list/DomainInput.test.js b/src/components/list/DomainInput.test.js index a0f17b3..e5a54ae 100644 --- a/src/components/list/DomainInput.test.js +++ b/src/components/list/DomainInput.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* DomainInput component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * DomainInput component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/list/DomainList.js b/src/components/list/DomainList.js index 59c2db1..a071e9d 100644 --- a/src/components/list/DomainList.js +++ b/src/components/list/DomainList.js @@ -1,16 +1,16 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Domain List component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Domain List component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import PropTypes from "prop-types"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../../util/api"; import { Button } from "reactstrap"; @@ -64,4 +64,4 @@ DomainList.propTypes = { onRemove: PropTypes.func.isRequired }; -export default translate(["common", "lists"])(DomainList); +export default withNamespaces(["common", "lists"])(DomainList); diff --git a/src/components/list/DomainList.test.js b/src/components/list/DomainList.test.js index 9e41556..681f6d9 100644 --- a/src/components/list/DomainList.test.js +++ b/src/components/list/DomainList.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* DomainList component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * DomainList component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/list/ListPage.js b/src/components/list/ListPage.js index 3f844c8..243785d 100644 --- a/src/components/list/ListPage.js +++ b/src/components/list/ListPage.js @@ -1,16 +1,16 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* List Page component (abstracted whitelist, blacklist, etc) -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * List Page component (abstracted whitelist, blacklist, etc) + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import DomainInput from "./DomainInput"; import Alert from "../common/Alert"; import DomainList from "./DomainList"; @@ -165,4 +165,4 @@ class ListPage extends Component { } } -export default translate(["common", "lists"])(ListPage); +export default withNamespaces(["common", "lists"])(ListPage); diff --git a/src/components/list/ListPage.test.js b/src/components/list/ListPage.test.js index 112a264..7f15358 100644 --- a/src/components/list/ListPage.test.js +++ b/src/components/list/ListPage.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* ListPage component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * ListPage component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/log/QueryLog.js b/src/components/log/QueryLog.js index 5230aaf..840ca53 100644 --- a/src/components/log/QueryLog.js +++ b/src/components/log/QueryLog.js @@ -1,19 +1,19 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Query Log component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Query Log component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component, Fragment } from "react"; import ReactTable from "react-table"; import DateRangePicker from "react-bootstrap-daterangepicker"; import { Button } from "reactstrap"; import i18n from "i18next"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import debounce from "lodash.debounce"; import moment from "moment"; import { ignoreCancel, makeCancelable, padNumber } from "../../util"; @@ -518,4 +518,4 @@ const columns = t => [ } ]; -export default translate(["common", "query-log"])(QueryLog); +export default withNamespaces(["common", "query-log"])(QueryLog); diff --git a/src/components/login/ForgotPassword.js b/src/components/login/ForgotPassword.js index 85f7e8b..bfa2caa 100644 --- a/src/components/login/ForgotPassword.js +++ b/src/components/login/ForgotPassword.js @@ -1,16 +1,16 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Forgot Password Reminder -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Forgot Password Reminder + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; class ForgotPassword extends Component { state = { @@ -85,4 +85,4 @@ ForgotPassword.propTypes = { error: PropTypes.bool.isRequired }; -export default translate("login")(ForgotPassword); +export default withNamespaces("login")(ForgotPassword); diff --git a/src/components/login/ForgotPassword.test.js b/src/components/login/ForgotPassword.test.js index 602fdab..9e83523 100644 --- a/src/components/login/ForgotPassword.test.js +++ b/src/components/login/ForgotPassword.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* ForgotPassword component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * ForgotPassword component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/settings/ConditionalForwardingSettings.js b/src/components/settings/ConditionalForwardingSettings.js index 39daf87..326cbaf 100644 --- a/src/components/settings/ConditionalForwardingSettings.js +++ b/src/components/settings/ConditionalForwardingSettings.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings :: DNS :: Upstream DNS Servers -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings :: DNS :: Upstream DNS Servers + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Fragment } from "react"; import PropTypes from "prop-types"; diff --git a/src/components/settings/DHCPInfo.js b/src/components/settings/DHCPInfo.js index 2063ec0..407fb42 100644 --- a/src/components/settings/DHCPInfo.js +++ b/src/components/settings/DHCPInfo.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings :: DHCP -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings :: DHCP + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { ignoreCancel, makeCancelable } from "../../util"; import api from "../../util/api"; import { @@ -308,4 +308,4 @@ class DHCPInfo extends Component { } } -export default translate(["common", "settings", "api-errors"])(DHCPInfo); +export default withNamespaces(["common", "settings", "api-errors"])(DHCPInfo); diff --git a/src/components/settings/DHCPInfo.test.js b/src/components/settings/DHCPInfo.test.js index 4a4b23d..fde1cf2 100644 --- a/src/components/settings/DHCPInfo.test.js +++ b/src/components/settings/DHCPInfo.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* DHCPInfo component test -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * DHCPInfo component test + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import { shallow } from "enzyme"; diff --git a/src/components/settings/DNSInfo.js b/src/components/settings/DNSInfo.js index 3aa5cc6..a4a0495 100644 --- a/src/components/settings/DNSInfo.js +++ b/src/components/settings/DNSInfo.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings :: DNS -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings :: DNS + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { ignoreCancel, makeCancelable } from "../../util"; import api from "../../util/api"; import DnsList from "./DnsList"; @@ -229,4 +229,4 @@ class DNSInfo extends Component { } } -export default translate(["common", "settings"])(DNSInfo); +export default withNamespaces(["common", "settings"])(DNSInfo); diff --git a/src/components/settings/DnsList.js b/src/components/settings/DnsList.js index 7beaee2..84597de 100644 --- a/src/components/settings/DnsList.js +++ b/src/components/settings/DnsList.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* An Editable List of Upstream DNS Servers -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * An Editable List of Upstream DNS Servers + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import PropTypes from "prop-types"; diff --git a/src/components/settings/DnsListItem.js b/src/components/settings/DnsListItem.js index 7131f04..fecf7b2 100644 --- a/src/components/settings/DnsListItem.js +++ b/src/components/settings/DnsListItem.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* A Upstream DNS List Item -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * A Upstream DNS List Item + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import PropTypes from "prop-types"; diff --git a/src/components/settings/DnsListNewItem.js b/src/components/settings/DnsListNewItem.js index cd7e238..3f4621a 100644 --- a/src/components/settings/DnsListNewItem.js +++ b/src/components/settings/DnsListNewItem.js @@ -1,18 +1,18 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Input For New DNS List Items -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Input For New DNS List Items + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; import { Button, InputGroup, InputGroupAddon, ListGroupItem } from "reactstrap"; import { Typeahead } from "react-bootstrap-typeahead"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { preconfiguredUpstreamOptions } from "./preconfiguredUpstreams"; /** @@ -92,4 +92,4 @@ class DnsListNewItem extends Component { } } -export default translate("settings")(DnsListNewItem); +export default withNamespaces("settings")(DnsListNewItem); diff --git a/src/components/settings/DnsOptionSettings.js b/src/components/settings/DnsOptionSettings.js index 782d58f..7faa201 100644 --- a/src/components/settings/DnsOptionSettings.js +++ b/src/components/settings/DnsOptionSettings.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings :: DNS :: DNS Options -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings :: DNS :: DNS Options + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Fragment } from "react"; import PropTypes from "prop-types"; diff --git a/src/components/settings/FTLInfo.js b/src/components/settings/FTLInfo.js index 52e9f27..5a272b4 100644 --- a/src/components/settings/FTLInfo.js +++ b/src/components/settings/FTLInfo.js @@ -1,16 +1,16 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings :: FTL Information component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings :: FTL Information component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../../util/api"; import { WithAPIData } from "../common/WithAPIData"; @@ -48,7 +48,7 @@ export const initialData = { sqliteVersion: "" }; -export const TranslatedFTLInfo = translate(["settings"])(FTLInfo); +export const TranslatedFTLInfo = withNamespaces(["settings"])(FTLInfo); export default props => ( ({ hostname: "" }); -export const TranslatedNetworkInfo = translate(["common", "settings"])( +export const TranslatedNetworkInfo = withNamespaces(["common", "settings"])( NetworkInfo ); diff --git a/src/components/settings/VersionCard.js b/src/components/settings/VersionCard.js index 794eed5..f8c201f 100644 --- a/src/components/settings/VersionCard.js +++ b/src/components/settings/VersionCard.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings :: Version - Card component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings :: Version - Card component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import PropTypes from "prop-types"; import { Collapse } from "reactstrap"; @@ -75,4 +75,4 @@ class VersionCard extends Component { } } -export default translate(["common", "settings"])(VersionCard); +export default withNamespaces(["common", "settings"])(VersionCard); diff --git a/src/components/settings/VersionInfo.js b/src/components/settings/VersionInfo.js index c374413..f88bf0e 100644 --- a/src/components/settings/VersionInfo.js +++ b/src/components/settings/VersionInfo.js @@ -1,16 +1,16 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings :: Version Information component -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings :: Version Information component + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import PropTypes from "prop-types"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../../util/api"; import VersionCard from "./VersionCard"; import { WithAPIData } from "../common/WithAPIData"; @@ -98,7 +98,7 @@ export const initialData = { } }; -export const TranslatedVersionInfo = translate(["common"])(VersionInfo); +export const TranslatedVersionInfo = withNamespaces(["common"])(VersionInfo); export default props => ( ({ - // This mock makes sure any components using the translate HoC receive the t function as a prop - translate: () => component => { + // This mock makes sure any components using the withNamespaces HoC receive the t function as a prop + withNamespaces: () => component => { component.defaultProps = { ...component.defaultProps, t: key => key }; return component; } diff --git a/src/util/api.js b/src/util/api.js index a1d5a0c..484c0a7 100644 --- a/src/util/api.js +++ b/src/util/api.js @@ -1,3 +1,13 @@ +/* Pi-hole: A black hole for Internet advertisements + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * API functions + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ + import http from "./http"; import config from "../config"; diff --git a/src/util/api.test.js b/src/util/api.test.js index cf0b2c4..3dbb66d 100644 --- a/src/util/api.test.js +++ b/src/util/api.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Utility function tests -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Utility function tests + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import api from "./api"; diff --git a/src/util/http.js b/src/util/http.js index 6740cc9..8004a42 100644 --- a/src/util/http.js +++ b/src/util/http.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Basic HTTP functions for accessing API endpoints -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Basic HTTP functions for accessing API endpoints + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import api from "./api"; import config from "../config"; diff --git a/src/util/index.js b/src/util/index.js index b7525bc..3976359 100644 --- a/src/util/index.js +++ b/src/util/index.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Various utilities -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Various utilities + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ /** * Pad a two digit number diff --git a/src/validate.js b/src/validate.js index dfcffad..cb3a3ee 100644 --- a/src/validate.js +++ b/src/validate.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Utility functions for validating domains, hostnames etc. -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Utility functions for validating domains, hostnames etc. + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ export function isValidHostname(hostname) { // Must not exceed 253 characters total diff --git a/src/validate.test.js b/src/validate.test.js index 4c46022..7629156 100644 --- a/src/validate.test.js +++ b/src/validate.test.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Validation function tests -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Validation function tests + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import { isPositiveNumber, diff --git a/src/views/Blacklist.js b/src/views/Blacklist.js index 4c3e1c5..8c67128 100644 --- a/src/views/Blacklist.js +++ b/src/views/Blacklist.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Blacklist page -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Blacklist page + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import api from "../util/api"; import ListPage from "../components/list/ListPage"; import { isValidDomain } from "../validate"; @@ -31,4 +31,4 @@ const Blacklist = props => { ); }; -export default translate("location")(Blacklist); +export default withNamespaces("location")(Blacklist); diff --git a/src/views/Dashboard.js b/src/views/Dashboard.js index 5b8ac7c..f2a92ea 100644 --- a/src/views/Dashboard.js +++ b/src/views/Dashboard.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Dashboard page -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Dashboard page + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Fragment } from "react"; import SummaryStats from "../components/dashboard/SummaryStats"; diff --git a/src/views/Login.js b/src/views/Login.js index d65174f..c8d4580 100644 --- a/src/views/Login.js +++ b/src/views/Login.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Login page -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Login page + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component, Fragment } from "react"; import { Redirect } from "react-router-dom"; @@ -15,7 +15,7 @@ import api from "../util/api"; import logo from "../img/logo.svg"; import { routes } from "../routes"; import ForgotPassword from "../components/login/ForgotPassword"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import config from "../config"; class Login extends Component { @@ -176,4 +176,4 @@ class Login extends Component { } } -export default translate(["login", "location"])(Login); +export default withNamespaces(["login", "location"])(Login); diff --git a/src/views/Logout.js b/src/views/Logout.js index c1f6bab..ff1a84b 100644 --- a/src/views/Logout.js +++ b/src/views/Logout.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Logout the user -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Logout the user + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; import { Redirect } from "react-router-dom"; diff --git a/src/views/Networking.js b/src/views/Networking.js index 5402e4d..476058e 100644 --- a/src/views/Networking.js +++ b/src/views/Networking.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings Page - Networking DNS & DHCP -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings Page - Networking DNS & DHCP + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React, { Component } from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import { Nav, NavItem, NavLink, TabContent, TabPane } from "reactstrap"; import DHCPInfo from "../components/settings/DHCPInfo"; import DNSInfo from "../components/settings/DNSInfo"; @@ -83,4 +83,4 @@ class Networking extends Component { } } -export default translate(["common", "settings"])(Networking); +export default withNamespaces(["common", "settings"])(Networking); diff --git a/src/views/Regexlist.js b/src/views/Regexlist.js index 08e39a5..509ac71 100644 --- a/src/views/Regexlist.js +++ b/src/views/Regexlist.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Regexlist page -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Regexlist page + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import ListPage from "../components/list/ListPage"; import api from "../util/api"; import { isValidRegex } from "../validate"; @@ -31,4 +31,4 @@ const Regexlist = props => { ); }; -export default translate(["location", "lists"])(Regexlist); +export default withNamespaces(["location", "lists"])(Regexlist); diff --git a/src/views/Versions.js b/src/views/Versions.js index 0436879..d20e60f 100644 --- a/src/views/Versions.js +++ b/src/views/Versions.js @@ -1,12 +1,12 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Settings - Software versions -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Settings - Software versions + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; import VersionInfo from "../components/settings/VersionInfo"; diff --git a/src/views/Whitelist.js b/src/views/Whitelist.js index 73e7aad..2ffd055 100644 --- a/src/views/Whitelist.js +++ b/src/views/Whitelist.js @@ -1,15 +1,15 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Whitelist page -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Whitelist page + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ import React from "react"; -import { translate } from "react-i18next"; +import { withNamespaces } from "react-i18next"; import ListPage from "../components/list/ListPage"; import api from "../util/api"; import { isValidDomain } from "../validate"; @@ -31,4 +31,4 @@ const Whitelist = props => { ); }; -export default translate(["location", "lists"])(Whitelist); +export default withNamespaces(["location", "lists"])(Whitelist); diff --git a/update-translations.js b/update-translations.js index cf438ed..2dc8bad 100644 --- a/update-translations.js +++ b/update-translations.js @@ -1,16 +1,16 @@ /* Pi-hole: A black hole for Internet advertisements -* (c) 2017 Pi-hole, LLC (https://pi-hole.net) -* Network-wide ad blocking via your own hardware. -* -* Web Interface -* Update translations from POEditor -* -* This file is copyright under the latest version of the EUPL. -* Please see LICENSE file for your rights under this license. */ + * (c) 2019 Pi-hole, LLC (https://pi-hole.net) + * Network-wide ad blocking via your own hardware. + * + * Web Interface + * Update translations from POEditor + * + * This file is copyright under the latest version of the EUPL. + * Please see LICENSE file for your rights under this license. */ const fs = require("fs-extra"); -const fetch = require('node-fetch'); -const MultiProgress = require('multi-progress'); +const fetch = require("node-fetch"); +const MultiProgress = require("multi-progress"); const PROJECT_ID = 66305; const I18N_FOLDER = "public/i18n"; @@ -19,7 +19,7 @@ const multi = new MultiProgress(process.stderr); const apiToken = process.env.POEDITOR_API_TOKEN; -if(!apiToken) { +if (!apiToken) { console.log("Please set the POEDITOR_API_TOKEN environment variable"); process.exit(1); } @@ -40,23 +40,20 @@ function makeFormData(data) { * Return a list of languages which are at least 90% translated */ function getTranslatedLanguages() { - return fetch( - "https://api.poeditor.com/v2/languages/list", - { - method: "POST", - body: makeFormData({ - "api_token": apiToken, - "id": PROJECT_ID, - }), - headers: { "Content-Type": "application/x-www-form-urlencoded" } - } - ) + return fetch("https://api.poeditor.com/v2/languages/list", { + method: "POST", + body: makeFormData({ + api_token: apiToken, + id: PROJECT_ID + }), + headers: { "Content-Type": "application/x-www-form-urlencoded" } + }) .then(response => response.json()) .then(data => { return data.result.languages .filter(lang => lang.percentage >= 70) - .map(lang => lang.code) - }) + .map(lang => lang.code); + }); } /** @@ -67,20 +64,17 @@ function getTranslatedLanguages() { * @param bar the progress bar */ function fetchTag(lang, tag, bar) { - fetch( - "https://api.poeditor.com/v2/projects/export", - { - method: "POST", - body: makeFormData({ - "api_token": apiToken, - "id": PROJECT_ID, - "language": lang, - "type": "json", - "tags": tag - }), - headers: { "Content-Type": "application/x-www-form-urlencoded" } - } - ) + fetch("https://api.poeditor.com/v2/projects/export", { + method: "POST", + body: makeFormData({ + api_token: apiToken, + id: PROJECT_ID, + language: lang, + type: "json", + tags: tag + }), + headers: { "Content-Type": "application/x-www-form-urlencoded" } + }) .then(exportResponse => { bar.tick(); return exportResponse.json(); @@ -92,39 +86,42 @@ function fetchTag(lang, tag, bar) { }) .then(langData => { const parsedData = langData.reduce((map, item) => { - // Check for plurals - if(typeof item.definition === "string") { + if (typeof item.definition === "string") { map[item.term] = item.definition; - } else if(item.definition === null) { + } else if (item.definition === null) { // Don't add missing strings. They will be loaded from the fallback language. return map; } else { // Check if there's just singular and plural - if(Object.keys(item.definition).length === 2) { + if (Object.keys(item.definition).length === 2) { map[item.term] = item.definition["one"]; map[item.term + "_plural"] = item.definition["other"]; } else { // Map POEditor's plural keys to i18next's plural suffixes const pluralMap = { - "zero": "0", - "one": "1", - "two": "2", - "few": "3", - "many": "4", - "other": "5" + zero: "0", + one: "1", + two: "2", + few: "3", + many: "4", + other: "5" }; // Add the various plural keys - for(let plural of Object.keys(item.definition)) - map[item.term + "_" + pluralMap[plural]] = item.definition[plural]; + for (let plural of Object.keys(item.definition)) + map[item.term + "_" + pluralMap[plural]] = + item.definition[plural]; } } return map; }, {}); - fs.outputFileSync(`${I18N_FOLDER}/${lang}/${tag}.json`, JSON.stringify(parsedData, null, 4)); + fs.outputFileSync( + `${I18N_FOLDER}/${lang}/${tag}.json`, + JSON.stringify(parsedData, null, 4) + ); bar.tick(); }); } @@ -155,8 +152,7 @@ function fetchAllTags(lang) { // Render at 0% bar.tick(0); - for(const tag of tags) - fetchTag(lang, tag, bar); + for (const tag of tags) fetchTag(lang, tag, bar); } // Remove old translations @@ -165,10 +161,8 @@ fs.emptyDirSync(I18N_FOLDER); // Get the translated languages and download the translations console.log("Fetching languages"); -getTranslatedLanguages() - .then(languages => { - console.log(`Languages over 70% translated: ${languages.join(", ")}`); +getTranslatedLanguages().then(languages => { + console.log(`Languages over 70% translated: ${languages.join(", ")}`); - for(const lang of languages) - fetchAllTags(lang); - }); + for (const lang of languages) fetchAllTags(lang); +});