diff --git a/.npmignore b/.npmignore index 7703cad97..7f86bbec5 100644 --- a/.npmignore +++ b/.npmignore @@ -1,12 +1,17 @@ /src +/dev index.js -yarn.lock + assets + mocks coverage + circle.yml .babelrc .eslintrc.js .eslintignore -webpack.config.js +webpack.config* + package-lock.json +yarn.lock diff --git a/dev/App.tsx b/dev/App.tsx index 7b33fdb9e..22c2989aa 100644 --- a/dev/App.tsx +++ b/dev/App.tsx @@ -1,10 +1,11 @@ import React, { Component } from 'react'; -import { Widget, addResponseMessage, setQuickButtons, toggleMsgLoader } from '../index'; +import { Widget, addResponseMessage, setQuickButtons, toggleMsgLoader, addLinkSnippet } from '../index'; export default class App extends Component { componentDidMount() { addResponseMessage('Welcome to this awesome chat!'); + addLinkSnippet({ link: 'https://google.com', title: 'Google' }); } handleNewUserMessage = (newMessage: any) => { @@ -32,7 +33,6 @@ export default class App extends Component { senderPlaceHolder="Escribe aquĆ­ ..." handleNewUserMessage={this.handleNewUserMessage} handleQuickButtonClicked={this.handleQuickButtonClicked} - badge={1} /> ); } diff --git a/index.js b/index.js index 5e7396e0a..2a9575f52 100644 --- a/index.js +++ b/index.js @@ -9,7 +9,10 @@ import { toggleMsgLoader, dropMessages, isWidgetOpened, - setQuickButtons + setQuickButtons, + deleteMessages, + markAllAsRead, + setBadgeCount } from './src/store/dispatcher'; export { @@ -23,5 +26,8 @@ export { toggleMsgLoader, dropMessages, isWidgetOpened, - setQuickButtons + setQuickButtons, + deleteMessages, + markAllAsRead, + setBadgeCount }; diff --git a/package-lock.json b/package-lock.json index 3e4ad62f4..22615a370 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "react-chat-widget", - "version": "2.1.5", + "version": "3.0.0-beta", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1180,9 +1180,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -1224,14 +1224,14 @@ "dev": true }, "@jest/console": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.2.3.tgz", - "integrity": "sha512-k+37B1aSvOt9tKHWbZZSOy1jdgzesB0bj96igCVUG1nAH1W5EoUfgc5EXbBVU08KSLvkVdWopLXaO3xfVGlxtQ==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.2.6.tgz", + "integrity": "sha512-bGp+0PicZVCEhb+ifnW9wpKWONNdkhtJsRE7ap729hiAfTvCN6VhGx0s/l/V/skA2pnyqq+N/7xl9ZWfykDpsg==", "dev": true, "requires": { - "@jest/source-map": "^25.2.1", + "@jest/source-map": "^25.2.6", "chalk": "^3.0.0", - "jest-util": "^25.2.3", + "jest-util": "^25.2.6", "slash": "^3.0.0" }, "dependencies": { @@ -1294,33 +1294,33 @@ } }, "@jest/core": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.2.4.tgz", - "integrity": "sha512-WcWYShl0Bqfcb32oXtjwbiR78D/djhMdJW+ulp4/bmHgeODcsieqUJfUH+kEv8M7VNV77E6jds5aA+WuGh1nmg==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.2.7.tgz", + "integrity": "sha512-Nd6ELJyR+j0zlwhzkfzY70m04hAur0VnMwJXVe4VmmD/SaQ6DEyal++ERQ1sgyKIKKEqRuui6k/R0wHLez4P+g==", "dev": true, "requires": { - "@jest/console": "^25.2.3", - "@jest/reporters": "^25.2.4", - "@jest/test-result": "^25.2.4", - "@jest/transform": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/console": "^25.2.6", + "@jest/reporters": "^25.2.6", + "@jest/test-result": "^25.2.6", + "@jest/transform": "^25.2.6", + "@jest/types": "^25.2.6", "ansi-escapes": "^4.2.1", "chalk": "^3.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.3", - "jest-changed-files": "^25.2.3", - "jest-config": "^25.2.4", - "jest-haste-map": "^25.2.3", - "jest-message-util": "^25.2.4", - "jest-regex-util": "^25.2.1", - "jest-resolve": "^25.2.3", - "jest-resolve-dependencies": "^25.2.4", - "jest-runner": "^25.2.4", - "jest-runtime": "^25.2.4", - "jest-snapshot": "^25.2.4", - "jest-util": "^25.2.3", - "jest-validate": "^25.2.3", - "jest-watcher": "^25.2.4", + "jest-changed-files": "^25.2.6", + "jest-config": "^25.2.7", + "jest-haste-map": "^25.2.6", + "jest-message-util": "^25.2.6", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.2.6", + "jest-resolve-dependencies": "^25.2.7", + "jest-runner": "^25.2.7", + "jest-runtime": "^25.2.7", + "jest-snapshot": "^25.2.7", + "jest-util": "^25.2.6", + "jest-validate": "^25.2.6", + "jest-watcher": "^25.2.7", "micromatch": "^4.0.2", "p-each-series": "^2.1.0", "realpath-native": "^2.0.0", @@ -1449,40 +1449,40 @@ } }, "@jest/environment": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.2.4.tgz", - "integrity": "sha512-wA4xlhD19/gukkDpJ5HQsTle0pgnzI5qMFEjw267lpTDC8d9N7Ihqr5pI+l0p8Qn1SQhai+glSqxrGdzKy4jxw==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.2.6.tgz", + "integrity": "sha512-17WIw+wCb9drRNFw1hi8CHah38dXVdOk7ga9exThhGtXlZ9mK8xH4DjSB9uGDGXIWYSHmrxoyS6KJ7ywGr7bzg==", "dev": true, "requires": { - "@jest/fake-timers": "^25.2.4", - "@jest/types": "^25.2.3", - "jest-mock": "^25.2.3" + "@jest/fake-timers": "^25.2.6", + "@jest/types": "^25.2.6", + "jest-mock": "^25.2.6" } }, "@jest/fake-timers": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.2.4.tgz", - "integrity": "sha512-oC1TJiwfMcBttVN7Wz+VZnqEAgYTiEMu0QLOXpypR89nab0uCB31zm/QeBZddhSstn20qe3yqOXygp6OwvKT/Q==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.2.6.tgz", + "integrity": "sha512-A6qtDIA2zg/hVgUJJYzQSHFBIp25vHdSxW/s4XmTJAYxER6eL0NQdQhe4+232uUSviKitubHGXXirt5M7blPiA==", "dev": true, "requires": { - "@jest/types": "^25.2.3", - "jest-message-util": "^25.2.4", - "jest-mock": "^25.2.3", - "jest-util": "^25.2.3", + "@jest/types": "^25.2.6", + "jest-message-util": "^25.2.6", + "jest-mock": "^25.2.6", + "jest-util": "^25.2.6", "lolex": "^5.0.0" } }, "@jest/reporters": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.2.4.tgz", - "integrity": "sha512-VHbLxM03jCc+bTLOluW/IqHR2G0Cl0iATwIQbuZtIUast8IXO4fD0oy4jpVGpG5b20S6REA8U3BaQoCW/CeVNQ==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.2.6.tgz", + "integrity": "sha512-DRMyjaxcd6ZKctiXNcuVObnPwB1eUs7xrUVu0J2V0p5/aZJei5UM9GL3s/bmN4hRV8Mt3zXh+/9X2o0Q4ClZIA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^25.2.3", - "@jest/test-result": "^25.2.4", - "@jest/transform": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/console": "^25.2.6", + "@jest/test-result": "^25.2.6", + "@jest/transform": "^25.2.6", + "@jest/types": "^25.2.6", "chalk": "^3.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -1492,10 +1492,10 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.0", - "jest-haste-map": "^25.2.3", - "jest-resolve": "^25.2.3", - "jest-util": "^25.2.3", - "jest-worker": "^25.2.1", + "jest-haste-map": "^25.2.6", + "jest-resolve": "^25.2.6", + "jest-util": "^25.2.6", + "jest-worker": "^25.2.6", "node-notifier": "^6.0.0", "slash": "^3.0.0", "source-map": "^0.6.0", @@ -1596,9 +1596,9 @@ } }, "@jest/source-map": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.2.1.tgz", - "integrity": "sha512-PgScGJm1U27+9Te/cxP4oUFqJ2PX6NhBL2a6unQ7yafCgs8k02c0LSyjSIx/ao0AwcAdCczfAPDf5lJ7zoB/7A==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.2.6.tgz", + "integrity": "sha512-VuIRZF8M2zxYFGTEhkNSvQkUKafQro4y+mwUxy5ewRqs5N/ynSFUODYp3fy1zCnbCMy1pz3k+u57uCqx8QRSQQ==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -1615,46 +1615,45 @@ } }, "@jest/test-result": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.2.4.tgz", - "integrity": "sha512-AI7eUy+q2lVhFnaibDFg68NGkrxVWZdD6KBr9Hm6EvN0oAe7GxpEwEavgPfNHQjU2mi6g+NsFn/6QPgTUwM1qg==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.2.6.tgz", + "integrity": "sha512-gmGgcF4qz/pkBzyfJuVHo2DA24kIgVQ5Pf/VpW4QbyMLSegi8z+9foSZABfIt5se6k0fFj/3p/vrQXdaOgit0w==", "dev": true, "requires": { - "@jest/console": "^25.2.3", - "@jest/transform": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/console": "^25.2.6", + "@jest/types": "^25.2.6", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.2.4.tgz", - "integrity": "sha512-TEZm/Rkd6YgskdpTJdYLBtu6Gc11tfWPuSpatq0duH77ekjU8dpqX2zkPdY/ayuHxztV5LTJoV5BLtI9mZfXew==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.2.7.tgz", + "integrity": "sha512-s2uYGOXONDSTJQcZJ9A3Zkg3hwe53RlX1HjUNqjUy3HIqwgwCKJbnAKYsORPbhxXi3ARMKA7JNBi9arsTxXoYw==", "dev": true, "requires": { - "@jest/test-result": "^25.2.4", - "jest-haste-map": "^25.2.3", - "jest-runner": "^25.2.4", - "jest-runtime": "^25.2.4" + "@jest/test-result": "^25.2.6", + "jest-haste-map": "^25.2.6", + "jest-runner": "^25.2.7", + "jest-runtime": "^25.2.7" } }, "@jest/transform": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.2.4.tgz", - "integrity": "sha512-6eRigvb+G6bs4kW5j1/y8wu4nCrmVuIe0epPBbiWaYlwawJ8yi1EIyK3d/btDqmBpN5GpN4YhR6iPPnDmkYdTA==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.2.6.tgz", + "integrity": "sha512-rZnjCjZf9avPOf9q/w9RUZ9Uc29JmB53uIXNJmNz04QbDMD5cR/VjfikiMKajBsXe2vnFl5sJ4RTt+9HPicauQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "babel-plugin-istanbul": "^6.0.0", "chalk": "^3.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.3", - "jest-haste-map": "^25.2.3", - "jest-regex-util": "^25.2.1", - "jest-util": "^25.2.3", + "jest-haste-map": "^25.2.6", + "jest-regex-util": "^25.2.6", + "jest-util": "^25.2.6", "micromatch": "^4.0.2", "pirates": "^4.0.1", "realpath-native": "^2.0.0", @@ -1822,9 +1821,9 @@ } }, "@jest/types": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.2.3.tgz", - "integrity": "sha512-6oLQwO9mKif3Uph3RX5J1i3S7X7xtDHWBaaaoeKw8hOzV6YUd0qDcYcHZ6QXMHDIzSr7zzrEa51o2Ovlj6AtKQ==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.2.6.tgz", + "integrity": "sha512-myJTTV37bxK7+3NgKc4Y/DlQ5q92/NOwZsZ+Uch7OXdElxOg61QYc72fPYNAjlvbnJ2YvbXLamIsa9tj48BmyQ==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -1895,9 +1894,9 @@ } }, "@types/babel__core": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.6.tgz", - "integrity": "sha512-tTnhWszAqvXnhW7m5jQU9PomXSiKXk2sFxpahXvI20SZKu9ylPi8WtIxueZ6ehDWikPT0jeFujMj3X4ZHuf3Tg==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", + "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -1927,9 +1926,9 @@ } }, "@types/babel__traverse": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.9.tgz", - "integrity": "sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.10.tgz", + "integrity": "sha512-74fNdUGrWsgIB/V9kTO5FGHPWYY6Eqn+3Z7L6Hc4e/BxjYV7puvBqp5HwsVYYfLm6iURYBNCx4Ut37OF9yitCw==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -2019,13 +2018,13 @@ } }, "@types/jest": { - "version": "25.1.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.1.4.tgz", - "integrity": "sha512-QDDY2uNAhCV7TMCITrxz+MRk1EizcsevzfeS6LykIlq2V1E5oO4wXG8V2ZEd9w7Snxeeagk46YbMgZ8ESHx3sw==", + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz", + "integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==", "dev": true, "requires": { - "jest-diff": "^25.1.0", - "pretty-format": "^25.1.0" + "jest-diff": "^25.2.1", + "pretty-format": "^25.2.1" } }, "@types/json-schema": { @@ -2041,9 +2040,9 @@ "dev": true }, "@types/node": { - "version": "13.9.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.8.tgz", - "integrity": "sha512-1WgO8hsyHynlx7nhP1kr0OFzsgKz5XDQL+Lfc3b1Q3qIln/n8cKD4m09NJ0+P1Rq7Zgnc7N0+SsMnoD1rEb0kA==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==", "dev": true }, "@types/parse-json": { @@ -2065,9 +2064,9 @@ "dev": true }, "@types/react": { - "version": "16.9.30", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.30.tgz", - "integrity": "sha512-nx+ixghmJkzcDYhtqvmf/jPcBvyH87yfLM+dUDH2n8lE356t18p2flj3mzkT/VO0N1wh6RCjtmWGFI3r/KhCxw==", + "version": "16.9.32", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.32.tgz", + "integrity": "sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==", "dev": true, "requires": { "@types/prop-types": "*", @@ -2075,9 +2074,9 @@ } }, "@types/react-dom": { - "version": "16.9.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.5.tgz", - "integrity": "sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg==", + "version": "16.9.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.6.tgz", + "integrity": "sha512-S6ihtlPMDotrlCJE9ST1fRmYrQNNwfgL61UB4I1W7M6kPulUKx9fXAleW5zpdIjUQ4fTaaog8uERezjsGUj9HQ==", "dev": true, "requires": { "@types/react": "*" @@ -2117,33 +2116,33 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", - "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.27.0.tgz", + "integrity": "sha512-/my+vVHRN7zYgcp0n4z5A6HAK7bvKGBiswaM5zIlOQczsxj/aiD7RcgD+dvVFuwFaGh5+kM7XA6Q6PN0bvb1tw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "2.26.0", + "@typescript-eslint/experimental-utils": "2.27.0", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", "tsutils": "^3.17.1" } }, "@typescript-eslint/experimental-utils": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", - "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.27.0.tgz", + "integrity": "sha512-vOsYzjwJlY6E0NJRXPTeCGqjv5OHgRU1kzxHKWJVPjDYGbPgLudBXjIlc+OD1hDBZ4l1DLbOc5VjofKahsu9Jw==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.26.0", + "@typescript-eslint/typescript-estree": "2.27.0", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", - "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.27.0.tgz", + "integrity": "sha512-t2miCCJIb/FU8yArjAvxllxbTiyNqaXJag7UOpB5DVoM3+xnjeOngtqlJkLRnMtzaRcJhe3CIR9RmL40omubhg==", "dev": true, "requires": { "debug": "^4.1.1", @@ -2675,12 +2674,6 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -3188,9 +3181,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -4137,6 +4130,15 @@ "pkg-up": "^2.0.0" } }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -4316,15 +4318,15 @@ } }, "caniuse-db": { - "version": "1.0.30001038", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001038.tgz", - "integrity": "sha512-yeQ2l99M9upOgMIRfZEdes6HuPbQiRZIMBumUwdXeEQz+faSXUZtZ8xeyEdU+TlJckH09M5NtM038sjKsRa2ow==", + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001039.tgz", + "integrity": "sha512-XVk5KMAi8/DI28tQXKuq1PDyuPoD9Ypnda3ctF04TlB+LYIb+bgHq0ZDfNOn0+4cwLENJC0093Vuf0dhkjXQ7Q==", "dev": true }, "caniuse-lite": { - "version": "1.0.30001038", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz", - "integrity": "sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ==", + "version": "1.0.30001039", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz", + "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==", "dev": true }, "capture-exit": { @@ -4608,9 +4610,9 @@ "dev": true }, "collect-v8-coverage": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz", - "integrity": "sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, "collection-visit": { @@ -5498,9 +5500,9 @@ "dev": true }, "diff-sequences": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.1.tgz", - "integrity": "sha512-foe7dXnGlSh3jR1ovJmdv+77VQj98eKCHHwJPbZ2eEf0fHwKbkZicpPxEch9smZ+n2dnF6QFwkOQdLq9hpeJUg==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", "dev": true }, "diffie-hellman": { @@ -5648,9 +5650,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.391", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.391.tgz", - "integrity": "sha512-WOi6loSnDmfICOqGRrgeK7bZeWDAbGjCptDhI5eyJAqSzWfoeRuOOU1rOTZRL29/9AaxTndZB6Uh8YrxRfZJqw==", + "version": "1.3.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz", + "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==", "dev": true }, "elliptic": { @@ -5686,15 +5688,6 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5765,20 +5758,6 @@ "react-is": "^16.12.0", "react-test-renderer": "^16.0.0-0", "semver": "^5.7.0" - }, - "dependencies": { - "react-test-renderer": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz", - "integrity": "sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.19.1" - } - } } }, "enzyme-adapter-utils": { @@ -6177,16 +6156,16 @@ } }, "eslint-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", - "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.4.tgz", + "integrity": "sha512-I496aBd+Hi23Y0Cx+sKvw+VwlJre4ScIRlkrvTO6Scq68X/UXbN6F3lAhN8b0Zv8atAyprkyrA42K5QBJtCyaw==", "dev": true, "requires": { "fs-extra": "^8.1.0", - "loader-fs-cache": "^1.0.2", + "loader-fs-cache": "^1.0.3", "loader-utils": "^1.2.3", - "object-hash": "^2.0.1", - "schema-utils": "^2.6.1" + "object-hash": "^2.0.3", + "schema-utils": "^2.6.5" } }, "eslint-module-utils": { @@ -6618,17 +6597,17 @@ } }, "expect": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.2.4.tgz", - "integrity": "sha512-hfuPhPds4yOsZtIw4kwAg70r0hqGmpqekgA+VX7pf/3wZ6FY+xIOXZhNsPMMMsspYG/YIsbAiwqsdnD4Ht+bCA==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.2.7.tgz", + "integrity": "sha512-yA+U2Ph0MkMsJ9N8q5hs9WgWI6oJYfecdXta6LkP/alY/jZZL1MHlJ2wbLh60Ucqf3G+51ytbqV3mlGfmxkpNw==", "dev": true, "requires": { - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.1", - "jest-matcher-utils": "^25.2.3", - "jest-message-util": "^25.2.4", - "jest-regex-util": "^25.2.1" + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.2.7", + "jest-message-util": "^25.2.6", + "jest-regex-util": "^25.2.6" }, "dependencies": { "ansi-styles": { @@ -6884,29 +6863,6 @@ "bser": "2.1.1" } }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "dev": true, - "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.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - } - } - }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -7232,29 +7188,25 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "bundled": true, "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "bundled": true, "dev": true, "optional": true }, "aproba": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "bundled": true, "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7264,15 +7216,13 @@ }, "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "bundled": true, "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7282,43 +7232,37 @@ }, "chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "bundled": true, "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "bundled": true, "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "bundled": true, "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "bundled": true, "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "bundled": true, "dev": true, "optional": true }, "debug": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7327,29 +7271,25 @@ }, "deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "bundled": true, "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "bundled": true, "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "bundled": true, "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7358,15 +7298,13 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "bundled": true, "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7382,8 +7320,7 @@ }, "glob": { "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7397,15 +7334,13 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "bundled": true, "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7414,8 +7349,7 @@ }, "ignore-walk": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7424,8 +7358,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7435,22 +7368,19 @@ }, "inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "bundled": true, "dev": true, "optional": true }, "ini": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "bundled": true, "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7459,15 +7389,13 @@ }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "bundled": true, "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7476,15 +7404,13 @@ }, "minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "bundled": true, "dev": true, "optional": true }, "minipass": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7494,8 +7420,7 @@ }, "minizlib": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7504,8 +7429,7 @@ }, "mkdirp": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7514,15 +7438,13 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "bundled": true, "dev": true, "optional": true }, "needle": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.3.tgz", - "integrity": "sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7533,8 +7455,7 @@ }, "node-pre-gyp": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7552,8 +7473,7 @@ }, "nopt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7563,8 +7483,7 @@ }, "npm-bundled": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7573,15 +7492,13 @@ }, "npm-normalize-package-bin": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "bundled": true, "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7592,8 +7509,7 @@ }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7605,22 +7521,19 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "bundled": true, "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "bundled": true, "dev": true, "optional": true }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7629,22 +7542,19 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "bundled": true, "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "bundled": true, "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7654,22 +7564,19 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "bundled": true, "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "bundled": true, "dev": true, "optional": true }, "rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7681,8 +7588,7 @@ }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7697,8 +7603,7 @@ }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7707,50 +7612,43 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "bundled": true, "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "bundled": true, "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "bundled": true, "dev": true, "optional": true }, "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bundled": true, "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "bundled": true, "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "bundled": true, "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7761,8 +7659,7 @@ }, "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==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7771,8 +7668,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7781,15 +7677,13 @@ }, "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "bundled": true, "dev": true, "optional": true }, "tar": { "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7804,15 +7698,13 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "bundled": true, "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -7821,15 +7713,13 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "bundled": true, "dev": true, "optional": true }, "yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "bundled": true, "dev": true, "optional": true } @@ -8611,9 +8501,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -8774,9 +8664,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -9381,16 +9271,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -9508,9 +9388,9 @@ } }, "istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-Vm9xwCiQ8t2cNNnckyeAV0UdxKpcQUz4nMxsBvIu8n2kmPSiyb5uaF/8LpmKr+yqL/MdOXaX2Nmdo4Qyxium9Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -9518,14 +9398,14 @@ } }, "jest": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.2.4.tgz", - "integrity": "sha512-Lu4LXxf4+durzN/IFilcAoQSisOwgHIXgl9vffopePpSSwFqfj1Pj4y+k3nL8oTbnvjxgDIsEcepy6he4bWqnQ==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest/-/jest-25.2.7.tgz", + "integrity": "sha512-XV1n/CE2McCikl4tfpCY950RytHYvxdo/wvtgmn/qwA8z1s16fuvgFL/KoPrrmkqJTaPMUlLVE58pwiaTX5TdA==", "dev": true, "requires": { - "@jest/core": "^25.2.4", + "@jest/core": "^25.2.7", "import-local": "^3.0.2", - "jest-cli": "^25.2.4" + "jest-cli": "^25.2.7" }, "dependencies": { "ansi-styles": { @@ -9570,21 +9450,21 @@ "dev": true }, "jest-cli": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.2.4.tgz", - "integrity": "sha512-zeY2pRDWKj2LZudIncvvguwLMEdcnJqc2jJbwza1beqi80qqLvkPF/BjbFkK2sIV3r+mfTJS+7ITrvK6pCdRjg==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.2.7.tgz", + "integrity": "sha512-OOAZwY4Jkd3r5WhVM5L3JeLNFaylvHUczMLxQDVLrrVyb1Cy+DNJ6MVsb5TLh6iBklB42m5TOP+IbOgKGGOtMw==", "dev": true, "requires": { - "@jest/core": "^25.2.4", - "@jest/test-result": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/core": "^25.2.7", + "@jest/test-result": "^25.2.6", + "@jest/types": "^25.2.6", "chalk": "^3.0.0", "exit": "^0.1.2", "import-local": "^3.0.2", "is-ci": "^2.0.0", - "jest-config": "^25.2.4", - "jest-util": "^25.2.3", - "jest-validate": "^25.2.3", + "jest-config": "^25.2.7", + "jest-util": "^25.2.6", + "jest-validate": "^25.2.6", "prompts": "^2.0.1", "realpath-native": "^2.0.0", "yargs": "^15.3.1" @@ -9602,20 +9482,20 @@ } }, "jest-changed-files": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.2.3.tgz", - "integrity": "sha512-EFxy94dvvbqRB36ezIPLKJ4fDIC+jAdNs8i8uTwFpaXd6H3LVc3ova1lNS4ZPWk09OCR2vq5kSdSQgar7zMORg==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.2.6.tgz", + "integrity": "sha512-F7l2m5n55jFnJj4ItB9XbAlgO+6umgvz/mdK76BfTd2NGkvGf9x96hUXP/15a1K0k14QtVOoutwpRKl360msvg==", "dev": true, "requires": { - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "execa": "^3.2.0", "throat": "^5.0.0" }, "dependencies": { "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -9704,28 +9584,28 @@ } }, "jest-config": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.2.4.tgz", - "integrity": "sha512-fxy3nIpwJqOUQJRVF/q+pNQb6dv5b9YufOeCbpPZJ/md1zXpiupbhfehpfODhnKOfqbzSiigtSLzlWWmbRxnqQ==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.2.7.tgz", + "integrity": "sha512-rIdPPXR6XUxi+7xO4CbmXXkE6YWprvlKc4kg1SrkCL2YV5m/8MkHstq9gBZJ19Qoa3iz/GP+0sTG/PcIwkFojg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.2.4", - "@jest/types": "^25.2.3", - "babel-jest": "^25.2.4", + "@jest/test-sequencer": "^25.2.7", + "@jest/types": "^25.2.6", + "babel-jest": "^25.2.6", "chalk": "^3.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", - "jest-environment-jsdom": "^25.2.4", - "jest-environment-node": "^25.2.4", - "jest-get-type": "^25.2.1", - "jest-jasmine2": "^25.2.4", - "jest-regex-util": "^25.2.1", - "jest-resolve": "^25.2.3", - "jest-util": "^25.2.3", - "jest-validate": "^25.2.3", + "jest-environment-jsdom": "^25.2.6", + "jest-environment-node": "^25.2.6", + "jest-get-type": "^25.2.6", + "jest-jasmine2": "^25.2.7", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.2.6", + "jest-util": "^25.2.6", + "jest-validate": "^25.2.6", "micromatch": "^4.0.2", - "pretty-format": "^25.2.3", + "pretty-format": "^25.2.6", "realpath-native": "^2.0.0" }, "dependencies": { @@ -9740,16 +9620,16 @@ } }, "babel-jest": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.2.4.tgz", - "integrity": "sha512-+yDzlyJVWrqih9i2Cvjpt7COaN8vUwCsKGtxJLzg6I0xhxD54K8mvDUCliPKLufyzHh/c5C4MRj4Vk7VMjOjIg==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.2.6.tgz", + "integrity": "sha512-MDJOAlwtIeIQiGshyX0d2PxTbV73xZMpNji40ivVTPQOm59OdRR9nYCkffqI7ugtsK4JR98HgNKbDbuVf4k5QQ==", "dev": true, "requires": { - "@jest/transform": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/transform": "^25.2.6", + "@jest/types": "^25.2.6", "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.2.1", + "babel-preset-jest": "^25.2.6", "chalk": "^3.0.0", "slash": "^3.0.0" } @@ -9768,23 +9648,23 @@ } }, "babel-plugin-jest-hoist": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.2.1.tgz", - "integrity": "sha512-HysbCQfJhxLlyxDbKcB2ucGYV0LjqK4h6dBoI3RtFuOxTiTWK6XGZMsHb0tGh8iJdV4hC6Z2GCHzVvDeh9i0lQ==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.2.6.tgz", + "integrity": "sha512-qE2xjMathybYxjiGFJg0mLFrz0qNp83aNZycWDY/SuHiZNq+vQfRQtuINqyXyue1ELd8Rd+1OhFSLjms8msMbw==", "dev": true, "requires": { "@types/babel__traverse": "^7.0.6" } }, "babel-preset-jest": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.2.1.tgz", - "integrity": "sha512-zXHJBM5iR8oEO4cvdF83AQqqJf3tJrXy3x8nfu2Nlqvn4cneg4Ca8M7cQvC5S9BzDDy1O0tZ9iXru9J6E3ym+A==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.2.6.tgz", + "integrity": "sha512-Xh2eEAwaLY9+SyMt/xmGZDnXTW/7pSaBPG0EMo7EuhvosFKVWYB6CqwYD31DaEQuoTL090oDZ0FEqygffGRaSQ==", "dev": true, "requires": { "@babel/plugin-syntax-bigint": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^25.2.1" + "babel-plugin-jest-hoist": "^25.2.6" } }, "braces": { @@ -9917,15 +9797,15 @@ } }, "jest-diff": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.2.3.tgz", - "integrity": "sha512-VtZ6LAQtaQpFsmEzps15dQc5ELbJxy4L2DOSo2Ev411TUEtnJPkAMD7JneVypeMJQ1y3hgxN9Ao13n15FAnavg==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.2.6.tgz", + "integrity": "sha512-KuadXImtRghTFga+/adnNrv9s61HudRMR7gVSbP35UKZdn4IK2/0N0PpGZIqtmllK9aUyye54I3nu28OYSnqOg==", "dev": true, "requires": { "chalk": "^3.0.0", - "diff-sequences": "^25.2.1", - "jest-get-type": "^25.2.1", - "pretty-format": "^25.2.3" + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.2.6" }, "dependencies": { "ansi-styles": { @@ -9987,16 +9867,16 @@ "dev": true }, "jest-each": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.2.3.tgz", - "integrity": "sha512-RTlmCjsBDK2c9T5oO4MqccA3/5Y8BUtiEy7OOQik1iyCgdnNdHbI0pNEpyapZPBG0nlvZ4mIu7aY6zNUvLraAQ==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.2.6.tgz", + "integrity": "sha512-OgQ01VINaRD6idWJOhCYwUc5EcgHBiFlJuw+ON2VgYr7HLtMFyCcuo+3mmBvuLUH4QudREZN7cDCZviknzsaJQ==", "dev": true, "requires": { - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "chalk": "^3.0.0", - "jest-get-type": "^25.2.1", - "jest-util": "^25.2.3", - "pretty-format": "^25.2.3" + "jest-get-type": "^25.2.6", + "jest-util": "^25.2.6", + "pretty-format": "^25.2.6" }, "dependencies": { "ansi-styles": { @@ -10052,30 +9932,30 @@ } }, "jest-environment-jsdom": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.2.4.tgz", - "integrity": "sha512-5dm+tNwrLmhELdjAwiQnVGf/U9iFMWdTL4/wyrMg2HU6RQnCiuxpWbIigLHUhuP1P2Ak0F4k3xhjrikboKyShA==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.2.6.tgz", + "integrity": "sha512-/o7MZIhGmLGIEG5j7r5B5Az0umWLCHU+F5crwfbm0BzC4ybHTJZOQTFQWhohBg+kbTCNOuftMcqHlVkVduJCQQ==", "dev": true, "requires": { - "@jest/environment": "^25.2.4", - "@jest/fake-timers": "^25.2.4", - "@jest/types": "^25.2.3", - "jest-mock": "^25.2.3", - "jest-util": "^25.2.3", + "@jest/environment": "^25.2.6", + "@jest/fake-timers": "^25.2.6", + "@jest/types": "^25.2.6", + "jest-mock": "^25.2.6", + "jest-util": "^25.2.6", "jsdom": "^15.2.1" } }, "jest-environment-node": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.2.4.tgz", - "integrity": "sha512-Jkc5Y8goyXPrLRHnrUlqC7P4o5zn2m4zw6qWoRJ59kxV1f2a5wK+TTGhrhCwnhW/Ckpdl/pm+LufdvhJkvJbiw==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.2.6.tgz", + "integrity": "sha512-D1Ihj14fxZiMHGeTtU/LunhzSI+UeBvlr/rcXMTNyRMUMSz2PEhuqGbB78brBY6Dk3FhJDk7Ta+8reVaGjLWhA==", "dev": true, "requires": { - "@jest/environment": "^25.2.4", - "@jest/fake-timers": "^25.2.4", - "@jest/types": "^25.2.3", - "jest-mock": "^25.2.3", - "jest-util": "^25.2.3", + "@jest/environment": "^25.2.6", + "@jest/fake-timers": "^25.2.6", + "@jest/types": "^25.2.6", + "jest-mock": "^25.2.6", + "jest-util": "^25.2.6", "semver": "^6.3.0" }, "dependencies": { @@ -10088,25 +9968,25 @@ } }, "jest-get-type": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.1.tgz", - "integrity": "sha512-EYjTiqcDTCRJDcSNKbLTwn/LcDPEE7ITk8yRMNAOjEsN6yp+Uu+V1gx4djwnuj/DvWg0YGmqaBqPVGsPxlvE7w==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", "dev": true }, "jest-haste-map": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.2.3.tgz", - "integrity": "sha512-pAP22OHtPr4qgZlJJFks2LLgoQUr4XtM1a+F5UaPIZNiCRnePA0hM3L7aiJ0gzwiNIYwMTfKRwG/S1L28J3A3A==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.2.6.tgz", + "integrity": "sha512-nom0+fnY8jwzelSDQnrqaKAcDZczYQvMEwcBjeL3PQ4MlcsqeB7dmrsAniUw/9eLkngT5DE6FhnenypilQFsgA==", "dev": true, "requires": { - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.1.2", "graceful-fs": "^4.2.3", - "jest-serializer": "^25.2.1", - "jest-util": "^25.2.3", - "jest-worker": "^25.2.1", + "jest-serializer": "^25.2.6", + "jest-util": "^25.2.6", + "jest-worker": "^25.2.6", "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7", @@ -10185,27 +10065,27 @@ } }, "jest-jasmine2": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.2.4.tgz", - "integrity": "sha512-juoKrmNmLwaheNbAg71SuUF9ovwUZCFNTpKVhvCXWk+SSeORcIUMptKdPCoLXV3D16htzhTSKmNxnxSk4SrTjA==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.2.7.tgz", + "integrity": "sha512-HeQxEbonp8fUvik9jF0lkU9ab1u5TQdIb7YSU9Fj7SxWtqHNDGyCpF6ZZ3r/5yuertxi+R95Ba9eA91GMQ38eA==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.2.4", - "@jest/source-map": "^25.2.1", - "@jest/test-result": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/environment": "^25.2.6", + "@jest/source-map": "^25.2.6", + "@jest/test-result": "^25.2.6", + "@jest/types": "^25.2.6", "chalk": "^3.0.0", "co": "^4.6.0", - "expect": "^25.2.4", + "expect": "^25.2.7", "is-generator-fn": "^2.0.0", - "jest-each": "^25.2.3", - "jest-matcher-utils": "^25.2.3", - "jest-message-util": "^25.2.4", - "jest-runtime": "^25.2.4", - "jest-snapshot": "^25.2.4", - "jest-util": "^25.2.3", - "pretty-format": "^25.2.3", + "jest-each": "^25.2.6", + "jest-matcher-utils": "^25.2.7", + "jest-message-util": "^25.2.6", + "jest-runtime": "^25.2.7", + "jest-snapshot": "^25.2.7", + "jest-util": "^25.2.6", + "pretty-format": "^25.2.6", "throat": "^5.0.0" }, "dependencies": { @@ -10262,25 +10142,25 @@ } }, "jest-leak-detector": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.2.3.tgz", - "integrity": "sha512-yblCMPE7NJKl7778Cf/73yyFWAas5St0iiEBwq7RDyaz6Xd4WPFnPz2j7yDb/Qce71A1IbDoLADlcwD8zT74Aw==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.2.6.tgz", + "integrity": "sha512-n+aJUM+j/x1kIaPVxzerMqhAUuqTU1PL5kup46rXh+l9SP8H6LqECT/qD1GrnylE1L463/0StSPkH4fUpkuEjA==", "dev": true, "requires": { - "jest-get-type": "^25.2.1", - "pretty-format": "^25.2.3" + "jest-get-type": "^25.2.6", + "pretty-format": "^25.2.6" } }, "jest-matcher-utils": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.2.3.tgz", - "integrity": "sha512-ZmiXiwQRVM9MoKjGMP5YsGGk2Th5ncyRxfXKz5AKsmU8m43kgNZirckVzaP61MlSa9LKmXbevdYqVp1ZKAw2Rw==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.2.7.tgz", + "integrity": "sha512-jNYmKQPRyPO3ny0KY1I4f0XW4XnpJ3Nx5ovT4ik0TYDOYzuXJW40axqOyS61l/voWbVT9y9nZ1THL1DlpaBVpA==", "dev": true, "requires": { "chalk": "^3.0.0", - "jest-diff": "^25.2.3", - "jest-get-type": "^25.2.1", - "pretty-format": "^25.2.3" + "jest-diff": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.2.6" }, "dependencies": { "ansi-styles": { @@ -10336,14 +10216,13 @@ } }, "jest-message-util": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.2.4.tgz", - "integrity": "sha512-9wWMH3Bf+GVTv0GcQLmH/FRr0x0toptKw9TA8U5YFLVXx7Tq9pvcNzTyJrcTJ+wLqNbMPPJlJNft4MnlcrtF5Q==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.2.6.tgz", + "integrity": "sha512-Hgg5HbOssSqOuj+xU1mi7m3Ti2nwSQJQf/kxEkrz2r2rp2ZLO1pMeKkz2WiDUWgSR+APstqz0uMFcE5yc0qdcg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "@types/stack-utils": "^1.0.1", "chalk": "^3.0.0", "micromatch": "^4.0.2", @@ -10453,12 +10332,12 @@ } }, "jest-mock": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.2.3.tgz", - "integrity": "sha512-xlf+pyY0j47zoCs8zGGOGfWyxxLximE8YFOfEK8s4FruR8DtM/UjNj61um+iDuMAFEBDe1bhCXkqiKoCmWjJzg==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.2.6.tgz", + "integrity": "sha512-vc4nibavi2RGPdj/MyZy/azuDjZhpYZLvpfgq1fxkhbyTpKVdG7CgmRVKJ7zgLpY5kuMjTzDYA6QnRwhsCU+tA==", "dev": true, "requires": { - "@jest/types": "^25.2.3" + "@jest/types": "^25.2.6" } }, "jest-pnp-resolver": { @@ -10468,18 +10347,18 @@ "dev": true }, "jest-regex-util": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.1.tgz", - "integrity": "sha512-wroFVJw62LdqTdkL508ZLV82FrJJWVJMIuYG7q4Uunl1WAPTf4ftPKrqqfec4SvOIlvRZUdEX2TFpWR356YG/w==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", "dev": true }, "jest-resolve": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.2.3.tgz", - "integrity": "sha512-1vZMsvM/DBH258PnpUNSXIgtzpYz+vCVCj9+fcy4akZl4oKbD+9hZSlfe9RIDpU0Fc28ozHQrmwX3EqFRRIHGg==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.2.6.tgz", + "integrity": "sha512-7O61GVdcAXkLz/vNGKdF+00A80/fKEAA47AEXVNcZwj75vEjPfZbXDaWFmAQCyXj4oo9y9dC9D+CLA11t8ieGw==", "dev": true, "requires": { - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "browser-resolve": "^1.11.3", "chalk": "^3.0.0", "jest-pnp-resolver": "^1.2.1", @@ -10540,39 +10419,39 @@ } }, "jest-resolve-dependencies": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.2.4.tgz", - "integrity": "sha512-qhUnK4PfNHzNdca7Ub1mbAqE0j5WNyMTwxBZZJjQlUrdqsiYho/QGK65FuBkZuSoYtKIIqriR9TpGrPEc3P5Gg==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.2.7.tgz", + "integrity": "sha512-IrnMzCAh11Xd2gAOJL+ThEW6QO8DyqNdvNkQcaCticDrOAr9wtKT7yT6QBFFjqKFgjjvaVKDs59WdgUhgYnHnQ==", "dev": true, "requires": { - "@jest/types": "^25.2.3", - "jest-regex-util": "^25.2.1", - "jest-snapshot": "^25.2.4" + "@jest/types": "^25.2.6", + "jest-regex-util": "^25.2.6", + "jest-snapshot": "^25.2.7" } }, "jest-runner": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.2.4.tgz", - "integrity": "sha512-5xaIfqqxck9Wg2CV4b9KmJtf/sWO7zWQx7O+34GCLGPzoPcVmB3mZtdrQI1/jS3Reqjru9ycLjgLHSf6XoxRqA==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.2.7.tgz", + "integrity": "sha512-RFEr71nMrtNwcpoHzie5+fe1w3JQCGMyT2xzNwKe3f88+bK+frM2o1v24gEcPxQ2QqB3COMCe2+1EkElP+qqqQ==", "dev": true, "requires": { - "@jest/console": "^25.2.3", - "@jest/environment": "^25.2.4", - "@jest/test-result": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/console": "^25.2.6", + "@jest/environment": "^25.2.6", + "@jest/test-result": "^25.2.6", + "@jest/types": "^25.2.6", "chalk": "^3.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.3", - "jest-config": "^25.2.4", - "jest-docblock": "^25.2.3", - "jest-haste-map": "^25.2.3", - "jest-jasmine2": "^25.2.4", - "jest-leak-detector": "^25.2.3", - "jest-message-util": "^25.2.4", - "jest-resolve": "^25.2.3", - "jest-runtime": "^25.2.4", - "jest-util": "^25.2.3", - "jest-worker": "^25.2.1", + "jest-config": "^25.2.7", + "jest-docblock": "^25.2.6", + "jest-haste-map": "^25.2.6", + "jest-jasmine2": "^25.2.7", + "jest-leak-detector": "^25.2.6", + "jest-message-util": "^25.2.6", + "jest-resolve": "^25.2.6", + "jest-runtime": "^25.2.7", + "jest-util": "^25.2.6", + "jest-worker": "^25.2.6", "source-map-support": "^0.5.6", "throat": "^5.0.0" }, @@ -10619,9 +10498,9 @@ "dev": true }, "jest-docblock": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.2.3.tgz", - "integrity": "sha512-d3/tmjLLrH5fpRGmIm3oFa3vOaD/IjPxtXVOrfujpfJ9y1tCDB1x/tvunmdOVAyF03/xeMwburl6ITbiQT1mVA==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.2.6.tgz", + "integrity": "sha512-VAYrljEq0upq0oERfIaaNf28gC6p9gORndhHstCYF8NWGNQJnzoaU//S475IxfWMk4UjjVmS9rJKLe5Jjjbixw==", "dev": true, "requires": { "detect-newline": "^3.0.0" @@ -10655,32 +10534,32 @@ } }, "jest-runtime": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.2.4.tgz", - "integrity": "sha512-6ehOUizgIghN+aV5YSrDzTZ+zJ9omgEjJbTHj3Jqes5D52XHfhzT7cSfdREwkNjRytrR7mNwZ7pRauoyNLyJ8Q==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.2.7.tgz", + "integrity": "sha512-Gw3X8KxTTFylu2T/iDSNKRUQXQiPIYUY0b66GwVYa7W8wySkUljKhibQHSq0VhmCAN7vRBEQjlVQ+NFGNmQeBw==", "dev": true, "requires": { - "@jest/console": "^25.2.3", - "@jest/environment": "^25.2.4", - "@jest/source-map": "^25.2.1", - "@jest/test-result": "^25.2.4", - "@jest/transform": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/console": "^25.2.6", + "@jest/environment": "^25.2.6", + "@jest/source-map": "^25.2.6", + "@jest/test-result": "^25.2.6", + "@jest/transform": "^25.2.6", + "@jest/types": "^25.2.6", "@types/yargs": "^15.0.0", "chalk": "^3.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.3", - "jest-config": "^25.2.4", - "jest-haste-map": "^25.2.3", - "jest-message-util": "^25.2.4", - "jest-mock": "^25.2.3", - "jest-regex-util": "^25.2.1", - "jest-resolve": "^25.2.3", - "jest-snapshot": "^25.2.4", - "jest-util": "^25.2.3", - "jest-validate": "^25.2.3", + "jest-config": "^25.2.7", + "jest-haste-map": "^25.2.6", + "jest-message-util": "^25.2.6", + "jest-mock": "^25.2.6", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.2.6", + "jest-snapshot": "^25.2.7", + "jest-util": "^25.2.6", + "jest-validate": "^25.2.6", "realpath-native": "^2.0.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", @@ -10752,30 +10631,30 @@ } }, "jest-serializer": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.2.1.tgz", - "integrity": "sha512-fibDi7M5ffx6c/P66IkvR4FKkjG5ldePAK1WlbNoaU4GZmIAkS9Le/frAwRUFEX0KdnisSPWf+b1RC5jU7EYJQ==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.2.6.tgz", + "integrity": "sha512-RMVCfZsezQS2Ww4kB5HJTMaMJ0asmC0BHlnobQC6yEtxiFKIxohFA4QSXSabKwSggaNkqxn6Z2VwdFCjhUWuiQ==", "dev": true }, "jest-snapshot": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.2.4.tgz", - "integrity": "sha512-nIwpW7FZCq5p0AE3Oyqyb6jL0ENJixXzJ5/CD/XRuOqp3gS5OM3O/k+NnTrniCXxPFV4ry6s9HNfiPQBi0wcoA==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.2.7.tgz", + "integrity": "sha512-Rm8k7xpGM4tzmYhB6IeRjsOMkXaU8/FOz5XlU6oYwhy53mq6txVNqIKqN1VSiexzpC80oWVxVDfUDt71M6XPOA==", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "@types/prettier": "^1.19.0", "chalk": "^3.0.0", - "expect": "^25.2.4", - "jest-diff": "^25.2.3", - "jest-get-type": "^25.2.1", - "jest-matcher-utils": "^25.2.3", - "jest-message-util": "^25.2.4", - "jest-resolve": "^25.2.3", + "expect": "^25.2.7", + "jest-diff": "^25.2.6", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.2.7", + "jest-message-util": "^25.2.6", + "jest-resolve": "^25.2.6", "make-dir": "^3.0.0", "natural-compare": "^1.4.0", - "pretty-format": "^25.2.3", + "pretty-format": "^25.2.6", "semver": "^6.3.0" }, "dependencies": { @@ -10847,12 +10726,12 @@ } }, "jest-util": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.2.3.tgz", - "integrity": "sha512-7tWiMICVSo9lNoObFtqLt9Ezt5exdFlWs5fLe1G4XLY2lEbZc814cw9t4YHScqBkWMfzth8ASHKlYBxiX2rdCw==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.2.6.tgz", + "integrity": "sha512-gpXy0H5ymuQ0x2qgl1zzHg7LYHZYUmDEq6F7lhHA8M0eIwDB2WteOcCnQsohl9c/vBKZ3JF2r4EseipCZz3s4Q==", "dev": true, "requires": { - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "chalk": "^3.0.0", "is-ci": "^2.0.0", "make-dir": "^3.0.0" @@ -10926,17 +10805,17 @@ } }, "jest-validate": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.2.3.tgz", - "integrity": "sha512-GObn91jzU0B0Bv4cusAwjP6vnWy78hJUM8MOSz7keRfnac/ZhQWIsUjvk01IfeXNTemCwgR57EtdjQMzFZGREg==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.2.6.tgz", + "integrity": "sha512-a4GN7hYbqQ3Rt9iHsNLFqQz7HDV7KiRPCwPgo5nqtTIWNZw7gnT8KchG+Riwh+UTSn8REjFCodGp50KX/fRNgQ==", "dev": true, "requires": { - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "camelcase": "^5.3.1", "chalk": "^3.0.0", - "jest-get-type": "^25.2.1", + "jest-get-type": "^25.2.6", "leven": "^3.1.0", - "pretty-format": "^25.2.3" + "pretty-format": "^25.2.6" }, "dependencies": { "ansi-styles": { @@ -10992,16 +10871,16 @@ } }, "jest-watcher": { - "version": "25.2.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.2.4.tgz", - "integrity": "sha512-p7g7s3zqcy69slVzQYcphyzkB2FBmJwMbv6k6KjI5mqd6KnUnQPfQVKuVj2l+34EeuxnbXqnrjtUFmxhcL87rg==", + "version": "25.2.7", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.2.7.tgz", + "integrity": "sha512-RdHuW+f49tahWtluTnUdZ2iPliebleROI2L/J5phYrUS6DPC9RB3SuUtqYyYhGZJsbvRSuLMIlY/cICJ+PIecw==", "dev": true, "requires": { - "@jest/test-result": "^25.2.4", - "@jest/types": "^25.2.3", + "@jest/test-result": "^25.2.6", + "@jest/types": "^25.2.6", "ansi-escapes": "^4.2.1", "chalk": "^3.0.0", - "jest-util": "^25.2.3", + "jest-util": "^25.2.6", "string-length": "^3.1.0" }, "dependencies": { @@ -11058,9 +10937,9 @@ } }, "jest-worker": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.2.1.tgz", - "integrity": "sha512-IHnpekk8H/hCUbBlfeaPZzU6v75bqwJp3n4dUrQuQOAgOneI4tx3jV2o8pvlXnDfcRsfkFIUD//HWXpCmR+evQ==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.2.6.tgz", + "integrity": "sha512-FJn9XDUSxcOR4cwDzRfL1z56rUofNTFs539FGASpd50RHdb6EVkhxQqktodW2mI49l+W3H+tFJDotCHUQF6dmA==", "dev": true, "requires": { "merge-stream": "^2.0.0", @@ -11097,8 +10976,7 @@ }, "js-yaml": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "resolved": "", "dev": true, "requires": { "argparse": "^1.0.7", @@ -11205,9 +11083,9 @@ "dev": true }, "json5": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.2.tgz", - "integrity": "sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -11594,6 +11472,12 @@ "semver": "^5.6.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", @@ -11930,9 +11814,9 @@ } }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -12071,16 +11955,6 @@ "lower-case": "^1.1.1" } }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node-forge": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", @@ -12962,9 +12836,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -15327,12 +15201,12 @@ } }, "pretty-format": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.2.3.tgz", - "integrity": "sha512-IP4+5UOAVGoyqC/DiomOeHBUKN6q00gfyT2qpAsRH64tgOKB2yF7FHJXC18OCiU0/YFierACup/zdCOWw0F/0w==", + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.2.6.tgz", + "integrity": "sha512-DEiWxLBaCHneffrIT4B+TpMvkV9RNvvJrd3lY9ew1CEQobDzEXmYT1mg0hJhljZty7kCc10z13ohOFAE8jrUDg==", "dev": true, "requires": { - "@jest/types": "^25.2.3", + "@jest/types": "^25.2.6", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^16.12.0" @@ -15389,15 +15263,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "~2.0.3" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -15649,7 +15514,6 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -15660,7 +15524,6 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -15686,13 +15549,15 @@ } }, "react-test-renderer": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-15.6.2.tgz", - "integrity": "sha1-0DM0NPwsQ4CSaWyncNpe1IA376g=", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz", + "integrity": "sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==", "dev": true, "requires": { - "fbjs": "^0.8.9", - "object-assign": "^4.1.0" + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.8.6", + "scheduler": "^0.19.1" } }, "read-pkg": { @@ -15919,9 +15784,9 @@ } }, "regexpp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", - "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "regexpu-core": { @@ -16285,9 +16150,9 @@ "dev": true }, "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -16480,7 +16345,6 @@ "version": "0.19.1", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -17033,9 +16897,9 @@ "dev": true }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -17396,9 +17260,9 @@ } }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", "dev": true }, "style-loader": { @@ -17495,6 +17359,18 @@ "mkdirp": "~0.5.1", "sax": "~1.2.1", "whet.extend": "~0.9.9" + }, + "dependencies": { + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + } } }, "symbol-observable": { @@ -18013,6 +17889,82 @@ "glob": "^7.1.2" } }, + "ts-jest": { + "version": "25.3.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.3.1.tgz", + "integrity": "sha512-O53FtKguoMUByalAJW+NWEv7c4tus5ckmhfa7/V0jBb2z8v5rDSLFC1Ate7wLknYPC1euuhY6eJjQq4FtOZrkg==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "micromatch": "4.x", + "mkdirp": "1.x", + "resolve": "1.x", + "semver": "6.x", + "yargs-parser": "18.x" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "ts-loader": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.2.tgz", @@ -18171,12 +18123,6 @@ "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", "dev": true }, - "ua-parser-js": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", - "dev": true - }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -18884,9 +18830,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -19194,9 +19140,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -19406,12 +19352,6 @@ "iconv-lite": "0.4.24" } }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", - "dev": true - }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -19671,9 +19611,9 @@ } }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" diff --git a/package.json b/package.json index dd6cb33d6..9c2b62eca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-chat-widget", - "version": "3.0.0", + "version": "3.0.0-beta.5", "description": "Chat web widget for React apps", "main": "lib/index.js", "repository": "git@github.com:Wolox/react-chat-widget.git", @@ -9,11 +9,7 @@ "scripts": { "start": "webpack-dev-server --config webpack.config.dev.js", "build": "webpack --config ./webpack.config.prod.js", - "test": "jest --coverage", - "prepublishOnly": "npm run test && npm run build" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" + "test": "jest --coverage" }, "keywords": [ "react", @@ -28,6 +24,8 @@ "markdown-it-link-attributes": "^2.1.0", "markdown-it-sanitizer": "^0.4.3", "markdown-it-sup": "^1.0.0", + "react": "^16.13.1", + "react-dom": "^16.13.1", "react-redux": "^7.2.0", "redux": "^4.0.5" }, @@ -76,12 +74,10 @@ "postcss-loader": "^2.1.3", "prettier": "^1.1.0", "prettier-eslint": "^5.1.0", - "react": "^16.13.0", - "react-dom": "^16.13.0", - "react-test-renderer": "^15.6.1", "sass-loader": "^6.0.6", "source-map-loader": "^0.2.4", "style-loader": "^0.18.2", + "ts-jest": "^25.3.1", "ts-loader": "^6.2.1", "typescript": "^3.8.3", "uglifyjs-webpack-plugin": "^1.2.7", @@ -91,10 +87,23 @@ "webpack-dev-server": "^3.10.3" }, "peerDependencies": { - "react": "^16.3.1" + "react": "^16.13.1", + "react-dom": "^16.13.1" }, "jest": { "verbose": true, + "transform": { + "^.+\\.tsx?$": "ts-jest" + }, + "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js", + "jsx", + "json", + "node" + ], "testURL": "http://localhost/", "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/mocks/fileMock.js", diff --git a/src/components/Widget/components/Conversation/components/Header/style.scss b/src/components/Widget/components/Conversation/components/Header/style.scss index ddd0b5c8a..9688c89fd 100644 --- a/src/components/Widget/components/Conversation/components/Header/style.scss +++ b/src/components/Widget/components/Conversation/components/Header/style.scss @@ -1,4 +1,4 @@ -@import 'variables'; +@import 'variables/colors'; @import 'common'; .rcw-conversation-container { diff --git a/src/components/Widget/components/Conversation/components/Messages/components/Loader/styles.scss b/src/components/Widget/components/Conversation/components/Messages/components/Loader/styles.scss index eecb2c6ea..49c6eee5a 100644 --- a/src/components/Widget/components/Conversation/components/Messages/components/Loader/styles.scss +++ b/src/components/Widget/components/Conversation/components/Messages/components/Loader/styles.scss @@ -1,4 +1,4 @@ -@import 'variables.scss'; +@import 'variables/colors'; .loader { margin: 10px; diff --git a/src/components/Widget/components/Conversation/components/Messages/components/Message/index.tsx b/src/components/Widget/components/Conversation/components/Messages/components/Message/index.tsx index b9b147cdf..d6c0e24e1 100644 --- a/src/components/Widget/components/Conversation/components/Messages/components/Message/index.tsx +++ b/src/components/Widget/components/Conversation/components/Messages/components/Message/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { format } from 'date-fns'; +import format from 'date-fns/format'; import markdownIt from 'markdown-it'; import markdownItSup from 'markdown-it-sup'; import markdownItSanitizer from 'markdown-it-sanitizer'; @@ -11,9 +11,10 @@ import './styles.scss'; type Props = { message: Message; + showTimeStamp: boolean; } -function Message({ message }: Props) { +function Message({ message, showTimeStamp }: Props) { const sanitizedHTML = markdownIt().use(markdownItSup) .use(markdownItSanitizer) .use(markdownItLinkAttributes, { attrs: { target: '_blank', rel: 'noopener' } }) @@ -22,7 +23,7 @@ function Message({ message }: Props) { return (
- {format(message.timestamp, 'hh:mm')} + {showTimeStamp && {format(message.timestamp, 'hh:mm')}}
); } diff --git a/src/components/Widget/components/Conversation/components/Messages/components/Message/styles.scss b/src/components/Widget/components/Conversation/components/Messages/components/Message/styles.scss index 6fa6262ab..533296076 100644 --- a/src/components/Widget/components/Conversation/components/Messages/components/Message/styles.scss +++ b/src/components/Widget/components/Conversation/components/Messages/components/Message/styles.scss @@ -1,4 +1,4 @@ -@import 'variables'; +@import 'variables/colors'; @import 'common'; .rcw-message { @@ -9,6 +9,7 @@ .rcw-timestamp { font-size: 10px; + margin-top: 5px; } .rcw-client { @@ -28,6 +29,7 @@ .rcw-response { display: flex; flex-direction: column; + align-items: flex-start; .rcw-message-text { @include message-bubble($grey-2); diff --git a/src/components/Widget/components/Conversation/components/Messages/components/Snippet/index.tsx b/src/components/Widget/components/Conversation/components/Messages/components/Snippet/index.tsx index 04d24e25b..aa880e944 100644 --- a/src/components/Widget/components/Conversation/components/Messages/components/Snippet/index.tsx +++ b/src/components/Widget/components/Conversation/components/Messages/components/Snippet/index.tsx @@ -1,22 +1,27 @@ import React from 'react'; +import format from 'date-fns/format'; -import { Message, Link } from 'src/store/types'; +import { Link } from 'src/store/types'; import './styles.scss'; type Props = { message: Link; + showTimeStamp: boolean; } -function Snippet({ message }: Props) { +function Snippet({ message, showTimeStamp }: Props) { return ( -
-
{message.title}
-
- - {message.link} - +
+
+
{message.title}
+
+ {showTimeStamp && {format(message.timestamp, 'hh:mm')}}
); } diff --git a/src/components/Widget/components/Conversation/components/Messages/components/Snippet/styles.scss b/src/components/Widget/components/Conversation/components/Messages/components/Snippet/styles.scss index b0e456d4f..77b9f8678 100644 --- a/src/components/Widget/components/Conversation/components/Messages/components/Snippet/styles.scss +++ b/src/components/Widget/components/Conversation/components/Messages/components/Snippet/styles.scss @@ -1,5 +1,5 @@ -@import 'variables.scss'; -@import 'common.scss'; +@import 'variables/colors'; +@import 'common'; .rcw-snippet { @include message-bubble($grey-2); diff --git a/src/components/Widget/components/Conversation/components/Messages/index.tsx b/src/components/Widget/components/Conversation/components/Messages/index.tsx index d0ca56590..ac15f6dfa 100644 --- a/src/components/Widget/components/Conversation/components/Messages/index.tsx +++ b/src/components/Widget/components/Conversation/components/Messages/index.tsx @@ -1,30 +1,42 @@ import React, { useEffect, useRef } from 'react'; import { useSelector, useDispatch } from 'react-redux'; +import format from 'date-fns/format'; import { scrollToBottom } from '../../../../../../utils/messages'; import { Message, Link, CustomCompMessage, GlobalState } from '../../../../../../store/types'; +import { setBadgeCount, markAllMessagesRead } from '@actions'; import Loader from './components/Loader'; import './styles.scss'; type Props = { + showTimeStamp: boolean, profileAvatar?: string; } -function Messages({ profileAvatar }: Props) { - const messages = useSelector((state: GlobalState) => state.messages.messages); - const typing = useSelector((state: GlobalState) => state.behavior.messageLoader); +function Messages({ profileAvatar, showTimeStamp }: Props) { const dispatch = useDispatch(); + const { messages, typing, showChat, badgeCount } = useSelector((state: GlobalState) => ({ + messages: state.messages.messages, + badgeCount: state.messages.badgeCount, + typing: state.behavior.messageLoader, + showChat: state.behavior.showChat + })); const messageRef = useRef(null); - useEffect(() => scrollToBottom(messageRef.current), [messages]); - + useEffect(() => { + // @ts-ignore + scrollToBottom(messageRef.current); + if (showChat && badgeCount) dispatch(markAllMessagesRead()); + else dispatch(setBadgeCount(messages.filter((message) => message.unread).length)); + }, [messages, badgeCount, showChat]); + const getComponentToRender = (message: Message | Link | CustomCompMessage) => { const ComponentToRender = message.component; if (message.type === 'component') { return ; } - return ; + return ; }; // TODO: Fix this function or change to move the avatar to last message from response @@ -37,8 +49,8 @@ function Messages({ profileAvatar }: Props) { return (
- {messages?.map(message => -
+ {messages?.map((message, index) => +
{profileAvatar && message.showAvatar && profile diff --git a/src/components/Widget/components/Conversation/components/Messages/styles.scss b/src/components/Widget/components/Conversation/components/Messages/styles.scss index 2c54eaae0..da6eb3c60 100644 --- a/src/components/Widget/components/Conversation/components/Messages/styles.scss +++ b/src/components/Widget/components/Conversation/components/Messages/styles.scss @@ -1,5 +1,5 @@ -@import 'variables.scss'; -@import 'common.scss'; +@import 'variables/colors'; +@import 'common'; .rcw-messages-container { background-color: $white; diff --git a/src/components/Widget/components/Conversation/components/QuickButtons/components/QuickButton/styles.scss b/src/components/Widget/components/Conversation/components/QuickButtons/components/QuickButton/styles.scss index 7daef299d..22773f220 100644 --- a/src/components/Widget/components/Conversation/components/QuickButtons/components/QuickButton/styles.scss +++ b/src/components/Widget/components/Conversation/components/QuickButtons/components/QuickButton/styles.scss @@ -1,4 +1,4 @@ -@import "variables.scss"; +@import 'variables/colors'; .quick-button { background: none; diff --git a/src/components/Widget/components/Conversation/components/QuickButtons/style.scss b/src/components/Widget/components/Conversation/components/QuickButtons/style.scss index 44f97b1a6..aee4efd48 100644 --- a/src/components/Widget/components/Conversation/components/QuickButtons/style.scss +++ b/src/components/Widget/components/Conversation/components/QuickButtons/style.scss @@ -1,4 +1,4 @@ -@import "variables.scss"; +@import 'variables/colors'; .quick-buttons-container { background: $white; diff --git a/src/components/Widget/components/Conversation/components/Sender/index.tsx b/src/components/Widget/components/Conversation/components/Sender/index.tsx index 7e0650813..045e28c73 100644 --- a/src/components/Widget/components/Conversation/components/Sender/index.tsx +++ b/src/components/Widget/components/Conversation/components/Sender/index.tsx @@ -1,4 +1,4 @@ -import React, { useRef, useEffect } from 'react'; +import React, { useRef, useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; import { GlobalState } from 'src/store/types'; @@ -11,11 +11,12 @@ type Props = { placeholder: string; disabledInput: boolean; autofocus: boolean; - sendMessage: () => void; + sendMessage: (event: any) => void; + buttonAlt: string; + onTextInputChange?: (event: any) => void; } -function Sender({ sendMessage, placeholder, disabledInput, autofocus }: Props) { - +function Sender({ sendMessage, placeholder, disabledInput, autofocus, onTextInputChange, buttonAlt }: Props) { const showChat = useSelector((state: GlobalState) => state.behavior.showChat); const inputRef = useRef(null); // @ts-ignore @@ -32,9 +33,10 @@ function Sender({ sendMessage, placeholder, disabledInput, autofocus }: Props) { disabled={disabledInput} autoFocus={autofocus} autoComplete="off" + onChange={onTextInputChange} /> ); diff --git a/src/components/Widget/components/Conversation/components/Sender/style.scss b/src/components/Widget/components/Conversation/components/Sender/style.scss index 72e26e35b..6640f918f 100644 --- a/src/components/Widget/components/Conversation/components/Sender/style.scss +++ b/src/components/Widget/components/Conversation/components/Sender/style.scss @@ -1,4 +1,4 @@ -@import 'variables.scss'; +@import 'variables/colors'; .rcw-sender { align-items: center; @@ -7,6 +7,10 @@ height: 45px; padding: 5px; border-radius: 0 0 10px 10px; + + &.expand { + height: 55px; + } } .rcw-new-message { @@ -15,10 +19,15 @@ background-color: $grey-2; height: 30px; padding-left: 15px; + resize: none; &:focus { outline: none; } + + &.expand { + height: 40px; + } } .rcw-send { diff --git a/src/components/Widget/components/Conversation/index.tsx b/src/components/Widget/components/Conversation/index.tsx index e25ceefe0..76c44128a 100644 --- a/src/components/Widget/components/Conversation/index.tsx +++ b/src/components/Widget/components/Conversation/index.tsx @@ -23,6 +23,9 @@ type Props = { profileAvatar?: string; titleAvatar?: string; onQuickButtonClicked?: AnyFunction; + onTextInputChange?: (event: any) => void; + sendButtonAlt: string; + showTimeStamp: boolean; }; function Conversation({ @@ -37,10 +40,13 @@ function Conversation({ toggleChat, profileAvatar, titleAvatar, - onQuickButtonClicked + onQuickButtonClicked, + onTextInputChange, + sendButtonAlt, + showTimeStamp }: Props) { return ( -
+
- +
); diff --git a/src/components/Widget/components/Conversation/style.scss b/src/components/Widget/components/Conversation/style.scss index 8c1e3d39f..2d65a85b8 100644 --- a/src/components/Widget/components/Conversation/style.scss +++ b/src/components/Widget/components/Conversation/style.scss @@ -1,6 +1,6 @@ -@import 'common.scss'; -@import 'variables.scss'; -@import 'animation.scss'; +@import 'common'; +@import 'variables/colors'; +@import 'animation'; .rcw-conversation-container { border-radius: 10px; diff --git a/src/components/Widget/components/Launcher/components/Badge/style.scss b/src/components/Widget/components/Launcher/components/Badge/style.scss index cd7503a2c..950aa5c93 100644 --- a/src/components/Widget/components/Launcher/components/Badge/style.scss +++ b/src/components/Widget/components/Launcher/components/Badge/style.scss @@ -1,6 +1,7 @@ -@import 'variables.scss'; +@import 'variables/colors'; .rcw-launcher { + .rcw-badge{ position: fixed; top: -10px; diff --git a/src/components/Widget/components/Launcher/index.tsx b/src/components/Widget/components/Launcher/index.tsx index 4aea93e50..d299a26e3 100644 --- a/src/components/Widget/components/Launcher/index.tsx +++ b/src/components/Widget/components/Launcher/index.tsx @@ -1,9 +1,10 @@ import React from 'react'; -import { useSelector } from 'react-redux'; +import { useSelector, useDispatch } from 'react-redux'; import cn from 'classnames'; import Badge from './components/Badge'; import { GlobalState } from '../../../../store/types'; +import { setBadgeCount } from '../../../../store/actions'; import './style.scss'; @@ -11,19 +12,30 @@ const openLauncher = require('../../../../../assets/launcher_button.svg') as str const close = require('../../../../../assets/clear-button.svg') as string; type Props = { - toggle: () => void, - badge: number + toggle: () => void; + chatId: string; + openLabel: string; + closeLabel: string; } -function Launcher({ toggle, badge }: Props) { - const showChat = useSelector((state: GlobalState) => state.behavior.showChat); +function Launcher({ toggle, chatId, openLabel, closeLabel }: Props) { + const dispatch = useDispatch(); + const { showChat, badgeCount } = useSelector((state: GlobalState) => ({ + showChat: state.behavior.showChat, + badgeCount: state.messages.badgeCount + })); + + const toggleChat = () => { + toggle(); + if (!showChat) dispatch(setBadgeCount(0)); + } return ( - ); diff --git a/src/components/Widget/components/Launcher/style.scss b/src/components/Widget/components/Launcher/style.scss index fb9a2a8d1..6fb6dc18a 100644 --- a/src/components/Widget/components/Launcher/style.scss +++ b/src/components/Widget/components/Launcher/style.scss @@ -1,6 +1,6 @@ -@import 'common.scss'; -@import 'variables.scss'; -@import 'animation.scss'; +@import 'common'; +@import 'variables/colors'; +@import 'animation'; .rcw-launcher { @include animation(0, 0.5s, slide-in); @@ -11,6 +11,7 @@ box-shadow: 0px 2px 10px 1px $grey-3; height: 60px; margin-top: 10px; + cursor: pointer; width: 60px; &:focus { diff --git a/src/components/Widget/index.tsx b/src/components/Widget/index.tsx index fd9b922b9..a48ed3d5f 100644 --- a/src/components/Widget/index.tsx +++ b/src/components/Widget/index.tsx @@ -14,11 +14,16 @@ type Props = { profileAvatar?: string; showCloseButton: boolean; fullScreenMode: boolean; - badge: number; autofocus: boolean; customLauncher?: AnyFunction; handleNewUserMessage: AnyFunction; handleQuickButtonClicked: AnyFunction; + handleTextInputChange?: (event: any) => void; + chatId: string; + launcherOpenLabel: string; + launcherCloseLabel: string; + sendButtonAlt: string; + showTimeStamp: boolean; } function Widget({ @@ -29,11 +34,16 @@ function Widget({ profileAvatar, showCloseButton, fullScreenMode, - badge, autofocus, customLauncher, handleNewUserMessage, - handleQuickButtonClicked + handleQuickButtonClicked, + handleTextInputChange, + chatId, + launcherOpenLabel, + launcherCloseLabel, + sendButtonAlt, + showTimeStamp }: Props) { const dispatch = useDispatch(); @@ -68,9 +78,14 @@ function Widget({ profileAvatar={profileAvatar} showCloseButton={showCloseButton} fullScreenMode={fullScreenMode} - badge={badge} autofocus={autofocus} customLauncher={customLauncher} + onTextInputChange={handleTextInputChange} + chatId={chatId} + launcherOpenLabel={launcherOpenLabel} + launcherCloseLabel={launcherCloseLabel} + sendButtonAlt={sendButtonAlt} + showTimeStamp={showTimeStamp} /> ); } diff --git a/src/components/Widget/layout.tsx b/src/components/Widget/layout.tsx index b2e3ddf97..8718387de 100644 --- a/src/components/Widget/layout.tsx +++ b/src/components/Widget/layout.tsx @@ -21,9 +21,14 @@ type Props = { profileAvatar?: string; showCloseButton: boolean; fullScreenMode: boolean; - badge: number; autofocus: boolean; customLauncher?: AnyFunction; + onTextInputChange?: (event: any) => void; + chatId: string; + launcherOpenLabel: string; + launcherCloseLabel: string; + sendButtonAlt: string; + showTimeStamp: boolean; } function WidgetLayout({ @@ -37,9 +42,14 @@ function WidgetLayout({ profileAvatar, showCloseButton, fullScreenMode, - badge, autofocus, - customLauncher + customLauncher, + onTextInputChange, + chatId, + launcherOpenLabel, + launcherCloseLabel, + sendButtonAlt, + showTimeStamp }: Props) { const { dissableInput, showChat } = useSelector((state: GlobalState) => ({ showChat: state.behavior.showChat, @@ -61,13 +71,18 @@ function WidgetLayout({ titleAvatar={titleAvatar} className={showChat ? 'active' : 'hidden'} onQuickButtonClicked={onQuickButtonClicked} + onTextInputChange={onTextInputChange} + sendButtonAlt={sendButtonAlt} + showTimeStamp={showTimeStamp} /> {customLauncher ? customLauncher(onToggleConversation) : !fullScreenMode && }
diff --git a/src/components/Widget/style.scss b/src/components/Widget/style.scss index 6f7034d77..e36ec2c96 100644 --- a/src/components/Widget/style.scss +++ b/src/components/Widget/style.scss @@ -1,5 +1,5 @@ -@import 'animation.scss'; -@import 'common.scss'; +@import 'animation'; +@import 'common'; .rcw-widget-container { bottom: 0; @@ -15,11 +15,6 @@ .rcw-full-screen { @include widget-container-fs; - - &.rcw-opened { - width: 100%; - height: 100%; - } } @media screen and (max-width: 800px) { diff --git a/src/index.tsx b/src/index.tsx index 30c98643c..7c7e41e02 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { Provider } from 'react-redux'; import Widget from './components/Widget'; @@ -8,18 +8,23 @@ import store from './store'; import { AnyFunction } from './utils/types'; type Props = { + handleNewUserMessage: AnyFunction; + handleQuickButtonClicked: AnyFunction; title?: string; titleAvatar?: string; subtitle?: string; senderPlaceHolder?: string; showCloseButton?: boolean; fullScreenMode?: boolean; - badge?: number; autofocus?: boolean; profileAvatar?: string; launcher?: AnyFunction; - handleNewUserMessage: AnyFunction; - handleQuickButtonClicked: AnyFunction; + handleTextInputChange?: (event: any) => void; + chatId?: string; + launcherOpenLabel?: string, + launcherCloseLabel?: string, + sendButtonAlt?: string; + showTimeStamp?: boolean; } & typeof defaultProps; function ConnectedWidget({ @@ -29,12 +34,17 @@ function ConnectedWidget({ senderPlaceHolder, showCloseButton, fullScreenMode, - badge, autofocus, profileAvatar, launcher, handleNewUserMessage, - handleQuickButtonClicked + handleQuickButtonClicked, + handleTextInputChange, + chatId, + launcherOpenLabel, + launcherCloseLabel, + sendButtonAlt, + showTimeStamp }: Props) { return ( @@ -48,9 +58,14 @@ function ConnectedWidget({ profileAvatar={profileAvatar} showCloseButton={showCloseButton} fullScreenMode={fullScreenMode} - badge={badge} autofocus={autofocus} customLauncher={launcher} + handleTextInputChange={handleTextInputChange} + chatId={chatId} + launcherOpenLabel={launcherOpenLabel} + launcherCloseLabel={launcherCloseLabel} + sendButtonAlt={sendButtonAlt} + showTimeStamp={showTimeStamp} /> ); @@ -62,8 +77,12 @@ const defaultProps = { senderPlaceHolder: 'Type a message...', showCloseButton: true, fullScreenMode: false, - badge: 0, - autofocus: true + autofocus: true, + chatId: 'rcw-chat-container', + launcherOpenLabel: 'Open chat', + launcherCloseLabel: 'Close chat', + sendButtonAlt: 'Send', + showTimeStamp: true }; ConnectedWidget.defaultProps = defaultProps; diff --git a/src/scss/animation.scss b/src/scss/_animation.scss similarity index 80% rename from src/scss/animation.scss rename to src/scss/_animation.scss index 1eadaf5cc..783290ee7 100644 --- a/src/scss/animation.scss +++ b/src/scss/_animation.scss @@ -2,17 +2,17 @@ -webkit-animation-delay: $delay; -webkit-animation-duration: $duration; -webkit-animation-name: $animation; - -webkit-animation-fill-mode: forwards; /* this prevents the animation from restarting! */ + -webkit-animation-fill-mode: forwards; -moz-animation-delay: $delay; -moz-animation-duration: $duration; -moz-animation-name: $animation; - -moz-animation-fill-mode: forwards; /* this prevents the animation from restarting! */ + -moz-animation-fill-mode: forwards; animation-delay: $delay; animation-duration: $duration; animation-name: $animation; - animation-fill-mode: forwards; /* this prevents the animation from restarting! */ + animation-fill-mode: forwards; } @mixin keyframes ($animation-name) { diff --git a/src/scss/common.scss b/src/scss/_common.scss similarity index 95% rename from src/scss/common.scss rename to src/scss/_common.scss index 50f447c3e..9612c87ba 100644 --- a/src/scss/common.scss +++ b/src/scss/_common.scss @@ -6,7 +6,10 @@ text-align: left; } +// Full screen mixins + @mixin widget-container-fs { + height: 100vh; margin: 0; max-width: none; width: 100%; diff --git a/src/scss/variables.scss b/src/scss/variables/_colors.scss similarity index 100% rename from src/scss/variables.scss rename to src/scss/variables/_colors.scss diff --git a/src/scss/variables/_sizes.scss b/src/scss/variables/_sizes.scss new file mode 100644 index 000000000..fb81be729 --- /dev/null +++ b/src/scss/variables/_sizes.scss @@ -0,0 +1 @@ +$fullscreen-break: 800px; diff --git a/src/store/actions/index.ts b/src/store/actions/index.ts index 65eac77bd..e56d72dfe 100644 --- a/src/store/actions/index.ts +++ b/src/store/actions/index.ts @@ -1,76 +1,102 @@ import { ElementType } from 'react'; -import * as actions from './types'; -import { Link, QuickButton } from '../types'; +import * as actionsTypes from './types'; +import { LinkParams } from '../types'; -export function toggleChat(): actions.BehaviorActions { +export function toggleChat(): actionsTypes.ToggleChat { return { - type: actions.TOGGLE_CHAT + type: actionsTypes.TOGGLE_CHAT }; } -export function toggleInputDisabled(): actions.BehaviorActions { +export function toggleInputDisabled(): actionsTypes.ToggleInputDisabled { return { - type: actions.TOGGLE_INPUT_DISABLED + type: actionsTypes.TOGGLE_INPUT_DISABLED }; } -export function addUserMessage(text: string): actions.MessagesActions { +export function addUserMessage(text: string, id?: string): actionsTypes.AddUserMessage { return { - type: actions.ADD_NEW_USER_MESSAGE, - text + type: actionsTypes.ADD_NEW_USER_MESSAGE, + text, + id }; } -export function addResponseMessage(text: string): actions.MessagesActions { +export function addResponseMessage(text: string, id?: string): actionsTypes.AddResponseMessage { return { - type: actions.ADD_NEW_RESPONSE_MESSAGE, - text + type: actionsTypes.ADD_NEW_RESPONSE_MESSAGE, + text, + id }; } -export function toggleMsgLoader(): actions.BehaviorActions { +export function toggleMsgLoader(): actionsTypes.ToggleMsgLoader { return { - type: actions.TOGGLE_MESSAGE_LOADER + type: actionsTypes.TOGGLE_MESSAGE_LOADER } } -export function addLinkSnippet(link: Link): actions.MessagesActions { +export function addLinkSnippet(link: LinkParams, id?: string): actionsTypes.AddLinkSnippet { return { - type: actions.ADD_NEW_LINK_SNIPPET, - link + type: actionsTypes.ADD_NEW_LINK_SNIPPET, + link, + id }; } export function renderCustomComponent( component: ElementType, props: any, - showAvatar: boolean -): actions.MessagesActions { + showAvatar: boolean, + id?: string +): actionsTypes.RenderCustomComponent { return { - type: actions.ADD_COMPONENT_MESSAGE, + type: actionsTypes.ADD_COMPONENT_MESSAGE, component, props, - showAvatar + showAvatar, + id }; } -export function dropMessages(): actions.MessagesActions { +export function dropMessages(): actionsTypes.DropMessages { return { - type: actions.DROP_MESSAGES + type: actionsTypes.DROP_MESSAGES }; } -export function hideAvatar(index: number): actions.MessagesActions { +export function hideAvatar(index: number): actionsTypes.HideAvatar { return { - type: actions.HIDE_AVATAR, + type: actionsTypes.HIDE_AVATAR, index }; } -export function setQuickButtons(buttons: Array): actions.QuickButtonsActions { +export function setQuickButtons(buttons: Array<{ label: string, value: string | number }>): actionsTypes.SetQuickButtons { return { - type: actions.SET_QUICK_BUTTONS, + type: actionsTypes.SET_QUICK_BUTTONS, buttons } } + +export function deleteMessages(count: number, id?: string): actionsTypes.DeleteMessages { + return { + type: actionsTypes.DELETE_MESSAGES, + count, + id + } +} + +export function setBadgeCount(count: number): actionsTypes.SetBadgeCount { + return { + type: actionsTypes.SET_BADGE_COUNT, + count + } +} + +export function markAllMessagesRead(): actionsTypes.MarkAllMessagesRead { + return { + type: actionsTypes.MARK_ALL_READ + } +} diff --git a/src/store/actions/types.ts b/src/store/actions/types.ts index fb7052b38..3358350f9 100644 --- a/src/store/actions/types.ts +++ b/src/store/actions/types.ts @@ -1,16 +1,19 @@ import { ElementType } from 'react'; -import { Link, QuickButton } from '../types'; +import { LinkParams } from '../types'; export const TOGGLE_CHAT = 'BEHAVIOR/TOGGLE_CHAT'; export const TOGGLE_INPUT_DISABLED = 'BEHAVIOR/TOGGLE_INPUT_DISABLED'; export const TOGGLE_MESSAGE_LOADER = 'BEHAVIOR/TOGGLE_MSG_LOADER'; +export const SET_BADGE_COUNT = 'BEHAVIOR/SET_BADGE_COUNT'; export const ADD_NEW_USER_MESSAGE = 'MESSAGES/ADD_NEW_USER_MESSAGE'; export const ADD_NEW_RESPONSE_MESSAGE = 'MESSAGES/ADD_NEW_RESPONSE_MESSAGE'; export const ADD_NEW_LINK_SNIPPET = 'MESSAGES/ADD_NEW_LINK_SNIPPET'; export const ADD_COMPONENT_MESSAGE = 'MESSAGES/ADD_COMPONENT_MESSAGE'; export const DROP_MESSAGES = 'MESSAGES/DROP_MESSAGES'; export const HIDE_AVATAR = 'MESSAGES/HIDE_AVATAR'; +export const DELETE_MESSAGES = 'MESSAGES/DELETE_MESSAGES'; +export const MARK_ALL_READ = 'MESSAGES/MARK_ALL_READ'; export const SET_QUICK_BUTTONS = 'SET_QUICK_BUTTONS'; export interface ToggleChat { @@ -24,45 +27,65 @@ export interface ToggleInputDisabled { export interface AddUserMessage { type: typeof ADD_NEW_USER_MESSAGE; text: string; + id?: string; } export interface AddResponseMessage { - type: typeof ADD_NEW_RESPONSE_MESSAGE, - text: string + type: typeof ADD_NEW_RESPONSE_MESSAGE; + text: string; + id?: string; } export interface ToggleMsgLoader { - type: typeof TOGGLE_MESSAGE_LOADER + type: typeof TOGGLE_MESSAGE_LOADER; } export interface AddLinkSnippet { - type: typeof ADD_NEW_LINK_SNIPPET, - link: Link + type: typeof ADD_NEW_LINK_SNIPPET; + link: LinkParams; + id?: string; } export interface RenderCustomComponent { - type: typeof ADD_COMPONENT_MESSAGE, - component: ElementType, - props: any, - showAvatar: boolean + type: typeof ADD_COMPONENT_MESSAGE; + component: ElementType; + props: any; + showAvatar: boolean; + id?: string; } export interface DropMessages { - type: typeof DROP_MESSAGES + type: typeof DROP_MESSAGES; } export interface HideAvatar { - type: typeof HIDE_AVATAR, - index: number + type: typeof HIDE_AVATAR; + index: number; +} + +export interface DeleteMessages { + type: typeof DELETE_MESSAGES; + count: number; + id?: string; } export interface SetQuickButtons { - type: typeof SET_QUICK_BUTTONS, - buttons: Array + type: typeof SET_QUICK_BUTTONS; + buttons: Array<{ label: string, value: string | number }>; +} + +export interface SetBadgeCount { + type: typeof SET_BADGE_COUNT; + count: number; +} + +export interface MarkAllMessagesRead { + type: typeof MARK_ALL_READ; } export type BehaviorActions = ToggleChat | ToggleInputDisabled | ToggleMsgLoader; -export type MessagesActions = AddUserMessage | AddResponseMessage | AddLinkSnippet | RenderCustomComponent | DropMessages | HideAvatar; +export type MessagesActions = AddUserMessage | AddResponseMessage | AddLinkSnippet | RenderCustomComponent + | DropMessages | HideAvatar | DeleteMessages | MarkAllMessagesRead | SetBadgeCount; export type QuickButtonsActions = SetQuickButtons; diff --git a/src/store/dispatcher.ts b/src/store/dispatcher.ts index cce42a9f2..0d2ee5386 100644 --- a/src/store/dispatcher.ts +++ b/src/store/dispatcher.ts @@ -1,24 +1,27 @@ +import { ElementType } from 'react'; + import store from '.'; import * as actions from './actions'; +import { LinkParams } from './types'; -export function addUserMessage(text) { - store.dispatch(actions.addUserMessage(text)); +export function addUserMessage(text: string, id?: string) { + store.dispatch(actions.addUserMessage(text, id)); } -export function addResponseMessage(text) { - store.dispatch(actions.addResponseMessage(text)); +export function addResponseMessage(text: string, id?: string) { + store.dispatch(actions.addResponseMessage(text, id)); } -export function addLinkSnippet(link) { - store.dispatch(actions.addLinkSnippet(link)); +export function addLinkSnippet(link: LinkParams, id?: string) { + store.dispatch(actions.addLinkSnippet(link, id)); } export function toggleMsgLoader() { store.dispatch(actions.toggleMsgLoader()); } -export function renderCustomComponent(component, props, showAvatar = false) { - store.dispatch(actions.renderCustomComponent(component, props, showAvatar)); +export function renderCustomComponent(component: ElementType, props: any, showAvatar = false, id?: string) { + store.dispatch(actions.renderCustomComponent(component, props, showAvatar, id)); } export function toggleWidget() { @@ -33,10 +36,22 @@ export function dropMessages() { store.dispatch(actions.dropMessages()); } -export function isWidgetOpened() { - return store.getState().behavior.get('showChat'); +export function isWidgetOpened(): boolean { + return store.getState().behavior.showChat; } -export function setQuickButtons(buttons) { +export function setQuickButtons(buttons: Array<{ label: string, value: string | number }>) { store.dispatch(actions.setQuickButtons(buttons)); } + +export function deleteMessages(count: number, id?: string) { + store.dispatch(actions.deleteMessages(count, id)); +} + +export function markAllAsRead() { + store.dispatch(actions.markAllMessagesRead()); +} + +export function setBadgeCount(count: number) { + store.dispatch(actions.setBadgeCount(count)); +} diff --git a/src/store/index.ts b/src/store/index.ts index 24bd1a9ed..dca1fdd06 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -10,7 +10,7 @@ declare global { } } -const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; +const composeEnhancers = (process.env.NODE_ENV !== 'production' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose; const reducer = combineReducers({ behavior, messages, quickButtons }); export default createStore(reducer, composeEnhancers()); diff --git a/src/store/reducers/messagesReducer.ts b/src/store/reducers/messagesReducer.ts index d1615dd57..c7deebb20 100644 --- a/src/store/reducers/messagesReducer.ts +++ b/src/store/reducers/messagesReducer.ts @@ -10,30 +10,46 @@ import { ADD_NEW_LINK_SNIPPET, ADD_COMPONENT_MESSAGE, DROP_MESSAGES, - HIDE_AVATAR + HIDE_AVATAR, + DELETE_MESSAGES, + MARK_ALL_READ, + SET_BADGE_COUNT } from '../actions/types'; const initialState = { - messages: [] + messages: [], + badgeCount: 0 }; const messagesReducer = { - [ADD_NEW_USER_MESSAGE]: (state: MessagesState, { text }) => - ({ messages: [...state.messages, createNewMessage(text, MESSAGE_SENDER.CLIENT)] }), + [ADD_NEW_USER_MESSAGE]: (state: MessagesState, { text, id }) => + ({ ...state, messages: [...state.messages, createNewMessage(text, MESSAGE_SENDER.CLIENT, id)] }), - [ADD_NEW_RESPONSE_MESSAGE]: (state: MessagesState, { text }) => - ({ messages: [...state.messages, createNewMessage(text, MESSAGE_SENDER.RESPONSE)] }), + [ADD_NEW_RESPONSE_MESSAGE]: (state: MessagesState, { text, id }) => + ({ ...state, messages: [...state.messages, createNewMessage(text, MESSAGE_SENDER.RESPONSE, id)], badgeCount: state.badgeCount + 1 }), - [ADD_NEW_LINK_SNIPPET]: (state: MessagesState, { link }) => - ({ messages: [...state.messages, createLinkSnippet(link)] }), + [ADD_NEW_LINK_SNIPPET]: (state: MessagesState, { link, id }) => + ({ ...state, messages: [...state.messages, createLinkSnippet(link, id)] }), - [ADD_COMPONENT_MESSAGE]: (state: MessagesState, { component, props, showAvatar }) => - ({ messages: [...state.messages, createComponentMessage(component, props, showAvatar)] }), + [ADD_COMPONENT_MESSAGE]: (state: MessagesState, { component, props, showAvatar, id }) => + ({ ...state, messages: [...state.messages, createComponentMessage(component, props, showAvatar, id)] }), - [DROP_MESSAGES]: () => ({ messages: [] }), + [DROP_MESSAGES]: (state: MessagesState) => ({ ...state, messages: [] }), - [HIDE_AVATAR]: (state: MessagesState, { index }) => - state.messages[index].showAvatar = false + [HIDE_AVATAR]: (state: MessagesState, { index }) => state.messages[index].showAvatar = false, + + [DELETE_MESSAGES]: (state: MessagesState, { count, id }) => + ({ + ...state, + messages: id ? + state.messages.filter(message => message.customId !== id) : + state.messages.splice(state.messages.length - 1, count) + }), + + [SET_BADGE_COUNT]: (state: MessagesState, { count }) => ({ ...state, badgeCount: count }), + + [MARK_ALL_READ]: (state: MessagesState) => + ({ ...state, messages: state.messages.map(message => ({ ...message, unread: false})), badgeCount: 0}) } export default (state = initialState, action: MessagesActions) => createReducer(messagesReducer, state, action); diff --git a/src/store/types.ts b/src/store/types.ts index 88470baa0..71daf09ff 100644 --- a/src/store/types.ts +++ b/src/store/types.ts @@ -6,6 +6,8 @@ type BaseMessage = { sender: string; showAvatar: boolean; timestamp: Date; + unread: boolean; + customId?: string; props?: any; } @@ -25,6 +27,12 @@ export interface Link extends BaseMessage { target: string; }; +export interface LinkParams { + link: string; + title: string; + target?: string; +} + export interface CustomCompMessage extends BaseMessage { props: any; } @@ -36,11 +44,12 @@ export interface BehaviorState { }; export interface MessagesState { - messages: Array; + messages: (Message | Link | CustomCompMessage)[]; + badgeCount: number; } export interface QuickButtonsState { - quickButtons: Array; + quickButtons: QuickButton[]; } export interface GlobalState { diff --git a/src/utils/messages.ts b/src/utils/messages.ts index 28c47b3a4..f4f896bb3 100644 --- a/src/utils/messages.ts +++ b/src/utils/messages.ts @@ -1,6 +1,6 @@ import { ElementType } from 'react'; -import { Message as MessageI, Link, CustomCompMessage } from '../store/types'; +import { Message as MessageI, Link, CustomCompMessage, LinkParams } from '../store/types'; import Message from '../components/Widget/components/Conversation/components/Messages/components/Message'; import Snippet from '../components/Widget/components/Conversation/components/Messages/components/Snippet'; @@ -8,18 +8,20 @@ import QuickButton from '../components/Widget/components/Conversation/components import { MESSAGES_TYPES, MESSAGE_SENDER, MESSAGE_BOX_SCROLL_DURATION } from '../constants'; -export function createNewMessage(text: string, sender: string): MessageI { +export function createNewMessage(text: string, sender: string, id?: string): MessageI { return { type: MESSAGES_TYPES.TEXT, component: Message, text, sender, timestamp: new Date(), - showAvatar: sender === MESSAGE_SENDER.RESPONSE + showAvatar: sender === MESSAGE_SENDER.RESPONSE, + customId: id, + unread: sender === MESSAGE_SENDER.RESPONSE }; } -export function createLinkSnippet(link: { title: string, link: string, target: string }) : Link { +export function createLinkSnippet(link: LinkParams, id?: string) : Link { return { type: MESSAGES_TYPES.SNIPPET.LINK, component: Snippet, @@ -28,18 +30,22 @@ export function createLinkSnippet(link: { title: string, link: string, target: s target: link.target || '_blank', sender: MESSAGE_SENDER.RESPONSE, timestamp: new Date(), - showAvatar: true + showAvatar: true, + customId: id, + unread: true }; } -export function createComponentMessage(component: ElementType, props: any, showAvatar: boolean): CustomCompMessage { +export function createComponentMessage(component: ElementType, props: any, showAvatar: boolean, id?: string): CustomCompMessage { return { type: MESSAGES_TYPES.CUSTOM_COMPONENT, component, props, sender: MESSAGE_SENDER.RESPONSE, timestamp: new Date(), - showAvatar + showAvatar, + customId: id, + unread: true }; } @@ -53,15 +59,8 @@ export function createQuickButton(button: { label: string, value: string | numbe // TODO: Clean functions and window use for SSR -/** - * Easing Functions - * @param {*} t timestamp - * @param {*} b begining - * @param {*} c change - * @param {*} d duration - */ -function sinEaseOut(t, b, c, d) { - return c * ((t = t / d - 1) * t * t + 1) + b; +function sinEaseOut(timestamp: any, begining: any, change: any, duration: any) { + return change * ((timestamp = timestamp / duration - 1) * timestamp * timestamp + 1) + begining; } /** @@ -70,29 +69,27 @@ function sinEaseOut(t, b, c, d) { * @param {*} scrollStart * @param {*} scroll scroll distance */ -function scrollWithSlowMotion(target, scrollStart, scroll: number) { - const raf = window.webkitRequestAnimationFrame || window.requestAnimationFrame - let start = 0 +function scrollWithSlowMotion(target: any, scrollStart: any, scroll: number) { + const raf = window?.requestAnimationFrame; + let start = 0; const step = (timestamp) => { if (!start) { - start = timestamp + start = timestamp; } - let stepScroll = sinEaseOut(timestamp - start, 0, scroll, MESSAGE_BOX_SCROLL_DURATION) - let total = scrollStart + stepScroll + let stepScroll = sinEaseOut(timestamp - start, 0, scroll, MESSAGE_BOX_SCROLL_DURATION); + let total = scrollStart + stepScroll; target.scrollTop = total; if (total < scrollStart + scroll) { - raf(step) + raf(step); } } - raf(step) + raf(step); } -export function scrollToBottom(messagesDiv) { +export function scrollToBottom(messagesDiv: HTMLDivElement) { if (!messagesDiv) return; const screenHeight = messagesDiv.clientHeight; const scrollTop = messagesDiv.scrollTop; - - const scrollOffset = messagesDiv.scrollHeight - (scrollTop + screenHeight) - - scrollOffset && scrollWithSlowMotion(messagesDiv, scrollTop, scrollOffset); + const scrollOffset = messagesDiv.scrollHeight - (scrollTop + screenHeight); + if (scrollOffset) scrollWithSlowMotion(messagesDiv, scrollTop, scrollOffset); } diff --git a/tsconfig.json b/tsconfig.json index 0fc3eb1e3..6974085ce 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "strict": true, "baseUrl": ".", - "outDir": "./dist/", + "outDir": "./lib/", "sourceMap": true, "noImplicitAny": false, "esModuleInterop": true, @@ -24,5 +24,5 @@ }, "extends": "./tsconfig.paths.json", "include": ["src"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "lib"] } diff --git a/tsconfig.paths.json b/tsconfig.paths.json index abd20187d..1a54752f0 100644 --- a/tsconfig.paths.json +++ b/tsconfig.paths.json @@ -2,8 +2,9 @@ "compilerOptions": { "baseUrl": "src", "paths": { - "@assets": ["./src/assets"], + "@assets": ["./assets"], "@actions": ["./src/store/actions"], + "@types": ["./src/store/types"], "@scss/*": ["scss/*"], "@constants/*": ["constants/*"], "@utils/*": ["utils/*"], diff --git a/webpack.config.prod.js b/webpack.config.prod.js index 888049722..3d5229702 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -9,7 +9,7 @@ const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); const autoprefixer = require('autoprefixer'); module.exports = { - entry: './index.js', // TODO: Change to TS + entry: './index.js', output: { path: path.join(__dirname, '/lib'), filename: 'index.js', @@ -19,23 +19,24 @@ module.exports = { resolve: { extensions: ['.tsx', '.ts', '.js'] }, + target: 'web', mode: 'production', module: { rules: [ { test: /\.ts(x?)$/, - exclude: /node_modules/, + exclude: [/node_modules/, /dev/], use: ['babel-loader', 'ts-loader'] }, { - enforce: "pre", + enforce: 'pre', test: /\.js$/, - loader: "source-map-loader" + loader: 'source-map-loader' }, { test: /\.js$/, - loader: 'babel-loader', - exclude: /node_modules/ + exclude: /node_modules/, + loader: 'babel-loader' }, { test: /\.scss$/, @@ -83,8 +84,16 @@ module.exports = { }), ], externals: { - react: 'React', - 'react-dom': 'ReactDOM' + react: { + commonjs: 'React', + commonjs2: 'react', + amd: 'react' + }, + 'react-dom': { + commonjs: 'ReactDOM', + commonjs2: 'react-dom', + amd: 'react-dom' + } }, optimization: { minimizer: [