From d9644396243212c179649a57efe7069766f5e6cb Mon Sep 17 00:00:00 2001 From: mattuy Date: Mon, 1 Nov 2021 22:30:51 +0800 Subject: [PATCH] first version --- .gitignore | 12 + README.md | 5 +- packages/server/package-lock.json | 83 + packages/server/package.json | 1 + packages/server/src/bot.js | 5 +- packages/server/src/db.js | 20 +- packages/server/src/index.js | 31 + packages/server/src/message.js | 28 +- packages/server/src/options.example.json | 4 +- packages/server/src/socket.js | 238 +- packages/server/src/util.js | 4 + packages/web/.babelrc | 43 + packages/web/.eslintignore | 6 + packages/web/.eslintrc | 72 + packages/web/.prettierrc | 7 + packages/web/README.md | 6 + packages/web/build/webpack.common.js | 131 + packages/web/build/webpack.dev.js | 29 + packages/web/build/webpack.prod.js | 43 + packages/web/package-lock.json | 21261 ++++++++++++++++ packages/web/package.json | 100 + .../web/src/@fiora/assets/audios/apple.mp3 | Bin 0 -> 26240 bytes .../web/src/@fiora/assets/audios/default.mp3 | Bin 0 -> 10449 bytes .../web/src/@fiora/assets/audios/huaji.mp3 | Bin 0 -> 7812 bytes .../web/src/@fiora/assets/audios/mobileqq.mp3 | Bin 0 -> 33091 bytes .../web/src/@fiora/assets/audios/momo.mp3 | Bin 0 -> 33408 bytes .../web/src/@fiora/assets/audios/pcqq.mp3 | Bin 0 -> 15926 bytes .../web/src/@fiora/assets/fonts/font.woff | Bin 0 -> 17356 bytes .../web/src/@fiora/assets/fonts/font2.ttf | Bin 0 -> 2052 bytes .../@fiora/assets/images/background-cool.jpg | Bin 0 -> 168935 bytes .../web/src/@fiora/assets/images/baidu.png | Bin 0 -> 45717 bytes packages/web/src/@fiora/config/client.ts | 39 + .../web/src/@fiora/utils/compressImage.ts | 25 + packages/web/src/@fiora/utils/const.ts | 19 + packages/web/src/@fiora/utils/expressions.ts | 54 + packages/web/src/@fiora/utils/getFriendId.ts | 12 + .../web/src/@fiora/utils/getRandomAvatar.ts | 17 + .../web/src/@fiora/utils/getRandomColor.ts | 36 + packages/web/src/@fiora/utils/logger.ts | 6 + packages/web/src/@fiora/utils/sleep.ts | 5 + packages/web/src/@fiora/utils/socket.ts | 9 + .../src/@fiora/utils/test/getFriendId.spec.ts | 10 + .../web/src/@fiora/utils/test/url.spec.ts | 23 + packages/web/src/@fiora/utils/time.ts | 28 + packages/web/src/@fiora/utils/ua.ts | 7 + packages/web/src/@fiora/utils/url.ts | 16 + packages/web/src/@fiora/utils/xss.ts | 9 + packages/web/src/App.less | 25 + packages/web/src/App.tsx | 164 + packages/web/src/components/Avatar.tsx | 55 + packages/web/src/components/Button.tsx | 46 + packages/web/src/components/Dialog.less | 47 + packages/web/src/components/Dialog.tsx | 6 + packages/web/src/components/Dropdown.less | 9 + packages/web/src/components/Dropdown.tsx | 6 + packages/web/src/components/IconButton.less | 9 + packages/web/src/components/IconButton.tsx | 39 + packages/web/src/components/Input.less | 31 + packages/web/src/components/Input.tsx | 102 + packages/web/src/components/Loading.tsx | 3 + packages/web/src/components/Menu.tsx | 4 + packages/web/src/components/Message.less | 37 + packages/web/src/components/Message.tsx | 34 + packages/web/src/components/Progress.tsx | 4 + packages/web/src/components/Select.tsx | 4 + packages/web/src/components/Tabs.tsx | 6 + packages/web/src/components/Tooltip.less | 13 + packages/web/src/components/Tooltip.tsx | 6 + packages/web/src/context.ts | 4 + packages/web/src/globalStyles.ts | 16 + packages/web/src/hooks/useAction.ts | 90 + packages/web/src/hooks/useAero.ts | 12 + packages/web/src/hooks/useIsLogin.ts | 10 + packages/web/src/hooks/useStore.ts | 20 + packages/web/src/localStorage.ts | 89 + packages/web/src/main.tsx | 41 + .../ActiveContactList/ActiveContact.less | 80 + .../ActiveContactList/ActiveContact.tsx | 87 + .../ActiveContactList/ActiveContactList.less | 39 + .../ActiveContactList/ActiveContactList.tsx | 36 + packages/web/src/modules/Chat/Chat.less | 42 + packages/web/src/modules/Chat/Chat.tsx | 32 + packages/web/src/modules/Chat/ChatInput.less | 154 + packages/web/src/modules/Chat/ChatInput.tsx | 636 + packages/web/src/modules/Chat/CodeEditor.less | 52 + packages/web/src/modules/Chat/CodeEditor.tsx | 242 + packages/web/src/modules/Chat/Expression.less | 107 + packages/web/src/modules/Chat/Expression.tsx | 127 + .../src/modules/Chat/GroupManagePanel.less | 148 + .../web/src/modules/Chat/GroupManagePanel.tsx | 251 + packages/web/src/modules/Chat/HeaderBar.less | 69 + packages/web/src/modules/Chat/HeaderBar.tsx | 66 + .../src/modules/Chat/Message/CodeMessage.tsx | 83 + .../src/modules/Chat/Message/FileMessage.tsx | 60 + .../src/modules/Chat/Message/ImageMessage.tsx | 104 + .../web/src/modules/Chat/Message/Message.less | 231 + .../web/src/modules/Chat/Message/Message.tsx | 191 + .../modules/Chat/Message/SystemMessage.tsx | 22 + .../src/modules/Chat/Message/TextMessage.tsx | 37 + .../web/src/modules/Chat/MessageList.less | 15 + packages/web/src/modules/Chat/MessageList.tsx | 78 + .../FunctionBarAndContactList/Contact.less | 57 + .../FunctionBarAndContactList/Contact.tsx | 46 + .../ContactList.less | 5 + .../FunctionBarAndContactList/ContactList.tsx | 19 + .../FunctionBarAndContactList.less | 37 + .../FunctionBarAndContactList.tsx | 26 + .../FunctionBarAndContactList/SearchBar.less | 164 + .../FunctionBarAndContactList/SearchBar.tsx | 69 + packages/web/src/modules/Login/Login.less | 20 + packages/web/src/modules/Login/Login.tsx | 80 + packages/web/src/modules/Sidebar/Common.less | 23 + .../web/src/modules/Sidebar/OnlineStatus.less | 14 + .../web/src/modules/Sidebar/OnlineStatus.tsx | 21 + packages/web/src/modules/Sidebar/Setting.less | 137 + packages/web/src/modules/Sidebar/Setting.tsx | 414 + packages/web/src/modules/Sidebar/Sidebar.less | 67 + packages/web/src/modules/Sidebar/Sidebar.tsx | 158 + packages/web/src/service.ts | 45 + packages/web/src/socket.ts | 104 + packages/web/src/state/action.ts | 39 + packages/web/src/state/reducer.ts | 288 + packages/web/src/state/store.ts | 9 + packages/web/src/styles/iconfont.less | 147 + packages/web/src/styles/normalize.less | 74 + packages/web/src/styles/variable.less | 1 + packages/web/src/template.html | 29 + packages/web/src/themes.ts | 27 + packages/web/src/types/index.d.ts | 54 + packages/web/src/utils/composeMessage.ts | 66 + packages/web/src/utils/fetch.ts | 21 + packages/web/src/utils/getRandomHuaji.ts | 87 + packages/web/src/utils/inobounce.ts | 78 + packages/web/src/utils/notification.ts | 20 + packages/web/src/utils/playSound.ts | 53 + packages/web/src/utils/readDiskFile.ts | 98 + packages/web/src/utils/setCssVariable.ts | 14 + packages/web/src/utils/uploadFile.ts | 21 + packages/web/test/components/Avatar.spec.tsx | 55 + packages/web/test/components/Button.spec.tsx | 35 + packages/web/test/localStorage.spec.ts | 23 + packages/web/test/state/reducer.spec.ts | 589 + packages/web/tsconfig.json | 19 + 143 files changed, 29617 insertions(+), 101 deletions(-) create mode 100644 packages/web/.babelrc create mode 100644 packages/web/.eslintignore create mode 100644 packages/web/.eslintrc create mode 100644 packages/web/.prettierrc create mode 100644 packages/web/README.md create mode 100644 packages/web/build/webpack.common.js create mode 100644 packages/web/build/webpack.dev.js create mode 100644 packages/web/build/webpack.prod.js create mode 100644 packages/web/package-lock.json create mode 100644 packages/web/package.json create mode 100644 packages/web/src/@fiora/assets/audios/apple.mp3 create mode 100644 packages/web/src/@fiora/assets/audios/default.mp3 create mode 100644 packages/web/src/@fiora/assets/audios/huaji.mp3 create mode 100644 packages/web/src/@fiora/assets/audios/mobileqq.mp3 create mode 100644 packages/web/src/@fiora/assets/audios/momo.mp3 create mode 100644 packages/web/src/@fiora/assets/audios/pcqq.mp3 create mode 100644 packages/web/src/@fiora/assets/fonts/font.woff create mode 100644 packages/web/src/@fiora/assets/fonts/font2.ttf create mode 100755 packages/web/src/@fiora/assets/images/background-cool.jpg create mode 100644 packages/web/src/@fiora/assets/images/baidu.png create mode 100644 packages/web/src/@fiora/config/client.ts create mode 100644 packages/web/src/@fiora/utils/compressImage.ts create mode 100644 packages/web/src/@fiora/utils/const.ts create mode 100644 packages/web/src/@fiora/utils/expressions.ts create mode 100644 packages/web/src/@fiora/utils/getFriendId.ts create mode 100644 packages/web/src/@fiora/utils/getRandomAvatar.ts create mode 100644 packages/web/src/@fiora/utils/getRandomColor.ts create mode 100644 packages/web/src/@fiora/utils/logger.ts create mode 100644 packages/web/src/@fiora/utils/sleep.ts create mode 100644 packages/web/src/@fiora/utils/socket.ts create mode 100644 packages/web/src/@fiora/utils/test/getFriendId.spec.ts create mode 100644 packages/web/src/@fiora/utils/test/url.spec.ts create mode 100644 packages/web/src/@fiora/utils/time.ts create mode 100644 packages/web/src/@fiora/utils/ua.ts create mode 100644 packages/web/src/@fiora/utils/url.ts create mode 100644 packages/web/src/@fiora/utils/xss.ts create mode 100644 packages/web/src/App.less create mode 100644 packages/web/src/App.tsx create mode 100644 packages/web/src/components/Avatar.tsx create mode 100644 packages/web/src/components/Button.tsx create mode 100644 packages/web/src/components/Dialog.less create mode 100644 packages/web/src/components/Dialog.tsx create mode 100644 packages/web/src/components/Dropdown.less create mode 100644 packages/web/src/components/Dropdown.tsx create mode 100644 packages/web/src/components/IconButton.less create mode 100644 packages/web/src/components/IconButton.tsx create mode 100644 packages/web/src/components/Input.less create mode 100644 packages/web/src/components/Input.tsx create mode 100644 packages/web/src/components/Loading.tsx create mode 100644 packages/web/src/components/Menu.tsx create mode 100644 packages/web/src/components/Message.less create mode 100644 packages/web/src/components/Message.tsx create mode 100644 packages/web/src/components/Progress.tsx create mode 100644 packages/web/src/components/Select.tsx create mode 100644 packages/web/src/components/Tabs.tsx create mode 100644 packages/web/src/components/Tooltip.less create mode 100644 packages/web/src/components/Tooltip.tsx create mode 100644 packages/web/src/context.ts create mode 100644 packages/web/src/globalStyles.ts create mode 100644 packages/web/src/hooks/useAction.ts create mode 100644 packages/web/src/hooks/useAero.ts create mode 100644 packages/web/src/hooks/useIsLogin.ts create mode 100644 packages/web/src/hooks/useStore.ts create mode 100644 packages/web/src/localStorage.ts create mode 100644 packages/web/src/main.tsx create mode 100644 packages/web/src/modules/ActiveContactList/ActiveContact.less create mode 100644 packages/web/src/modules/ActiveContactList/ActiveContact.tsx create mode 100644 packages/web/src/modules/ActiveContactList/ActiveContactList.less create mode 100644 packages/web/src/modules/ActiveContactList/ActiveContactList.tsx create mode 100644 packages/web/src/modules/Chat/Chat.less create mode 100644 packages/web/src/modules/Chat/Chat.tsx create mode 100644 packages/web/src/modules/Chat/ChatInput.less create mode 100644 packages/web/src/modules/Chat/ChatInput.tsx create mode 100644 packages/web/src/modules/Chat/CodeEditor.less create mode 100644 packages/web/src/modules/Chat/CodeEditor.tsx create mode 100644 packages/web/src/modules/Chat/Expression.less create mode 100644 packages/web/src/modules/Chat/Expression.tsx create mode 100644 packages/web/src/modules/Chat/GroupManagePanel.less create mode 100644 packages/web/src/modules/Chat/GroupManagePanel.tsx create mode 100644 packages/web/src/modules/Chat/HeaderBar.less create mode 100644 packages/web/src/modules/Chat/HeaderBar.tsx create mode 100644 packages/web/src/modules/Chat/Message/CodeMessage.tsx create mode 100644 packages/web/src/modules/Chat/Message/FileMessage.tsx create mode 100644 packages/web/src/modules/Chat/Message/ImageMessage.tsx create mode 100644 packages/web/src/modules/Chat/Message/Message.less create mode 100644 packages/web/src/modules/Chat/Message/Message.tsx create mode 100644 packages/web/src/modules/Chat/Message/SystemMessage.tsx create mode 100644 packages/web/src/modules/Chat/Message/TextMessage.tsx create mode 100644 packages/web/src/modules/Chat/MessageList.less create mode 100644 packages/web/src/modules/Chat/MessageList.tsx create mode 100644 packages/web/src/modules/FunctionBarAndContactList/Contact.less create mode 100644 packages/web/src/modules/FunctionBarAndContactList/Contact.tsx create mode 100644 packages/web/src/modules/FunctionBarAndContactList/ContactList.less create mode 100644 packages/web/src/modules/FunctionBarAndContactList/ContactList.tsx create mode 100644 packages/web/src/modules/FunctionBarAndContactList/FunctionBarAndContactList.less create mode 100644 packages/web/src/modules/FunctionBarAndContactList/FunctionBarAndContactList.tsx create mode 100644 packages/web/src/modules/FunctionBarAndContactList/SearchBar.less create mode 100644 packages/web/src/modules/FunctionBarAndContactList/SearchBar.tsx create mode 100644 packages/web/src/modules/Login/Login.less create mode 100644 packages/web/src/modules/Login/Login.tsx create mode 100644 packages/web/src/modules/Sidebar/Common.less create mode 100644 packages/web/src/modules/Sidebar/OnlineStatus.less create mode 100644 packages/web/src/modules/Sidebar/OnlineStatus.tsx create mode 100644 packages/web/src/modules/Sidebar/Setting.less create mode 100644 packages/web/src/modules/Sidebar/Setting.tsx create mode 100644 packages/web/src/modules/Sidebar/Sidebar.less create mode 100644 packages/web/src/modules/Sidebar/Sidebar.tsx create mode 100644 packages/web/src/service.ts create mode 100644 packages/web/src/socket.ts create mode 100644 packages/web/src/state/action.ts create mode 100644 packages/web/src/state/reducer.ts create mode 100644 packages/web/src/state/store.ts create mode 100644 packages/web/src/styles/iconfont.less create mode 100644 packages/web/src/styles/normalize.less create mode 100644 packages/web/src/styles/variable.less create mode 100644 packages/web/src/template.html create mode 100644 packages/web/src/themes.ts create mode 100644 packages/web/src/types/index.d.ts create mode 100644 packages/web/src/utils/composeMessage.ts create mode 100644 packages/web/src/utils/fetch.ts create mode 100644 packages/web/src/utils/getRandomHuaji.ts create mode 100644 packages/web/src/utils/inobounce.ts create mode 100644 packages/web/src/utils/notification.ts create mode 100644 packages/web/src/utils/playSound.ts create mode 100644 packages/web/src/utils/readDiskFile.ts create mode 100644 packages/web/src/utils/setCssVariable.ts create mode 100644 packages/web/src/utils/uploadFile.ts create mode 100644 packages/web/test/components/Avatar.spec.tsx create mode 100644 packages/web/test/components/Button.spec.tsx create mode 100644 packages/web/test/localStorage.spec.ts create mode 100644 packages/web/test/state/reducer.spec.ts create mode 100644 packages/web/tsconfig.json diff --git a/.gitignore b/.gitignore index c2658d7..e8d8924 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,13 @@ +.DS_Store node_modules/ +dist/ +coverage/ +.idea/ +.linaria-cache/ + +npm-debug.log +yarn-error.log +.eslintcache +lerna-debug.log + +.env diff --git a/README.md b/README.md index ea30e38..68fbed1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ # v-chat - 微信多客户端方案。服务器通过Web版微信接口提供收发微信消息的能力,并允许多个客户端同时连接。 + +## 鸣谢 +前端程序参考自[fiora](https://github.com/yinxin630/fiora)web聊天室。 +服务端程序使用了[wechat4u](https://github.com/nodeWechat/wechat4u)。 diff --git a/packages/server/package-lock.json b/packages/server/package-lock.json index ccf5f25..6fc7db8 100644 --- a/packages/server/package-lock.json +++ b/packages/server/package-lock.json @@ -14,6 +14,7 @@ "@koa/router": "^10.1.1", "commander": "^8.3.0", "dayjs": "^1.10.7", + "formidable": "^2.0.1", "inquirer": "^8.2.0", "koa": "^2.13.4", "qrcode-terminal": "^0.12.0", @@ -233,6 +234,11 @@ "node": ">= 6" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -597,6 +603,15 @@ "node": ">=0.10" } }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -736,6 +751,20 @@ "node": ">= 0.12" } }, + "node_modules/formidable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "dependencies": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -836,6 +865,14 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } + }, "node_modules/http-assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", @@ -1503,6 +1540,17 @@ "qrcode-terminal": "bin/qrcode-terminal.js" } }, + "node_modules/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -2094,6 +2142,11 @@ } } }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2357,6 +2410,15 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2463,6 +2525,17 @@ "mime-types": "^2.1.12" } }, + "formidable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "requires": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + } + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -2533,6 +2606,11 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "http-assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", @@ -3018,6 +3096,11 @@ "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==" }, + "qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", diff --git a/packages/server/package.json b/packages/server/package.json index ebed861..4d7c8f7 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -15,6 +15,7 @@ "@koa/router": "^10.1.1", "commander": "^8.3.0", "dayjs": "^1.10.7", + "formidable": "^2.0.1", "inquirer": "^8.2.0", "koa": "^2.13.4", "qrcode-terminal": "^0.12.0", diff --git a/packages/server/src/bot.js b/packages/server/src/bot.js index ae70ecf..4dfeb33 100644 --- a/packages/server/src/bot.js +++ b/packages/server/src/bot.js @@ -50,9 +50,12 @@ function getNickName(usernameOrContact) { /** 获取群聊消息的发言人 */ function getGroupMsgSpeaker(msg) { - if (!isGroupMessage(msg) || msg.isSendBySelf) { + if (!isGroupMessage(msg)) { return null; } + if (msg.isSendBySelf) { + return bot.contacts[bot.user.UserName]; + } const speakerID = msg["OriginalContent"].split(":", 1)[0]; return bot.contacts[speakerID]; } diff --git a/packages/server/src/db.js b/packages/server/src/db.js index e47bc8c..217f4eb 100644 --- a/packages/server/src/db.js +++ b/packages/server/src/db.js @@ -75,10 +75,22 @@ async function initDB(dbFile) { /** 将消息存储到数据库 */ async function pushMessage(message) { - const m = {}; - for (const key of Object.keys(message)) { - m["$" + key] = message[key]; - } + // NOTICE: sql的参数对象必须和sql语句中的占位符一一对应,不能多也不能少 + const m = { + $messageID: message.messageID, + $createTimestamp: message.createTimestamp, + $type: message.type, + $messageType: message.messageType, + $fromName: message.fromName, + $fromNickName: message.fromNickName, + $toName: message.toName, + $toNickName: message.toNickName, + $isGroupMessage: message.isGroupMessage, + $speakingGroupMemberName: message.speakingGroupMemberName, + $content: message.content, + $filename: message.filename, + $displayFilename: message.displayFilename, + }; await pushStatement.run(m); } diff --git a/packages/server/src/index.js b/packages/server/src/index.js index 70e952e..80f1c23 100644 --- a/packages/server/src/index.js +++ b/packages/server/src/index.js @@ -61,3 +61,34 @@ async function start() { } start(); + +// let sessionData = JSON.parse( +// fs.readFileSync("/home/master/desktop/session.json"), +// { +// encoding: "utf-8", +// } +// ); +// const W = require("wechat4u"); +// const bot = new W(sessionData); +// bot.on("uuid", (uuid) => { +// qrCode.generate("https://login.weixin.qq.com/l/" + uuid, { +// small: true, +// }); +// }); + +// bot.on("login", async () => { +// console.log("logged in"); +// fs.writeFileSync( +// "/home/master/desktop/session.json", +// JSON.stringify(bot.botData) +// ); +// const { mediaId } = await bot.uploadMedia( +// fs.createReadStream("/home/master/desktop/q.jpg"), +// undefined, +// "filehelper" +// ); +// bot.sendPic(mediaId, "filehelper").then((rse) => { +// console.log(rse); +// }); +// }); +// bot.restart(); diff --git a/packages/server/src/message.js b/packages/server/src/message.js index fee1d2b..bc10f3d 100644 --- a/packages/server/src/message.js +++ b/packages/server/src/message.js @@ -6,6 +6,7 @@ const { bot, getDisplayName, getGroupMsgSpeaker, + getGroupMsgContent, getNickName, } = require("./bot.js"); const { @@ -58,7 +59,9 @@ async function processMessage(msg) { speakingGroupMember: null, filename: null, displayFilename: msg["FileName"] || "", + fileSize: msg.FileSize | 0, isGroupMessage: bot.Contact.isRoomContact(peerContact), + isSentBySelf: msg.isSendBySelf, }; if (m.isGroupMessage) { @@ -71,18 +74,18 @@ async function processMessage(msg) { case bot.CONF.MSGTYPE_TEXT: // 文本消息 m.type = "text"; - m.content = msg["Content"]; + m.content = m.isGroupMessage ? getGroupMsgContent(msg) : msg["Content"]; break; case bot.CONF.MSGTYPE_EMOTICON: case bot.CONF.MSGTYPE_IMAGE: { const suffix = msgType === bot.CONF.MSGTYPE_IMAGE ? ".jpg" : ".gif"; m.type = "img"; m.content = - `【${msgType === bot.CONF.MSGTYPE_IMAGE ? "图片" : "表情"}】` + + `[${msgType === bot.CONF.MSGTYPE_IMAGE ? "图片" : "表情"}]` + (msg["FileName"] || ""); if (msg["HasProductId"]) { m.type = "unknown"; - m.content = "【表情贴图】请在手机上查看"; + m.content = "[表情贴图]请在手机上查看"; break; } const cachePath = composeCacheFilePath(msg, suffix); @@ -101,7 +104,7 @@ async function processMessage(msg) { } case bot.CONF.MSGTYPE_VOICE: { m.type = "voice"; - m.content = "【语音消息】"; + m.content = "[语音消息]"; m.filename = composeFilename(msg, ".mp3"); const { data } = await bot.getVoice(msg.MsgId); fs.writeFileSync(composeMediaFilePath(msg, m.filename), data); @@ -110,6 +113,7 @@ async function processMessage(msg) { case bot.CONF.MSGTYPE_VIDEO: case bot.CONF.MSGTYPE_MICROVIDEO: { m.type = "video"; + m.content = "[视频]"; const suffix = ".mp4"; const cachePath = composeCacheFilePath(msg, suffix); const res = await bot.getVideo(msg.MsgId); @@ -125,16 +129,16 @@ async function processMessage(msg) { break; } case bot.CONF.MSGTYPE_APP: - m.type = "file"; if (msg.AppMsgType === 5) { m.type = "text"; - m.content = "【链接】" + msg["FileName"] + ": " + msg["Url"]; + m.content = "[链接]" + msg["FileName"] + ": " + msg["Url"]; break; } else if (msg.AppMsgType == 6) { + m.type = "file"; + m.content = "[文件]" + m.displayFilename; if (!(msg.FileSize < 10 * 1024 * 1024)) { // 忽略10M以上的大文件 m.type = "unknown"; - m.content = "【文件】" + m.displayFilename; m.filename = null; break; } @@ -178,11 +182,11 @@ async function processMessage(msg) { (m.speakingGroupMember && getDisplayName(m.speakingGroupMember)) || null, content: m.content, filename: m.filename, + fileSize: m.fileSize, displayFilename: m.displayFilename, }; const clientMsg = { - msgID: m.messageID, - composedID: m.composedID, + messageID: m.composedID, createTimestamp: m.createTimestamp, type: m.type, fromID: m.fromID, @@ -192,15 +196,19 @@ async function processMessage(msg) { toName: m.toName, toNickName: m.toNickName, isGroupMessage: m.isGroupMessage, + isSentBySelf: m.isSentBySelf, speakingGroupMemberID: m.speakingGroupMember && m.speakingGroupMember.UserName, speakingGroupMemberName: (m.speakingGroupMember && getDisplayName(m.speakingGroupMember)) || null, content: m.content, filename: m.filename, + fileSize: m.fileSize, displayFilename: m.displayFilename, }; - await db.pushMessage(dbMsg); + if (!bot.Contact.isSpContact(peerContact)) { + await db.pushMessage(dbMsg); + } socket.pushMessage(clientMsg); } diff --git a/packages/server/src/options.example.json b/packages/server/src/options.example.json index ccc6f3e..46be294 100644 --- a/packages/server/src/options.example.json +++ b/packages/server/src/options.example.json @@ -2,10 +2,10 @@ "dbFile": "/home/master/desktop/wxbot.db", "dataDir": "/home/master/desktop", "serve": true, - "httpHost": "127.0.0.1", + "httpHost": "localhost", "httpPort": 9200, "debugMode": false, - "baseUrl": "http:127.0.0.1", + "baseUrl": "http://localhost:9200", "appCode": { "mattuy-laptop": "iasdjfkwe3ds-qw3rjkwjfda8" }, diff --git a/packages/server/src/socket.js b/packages/server/src/socket.js index c62bb17..ab43f8c 100644 --- a/packages/server/src/socket.js +++ b/packages/server/src/socket.js @@ -1,19 +1,21 @@ const Koa = require("koa"); const fs = require("fs"); const path = require("path"); -const { promisify } = require("util"); const Router = require("@koa/router"); const cors = require("@koa/cors"); +const formidable = require("formidable"); const dayjs = require("dayjs"); const { Server } = require("socket.io"); const { createServer } = require("http"); -const { bot, getDisplayName } = require("./bot.js"); +const { bot, getDisplayName, cacheAvatars } = require("./bot.js"); const { config } = require("./config.js"); const { textSHA1, ensureAvatarDir, ensureUploadDir, composeAvatarFileName, + composeMediaFilePathFromID, + getOriginalMsgID, } = require("./util.js"); const DEFAULT_ROOM = "default_room"; @@ -26,67 +28,65 @@ const io = new Server(httpServer, { path: "/socket.io", }); const activeSessions = new Set(); +const socketIDToSessionID = new Map(); io.use((socket, next) => { const auth = socket.handshake.auth; if (!auth) { - next(Error("认证失败")); - return; + return next(Error("认证失败")); } const appName = auth.appName; const appCode = config.appCode[appName]; if (!appCode || appCode !== auth.appCode) { - next(Error("认证失败")); - return; + return next(Error("认证失败")); } if (textSHA1(auth.passphrase) !== config.appAuthHash[appName]) { - next(Error("口令错误")); - return; + return next(Error("口令错误")); + } + if (activeSessions.has(socket.handshake.auth.sessionID)) { + return next(Error("会话已存在")); } if (bot?.state !== bot.CONF.STATE.login) { - next(Error("服务不可用")); - return; + return next(Error("服务不可用")); } - next().then(() => { - bot.sendText( - `【上线通知】 - DATETIME: ${dayjs().format("YYYY-MM-DDTHH:MM:ss")} - APP_NAME: ${appName} - PLATFORM: ${auth.platform || ""}`, - "filehelper" - ); + next(); + const text = `【上线通知】${"\n"}⌜${appName}⌟ on ${ + auth.platform + } connected at ${dayjs().format("YYYY-MM-DDTHH:MM:ss")}`; + bot.sendText(text, "filehelper"); + pushMessage({ + messageID: "notice_" + (Date.now() + Math.random()), + createTimestamp: Math.trunc(Date.now() / 1000), + type: "text", + fromID: "filehelper", + fromName: "你自己", + fromNickName: "你自己", + toID: bot.user.UserName, + toName: "你自己", + toNickName: bot.user.NickName, + isGroupMessage: false, + isSentBySelf: false, + content: text, }); }); -function deactivateSession() { - activeSessions.delete(socket.id); +function deactivateSession(socket) { + activeSessions.delete(socket.handshake.auth.sessionID); + socketIDToSessionID.delete(socket.id); } - -async function pushMessage(message) { - if (message.filename) { - for (const sid of await io.allSockets()) { - const msg = { - ...message, - fileUrl: `${config.baseUrl}/session/${sid}/media/${message.composedID}/${message.filename}`, - }; - io.to(sid).emit("message", msg); - } - } else { - io.in(DEFAULT_ROOM).emit("message", message); - } -} - -function login(sessionID) { +function login(socket) { const u = bot.user; return { id: u.UserName, nickname: u.NickName, displayName: u.NickName, signature: u.Signature, - avatar: `${config.baseUrl}/session/${sessionID}/avatar/${u.UserName}`, + avatar: `${config.baseUrl}/session/${socketIDToSessionID.get( + socket.id + )}/avatar/${u.UserName}`, }; } -function getContacts(sessionID) { +function getContacts(socket) { function wrapContact(contact) { return { id: contact.UserName, @@ -95,54 +95,73 @@ function getContacts(sessionID) { signature: contact.Signature, nameInitial: contact.PYInitial || contact.RemarkPYInitial, nameQuanPin: contact.PYQuanPin || contact.RemarkPYQuanPin, - avatar: `${config.baseUrl}/session/${sessionID}/avatar/${contact.UserName}`, - isFriend: contact.ContactFlag === 1, + avatar: `${config.baseUrl}/session/${socketIDToSessionID.get( + socket.id + )}/avatar/${contact.UserName}`, + type: null, }; } const data = { contacts: [], specialContacts: [], groups: [] }; for (const uid of Object.keys(bot.contacts)) { const contact = bot.contacts[uid]; + const wrapped = wrapContact(contact); if (bot.Contact.isPublicContact(contact)) { continue; } else if (bot.Contact.isSpContact(contact)) { if (["filehelper"].includes(contact.UserName)) { - data.specialContacts.push(wrapContact(contact)); + wrapped.type = "special"; + data.specialContacts.push(wrapped); } continue; } else if (bot.Contact.isRoomContact(contact)) { + wrapped.type = "group"; data.groups.push(wrapContact(contact)); } else if (!contact.isSelf) { + wrapped.type = "friend"; data.contacts.push(wrapContact(contact)); } } return data; } -async function sendMessage({ type, target, filename, fileUri, data }) { +async function sendMessage(_, { type, target, data, filename }) { const targetContact = bot.contacts[target]; if (!targetContact) { return "联系人不存在"; } - const to = targetContact.UserName; + let resp; switch (type) { case "text": - await bot.sendText(data, target); + resp = await bot.sendText(data, target); break; case "emotion": - await bot.sendEmoticon(data, to); + resp = await bot.sendEmoticon(data, target); break; case "img": case "video": case "file": { - const filepath = path.join(ensureUploadDir(), fileUri); - if (!fs.existsSync(filepath)) { + const defaultFilenameMap = { + img: "pic.jpg", + video: "video.mp4", + emotion: "pic.gif", + file: "file", + }; + const fileUri = data; + const oldFilename = path.join(ensureUploadDir(), fileUri); + const newFilename = path.join( + ensureUploadDir(), + filename || Date.now() + Math.random() + defaultFilenameMap[type] + ); + if (!fs.existsSync(oldFilename)) { return "图片不存在"; } let mediaId; try { + fs.renameSync(oldFilename, newFilename); + // NOTICE: uploadMedia函数会优先从file.path中取文件名 const { mediaId: id } = await bot.uploadMedia( - fs.createReadStream(filepath), - filename, - targetContact.UserName + fs.createReadStream(newFilename), + undefined, + target ); mediaId = id; } catch { @@ -150,56 +169,56 @@ async function sendMessage({ type, target, filename, fileUri, data }) { } try { if (type === "img") { - await bot.sendPic(mediaId, to); + resp = await bot.sendPic(mediaId, target); } else if (type === "video") { - await bot.sendVideo(mediaId, to); + resp = await bot.sendVideo(mediaId, target); } else { - await bot.sendDoc( + resp = await bot.sendDoc( mediaId, filename, - fs.statSync(filepath).size, - path.extname(filepath), - to + fs.statSync(newFilename).size, + path.extname(newFilename), + target ); } } catch (e) { return e?.tips || e?.message || "消息发送失败"; } + // 上传后删除 + fs.rm(newFilename, () => {}); break; } + default: + return "不支持的文件类型"; } + return { + messageID: resp.MsgID, + }; } -async function revokeMessage({ msgID, target }) { - await bot.revokeMsg(msgID, target); -} -async function uploadFile({ data }) { - const uploadDir = ensureUploadDir(); - const filename = dayjs().format("YYYYMMDD_") + String(Math.random()).slice(1); - const filepath = path.join(uploadDir, filename); - await promisify(fs.writeFile)(filepath, data); - // 10分钟后删除上传的临时文件 - setTimeout(() => { - if (fs.existsSync(filepath)) { - fs.rmSync(filepath); - } - }, 600000); - return { localFileName: filename }; -} -function handleNotImplemented(_, cb) { - cb?.call(null, "Not Implemented"); +async function revokeMessage(_, { composedID, target }) { + await bot.revokeMsg(getOriginalMsgID(composedID), target); } io.on("connection", (socket) => { - console.log("connected"); - activeSessions.add(socket.id); + const sid = socket.handshake.auth.sessionID; + activeSessions.add(sid); + socketIDToSessionID.set(socket.id, sid); socket.join(DEFAULT_ROOM); - socket.on("disconnect", deactivateSession); - socket.on("login", login.bind(null, socket.id)); - socket.on("get_contacts", getContacts.bind(null, socket.id)); - socket.on("send_message", sendMessage); - socket.on("revoke_message", revokeMessage); - socket.on("upload_file", uploadFile); - socket.onAny(handleNotImplemented); + function wrapWithCallback(func) { + return async function (data, callback) { + const res = func.call(this, socket, data); + if (res instanceof Promise) { + callback && callback(await res); + } else { + callback && callback(res); + } + }; + } + socket.on("disconnect", wrapWithCallback(deactivateSession)); + socket.on("login", wrapWithCallback(login)); + socket.on("get_contacts", wrapWithCallback(getContacts)); + socket.on("send_message", wrapWithCallback(sendMessage)); + socket.on("revoke_message", wrapWithCallback(revokeMessage)); socket.use((_, next) => { if (bot?.state !== bot.CONF.STATE.login) { return next(Error("服务不可用")); @@ -220,20 +239,26 @@ router.get("/session/:sessionID/avatar/:userID", (ctx, next) => { const filename = composeAvatarFileName(contact); const filepath = filename && path.join(ensureAvatarDir(), filename); if (filepath && fs.existsSync(filepath)) { + ctx.response.headers["Cache-Control"] = "max-age=3600"; ctx.response.headers["Content-Type"] = "image/jpeg"; ctx.response.body = fs.createReadStream(filepath); } else { + cacheAvatars(); ctx.throw(404); } next(); }); /** 获取消息文件,包含图片 */ router.get("/session/:sessionID/media/:composedID/:filename", (ctx, next) => { + if (!activeSessions.has(ctx.params.sessionID)) { + ctx.throw(401); + } const filename = composeMediaFilePathFromID( ctx.params.composedID, ctx.params.filename ); if (fs.existsSync(filename)) { + ctx.response.headers["Cache-Control"] = "max-age=3600"; ctx.response.body = fs.createReadStream(filename); } else { ctx.throw(404); @@ -241,10 +266,57 @@ router.get("/session/:sessionID/media/:composedID/:filename", (ctx, next) => { next(); }); +/** 上传文件 */ +router.post("/upload_file", async (ctx, next) => { + if (!activeSessions.has(ctx.request.headers.session_id)) { + ctx.throw(401); + } + const filename = dayjs().format("YYYYMMDD_") + String(Math.random()).slice(2); + const filepath = path.join(ensureUploadDir(), filename); + const form = formidable({ multiples: false }); + form.on("fileBegin", (_, file) => { + file.filepath = filepath; + }); + await new Promise((resolve, reject) => { + form.parse(ctx.req, (err, _, files) => { + if (err) { + reject(err); + } else { + ctx.response.status = 200; + ctx.response.type = "application/json"; + ctx.response.body = JSON.stringify({ tempFileName: filename }); + // 10分钟后删除上传的临时文件 + setTimeout(() => { + if (fs.existsSync(filepath)) { + fs.rmSync(filepath); + } + }, 600000); + resolve(); + } + }); + }); + next(); +}); + app.use(cors()); app.use(router.routes()); httpServer.listen(config.httpPort, config.httpHost); +async function pushMessage(message) { + if (message.filename) { + for (const sid of await io.allSockets()) { + const sessionID = socketIDToSessionID.get(sid); + const msg = { + ...message, + fileUrl: `${config.baseUrl}/session/${sessionID}/media/${message.messageID}/${message.filename}`, + }; + io.to(DEFAULT_ROOM).emit("message", msg); + } + } else { + io.in(DEFAULT_ROOM).emit("message", message); + } +} + module.exports = { pushMessage, }; diff --git a/packages/server/src/util.js b/packages/server/src/util.js index 0de3fce..64ce582 100644 --- a/packages/server/src/util.js +++ b/packages/server/src/util.js @@ -7,6 +7,9 @@ const { config } = require("./config"); function composeMessageID(msg) { return dayjs.unix(msg["CreateTime"]).format("YYYYMMDD") + msg["MsgId"]; } +function getOriginalMsgID(composedID) { + return composedID.slice(8); +} function composeFilename(msg, suffix = "") { const dt = dayjs.unix(msg["CreateTime"]); const datetime = dt.format("YYYYMMDD"); @@ -68,6 +71,7 @@ function textSHA1(text) { module.exports = { composeMessageID, + getOriginalMsgID, composeFilename, composeMediaFilePath, composeMediaFilePathFromID, diff --git a/packages/web/.babelrc b/packages/web/.babelrc new file mode 100644 index 0000000..b34d63f --- /dev/null +++ b/packages/web/.babelrc @@ -0,0 +1,43 @@ +{ + "presets": [ + [ + "@babel/preset-env", + { + "targets": "> 0.25%, not dead", + "useBuiltIns": "entry", + "corejs": 3, + "modules": false + } + ], + "@babel/preset-react", + "linaria/babel" + ], + "plugins": [ + [ + "prismjs", + { + "languages": [ + "clike", + "javascript", + "typescript", + "java", + "c", + "cpp", + "python", + "ruby", + "markup", + "markup-templating", + "php", + "go", + "csharp", + "css", + "sql", + "json" + ], + "plugins": ["line-numbers", "copy-to-clipboard", "show-language"], + "theme": "default", + "css": true + } + ] + ] +} diff --git a/packages/web/.eslintignore b/packages/web/.eslintignore new file mode 100644 index 0000000..4b33fb8 --- /dev/null +++ b/packages/web/.eslintignore @@ -0,0 +1,6 @@ +node_modules/ +dist/ +public/ +build/ +docs/ +*.d.ts diff --git a/packages/web/.eslintrc b/packages/web/.eslintrc new file mode 100644 index 0000000..6ee04fd --- /dev/null +++ b/packages/web/.eslintrc @@ -0,0 +1,72 @@ +{ + "extends": ["eslint-config-airbnb", "prettier"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json", + "createDefaultProgram": true + }, + "env": { + "browser": true, + "node": true, + "jest/globals": true + }, + "plugins": ["@typescript-eslint", "react", "react-hooks", "jsx-a11y", "import", "jest"], + "globals": { + "importScripts": true, + "workbox": true, + "__TEST__": true + }, + "settings": { + "import/resolver": { + "node": { + "extensions": [".js", ".jsx", ".ts", ".tsx"] + } + } + }, + "rules": { + "@typescript-eslint/no-unused-vars": 2, + "global-require": 0, + "implicit-arrow-linebreak": 0, + "import/extensions": [ + 2, + { + "ts": "never", + "tsx": "never", + "js": "never", + "jsx": "never" + } + ], + "indent": [ + 2, + 4, + { + "SwitchCase": 1 + } + ], + "jsx-a11y/click-events-have-key-events": 0, + "jsx-a11y/interactive-supports-focus": 0, + "jsx-a11y/no-noninteractive-element-interactions": 0, + "jsx-a11y/no-noninteractive-element-to-interactive-role": 0, + "no-param-reassign": 0, + "no-plusplus": 0, + "no-script-url": 0, + "no-underscore-dangle": 0, + "object-curly-newline": 0, + "react/jsx-filename-extension": [ + 2, + { + "extensions": [".js", ".jsx", ".tsx"] + } + ], + "react/jsx-indent": [2, 4], + "react/jsx-indent-props": [2, 4], + "react/jsx-props-no-spreading": 0, + "react/jsx-one-expression-per-line": 0, + "react/static-property-placement": 0, + "react-hooks/rules-of-hooks": 2, + "react-hooks/exhaustive-deps": 0, + "react/require-default-props": [2, { "ignoreFunctionalComponents": true }], + "import/prefer-default-export": 0, + "prefer-promise-reject-errors": "off" + } +} diff --git a/packages/web/.prettierrc b/packages/web/.prettierrc new file mode 100644 index 0000000..9dc4a69 --- /dev/null +++ b/packages/web/.prettierrc @@ -0,0 +1,7 @@ +{ + "tabWidth": 4, + "trailingComma": "all", + "singleQuote": true, + "arrowParens": "always", + "printWidth": 80 +} \ No newline at end of file diff --git a/packages/web/README.md b/packages/web/README.md new file mode 100644 index 0000000..aff41af --- /dev/null +++ b/packages/web/README.md @@ -0,0 +1,6 @@ +# fiora-chat +wxbot的客户端,UI架子fork自[fiora](https://github.com/yinxin630/fiora)。 + + +## 配置 +编译前修改`src/@fiora/config/client.ts`中的`app_name`和`app_code`字段,并在服务端做相应配置允许该`app`登录。 diff --git a/packages/web/build/webpack.common.js b/packages/web/build/webpack.common.js new file mode 100644 index 0000000..731b3bb --- /dev/null +++ b/packages/web/build/webpack.common.js @@ -0,0 +1,131 @@ +const path = require('path'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const LessPluginAutoPrefix = require('less-plugin-autoprefix'); +const Dotenv = require('dotenv-webpack'); + +module.exports = { + entry: { + app: path.resolve(__dirname, '../src/main.tsx'), + }, + output: { + filename: 'js/[name].[chunkhash:8].js', + path: path.resolve(__dirname, '../dist/fiora'), + }, + resolve: { + extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'], + alias: { + '@fiora': path.resolve(__dirname, '../src/@fiora/'), + }, + }, + module: { + rules: [ + { + test: /\.jsx?$/, + loader: 'babel-loader', + exclude: /node_modules/, + }, + { + test: /\.tsx?$/, + use: [ + { + loader: 'babel-loader', + options: { + plugins: [ + ...(process.env.NODE_ENV === 'development' + ? [require.resolve('react-refresh/babel')] + : []), + ], + }, + }, + { + loader: 'linaria/loader', + options: { + sourceMap: false, + }, + }, + { + loader: 'ts-loader', + options: { + transpileOnly: true, + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.less$/, + use: [ + 'style-loader', + { + loader: 'css-loader', + options: { + importLoaders: 2, + modules: { + localIdentName: '[local]--[hash:base64:5]', + }, + }, + }, + { + loader: 'less-loader', + options: { + lessOptions: { + plugins: [ + new LessPluginAutoPrefix({ + enable: true, + options: { + browsers: ['last 3 versions'], + }, + }), + ], + }, + sourceMap: false, + }, + }, + ], + }, + { + test: /\.css$/i, + use: ['style-loader', 'css-loader'], + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 4096, + name: 'images/[name].[ext]', + esModule: false, + }, + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 4096, + name: 'fonts/[name].[hash:8].[ext]', + esModule: false, + }, + }, + { + test: /\.(mp3)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 4096, + name: 'audios/[name].[hash:8].[ext]', + esModule: false, + }, + }, + ], + }, + plugins: [ + new HtmlWebpackPlugin({ + filename: 'index.html', + template: path.resolve(__dirname, '../src/template.html'), + inject: true, + }), + new CleanWebpackPlugin(), + new Dotenv({ + silent: true, + }), + ], +}; diff --git a/packages/web/build/webpack.dev.js b/packages/web/build/webpack.dev.js new file mode 100644 index 0000000..d20345b --- /dev/null +++ b/packages/web/build/webpack.dev.js @@ -0,0 +1,29 @@ +const path = require('path'); +const { merge } = require('webpack-merge'); +const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); +const common = require('./webpack.common.js'); + +module.exports = merge(common, { + mode: 'development', + output: { + publicPath: '/', + }, + devtool: 'inline-source-map', + devServer: { + hot: true, + contentBase: ['./dist'], + historyApiFallback: { + rewrites: [{ from: /\/invite\/group\/[\w\d]+/, to: '/index.html' }], + }, + proxy: { + '/avatar': 'http://localhost:9200', + '/GroupAvatar': 'http://localhost:9200', + '/Avatar': { + target: 'http://localhost:9200', + pathRewrite: { '^/Avatar': '/avatar' }, + }, + '/favicon-*.png': 'http://localhost:9200', + }, + }, + plugins: [new ReactRefreshWebpackPlugin()], +}); diff --git a/packages/web/build/webpack.prod.js b/packages/web/build/webpack.prod.js new file mode 100644 index 0000000..503b101 --- /dev/null +++ b/packages/web/build/webpack.prod.js @@ -0,0 +1,43 @@ +const { merge } = require('webpack-merge'); +const TerserPlugin = require('terser-webpack-plugin'); +const ScriptExtHtmlPlugin = require('script-ext-html-webpack-plugin'); +const WorkboxPlugin = require('workbox-webpack-plugin'); +const WebpackBar = require('webpackbar'); +const common = require('./webpack.common.js'); + +module.exports = merge(common, { + mode: 'production', + output: { + publicPath: process.env.PublicPath || '/', + }, + devtool: false, + optimization: { + minimize: true, + minimizer: [ + new TerserPlugin({ + terserOptions: { + format: { + comments: false, + }, + }, + extractComments: false, + }), + ], + }, + plugins: [ + new ScriptExtHtmlPlugin({ + custom: [ + { + test: /\.js$/, + attribute: 'crossorigin', + value: 'anonymous', + }, + ], + }), + new WorkboxPlugin.GenerateSW({ + clientsClaim: true, + skipWaiting: true, + }), + new WebpackBar(), + ], +}); diff --git a/packages/web/package-lock.json b/packages/web/package-lock.json new file mode 100644 index 0000000..cc35444 --- /dev/null +++ b/packages/web/package-lock.json @@ -0,0 +1,21261 @@ +{ + "name": "@fiora/web", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@fiora/web", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@loadable/component": "^5.15.0", + "@testing-library/react": "^12.0.0", + "axios": "^0.21.1", + "brace": "^0.11.1", + "core-js": "^3.15.2", + "cropperjs": "^1.5.5", + "dayjs": "^1.10.7", + "filesize": "^7.0.0", + "linaria": "^2.1.0", + "log4js": "^6.3.0", + "multer": "^1.4.3", + "normalize.css": "^8.0.1", + "platform": "^1.3.6", + "prismjs": "^1.24.1", + "pure-render-decorator": "^1.2.1", + "qrcode.react": "^1.0.1", + "randomcolor": "^0.6.2", + "rc-dialog": "^8.5.2", + "rc-dropdown": "^3.2.0", + "rc-menu": "^9.0.12", + "rc-notification": "^3.3.1", + "rc-progress": "^2.5.2", + "rc-select": "^9.2.1", + "rc-tabs": "^9.6.4", + "rc-tooltip": "^5.1.1", + "react": "^17.0.2", + "react-ace": "^9.4.1", + "react-color": "^2.19.3", + "react-copy-to-clipboard": "^5.0.3", + "react-cropper": "^1.3.0", + "react-dom": "^17.0.2", + "react-loading": "^2.0.3", + "react-radio-buttons": "^1.2.2", + "react-redux": "^7.2.4", + "react-switch": "^6.0.0", + "react-viewer": "^3.2.2", + "redux": "^4.1.0", + "regenerator-runtime": "^0.13.7", + "socket.io-client": "^4.1.3", + "wpk-reporter": "^0.9.3", + "xss": "^1.0.9" + }, + "devDependencies": { + "@babel/core": "^7.14.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/preset-env": "^7.14.7", + "@babel/preset-react": "^7.14.5", + "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", + "@testing-library/jest-dom": "^4.2.4", + "@types/ali-oss": "^6.0.10", + "@types/loadable__component": "^5.13.4", + "@types/platform": "^1.3.4", + "@types/prismjs": "^1.16.6", + "@types/pure-render-decorator": "^0.2.28", + "@types/qrcode.react": "^1.0.2", + "@types/react": "^17.0.14", + "@types/react-color": "^3.0.5", + "@types/react-copy-to-clipboard": "^5.0.1", + "@types/react-cropper": "^0.10.7", + "@types/react-dom": "^17.0.9", + "@types/react-redux": "^7.1.18", + "@types/redux": "^3.6.0", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "babel-plugin-prismjs": "^2.1.0", + "clean-webpack-plugin": "^4.0.0-alpha.0", + "cross-env": "^7.0.3", + "css-loader": "^5.0.0", + "dotenv-webpack": "^7.0.3", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^5.3.2", + "less": "^3.12.2", + "less-loader": "^7.0.2", + "less-plugin-autoprefix": "^2.0.0", + "react-refresh": "^0.10.0", + "script-ext-html-webpack-plugin": "^2.1.5", + "style-loader": "^2.0.0", + "terser-webpack-plugin": "^5.1.4", + "ts-loader": "^9.2.3", + "typescript": "^4.4.4", + "url-loader": "^4.1.1", + "webpack": "^5.45.1", + "webpack-cli": "^4.7.2", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.0-3", + "workbox-webpack-plugin": "^6.1.5" + } + }, + "node_modules/@ant-design/create-react-context": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@ant-design/create-react-context/-/create-react-context-0.2.5.tgz", + "integrity": "sha512-1rMAa4qgP2lfl/QBH9i78+Gjxtj9FTMpMyDGZsEBW5Kih72EuUo9958mV8PgpRkh4uwPSQ7vVZWXeyNZXVAFDg==", + "dependencies": { + "gud": "^1.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "prop-types": "^15.0.0", + "react": "^0.14.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.2.6.tgz", + "integrity": "sha512-FvGcbFUdbPLexAhdvihkroCA3LQa7kGMa8Qj9f32BiOcV1Thscg/QCxp/kJibsFrhUrlKOzd07uJFOGTN0/awQ==", + "dev": true, + "dependencies": { + "json-schema": "^0.3.0", + "jsonpointer": "^4.1.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "dependencies": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "dependencies": { + "@babel/types": "^7.15.6", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "dependencies": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dependencies": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.15.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.15.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", + "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", + "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz", + "integrity": "sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==", + "dependencies": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", + "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", + "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "dependencies": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "node_modules/@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@loadable/component": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.0.tgz", + "integrity": "sha512-g63rQzypPOZi0BeGsK4ST2MYhsFR+i7bhL8k/McUoWDNMDuTTdUlQ2GACKxqh5sI/dNC/6nVoPrycMnSylnAgQ==", + "dependencies": { + "@babel/runtime": "^7.7.7", + "hoist-non-react-statics": "^3.3.1", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", + "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", + "dev": true, + "dependencies": { + "ansi-html": "^0.0.7", + "error-stack-parser": "^2.0.6", + "html-entities": "^1.2.1", + "native-url": "^0.2.6", + "schema-utils": "^2.6.5", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.x" + }, + "peerDependencies": { + "@types/webpack": "4.x", + "react-refresh": ">=0.8.3 <0.10.0", + "sockjs-client": "^1.4.0", + "type-fest": "^0.13.1", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", + "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", + "dev": true, + "dependencies": { + "ejs": "^2.6.1", + "magic-string": "^0.25.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "8.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.9.1.tgz", + "integrity": "sha512-jXM+FKo5BZA/2WtcsoTGuDs810J3ewQ2yq59Gxd2heux5jr8lo2DnTAl3JWVwAlg2/DcWSYqKY5pi9v0g8hvhw==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^4.2.2", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.6", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz", + "integrity": "sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.1", + "chalk": "^2.4.1", + "css": "^2.2.3", + "css.escape": "^1.5.1", + "jest-diff": "^24.0.0", + "jest-matcher-utils": "^24.0.0", + "lodash": "^4.17.11", + "pretty-format": "^24.0.0", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@testing-library/react": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.2.tgz", + "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@types/ali-oss": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/@types/ali-oss/-/ali-oss-6.0.11.tgz", + "integrity": "sha512-57G4w+uq4quHRrKPvOOYIfxs9h5lTunfpOIYqeZhAyC4xyeSSZdCG0chO03g+NV9xHnbvZDSbq4Ojbpj9Rx81w==", + "dev": true + }, + "node_modules/@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + }, + "node_modules/@types/eslint": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.1.tgz", + "integrity": "sha512-XhZKznR3i/W5dXqUhgU9fFdJekufbeBd5DALmkuXoeFcjbQcPk+2cL+WLHf6Q81HWAnM2vrslIHpGVyCAviRwg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.0.0.tgz", + "integrity": "sha512-NZwaaynfs1oIoLAV1vg18e7QMVDvw+6SQrdJc8w3BwUaoroVSf6EBj/Sk4PBWGxsq0dzhA2drbsuMC1/6C6KgQ==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/loadable__component": { + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.4.tgz", + "integrity": "sha512-YhoCCxyuvP2XeZNbHbi8Wb9EMaUJuA2VGHxJffcQYrJKIKSkymJrhbzsf9y4zpTmr5pExAAEh5hbF628PAZ8Dg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz", + "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==" + }, + "node_modules/@types/platform": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/platform/-/platform-1.3.4.tgz", + "integrity": "sha512-U0o4K+GNiK0PNxoDwd8xRnvLVe4kzei6opn3/FCjAriqaP+rfrDdSl1kP/hLL6Y3/Y3hhGnBwD4dCkkAqs1W/Q==", + "dev": true + }, + "node_modules/@types/prismjs": { + "version": "1.16.6", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.16.6.tgz", + "integrity": "sha512-dTvnamRITNqNkqhlBd235kZl3KfVJQQoT5jkXeiWSBK7i4/TLKBNLV0S1wOt8gy4E2TY722KLtdmv2xc6+Wevg==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + }, + "node_modules/@types/pure-render-decorator": { + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/@types/pure-render-decorator/-/pure-render-decorator-0.2.28.tgz", + "integrity": "sha512-lO5YM/PfY5yolOzd2P+sKaLSibGmq28fXU28fdy/FqOBXti3/I3xIZ/UwhFQLe73tY5tX0lpqGAIQyGfCnQslQ==", + "dev": true + }, + "node_modules/@types/qrcode.react": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/qrcode.react/-/qrcode.react-1.0.2.tgz", + "integrity": "sha512-I9Oq5Cjlkgy3Tw7krCnCXLw2/zMhizkTere49OOcta23tkvH0xBTP0yInimTh0gstLRtb8Ki9NZVujE5UI6ffQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react": { + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz", + "integrity": "sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-color": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.5.tgz", + "integrity": "sha512-0VZy8Uq5x04cW5QFz24Qw8MMMlsMi8Bb+XG5h59ATqPnWVq6OheHtrwv5LeakdTRDaECQnExJNSFOsSe4Eo/zQ==", + "dev": true, + "dependencies": { + "@types/react": "*", + "@types/reactcss": "*" + } + }, + "node_modules/@types/react-copy-to-clipboard": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", + "integrity": "sha512-O29AThfxrkUFRsZXjfSWR2yaWo0ppB1yLEnHA+Oh24oNetjBAwTDu1PmolIqdJKzsZiO4J1jn6R6TmO96uBvGg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-cropper": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@types/react-cropper/-/react-cropper-0.10.7.tgz", + "integrity": "sha512-Nf8A/GL/Px9cqdtCCpKA2K3/5qTuWhNQ5zoxXjbaWOZ0Tn1U1ja7tWW6ofWvqZI7AWS+f0CTV+ASrLGkfsWMBg==", + "dev": true, + "dependencies": { + "@types/react": "*", + "cropperjs": "^1.3.0" + } + }, + "node_modules/@types/react-dom": { + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.9.tgz", + "integrity": "sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-redux": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.19.tgz", + "integrity": "sha512-L37dSCT0aoJnCgpR8Iuginlbxoh7qhWOXiaDqEsxVMrER1CmVhFD+63NxgJeT4pkmEM28oX0NH4S4f+sXHTZjA==", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "node_modules/@types/reactcss": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.4.tgz", + "integrity": "sha512-1rhVqteMSD6KQjO+dPBObE1OkKadw00HVJkG5WCYsyvMwGgdTZ530wF7Bkrg/4TWxB2AtINIzFotjW51eViw+w==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/redux": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@types/redux/-/redux-3.6.0.tgz", + "integrity": "sha1-8evh5UEVGAcuT9/KXHbhbnTBOZo=", + "deprecated": "This is a stub types definition for Redux (https://github.com/reactjs/redux). Redux provides its own type definitions, so you don't need @types/redux installed!", + "dev": true, + "dependencies": { + "redux": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ace-builds": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.4.13.tgz", + "integrity": "sha512-SOLzdaQkY6ecPKYRDDg+MY1WoGgXA34cIvYJNNoBMGGUswHmlauU2Hy0UL96vW0Fs/LgFbMUjD+6vqzWTldIYQ==" + }, + "node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "dependencies": { + "object-assign": "4.x" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", + "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", + "dev": true, + "dependencies": { + "browserslist": "^3.2.8", + "caniuse-lite": "^1.0.30000864", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.23", + "postcss-value-parser": "^3.2.3" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + } + }, + "node_modules/autoprefixer/node_modules/browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/autoprefixer/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/autoprefixer/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/autoprefixer/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-prismjs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-prismjs/-/babel-plugin-prismjs-2.1.0.tgz", + "integrity": "sha512-ehzSKYfeAz4U78zi/sfwsjDPlq0LvDKxNefcZTJ/iKBu+plsHsLqZhUeGf1+82LAcA35UZGbU6ksEx2Utphc/g==", + "dev": true, + "peerDependencies": { + "prismjs": "^1.18.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/brace": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/brace/-/brace-0.11.1.tgz", + "integrity": "sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg=" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/browserslist": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", + "escalade": "^3.1.1", + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "dependencies": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/busboy/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/busboy/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/busboy/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "engines": { + "node": ">=4" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001269", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001269.tgz", + "integrity": "sha512-UOy8okEVs48MyHYgV+RdW1Oiudl1H6KolybD6ZquD0VcrPSgj25omXO1S7rDydjpqaISCwA8Pyx+jUQKZwWO5w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "node_modules/clean-css": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.1.tgz", + "integrity": "sha512-ooQCa1/70oRfVdUUGjKpbHuxgMgm8BsDT5EBqBGvPxMoRoGXf4PNx5mMnkjzJ9Ptx4vvmDdha0QVh86QtYIk1g==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", + "dev": true, + "dependencies": { + "del": "^4.1.1" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.0 <6.0.0" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-classes": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", + "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=", + "dependencies": { + "component-indexof": "0.0.3" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/component-indexof": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", + "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", + "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", + "dev": true, + "dependencies": { + "is-what": "^3.12.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.3.tgz", + "integrity": "sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", + "dependencies": { + "browserslist": "^4.17.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-js-pure": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "dependencies": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/cropperjs": { + "version": "1.5.12", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.12.tgz", + "integrity": "sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw==" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "node_modules/css-animation": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz", + "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==", + "dependencies": { + "babel-runtime": "6.x", + "component-classes": "^1.2.5" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/css-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/css-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/css-loader/node_modules/postcss": { + "version": "8.3.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", + "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.28", + "picocolors": "^0.2.1", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" + }, + "node_modules/csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + }, + "node_modules/date-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", + "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/default-gateway/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "dependencies": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/dicer/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/dicer/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/dicer/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" + }, + "node_modules/diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.8.tgz", + "integrity": "sha512-rAfghuBPeJldxqsmZQtBbna4TqMgFe4xhYs24vPULNslbmXUdcga+CXiKWzZxyWw0FCkGKPgmizIysIvsAEN8w==" + }, + "node_modules/dom-align": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.2.tgz", + "integrity": "sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-scroll-into-view": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz", + "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=" + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-defaults": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", + "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", + "dev": true, + "dependencies": { + "dotenv": "^8.2.0" + } + }, + "node_modules/dotenv-webpack": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-7.0.3.tgz", + "integrity": "sha512-O0O9pOEwrk+n1zzR3T2uuXRlw64QxHSPeNN1GaiNBloQFNaCUL9V8jxSVz4jlXXFP/CIqK8YecWf8BAvsSgMjw==", + "dev": true, + "dependencies": { + "dotenv-defaults": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": "^4 || ^5" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.871", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.871.tgz", + "integrity": "sha512-qcLvDUPf8DSIMWarHT2ptgcqrYg62n3vPA7vhrOF24d8UNzbUBaHu2CySiENR3nEDzYgaN60071t0F6KLYMQ7Q==" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.0.2.tgz", + "integrity": "sha512-cAep9lhZV6Q8jMXx3TNSU5cydMzMed8/O7Tz5uzyqZvpNPtQ3WQXrLYGADxlsuaFmOLN7wZLmT7ImiFhUOku8g==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.1.tgz", + "integrity": "sha512-j4p3WwJrG2k92VISM0op7wiq60vO92MlF3CRGxhKHy9ywG1/Dkc72g0dXeDQ+//hrcDn8gqQzoEkdO9FN0d9AA==", + "dependencies": { + "base64-arraybuffer": "~1.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "dependencies": { + "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" + } + }, + "node_modules/fbjs/node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js." + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/filesize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-7.0.0.tgz", + "integrity": "sha512-Wsstw+O1lZ9gVmOI1thyeQvODsaoId2qw14lCqIzUhoHKXX7T2hVpB7BR6SvgodMBgWccrx/y2eyV8L7tDmY6A==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", + "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", + "dependencies": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "node_modules/follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "node_modules/gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.0.2.tgz", + "integrity": "sha512-AgYO3UGhMYQx2S/FBJT3EM0ZYcKmH6m9XL9c1v77BeK/tYJxGPxT1/AtsdUi4FcP8kZGmqqnItCcjFPcX9hk6A==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.1.5", + "commander": "^8.1.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.7.2" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", + "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-cSUdckNOIqKc0nOrCJG7zkvzEIUcXjzEiVbKdEdIzW3BD5T4xPK6boV1mrTrPDZiL+aAr/j45eqbNL1akU2ZRA==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^3.0.4", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.4.tgz", + "integrity": "sha512-DshI5yxIB3NYc47cPpfipYX8MSIgQPqVR+WoaGI9EDq6cnLGgGYR1fp6z8/Bq9vMS8Jq1bS3eWUgXpFO5+ypSA==", + "dev": true + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-diff/node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-diff/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-diff/node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-diff/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-matcher-utils/node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-matcher-utils/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/jest-matcher-utils/node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-worker": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz", + "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-schema": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.3.0.tgz", + "integrity": "sha512-TYfxx36xfl52Rf1LU9HyWSLGPdYLL+SQ8/E/0yVyKG8wCCDaSrhPap0vEdlsZWRaS6tnKKLPGiEJGiREVC8kxQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/less": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", + "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "tslib": "^1.10.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "native-request": "^1.0.5", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.3.0.tgz", + "integrity": "sha512-Mi8915g7NMaLlgi77mgTTQvK022xKRQBIVDSyfl3ErTuBhmZBQab0mjeJjNNqGbdR+qrfTleKXqbGI4uEFavxg==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/less-loader/node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/less-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/less-plugin-autoprefix": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/less-plugin-autoprefix/-/less-plugin-autoprefix-2.0.0.tgz", + "integrity": "sha512-UktaMtHAhCVTIQxjlceo1MiiQiUZws7gi3hfcpxkCLn1CJdVdlRGCb4n1/M64hniw2DLd7YzOl7ojshs1tWYcQ==", + "dev": true, + "dependencies": { + "autoprefixer": "^8.6.3", + "postcss": "^6.0.22" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/less-plugin-autoprefix/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less-plugin-autoprefix/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/linaria": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/linaria/-/linaria-2.1.0.tgz", + "integrity": "sha512-dv6vuATZMYCDmnD5Ccgcqi2RUYfkfq/wE0hGUpyTW3khNAJqpiPWM7NVApCXxdD+mGg3WnD7fdkL+ndL9s8vtQ==", + "dependencies": { + "@babel/generator": ">=7", + "@babel/plugin-proposal-export-namespace-from": ">=7", + "@babel/plugin-syntax-dynamic-import": ">=7", + "@babel/plugin-transform-modules-commonjs": ">=7", + "@babel/plugin-transform-runtime": ">=7", + "@babel/plugin-transform-template-literals": ">=7", + "@babel/template": ">=7", + "@emotion/is-prop-valid": "^0.8.8", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "cosmiconfig": "^5.1.0", + "debug": "^4.1.1", + "enhanced-resolve": "^4.1.0", + "find-yarn-workspace-root": "^1.2.1", + "glob": "^7.1.3", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", + "react-is": "^16.8.3", + "rollup-pluginutils": "^2.4.1", + "source-map": "^0.6.1", + "strip-ansi": "^5.2.0", + "stylis": "^3.5.4", + "yargs": "^13.2.1" + }, + "bin": { + "linaria": "bin/linaria.js" + }, + "peerDependencies": { + "@babel/core": ">=7" + } + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/log4js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", + "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "dependencies": { + "date-format": "^3.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.1", + "rfdc": "^1.1.4", + "streamroller": "^2.2.4" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dependencies": { + "mime-db": "1.50.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-store": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-2.0.0.tgz", + "integrity": "sha512-EG0CuwpQmX+XL4QVS0kxNwHW5ftSbhygu1qxQH0pipugjnPkbvkalCdQbEihMwtQY6d3MTN+MS0q+aurs+RfLQ==", + "dependencies": { + "hoist-non-react-statics": "^2.3.1", + "prop-types": "^15.6.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.0.2" + } + }, + "node_modules/mini-store/node_modules/hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.3.tgz", + "integrity": "sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/mutationobserver-shim": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz", + "integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ==" + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/native-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz", + "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", + "dev": true, + "optional": true + }, + "node_modules/native-url": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", + "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", + "dev": true, + "dependencies": { + "querystring": "^0.2.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/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=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "node_modules/postcss/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", + "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.6" + } + }, + "node_modules/pretty-format": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.5.tgz", + "integrity": "sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g==", + "dependencies": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", + "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" + }, + "node_modules/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==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-render-decorator": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pure-render-decorator/-/pure-render-decorator-1.2.1.tgz", + "integrity": "sha1-Vohw7soXoc7lNrT+lKNHf80x7rk=", + "dependencies": { + "fbjs": "^0.8.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^0.14.0" + } + }, + "node_modules/qr.js": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", + "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=" + }, + "node_modules/qrcode.react": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-1.0.1.tgz", + "integrity": "sha512-8d3Tackk8IRLXTo67Y+c1rpaiXjoz/Dd2HpcMdW//62/x8J1Nbho14Kh8x974t9prsLHN6XqVgcnRiBGFptQmg==", + "dependencies": { + "loose-envify": "^1.4.0", + "prop-types": "^15.6.0", + "qr.js": "0.0.0" + }, + "peerDependencies": { + "react": "^15.5.3 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomcolor": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/randomcolor/-/randomcolor-0.6.2.tgz", + "integrity": "sha512-Mn6TbyYpFgwFuQ8KJKqf3bqqY9O1y37/0jgSK/61PUxV4QfIMv0+K2ioq8DfOjkBslcjwSzRfIDEXfzA9aCx7A==" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc-align": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.11.tgz", + "integrity": "sha512-n9mQfIYQbbNTbefyQnRHZPWuTEwG1rY4a9yKlIWHSTbgwI+XUMGRYd0uJ5pE2UbrNX0WvnMBA1zJ3Lrecpra/A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "lodash": "^4.17.21", + "rc-util": "^5.3.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-animate": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.11.1.tgz", + "integrity": "sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ==", + "dependencies": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "css-animation": "^1.3.2", + "prop-types": "15.x", + "raf": "^3.4.0", + "rc-util": "^4.15.3", + "react-lifecycles-compat": "^3.0.4" + } + }, + "node_modules/rc-animate/node_modules/rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "dependencies": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + }, + "node_modules/rc-dialog": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.6.0.tgz", + "integrity": "sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.6.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dropdown": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.2.0.tgz", + "integrity": "sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-trigger": "^5.0.4" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-hammerjs": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/rc-hammerjs/-/rc-hammerjs-0.6.10.tgz", + "integrity": "sha512-Vgh9qIudyN5CHRop4M+v+xUniQBFWXKrsJxQRVtJOi2xgRrCeI52/bkpaL5HWwUhqTK9Ayq0n7lYTItT6ld5rg==", + "dependencies": { + "babel-runtime": "6.x", + "hammerjs": "^2.0.8", + "prop-types": "^15.5.9" + } + }, + "node_modules/rc-menu": { + "version": "9.0.14", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.0.14.tgz", + "integrity": "sha512-CIox5mZeLDAi32SlHrV7UeSjv7tmJJhwRyxQtZCKt351w3q59XlL4WMFOmtT9gwIfP9h0XoxdBZUMe/xzkp78A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.2.0", + "rc-trigger": "^5.1.2", + "rc-util": "^5.12.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-motion": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.4.4.tgz", + "integrity": "sha512-ms7n1+/TZQBS0Ydd2Q5P4+wJTSOrhIrwNxLXCZpR7Fa3/oac7Yi803HDALc2hLAKaCTQtw9LmQeB58zcwOsqlQ==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.2.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-notification": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-3.3.1.tgz", + "integrity": "sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig==", + "dependencies": { + "babel-runtime": "6.x", + "classnames": "2.x", + "prop-types": "^15.5.8", + "rc-animate": "2.x", + "rc-util": "^4.0.4" + } + }, + "node_modules/rc-notification/node_modules/rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "dependencies": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + }, + "node_modules/rc-overflow": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.2.2.tgz", + "integrity": "sha512-X5kj9LDU1ue5wHkqvCprJWLKC+ZLs3p4He/oxjZ1Q4NKaqKBaYf5OdSzRSgh3WH8kSdrfU8LjvlbWnHgJOEkNQ==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-progress": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.6.1.tgz", + "integrity": "sha512-GR+rWDv5b61VkGs7SxDvsaJo6vzTZ4j1Z1sX0C3kG4kPli9nUCXurx5jREJ2SllUKLrhesr914DuvBBtXOSr6g==", + "dependencies": { + "babel-runtime": "6.x", + "prop-types": "^15.5.8" + } + }, + "node_modules/rc-resize-observer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.1.tgz", + "integrity": "sha512-OxO2mJI9e8610CAWBFfm52SPvWib0eNKjaSsRbbKHmLaJIxw944P+D61DlLJ/w2vuOjGNcalJu8VdqyNm/XCRg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-select": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-9.2.3.tgz", + "integrity": "sha512-WhswxOMWiNnkXRbxyrj0kiIvyCfo/BaRPaYbsDetSIAU2yEDwKHF798blCP5u86KLOBKBvtxWLFCkSsQw1so5w==", + "dependencies": { + "babel-runtime": "^6.23.0", + "classnames": "2.x", + "component-classes": "1.x", + "dom-scroll-into-view": "1.x", + "prop-types": "^15.5.8", + "raf": "^3.4.0", + "rc-animate": "2.x", + "rc-menu": "^7.3.0", + "rc-trigger": "^2.5.4", + "rc-util": "^4.0.4", + "react-lifecycles-compat": "^3.0.2", + "warning": "^4.0.2" + } + }, + "node_modules/rc-select/node_modules/rc-align": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz", + "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==", + "dependencies": { + "babel-runtime": "^6.26.0", + "dom-align": "^1.7.0", + "prop-types": "^15.5.8", + "rc-util": "^4.0.4" + } + }, + "node_modules/rc-select/node_modules/rc-menu": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-7.5.5.tgz", + "integrity": "sha512-4YJXJgrpUGEA1rMftXN7bDhrV5rPB8oBJoHqT+GVXtIWCanfQxEnM3fmhHQhatL59JoAFMZhJaNzhJIk4FUWCQ==", + "dependencies": { + "classnames": "2.x", + "dom-scroll-into-view": "1.x", + "mini-store": "^2.0.0", + "mutationobserver-shim": "^0.3.2", + "rc-animate": "^2.10.1", + "rc-trigger": "^2.3.0", + "rc-util": "^4.13.0", + "resize-observer-polyfill": "^1.5.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-select/node_modules/rc-trigger": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.5.tgz", + "integrity": "sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw==", + "dependencies": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "prop-types": "15.x", + "rc-align": "^2.4.0", + "rc-animate": "2.x", + "rc-util": "^4.4.0", + "react-lifecycles-compat": "^3.0.4" + } + }, + "node_modules/rc-select/node_modules/rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "dependencies": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + }, + "node_modules/rc-tabs": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.7.0.tgz", + "integrity": "sha512-kvmgp8/MfLzFZ06hWHignqomFQ5nF7BqKr5O1FfhE4VKsGrep52YSF/1MvS5oe0NPcI9XGNS2p751C5v6cYDpQ==", + "dependencies": { + "@ant-design/create-react-context": "^0.2.4", + "babel-runtime": "6.x", + "classnames": "2.x", + "lodash": "^4.17.5", + "prop-types": "15.x", + "raf": "^3.4.1", + "rc-hammerjs": "~0.6.0", + "rc-util": "^4.0.4", + "react-lifecycles-compat": "^3.0.4", + "resize-observer-polyfill": "^1.5.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, + "node_modules/rc-tabs/node_modules/rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "dependencies": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + }, + "node_modules/rc-tooltip": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.1.1.tgz", + "integrity": "sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "rc-trigger": "^5.0.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-trigger": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.2.10.tgz", + "integrity": "sha512-FkUf4H9BOFDaIwu42fvRycXMAvkttph9AlbCZXssZDVzz2L+QZ0ERvfB/4nX3ZFPh1Zd+uVGr1DEDeXxq4J1TA==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-util": "^5.5.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.14.0.tgz", + "integrity": "sha512-2vy6/Z1BJUcwLjm/UEJb/htjUTQPigITUIemCcFEo1fQevAumc9sA32x2z5qyWoa9uhrXbiAjSDpPIUqyg65sA==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-ace": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-9.4.4.tgz", + "integrity": "sha512-gHSH4Wm+jE28pcr4hXKeSwG2DHPZhVlfAfR+VI/dgStnUFWJMPClpRI8emLEYEK/g4cZ4cHY80HTfFwfc4020w==", + "dependencies": { + "ace-builds": "^1.4.12", + "diff-match-patch": "^1.0.5", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0", + "react-dom": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/react-color": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "dependencies": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-copy-to-clipboard": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz", + "integrity": "sha512-IeVAiNVKjSPeGax/Gmkqfa/+PuMTBhutEvFUaMQLwE2tS0EXrAdgOpWDX26bWTXF3HrioorR7lr08NqeYUWQCQ==", + "dependencies": { + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/react-cropper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-cropper/-/react-cropper-1.3.0.tgz", + "integrity": "sha512-A14BUmeOD84ulNp/eChHOBuChVYatPodhc43wZzO9ZSFoM2Ta8O9P+ZXURyseF/R8v32a6YyMVcBUShj7XqcbA==", + "dependencies": { + "babel-core": "7.0.0-bridge.0", + "cropperjs": "^1.5.5", + "prop-types": "^15.5.8" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-loading": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/react-loading/-/react-loading-2.0.3.tgz", + "integrity": "sha512-Vdqy79zq+bpeWJqC+xjltUjuGApyoItPgL0vgVfcJHhqwU7bAMKzysfGW/ADu6i0z0JiOCRJjo+IkFNkRNbA3A==", + "peerDependencies": { + "prop-types": "^15.6.0", + "react": ">=0.14.0" + } + }, + "node_modules/react-radio-buttons": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-radio-buttons/-/react-radio-buttons-1.2.2.tgz", + "integrity": "sha512-GPk8gLEdOoC/41NQ3CrkAQv8jZSo2BojvEszQqS/16XTICe8a+H2EyOk3qJQLHzLe7+YABzyjZoZAOeeQ1QFxA==", + "dependencies": { + "prop-types": "^15.5.10", + "react": "^15.6.1", + "react-dom": "^15.3.2" + } + }, + "node_modules/react-radio-buttons/node_modules/react": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/react/-/react-15.7.0.tgz", + "integrity": "sha512-5/MMRYmpmM0sMTHGLossnJCrmXQIiJilD6y3YN3TzAwGFj6zdnMtFv6xmi65PHKRV+pehIHpT7oy67Sr6s9AHA==", + "dependencies": { + "create-react-class": "^15.6.0", + "fbjs": "^0.8.9", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0", + "prop-types": "^15.5.10" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-radio-buttons/node_modules/react-dom": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.7.0.tgz", + "integrity": "sha512-mpjXqC2t1FuYsILOLCj0kg6pbg460byZkVA/80VtDmKU/pYmoTdHOtaMcTRIDiyXLz4sIur0cQ04nOC6iGndJg==", + "dependencies": { + "fbjs": "^0.8.9", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "react": "^15.7.0" + } + }, + "node_modules/react-redux": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.5.tgz", + "integrity": "sha512-Dt29bNyBsbQaysp6s/dN0gUodcq+dVKKER8Qv82UrpeygwYeX1raTtil7O/fftw/rFqzaf6gJhDZRkkZnn6bjg==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/react-redux": "^7.1.16", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.10.0.tgz", + "integrity": "sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-switch": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/react-switch/-/react-switch-6.0.0.tgz", + "integrity": "sha512-QV3/6eRK5/5epdQzIqvDAHRoGLbCv/wDpHUi6yBMXY1Xco5XGuIZxvB49PHoV1v/SpEgOCJLD/Zo43iic+aEIw==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0", + "react-dom": "^15.3.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/react-viewer": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-viewer/-/react-viewer-3.2.2.tgz", + "integrity": "sha512-DHOq1x6cXsAViY43204ILRzLVR5ovP1MgzsC+LzZCWlInRuHjzAgpQZ8GzWm1CkiNYuHGwCxH36X0JUHl2xDSg==", + "dependencies": { + "classnames": "^2.2.5" + } + }, + "node_modules/reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "dependencies": { + "lodash": "^4.0.1" + } + }, + "node_modules/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==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redux": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz", + "integrity": "sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rollup": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/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==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/script-ext-html-webpack-plugin": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-2.1.5.tgz", + "integrity": "sha512-nMjd5dtsnoB8dS+pVM9ZL4mC9O1uVtTxrDS99OGZsZxFbkZE6pw0HCMued/cncDrKivIShO9vwoyOTvsGqQHEQ==", + "dev": true, + "dependencies": { + "debug": "^4.2.0" + }, + "engines": { + "node": ">=6.11.5" + }, + "peerDependencies": { + "html-webpack-plugin": "^3.0.0 || ^4.0.0", + "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socket.io-client": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.3.2.tgz", + "integrity": "sha512-2B9LqSunN60yV8F7S84CCEEcgbYNfrn7ejIInZtLZ7ppWtiX8rGZAjvdCvbnC8bqo/9RlCNOUsORLyskxSFP1g==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.0.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.1.tgz", + "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==", + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.3" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/std-env": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.1.tgz", + "integrity": "sha512-eOsoKTWnr6C8aWrqJJ2KAReXoa7Vn5Ywyw6uCXgA/xDhxPoaIsBa5aNJmISY04dLwXPBnDHW4diGM7Sn5K4R/g==", + "dev": true, + "dependencies": { + "ci-info": "^3.1.1" + } + }, + "node_modules/streamroller": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", + "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "dependencies": { + "date-format": "^2.1.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-loader/node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/style-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/stylis": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", + "dev": true, + "dependencies": { + "jest-worker": "^27.0.6", + "p-limit": "^3.1.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "engines": { + "node": "*" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/ts-loader": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ts-loader/node_modules/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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/ts-loader/node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-loader/node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/url-loader/node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/url-parse": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/url/node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.58.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", + "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.0.tgz", + "integrity": "sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/webpackbar/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/webpackbar/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/webpackbar/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/webpackbar/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/webpackbar/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/workbox-background-sync": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.3.0.tgz", + "integrity": "sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==", + "dev": true, + "dependencies": { + "idb": "^6.0.0", + "workbox-core": "6.3.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.3.0.tgz", + "integrity": "sha512-hp7Du6GJzK99wak5cQFhcSBxvcS+2fkFcxiMmz/RsQ5GQNxVcbiovq74w5aNCzuv3muQvICyC1XELZhZ4GYRTQ==", + "dev": true, + "dependencies": { + "workbox-core": "6.3.0" + } + }, + "node_modules/workbox-build": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.3.0.tgz", + "integrity": "sha512-Th93AaC+88ZvJje0acTjCCCvU3tGenxJht5xUALXHW+Mzk3I5SMzTFwKn5F3e1iZ+M7U2jjfpMXe/sJ4UMx46A==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.2.4", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^1.4.1", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "source-map-url": "^0.4.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.3.0", + "workbox-broadcast-update": "6.3.0", + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-google-analytics": "6.3.0", + "workbox-navigation-preload": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-range-requests": "6.3.0", + "workbox-recipes": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0", + "workbox-streams": "6.3.0", + "workbox-sw": "6.3.0", + "workbox-window": "6.3.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.3.0.tgz", + "integrity": "sha512-oYCRGF6PFEmJJkktdxYw/tcrU8N5u/2ihxVSHd+9sNqjNMDiXLqsewcEG544f1yx7gq5/u6VcvUA5N62KzN1GQ==", + "dev": true, + "dependencies": { + "workbox-core": "6.3.0" + } + }, + "node_modules/workbox-core": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.3.0.tgz", + "integrity": "sha512-SufToEV3SOLwwz3j+P4pgkfpzLRUlR17sX3p/LrMHP/brYKvJQqjTwtSvaCkkAX0RPHX2TFHmN8xhPP1bpmomg==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.3.0.tgz", + "integrity": "sha512-teYuYfM3HFbwAD/nlZDw/dCMOrCKjsAiMRhz0uOy9IkfBb7vBynO3xf118lY62X6BfqjZdeahiHh10N0/aYICg==", + "dev": true, + "dependencies": { + "idb": "^6.0.0", + "workbox-core": "6.3.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.3.0.tgz", + "integrity": "sha512-6u0y21rtimnrCKpvayTkwh9y4Y5Xdn6X87x895WzwcOcWA2j/Nl7nmCpB0wjjhqU9pMj7B2lChqfypP+xUs5IA==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.3.0", + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.3.0.tgz", + "integrity": "sha512-D7bomh9SCn1u6n32FqAWfyHe2dkK6mWbwcTsoeBnFSD0p8Gr9Zq1Mpt/DitEfGIQHck90Zd024xcTFLkjczS/Q==", + "dev": true, + "dependencies": { + "workbox-core": "6.3.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.3.0.tgz", + "integrity": "sha512-bND3rUxiuzFmDfeKywdvOqK0LQ5LLbOPk0eX22PlMQNOOduHRxzglMpgHo/MR6h+8cPJ3GpxT8hZ895/7bHMqQ==", + "dev": true, + "dependencies": { + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.3.0.tgz", + "integrity": "sha512-AHnGtfSvc/fBt+8NCVT6jVcshv7oFkiuS94YsedQu2sIN1jKHkxLaj7qMBl818FoY6x7r0jw1WLmG/QDmI1/oA==", + "dev": true, + "dependencies": { + "workbox-core": "6.3.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.3.0.tgz", + "integrity": "sha512-f0AZyxd48E4t+PV+ifgIf8WodfJqRj8/E0t+PwppDIdTPyD59cIh0HZBtgPKFdIMVnltodpMz4zioxym1H3GjQ==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.3.0.tgz", + "integrity": "sha512-asajX5UPkaoU4PB9pEpxKWKkcpA+KJQUEeYU6NlK0rXTCpdWQ6iieMRDoBTZBjTzUdL3j3s1Zo2qCOSvtXSYGg==", + "dev": true, + "dependencies": { + "workbox-core": "6.3.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.3.0.tgz", + "integrity": "sha512-SYZt40y+Iu5nA+UEPQOrAuAMMNTxtUBPLCIaMMb4lcADpBYrNP1CD+/s2QsrxzS651a8hfi06REKt+uTp1tqfw==", + "dev": true, + "dependencies": { + "workbox-core": "6.3.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.3.0.tgz", + "integrity": "sha512-CiRsuoXJOytA7IQriRu6kVCa0L4OdNi0DdniiSageu/EZuxTswNXpgVzkGE4IDArU/5jlzgRtwqrqIWCJX+OMA==", + "dev": true, + "dependencies": { + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.3.0.tgz", + "integrity": "sha512-xwrXRBzw5jwJ7VdAQkTSNTbNZ4S6VhXtbZZ0vY6XKNQARO5nuGphNdif+hJFIejHUgtV6ESpQnixPj5hYB2jKQ==", + "dev": true + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.3.0.tgz", + "integrity": "sha512-3l5H8h7O2eUgTAISQoglDe4VJDDYTZaDnkRY0FY2+eFOXA+fZoWuDSmLiMnA0uYqPC4NWVTZwP549E0dWgiWjw==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "source-map-url": "^0.4.0", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.3.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.3.0.tgz", + "integrity": "sha512-CFP84assX9srH/TOx4OD8z4EBPO/Cq4WKdV2YLcJIFJmVTS/cB63XKeidKl2KJk8qOOLVIKnaO7BLmb0MxGFtA==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.3.0" + } + }, + "node_modules/wpk-reporter": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/wpk-reporter/-/wpk-reporter-0.9.3.tgz", + "integrity": "sha512-cqOjPqlgohaS5XV6sWVgSOOoFmdOtOxBrJPzbNhwf+cn/4tjCdpfsUFDAP/ORCYIAFM2wEvYUIURtPg52rqIzw==" + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xss": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.10.tgz", + "integrity": "sha512-qmoqrRksmzqSKvgqzN0055UFWY7OKx1/9JWeRswwEVX9fCG5jcYRxa/A2DHcmZX6VJvjzHRQ2STeeVcQkrmLSw==", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ant-design/create-react-context": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@ant-design/create-react-context/-/create-react-context-0.2.5.tgz", + "integrity": "sha512-1rMAa4qgP2lfl/QBH9i78+Gjxtj9FTMpMyDGZsEBW5Kih72EuUo9958mV8PgpRkh4uwPSQ7vVZWXeyNZXVAFDg==", + "requires": { + "gud": "^1.0.0", + "warning": "^4.0.3" + } + }, + "@apideck/better-ajv-errors": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.2.6.tgz", + "integrity": "sha512-FvGcbFUdbPLexAhdvihkroCA3LQa7kGMa8Qj9f32BiOcV1Thscg/QCxp/kJibsFrhUrlKOzd07uJFOGTN0/awQ==", + "dev": true, + "requires": { + "json-schema": "^0.3.0", + "jsonpointer": "^4.1.0", + "leven": "^3.1.0" + } + }, + "@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==" + }, + "@babel/core": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "requires": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/generator": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "requires": { + "@babel/types": "^7.15.6", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "requires": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "requires": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + }, + "@babel/helper-wrap-function": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "requires": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==" + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.15.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.15.4" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", + "requires": { + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.15.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", + "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", + "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.9" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.14.5" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz", + "integrity": "sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==", + "requires": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", + "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + } + }, + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", + "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "requires": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "dev": true + }, + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "requires": { + "@emotion/memoize": "0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", + "requires": {} + }, + "@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@loadable/component": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.0.tgz", + "integrity": "sha512-g63rQzypPOZi0BeGsK4ST2MYhsFR+i7bhL8k/McUoWDNMDuTTdUlQ2GACKxqh5sI/dNC/6nVoPrycMnSylnAgQ==", + "requires": { + "@babel/runtime": "^7.7.7", + "hoist-non-react-statics": "^3.3.1", + "react-is": "^16.12.0" + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", + "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", + "dev": true, + "requires": { + "ansi-html": "^0.0.7", + "error-stack-parser": "^2.0.6", + "html-entities": "^1.2.1", + "native-url": "^0.2.6", + "schema-utils": "^2.6.5", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", + "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", + "dev": true, + "requires": { + "ejs": "^2.6.1", + "magic-string": "^0.25.0" + } + }, + "@testing-library/dom": { + "version": "8.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.9.1.tgz", + "integrity": "sha512-jXM+FKo5BZA/2WtcsoTGuDs810J3ewQ2yq59Gxd2heux5jr8lo2DnTAl3JWVwAlg2/DcWSYqKY5pi9v0g8hvhw==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^4.2.2", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.6", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + } + }, + "@testing-library/jest-dom": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz", + "integrity": "sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.1", + "chalk": "^2.4.1", + "css": "^2.2.3", + "css.escape": "^1.5.1", + "jest-diff": "^24.0.0", + "jest-matcher-utils": "^24.0.0", + "lodash": "^4.17.11", + "pretty-format": "^24.0.0", + "redent": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + } + } + }, + "@testing-library/react": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.2.tgz", + "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0" + } + }, + "@types/ali-oss": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/@types/ali-oss/-/ali-oss-6.0.11.tgz", + "integrity": "sha512-57G4w+uq4quHRrKPvOOYIfxs9h5lTunfpOIYqeZhAyC4xyeSSZdCG0chO03g+NV9xHnbvZDSbq4Ojbpj9Rx81w==", + "dev": true + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + }, + "@types/eslint": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.1.tgz", + "integrity": "sha512-XhZKznR3i/W5dXqUhgU9fFdJekufbeBd5DALmkuXoeFcjbQcPk+2cL+WLHf6Q81HWAnM2vrslIHpGVyCAviRwg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/html-minifier-terser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.0.0.tgz", + "integrity": "sha512-NZwaaynfs1oIoLAV1vg18e7QMVDvw+6SQrdJc8w3BwUaoroVSf6EBj/Sk4PBWGxsq0dzhA2drbsuMC1/6C6KgQ==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/loadable__component": { + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.4.tgz", + "integrity": "sha512-YhoCCxyuvP2XeZNbHbi8Wb9EMaUJuA2VGHxJffcQYrJKIKSkymJrhbzsf9y4zpTmr5pExAAEh5hbF628PAZ8Dg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/node": { + "version": "16.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz", + "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==" + }, + "@types/platform": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/platform/-/platform-1.3.4.tgz", + "integrity": "sha512-U0o4K+GNiK0PNxoDwd8xRnvLVe4kzei6opn3/FCjAriqaP+rfrDdSl1kP/hLL6Y3/Y3hhGnBwD4dCkkAqs1W/Q==", + "dev": true + }, + "@types/prismjs": { + "version": "1.16.6", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.16.6.tgz", + "integrity": "sha512-dTvnamRITNqNkqhlBd235kZl3KfVJQQoT5jkXeiWSBK7i4/TLKBNLV0S1wOt8gy4E2TY722KLtdmv2xc6+Wevg==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + }, + "@types/pure-render-decorator": { + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/@types/pure-render-decorator/-/pure-render-decorator-0.2.28.tgz", + "integrity": "sha512-lO5YM/PfY5yolOzd2P+sKaLSibGmq28fXU28fdy/FqOBXti3/I3xIZ/UwhFQLe73tY5tX0lpqGAIQyGfCnQslQ==", + "dev": true + }, + "@types/qrcode.react": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/qrcode.react/-/qrcode.react-1.0.2.tgz", + "integrity": "sha512-I9Oq5Cjlkgy3Tw7krCnCXLw2/zMhizkTere49OOcta23tkvH0xBTP0yInimTh0gstLRtb8Ki9NZVujE5UI6ffQ==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react": { + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz", + "integrity": "sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-color": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.5.tgz", + "integrity": "sha512-0VZy8Uq5x04cW5QFz24Qw8MMMlsMi8Bb+XG5h59ATqPnWVq6OheHtrwv5LeakdTRDaECQnExJNSFOsSe4Eo/zQ==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/reactcss": "*" + } + }, + "@types/react-copy-to-clipboard": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", + "integrity": "sha512-O29AThfxrkUFRsZXjfSWR2yaWo0ppB1yLEnHA+Oh24oNetjBAwTDu1PmolIqdJKzsZiO4J1jn6R6TmO96uBvGg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-cropper": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@types/react-cropper/-/react-cropper-0.10.7.tgz", + "integrity": "sha512-Nf8A/GL/Px9cqdtCCpKA2K3/5qTuWhNQ5zoxXjbaWOZ0Tn1U1ja7tWW6ofWvqZI7AWS+f0CTV+ASrLGkfsWMBg==", + "dev": true, + "requires": { + "@types/react": "*", + "cropperjs": "^1.3.0" + } + }, + "@types/react-dom": { + "version": "17.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.9.tgz", + "integrity": "sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-redux": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.19.tgz", + "integrity": "sha512-L37dSCT0aoJnCgpR8Iuginlbxoh7qhWOXiaDqEsxVMrER1CmVhFD+63NxgJeT4pkmEM28oX0NH4S4f+sXHTZjA==", + "requires": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "@types/reactcss": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.4.tgz", + "integrity": "sha512-1rhVqteMSD6KQjO+dPBObE1OkKadw00HVJkG5WCYsyvMwGgdTZ530wF7Bkrg/4TWxB2AtINIzFotjW51eViw+w==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/redux": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@types/redux/-/redux-3.6.0.tgz", + "integrity": "sha1-8evh5UEVGAcuT9/KXHbhbnTBOZo=", + "dev": true, + "requires": { + "redux": "*" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", + "dev": true + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ace-builds": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.4.13.tgz", + "integrity": "sha512-SOLzdaQkY6ecPKYRDDg+MY1WoGgXA34cIvYJNNoBMGGUswHmlauU2Hy0UL96vW0Fs/LgFbMUjD+6vqzWTldIYQ==" + }, + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, + "add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "requires": { + "object-assign": "4.x" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "requires": {} + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", + "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", + "dev": true, + "requires": { + "browserslist": "^3.2.8", + "caniuse-lite": "^1.0.30000864", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.23", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "requires": {} + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, + "babel-plugin-prismjs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-prismjs/-/babel-plugin-prismjs-2.1.0.tgz", + "integrity": "sha512-ehzSKYfeAz4U78zi/sfwsjDPlq0LvDKxNefcZTJ/iKBu+plsHsLqZhUeGf1+82LAcA35UZGbU6ksEx2Utphc/g==", + "dev": true, + "requires": {} + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/brace/-/brace-0.11.1.tgz", + "integrity": "sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browserslist": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", + "requires": { + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", + "escalade": "^3.1.1", + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "caniuse-lite": { + "version": "1.0.30001269", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001269.tgz", + "integrity": "sha512-UOy8okEVs48MyHYgV+RdW1Oiudl1H6KolybD6ZquD0VcrPSgj25omXO1S7rDydjpqaISCwA8Pyx+jUQKZwWO5w==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "clean-css": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.1.tgz", + "integrity": "sha512-ooQCa1/70oRfVdUUGjKpbHuxgMgm8BsDT5EBqBGvPxMoRoGXf4PNx5mMnkjzJ9Ptx4vvmDdha0QVh86QtYIk1g==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", + "dev": true, + "requires": { + "del": "^4.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-classes": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", + "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=", + "requires": { + "component-indexof": "0.0.3" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "component-indexof": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", + "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-anything": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz", + "integrity": "sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==", + "dev": true, + "requires": { + "is-what": "^3.12.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, + "core-js": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.3.tgz", + "integrity": "sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw==" + }, + "core-js-compat": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", + "requires": { + "browserslist": "^4.17.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-js-pure": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "cropperjs": { + "version": "1.5.12", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.12.tgz", + "integrity": "sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw==" + }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "css-animation": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz", + "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==", + "requires": { + "babel-runtime": "6.x", + "component-classes": "^1.2.5" + } + }, + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "8.3.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", + "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", + "dev": true, + "requires": { + "nanoid": "^3.1.28", + "picocolors": "^0.2.1", + "source-map-js": "^0.6.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" + }, + "csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + }, + "date-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", + "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==" + }, + "dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-accessibility-api": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.8.tgz", + "integrity": "sha512-rAfghuBPeJldxqsmZQtBbna4TqMgFe4xhYs24vPULNslbmXUdcga+CXiKWzZxyWw0FCkGKPgmizIysIvsAEN8w==" + }, + "dom-align": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.2.tgz", + "integrity": "sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==" + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-scroll-into-view": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz", + "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=" + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-defaults": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", + "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", + "dev": true, + "requires": { + "dotenv": "^8.2.0" + } + }, + "dotenv-webpack": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-7.0.3.tgz", + "integrity": "sha512-O0O9pOEwrk+n1zzR3T2uuXRlw64QxHSPeNN1GaiNBloQFNaCUL9V8jxSVz4jlXXFP/CIqK8YecWf8BAvsSgMjw==", + "dev": true, + "requires": { + "dotenv-defaults": "^2.0.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.871", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.871.tgz", + "integrity": "sha512-qcLvDUPf8DSIMWarHT2ptgcqrYg62n3vPA7vhrOF24d8UNzbUBaHu2CySiENR3nEDzYgaN60071t0F6KLYMQ7Q==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io-client": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.0.2.tgz", + "integrity": "sha512-cAep9lhZV6Q8jMXx3TNSU5cydMzMed8/O7Tz5uzyqZvpNPtQ3WQXrLYGADxlsuaFmOLN7wZLmT7ImiFhUOku8g==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.1.tgz", + "integrity": "sha512-j4p3WwJrG2k92VISM0op7wiq60vO92MlF3CRGxhKHy9ywG1/Dkc72g0dXeDQ+//hrcDn8gqQzoEkdO9FN0d9AA==", + "requires": { + "base64-arraybuffer": "~1.0.1" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "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=" + } + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filesize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-7.0.0.tgz", + "integrity": "sha512-Wsstw+O1lZ9gVmOI1thyeQvODsaoId2qw14lCqIzUhoHKXX7T2hVpB7BR6SvgodMBgWccrx/y2eyV8L7tDmY6A==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "find-yarn-workspace-root": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", + "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", + "requires": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.0.2.tgz", + "integrity": "sha512-AgYO3UGhMYQx2S/FBJT3EM0ZYcKmH6m9XL9c1v77BeK/tYJxGPxT1/AtsdUi4FcP8kZGmqqnItCcjFPcX9hk6A==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.1.5", + "commander": "^8.1.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.7.2" + }, + "dependencies": { + "commander": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", + "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", + "dev": true + } + } + }, + "html-webpack-plugin": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-cSUdckNOIqKc0nOrCJG7zkvzEIUcXjzEiVbKdEdIzW3BD5T4xPK6boV1mrTrPDZiL+aAr/j45eqbNL1akU2ZRA==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^3.0.4", + "tapable": "^2.0.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "idb": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.4.tgz", + "integrity": "sha512-DshI5yxIB3NYc47cPpfipYX8MSIgQPqVR+WoaGI9EDq6cnLGgGYR1fp6z8/Bq9vMS8Jq1bS3eWUgXpFO5+ypSA==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + }, + "dependencies": { + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + } + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + }, + "dependencies": { + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + } + } + }, + "jest-worker": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz", + "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.3.0.tgz", + "integrity": "sha512-TYfxx36xfl52Rf1LU9HyWSLGPdYLL+SQ8/E/0yVyKG8wCCDaSrhPap0vEdlsZWRaS6tnKKLPGiEJGiREVC8kxQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonpointer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", + "dev": true + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "less": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", + "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "native-request": "^1.0.5", + "source-map": "~0.6.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "less-loader": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.3.0.tgz", + "integrity": "sha512-Mi8915g7NMaLlgi77mgTTQvK022xKRQBIVDSyfl3ErTuBhmZBQab0mjeJjNNqGbdR+qrfTleKXqbGI4uEFavxg==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "less-plugin-autoprefix": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/less-plugin-autoprefix/-/less-plugin-autoprefix-2.0.0.tgz", + "integrity": "sha512-UktaMtHAhCVTIQxjlceo1MiiQiUZws7gi3hfcpxkCLn1CJdVdlRGCb4n1/M64hniw2DLd7YzOl7ojshs1tWYcQ==", + "dev": true, + "requires": { + "autoprefixer": "^8.6.3", + "postcss": "^6.0.22" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "linaria": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/linaria/-/linaria-2.1.0.tgz", + "integrity": "sha512-dv6vuATZMYCDmnD5Ccgcqi2RUYfkfq/wE0hGUpyTW3khNAJqpiPWM7NVApCXxdD+mGg3WnD7fdkL+ndL9s8vtQ==", + "requires": { + "@babel/generator": ">=7", + "@babel/plugin-proposal-export-namespace-from": ">=7", + "@babel/plugin-syntax-dynamic-import": ">=7", + "@babel/plugin-transform-modules-commonjs": ">=7", + "@babel/plugin-transform-runtime": ">=7", + "@babel/plugin-transform-template-literals": ">=7", + "@babel/template": ">=7", + "@emotion/is-prop-valid": "^0.8.8", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "cosmiconfig": "^5.1.0", + "debug": "^4.1.1", + "enhanced-resolve": "^4.1.0", + "find-yarn-workspace-root": "^1.2.1", + "glob": "^7.1.3", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", + "react-is": "^16.8.3", + "rollup-pluginutils": "^2.4.1", + "source-map": "^0.6.1", + "strip-ansi": "^5.2.0", + "stylis": "^3.5.4", + "yargs": "^13.2.1" + } + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "log4js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", + "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "requires": { + "date-format": "^3.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.1", + "rfdc": "^1.1.4", + "streamroller": "^2.2.4" + } + }, + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=" + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" + }, + "mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "requires": { + "mime-db": "1.50.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "mini-store": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-2.0.0.tgz", + "integrity": "sha512-EG0CuwpQmX+XL4QVS0kxNwHW5ftSbhygu1qxQH0pipugjnPkbvkalCdQbEihMwtQY6d3MTN+MS0q+aurs+RfLQ==", + "requires": { + "hoist-non-react-statics": "^2.3.1", + "prop-types": "^15.6.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.0.2" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.3.tgz", + "integrity": "sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mutationobserver-shim": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz", + "integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ==" + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz", + "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", + "dev": true, + "optional": true + }, + "native-url": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", + "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", + "dev": true, + "requires": { + "querystring": "^0.2.0" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-releases": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "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=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + } + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "pretty-error": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz", + "integrity": "sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.6" + } + }, + "pretty-format": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.5.tgz", + "integrity": "sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g==", + "requires": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true + }, + "prismjs": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", + "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" + }, + "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==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pure-render-decorator": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pure-render-decorator/-/pure-render-decorator-1.2.1.tgz", + "integrity": "sha1-Vohw7soXoc7lNrT+lKNHf80x7rk=", + "requires": { + "fbjs": "^0.8.0" + } + }, + "qr.js": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", + "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=" + }, + "qrcode.react": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-1.0.1.tgz", + "integrity": "sha512-8d3Tackk8IRLXTo67Y+c1rpaiXjoz/Dd2HpcMdW//62/x8J1Nbho14Kh8x974t9prsLHN6XqVgcnRiBGFptQmg==", + "requires": { + "loose-envify": "^1.4.0", + "prop-types": "^15.6.0", + "qr.js": "0.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomcolor": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/randomcolor/-/randomcolor-0.6.2.tgz", + "integrity": "sha512-Mn6TbyYpFgwFuQ8KJKqf3bqqY9O1y37/0jgSK/61PUxV4QfIMv0+K2ioq8DfOjkBslcjwSzRfIDEXfzA9aCx7A==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "rc-align": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.11.tgz", + "integrity": "sha512-n9mQfIYQbbNTbefyQnRHZPWuTEwG1rY4a9yKlIWHSTbgwI+XUMGRYd0uJ5pE2UbrNX0WvnMBA1zJ3Lrecpra/A==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "lodash": "^4.17.21", + "rc-util": "^5.3.0", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-animate": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.11.1.tgz", + "integrity": "sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ==", + "requires": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "css-animation": "^1.3.2", + "prop-types": "15.x", + "raf": "^3.4.0", + "rc-util": "^4.15.3", + "react-lifecycles-compat": "^3.0.4" + }, + "dependencies": { + "rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "requires": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + } + } + }, + "rc-dialog": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.6.0.tgz", + "integrity": "sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.6.1" + } + }, + "rc-dropdown": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.2.0.tgz", + "integrity": "sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-trigger": "^5.0.4" + } + }, + "rc-hammerjs": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/rc-hammerjs/-/rc-hammerjs-0.6.10.tgz", + "integrity": "sha512-Vgh9qIudyN5CHRop4M+v+xUniQBFWXKrsJxQRVtJOi2xgRrCeI52/bkpaL5HWwUhqTK9Ayq0n7lYTItT6ld5rg==", + "requires": { + "babel-runtime": "6.x", + "hammerjs": "^2.0.8", + "prop-types": "^15.5.9" + } + }, + "rc-menu": { + "version": "9.0.14", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.0.14.tgz", + "integrity": "sha512-CIox5mZeLDAi32SlHrV7UeSjv7tmJJhwRyxQtZCKt351w3q59XlL4WMFOmtT9gwIfP9h0XoxdBZUMe/xzkp78A==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.2.0", + "rc-trigger": "^5.1.2", + "rc-util": "^5.12.0", + "shallowequal": "^1.1.0" + } + }, + "rc-motion": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.4.4.tgz", + "integrity": "sha512-ms7n1+/TZQBS0Ydd2Q5P4+wJTSOrhIrwNxLXCZpR7Fa3/oac7Yi803HDALc2hLAKaCTQtw9LmQeB58zcwOsqlQ==", + "requires": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.2.1" + } + }, + "rc-notification": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-3.3.1.tgz", + "integrity": "sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig==", + "requires": { + "babel-runtime": "6.x", + "classnames": "2.x", + "prop-types": "^15.5.8", + "rc-animate": "2.x", + "rc-util": "^4.0.4" + }, + "dependencies": { + "rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "requires": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + } + } + }, + "rc-overflow": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.2.2.tgz", + "integrity": "sha512-X5kj9LDU1ue5wHkqvCprJWLKC+ZLs3p4He/oxjZ1Q4NKaqKBaYf5OdSzRSgh3WH8kSdrfU8LjvlbWnHgJOEkNQ==", + "requires": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.5.1" + } + }, + "rc-progress": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.6.1.tgz", + "integrity": "sha512-GR+rWDv5b61VkGs7SxDvsaJo6vzTZ4j1Z1sX0C3kG4kPli9nUCXurx5jREJ2SllUKLrhesr914DuvBBtXOSr6g==", + "requires": { + "babel-runtime": "6.x", + "prop-types": "^15.5.8" + } + }, + "rc-resize-observer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.0.1.tgz", + "integrity": "sha512-OxO2mJI9e8610CAWBFfm52SPvWib0eNKjaSsRbbKHmLaJIxw944P+D61DlLJ/w2vuOjGNcalJu8VdqyNm/XCRg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.0", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-select": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-9.2.3.tgz", + "integrity": "sha512-WhswxOMWiNnkXRbxyrj0kiIvyCfo/BaRPaYbsDetSIAU2yEDwKHF798blCP5u86KLOBKBvtxWLFCkSsQw1so5w==", + "requires": { + "babel-runtime": "^6.23.0", + "classnames": "2.x", + "component-classes": "1.x", + "dom-scroll-into-view": "1.x", + "prop-types": "^15.5.8", + "raf": "^3.4.0", + "rc-animate": "2.x", + "rc-menu": "^7.3.0", + "rc-trigger": "^2.5.4", + "rc-util": "^4.0.4", + "react-lifecycles-compat": "^3.0.2", + "warning": "^4.0.2" + }, + "dependencies": { + "rc-align": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.5.tgz", + "integrity": "sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==", + "requires": { + "babel-runtime": "^6.26.0", + "dom-align": "^1.7.0", + "prop-types": "^15.5.8", + "rc-util": "^4.0.4" + } + }, + "rc-menu": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-7.5.5.tgz", + "integrity": "sha512-4YJXJgrpUGEA1rMftXN7bDhrV5rPB8oBJoHqT+GVXtIWCanfQxEnM3fmhHQhatL59JoAFMZhJaNzhJIk4FUWCQ==", + "requires": { + "classnames": "2.x", + "dom-scroll-into-view": "1.x", + "mini-store": "^2.0.0", + "mutationobserver-shim": "^0.3.2", + "rc-animate": "^2.10.1", + "rc-trigger": "^2.3.0", + "rc-util": "^4.13.0", + "resize-observer-polyfill": "^1.5.0", + "shallowequal": "^1.1.0" + } + }, + "rc-trigger": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.5.tgz", + "integrity": "sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw==", + "requires": { + "babel-runtime": "6.x", + "classnames": "^2.2.6", + "prop-types": "15.x", + "rc-align": "^2.4.0", + "rc-animate": "2.x", + "rc-util": "^4.4.0", + "react-lifecycles-compat": "^3.0.4" + } + }, + "rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "requires": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + } + } + }, + "rc-tabs": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.7.0.tgz", + "integrity": "sha512-kvmgp8/MfLzFZ06hWHignqomFQ5nF7BqKr5O1FfhE4VKsGrep52YSF/1MvS5oe0NPcI9XGNS2p751C5v6cYDpQ==", + "requires": { + "@ant-design/create-react-context": "^0.2.4", + "babel-runtime": "6.x", + "classnames": "2.x", + "lodash": "^4.17.5", + "prop-types": "15.x", + "raf": "^3.4.1", + "rc-hammerjs": "~0.6.0", + "rc-util": "^4.0.4", + "react-lifecycles-compat": "^3.0.4", + "resize-observer-polyfill": "^1.5.1", + "warning": "^4.0.3" + }, + "dependencies": { + "rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "requires": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + } + } + }, + "rc-tooltip": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.1.1.tgz", + "integrity": "sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==", + "requires": { + "@babel/runtime": "^7.11.2", + "rc-trigger": "^5.0.0" + } + }, + "rc-trigger": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.2.10.tgz", + "integrity": "sha512-FkUf4H9BOFDaIwu42fvRycXMAvkttph9AlbCZXssZDVzz2L+QZ0ERvfB/4nX3ZFPh1Zd+uVGr1DEDeXxq4J1TA==", + "requires": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-util": "^5.5.0" + } + }, + "rc-util": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.14.0.tgz", + "integrity": "sha512-2vy6/Z1BJUcwLjm/UEJb/htjUTQPigITUIemCcFEo1fQevAumc9sA32x2z5qyWoa9uhrXbiAjSDpPIUqyg65sA==", + "requires": { + "@babel/runtime": "^7.12.5", + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-ace": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-9.4.4.tgz", + "integrity": "sha512-gHSH4Wm+jE28pcr4hXKeSwG2DHPZhVlfAfR+VI/dgStnUFWJMPClpRI8emLEYEK/g4cZ4cHY80HTfFwfc4020w==", + "requires": { + "ace-builds": "^1.4.12", + "diff-match-patch": "^1.0.5", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "prop-types": "^15.7.2" + } + }, + "react-color": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "requires": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + } + }, + "react-copy-to-clipboard": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz", + "integrity": "sha512-IeVAiNVKjSPeGax/Gmkqfa/+PuMTBhutEvFUaMQLwE2tS0EXrAdgOpWDX26bWTXF3HrioorR7lr08NqeYUWQCQ==", + "requires": { + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" + } + }, + "react-cropper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-cropper/-/react-cropper-1.3.0.tgz", + "integrity": "sha512-A14BUmeOD84ulNp/eChHOBuChVYatPodhc43wZzO9ZSFoM2Ta8O9P+ZXURyseF/R8v32a6YyMVcBUShj7XqcbA==", + "requires": { + "babel-core": "7.0.0-bridge.0", + "cropperjs": "^1.5.5", + "prop-types": "^15.5.8" + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-loading": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/react-loading/-/react-loading-2.0.3.tgz", + "integrity": "sha512-Vdqy79zq+bpeWJqC+xjltUjuGApyoItPgL0vgVfcJHhqwU7bAMKzysfGW/ADu6i0z0JiOCRJjo+IkFNkRNbA3A==", + "requires": {} + }, + "react-radio-buttons": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-radio-buttons/-/react-radio-buttons-1.2.2.tgz", + "integrity": "sha512-GPk8gLEdOoC/41NQ3CrkAQv8jZSo2BojvEszQqS/16XTICe8a+H2EyOk3qJQLHzLe7+YABzyjZoZAOeeQ1QFxA==", + "requires": { + "prop-types": "^15.5.10", + "react": "^15.6.1", + "react-dom": "^15.3.2" + }, + "dependencies": { + "react": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/react/-/react-15.7.0.tgz", + "integrity": "sha512-5/MMRYmpmM0sMTHGLossnJCrmXQIiJilD6y3YN3TzAwGFj6zdnMtFv6xmi65PHKRV+pehIHpT7oy67Sr6s9AHA==", + "requires": { + "create-react-class": "^15.6.0", + "fbjs": "^0.8.9", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0", + "prop-types": "^15.5.10" + } + }, + "react-dom": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.7.0.tgz", + "integrity": "sha512-mpjXqC2t1FuYsILOLCj0kg6pbg460byZkVA/80VtDmKU/pYmoTdHOtaMcTRIDiyXLz4sIur0cQ04nOC6iGndJg==", + "requires": { + "fbjs": "^0.8.9", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0", + "prop-types": "^15.5.10" + } + } + } + }, + "react-redux": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.5.tgz", + "integrity": "sha512-Dt29bNyBsbQaysp6s/dN0gUodcq+dVKKER8Qv82UrpeygwYeX1raTtil7O/fftw/rFqzaf6gJhDZRkkZnn6bjg==", + "requires": { + "@babel/runtime": "^7.12.1", + "@types/react-redux": "^7.1.16", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" + } + }, + "react-refresh": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.10.0.tgz", + "integrity": "sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==", + "dev": true + }, + "react-switch": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/react-switch/-/react-switch-6.0.0.tgz", + "integrity": "sha512-QV3/6eRK5/5epdQzIqvDAHRoGLbCv/wDpHUi6yBMXY1Xco5XGuIZxvB49PHoV1v/SpEgOCJLD/Zo43iic+aEIw==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "react-viewer": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-viewer/-/react-viewer-3.2.2.tgz", + "integrity": "sha512-DHOq1x6cXsAViY43204ILRzLVR5ovP1MgzsC+LzZCWlInRuHjzAgpQZ8GzWm1CkiNYuHGwCxH36X0JUHl2xDSg==", + "requires": { + "classnames": "^2.2.5" + } + }, + "reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "requires": { + "lodash": "^4.0.1" + } + }, + "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==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "redux": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz", + "integrity": "sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + }, + "dependencies": { + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + } + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "requires": { + "estree-walker": "^0.6.1" + } + }, + "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==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "script-ext-html-webpack-plugin": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-2.1.5.tgz", + "integrity": "sha512-nMjd5dtsnoB8dS+pVM9ZL4mC9O1uVtTxrDS99OGZsZxFbkZE6pw0HCMued/cncDrKivIShO9vwoyOTvsGqQHEQ==", + "dev": true, + "requires": { + "debug": "^4.2.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io-client": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.3.2.tgz", + "integrity": "sha512-2B9LqSunN60yV8F7S84CCEEcgbYNfrn7ejIInZtLZ7ppWtiX8rGZAjvdCvbnC8bqo/9RlCNOUsORLyskxSFP1g==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.0.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + } + }, + "socket.io-parser": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.1.tgz", + "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==", + "requires": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "sockjs-client": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.3" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdy": { + "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", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "std-env": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.1.tgz", + "integrity": "sha512-eOsoKTWnr6C8aWrqJJ2KAReXoa7Vn5Ywyw6uCXgA/xDhxPoaIsBa5aNJmISY04dLwXPBnDHW4diGM7Sn5K4R/g==", + "dev": true, + "requires": { + "ci-info": "^3.1.1" + } + }, + "streamroller": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", + "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "requires": { + "date-format": "^2.1.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } + } + }, + "strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "stylis": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true + }, + "tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true + } + } + }, + "terser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", + "dev": true, + "requires": { + "jest-worker": "^27.0.6", + "p-limit": "^3.1.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "ts-loader": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "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" + } + }, + "enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "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" + } + } + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + } + } + }, + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "url-parse": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "5.58.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", + "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" + }, + "dependencies": { + "enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.0.tgz", + "integrity": "sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", + "dev": true + }, + "webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "workbox-background-sync": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.3.0.tgz", + "integrity": "sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==", + "dev": true, + "requires": { + "idb": "^6.0.0", + "workbox-core": "6.3.0" + } + }, + "workbox-broadcast-update": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.3.0.tgz", + "integrity": "sha512-hp7Du6GJzK99wak5cQFhcSBxvcS+2fkFcxiMmz/RsQ5GQNxVcbiovq74w5aNCzuv3muQvICyC1XELZhZ4GYRTQ==", + "dev": true, + "requires": { + "workbox-core": "6.3.0" + } + }, + "workbox-build": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.3.0.tgz", + "integrity": "sha512-Th93AaC+88ZvJje0acTjCCCvU3tGenxJht5xUALXHW+Mzk3I5SMzTFwKn5F3e1iZ+M7U2jjfpMXe/sJ4UMx46A==", + "dev": true, + "requires": { + "@apideck/better-ajv-errors": "^0.2.4", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^1.4.1", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "source-map-url": "^0.4.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.3.0", + "workbox-broadcast-update": "6.3.0", + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-google-analytics": "6.3.0", + "workbox-navigation-preload": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-range-requests": "6.3.0", + "workbox-recipes": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0", + "workbox-streams": "6.3.0", + "workbox-sw": "6.3.0", + "workbox-window": "6.3.0" + }, + "dependencies": { + "ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "workbox-cacheable-response": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.3.0.tgz", + "integrity": "sha512-oYCRGF6PFEmJJkktdxYw/tcrU8N5u/2ihxVSHd+9sNqjNMDiXLqsewcEG544f1yx7gq5/u6VcvUA5N62KzN1GQ==", + "dev": true, + "requires": { + "workbox-core": "6.3.0" + } + }, + "workbox-core": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.3.0.tgz", + "integrity": "sha512-SufToEV3SOLwwz3j+P4pgkfpzLRUlR17sX3p/LrMHP/brYKvJQqjTwtSvaCkkAX0RPHX2TFHmN8xhPP1bpmomg==", + "dev": true + }, + "workbox-expiration": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.3.0.tgz", + "integrity": "sha512-teYuYfM3HFbwAD/nlZDw/dCMOrCKjsAiMRhz0uOy9IkfBb7vBynO3xf118lY62X6BfqjZdeahiHh10N0/aYICg==", + "dev": true, + "requires": { + "idb": "^6.0.0", + "workbox-core": "6.3.0" + } + }, + "workbox-google-analytics": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.3.0.tgz", + "integrity": "sha512-6u0y21rtimnrCKpvayTkwh9y4Y5Xdn6X87x895WzwcOcWA2j/Nl7nmCpB0wjjhqU9pMj7B2lChqfypP+xUs5IA==", + "dev": true, + "requires": { + "workbox-background-sync": "6.3.0", + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" + } + }, + "workbox-navigation-preload": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.3.0.tgz", + "integrity": "sha512-D7bomh9SCn1u6n32FqAWfyHe2dkK6mWbwcTsoeBnFSD0p8Gr9Zq1Mpt/DitEfGIQHck90Zd024xcTFLkjczS/Q==", + "dev": true, + "requires": { + "workbox-core": "6.3.0" + } + }, + "workbox-precaching": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.3.0.tgz", + "integrity": "sha512-bND3rUxiuzFmDfeKywdvOqK0LQ5LLbOPk0eX22PlMQNOOduHRxzglMpgHo/MR6h+8cPJ3GpxT8hZ895/7bHMqQ==", + "dev": true, + "requires": { + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" + } + }, + "workbox-range-requests": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.3.0.tgz", + "integrity": "sha512-AHnGtfSvc/fBt+8NCVT6jVcshv7oFkiuS94YsedQu2sIN1jKHkxLaj7qMBl818FoY6x7r0jw1WLmG/QDmI1/oA==", + "dev": true, + "requires": { + "workbox-core": "6.3.0" + } + }, + "workbox-recipes": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.3.0.tgz", + "integrity": "sha512-f0AZyxd48E4t+PV+ifgIf8WodfJqRj8/E0t+PwppDIdTPyD59cIh0HZBtgPKFdIMVnltodpMz4zioxym1H3GjQ==", + "dev": true, + "requires": { + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" + } + }, + "workbox-routing": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.3.0.tgz", + "integrity": "sha512-asajX5UPkaoU4PB9pEpxKWKkcpA+KJQUEeYU6NlK0rXTCpdWQ6iieMRDoBTZBjTzUdL3j3s1Zo2qCOSvtXSYGg==", + "dev": true, + "requires": { + "workbox-core": "6.3.0" + } + }, + "workbox-strategies": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.3.0.tgz", + "integrity": "sha512-SYZt40y+Iu5nA+UEPQOrAuAMMNTxtUBPLCIaMMb4lcADpBYrNP1CD+/s2QsrxzS651a8hfi06REKt+uTp1tqfw==", + "dev": true, + "requires": { + "workbox-core": "6.3.0" + } + }, + "workbox-streams": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.3.0.tgz", + "integrity": "sha512-CiRsuoXJOytA7IQriRu6kVCa0L4OdNi0DdniiSageu/EZuxTswNXpgVzkGE4IDArU/5jlzgRtwqrqIWCJX+OMA==", + "dev": true, + "requires": { + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0" + } + }, + "workbox-sw": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.3.0.tgz", + "integrity": "sha512-xwrXRBzw5jwJ7VdAQkTSNTbNZ4S6VhXtbZZ0vY6XKNQARO5nuGphNdif+hJFIejHUgtV6ESpQnixPj5hYB2jKQ==", + "dev": true + }, + "workbox-webpack-plugin": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.3.0.tgz", + "integrity": "sha512-3l5H8h7O2eUgTAISQoglDe4VJDDYTZaDnkRY0FY2+eFOXA+fZoWuDSmLiMnA0uYqPC4NWVTZwP549E0dWgiWjw==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "source-map-url": "^0.4.0", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.3.0" + }, + "dependencies": { + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "workbox-window": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.3.0.tgz", + "integrity": "sha512-CFP84assX9srH/TOx4OD8z4EBPO/Cq4WKdV2YLcJIFJmVTS/cB63XKeidKl2KJk8qOOLVIKnaO7BLmb0MxGFtA==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.3.0" + } + }, + "wpk-reporter": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/wpk-reporter/-/wpk-reporter-0.9.3.tgz", + "integrity": "sha512-cqOjPqlgohaS5XV6sWVgSOOoFmdOtOxBrJPzbNhwf+cn/4tjCdpfsUFDAP/ORCYIAFM2wEvYUIURtPg52rqIzw==" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + }, + "xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" + }, + "xss": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.10.tgz", + "integrity": "sha512-qmoqrRksmzqSKvgqzN0055UFWY7OKx1/9JWeRswwEVX9fCG5jcYRxa/A2DHcmZX6VJvjzHRQ2STeeVcQkrmLSw==", + "requires": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/web/package.json b/packages/web/package.json new file mode 100644 index 0000000..895d34d --- /dev/null +++ b/packages/web/package.json @@ -0,0 +1,100 @@ +{ + "name": "@fiora/web", + "version": "1.0.0", + "license": "MIT", + "private": true, + "scripts": { + "start": "cross-env NODE_ENV=development webpack serve --config build/webpack.dev.js", + "build": "rm -rf dist && cross-env NODE_ENV=production webpack --config build/webpack.prod.js", + "build-relative": "rm -rf dist && cross-env NODE_ENV=production PublicPath=./ webpack --config build/webpack.prod.js" + }, + "dependencies": { + "@loadable/component": "^5.15.0", + "@testing-library/react": "^12.0.0", + "axios": "^0.21.1", + "brace": "^0.11.1", + "core-js": "^3.15.2", + "cropperjs": "^1.5.5", + "dayjs": "^1.10.7", + "filesize": "^7.0.0", + "linaria": "^2.1.0", + "log4js": "^6.3.0", + "multer": "^1.4.3", + "normalize.css": "^8.0.1", + "platform": "^1.3.6", + "prismjs": "^1.24.1", + "pure-render-decorator": "^1.2.1", + "qrcode.react": "^1.0.1", + "randomcolor": "^0.6.2", + "rc-dialog": "^8.5.2", + "rc-dropdown": "^3.2.0", + "rc-menu": "^9.0.12", + "rc-notification": "^3.3.1", + "rc-progress": "^2.5.2", + "rc-select": "^9.2.1", + "rc-tabs": "^9.6.4", + "rc-tooltip": "^5.1.1", + "react": "^17.0.2", + "react-ace": "^9.4.1", + "react-color": "^2.19.3", + "react-copy-to-clipboard": "^5.0.3", + "react-cropper": "^1.3.0", + "react-dom": "^17.0.2", + "react-loading": "^2.0.3", + "react-radio-buttons": "^1.2.2", + "react-redux": "^7.2.4", + "react-switch": "^6.0.0", + "react-viewer": "^3.2.2", + "redux": "^4.1.0", + "regenerator-runtime": "^0.13.7", + "socket.io-client": "^4.1.3", + "wpk-reporter": "^0.9.3", + "xss": "^1.0.9" + }, + "devDependencies": { + "@babel/core": "^7.14.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/preset-env": "^7.14.7", + "@babel/preset-react": "^7.14.5", + "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", + "@testing-library/jest-dom": "^4.2.4", + "@types/ali-oss": "^6.0.10", + "@types/loadable__component": "^5.13.4", + "@types/platform": "^1.3.4", + "@types/prismjs": "^1.16.6", + "@types/pure-render-decorator": "^0.2.28", + "@types/qrcode.react": "^1.0.2", + "@types/react": "^17.0.14", + "@types/react-color": "^3.0.5", + "@types/react-copy-to-clipboard": "^5.0.1", + "@types/react-cropper": "^0.10.7", + "@types/react-dom": "^17.0.9", + "@types/react-redux": "^7.1.18", + "@types/redux": "^3.6.0", + "babel-loader": "^8.2.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "babel-plugin-prismjs": "^2.1.0", + "clean-webpack-plugin": "^4.0.0-alpha.0", + "cross-env": "^7.0.3", + "css-loader": "^5.0.0", + "dotenv-webpack": "^7.0.3", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^5.3.2", + "less": "^3.12.2", + "less-loader": "^7.0.2", + "less-plugin-autoprefix": "^2.0.0", + "react-refresh": "^0.10.0", + "script-ext-html-webpack-plugin": "^2.1.5", + "style-loader": "^2.0.0", + "terser-webpack-plugin": "^5.1.4", + "ts-loader": "^9.2.3", + "typescript": "^4.4.4", + "url-loader": "^4.1.1", + "webpack": "^5.45.1", + "webpack-cli": "^4.7.2", + "webpack-dev-server": "^3.11.2", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.0-3", + "workbox-webpack-plugin": "^6.1.5" + } +} diff --git a/packages/web/src/@fiora/assets/audios/apple.mp3 b/packages/web/src/@fiora/assets/audios/apple.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..14c0d5b8ce5ddb7fd9828c134cafd1147458d409 GIT binary patch literal 26240 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 EFQ#(MT>t<8 literal 0 HcmV?d00001 diff --git a/packages/web/src/@fiora/assets/audios/default.mp3 b/packages/web/src/@fiora/assets/audios/default.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8c2743203fd96e6bff33af9ca18cd974d769ec25 GIT binary patch literal 10449 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 literal 0 HcmV?d00001 diff --git a/packages/web/src/@fiora/assets/audios/huaji.mp3 b/packages/web/src/@fiora/assets/audios/huaji.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4235653213260b94b269145aef8d8d6f2af0d240 GIT binary patch literal 7812 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 JFXt~5{{{75{FeX# literal 0 HcmV?d00001 diff --git a/packages/web/src/@fiora/assets/audios/mobileqq.mp3 b/packages/web/src/@fiora/assets/audios/mobileqq.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4cc7979be6a7d4193d152ffd3f45afc9f687c1b9 GIT binary patch literal 33091 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
    ql+MQ@I{K&>eL0Bh1 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%0ABPZsQ3sjoS4_x8gCk-!E(IjvFcgy8=)DlI?rR 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 z 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 Ef}ry}r~m)} literal 0 HcmV?d00001 diff --git a/packages/web/src/@fiora/config/client.ts b/packages/web/src/@fiora/config/client.ts new file mode 100644 index 0000000..8459909 --- /dev/null +++ b/packages/web/src/@fiora/config/client.ts @@ -0,0 +1,39 @@ +import { MB } from '../utils/const'; + +export default { + app_name: 'mattuy-laptop', + app_code: 'iasdjfkwe3ds-qw3rjkwjfda8', + server: + process.env.Server || + (process.env.NODE_ENV === 'development' ? '//localhost:9200/' : '/'), + + maxImageSize: process.env.MaxImageSize + ? parseInt(process.env.MaxImageSize, 10) + : MB * 5, + maxBackgroundImageSize: process.env.MaxBackgroundImageSize + ? parseInt(process.env.MaxBackgroundImageSize, 10) + : MB * 5, + maxAvatarSize: process.env.MaxAvatarSize + ? parseInt(process.env.MaxAvatarSize, 10) + : MB * 1.5, + maxFileSize: process.env.MaxFileSize + ? parseInt(process.env.MaxFileSize, 10) + : MB * 10, + + // client default system setting + defaultTheme: process.env.DefaultTheme || 'cool', + sound: process.env.Sound || 'default', + tagColorMode: process.env.TagColorMode || 'fixedColor', + + /** + * 前端监控: https://yueying.effirst.com/index + * 值为监控应用id, 为空则不启用监控 + */ + frontendMonitorAppId: process.env.FrontendMonitorAppId || '', + + // 禁止用户撤回消息, 不包括管理员, 管理员始终能撤回任何消息 + // 默认是禁止的 + disableDeleteMessage: process.env.DisableDeleteMessage + ? process.env.DisableDeleteMessage === 'true' + : false, +}; diff --git a/packages/web/src/@fiora/utils/compressImage.ts b/packages/web/src/@fiora/utils/compressImage.ts new file mode 100644 index 0000000..2fad51b --- /dev/null +++ b/packages/web/src/@fiora/utils/compressImage.ts @@ -0,0 +1,25 @@ +/** + * 压缩图片 + * @param image 要压缩的图片 + * @param mimeType mime类型 + * @param quality 质量 + */ +export default function compressImage( + image: HTMLImageElement, + mimeType: string, + quality = 1, +): Promise { + return new Promise((resolve) => { + const canvas = document.createElement('canvas'); + canvas.width = image.width; + canvas.height = image.height; + + const ctx = canvas.getContext('2d'); + if (ctx) { + ctx.drawImage(image, 0, 0); + canvas.toBlob(resolve, mimeType, quality); + } else { + resolve(null); + } + }); +} diff --git a/packages/web/src/@fiora/utils/const.ts b/packages/web/src/@fiora/utils/const.ts new file mode 100644 index 0000000..84fde0b --- /dev/null +++ b/packages/web/src/@fiora/utils/const.ts @@ -0,0 +1,19 @@ +/** 封禁后提示文案 */ +export const SEAL_TEXT = '你已经被关进小黑屋中, 请反思后再试'; + +/** 封禁用户释放时间 */ +export const SEAL_USER_TIMEOUT = 1000 * 60 * 10; // 10分钟 + +/** 封禁ip释放时间 */ +export const SEAL_IP_TIMEOUT = 1000 * 60 * 60 * 6; // 6小时 + +/** 透明图 */ +export const TRANSPARENT_IMAGE = + 'data:image/png;base64,R0lGODlhFAAUAIAAAP///wAAACH5BAEAAAAALAAAAAAUABQAAAIRhI+py+0Po5y02ouz3rz7rxUAOw=='; + +/** 加密salt位数 */ +export const SALT_ROUNDS = 10; + +export const MB = 1024 * 1024; + +export const NAME_REGEXP = /^([0-9a-zA-Z]{1,2}|[\u4e00-\u9eff]|[\u3040-\u309Fー]|[\u30A0-\u30FF]){1,8}$/; diff --git a/packages/web/src/@fiora/utils/expressions.ts b/packages/web/src/@fiora/utils/expressions.ts new file mode 100644 index 0000000..6918b4b --- /dev/null +++ b/packages/web/src/@fiora/utils/expressions.ts @@ -0,0 +1,54 @@ +export default { + default: [ + '呵呵', + '哈哈', + '吐舌', + '啊', + '酷', + '怒', + '开心', + '汗', + '泪', + '黑线', + '鄙视', + '不高兴', + '真棒', + '钱', + '疑问', + '阴险', + '吐', + '咦', + '委屈', + '花心', + '呼', + '笑眼', + '冷', + '太开心', + '滑稽', + '勉强', + '狂汗', + '乖', + '睡觉', + '惊哭', + '升起', + '惊讶', + '喷', + '爱心', + '心碎', + '玫瑰', + '礼物', + '星星月亮', + '太阳', + '音乐', + '灯泡', + '蛋糕', + '彩虹', + '钱币', + '咖啡', + 'haha', + '胜利', + '大拇指', + '弱', + 'ok', + ], +}; diff --git a/packages/web/src/@fiora/utils/getFriendId.ts b/packages/web/src/@fiora/utils/getFriendId.ts new file mode 100644 index 0000000..05fa570 --- /dev/null +++ b/packages/web/src/@fiora/utils/getFriendId.ts @@ -0,0 +1,12 @@ +/** + * Combina two users id as frind id + * The result has nothing to do with the order of the parameters + * @param userId1 user id + * @param userId2 user id + */ +export default function getFriendId(userId1: string, userId2: string) { + if (userId1 < userId2) { + return userId1 + userId2; + } + return userId2 + userId1; +} diff --git a/packages/web/src/@fiora/utils/getRandomAvatar.ts b/packages/web/src/@fiora/utils/getRandomAvatar.ts new file mode 100644 index 0000000..79690f4 --- /dev/null +++ b/packages/web/src/@fiora/utils/getRandomAvatar.ts @@ -0,0 +1,17 @@ +const AvatarCount = 15; +const publicPath = process.env.PublicPath || '/'; + +/** + * 获取随机头像 + */ +export default function getRandomAvatar() { + const number = Math.floor(Math.random() * AvatarCount); + return `${publicPath}avatar/${number}.jpg`; +} + +/** + * 获取默认头像 + */ +export function getDefaultAvatar() { + return `${publicPath}avatar/0.jpg`; +} diff --git a/packages/web/src/@fiora/utils/getRandomColor.ts b/packages/web/src/@fiora/utils/getRandomColor.ts new file mode 100644 index 0000000..bc7db1d --- /dev/null +++ b/packages/web/src/@fiora/utils/getRandomColor.ts @@ -0,0 +1,36 @@ +import randomColor from 'randomcolor'; + +type ColorMode = 'dark' | 'bright' | 'light' | 'random'; + +/** + * 获取随机颜色, 刷新页面不变 + * @param seed when passed will cause randomColor to return the same color each time + */ +export function getRandomColor(seed: string, luminosity: ColorMode = 'dark') { + return randomColor({ + luminosity, + seed, + }); +} + +type Cache = { + [key: string]: string; +}; + +const cache: Cache = {}; + +/** + * 获取随机颜色, 刷新页面后重新随机 + * @param seed 随机种子 + * @param luminosity 亮度 + */ +export function getPerRandomColor( + seed: string, + luminosity: ColorMode = 'dark', +) { + if (cache[seed]) { + return cache[seed]; + } + cache[seed] = randomColor({ luminosity }); + return cache[seed]; +} diff --git a/packages/web/src/@fiora/utils/logger.ts b/packages/web/src/@fiora/utils/logger.ts new file mode 100644 index 0000000..a80cf54 --- /dev/null +++ b/packages/web/src/@fiora/utils/logger.ts @@ -0,0 +1,6 @@ +import { getLogger } from 'log4js'; + +const logger = getLogger(); +logger.level = process.env.NODE_ENV === 'development' ? 'trace' : 'info'; + +export default logger; diff --git a/packages/web/src/@fiora/utils/sleep.ts b/packages/web/src/@fiora/utils/sleep.ts new file mode 100644 index 0000000..39dd02d --- /dev/null +++ b/packages/web/src/@fiora/utils/sleep.ts @@ -0,0 +1,5 @@ +export default function sleep(duration = 200) { + return new Promise((resolve) => { + setTimeout(resolve, duration); + }); +} diff --git a/packages/web/src/@fiora/utils/socket.ts b/packages/web/src/@fiora/utils/socket.ts new file mode 100644 index 0000000..e0c8646 --- /dev/null +++ b/packages/web/src/@fiora/utils/socket.ts @@ -0,0 +1,9 @@ +import { Socket } from 'socket.io'; + +export function getSocketIp(socket: Socket) { + return ( + (socket.handshake.headers['x-real-ip'] as string) || + socket.request.connection.remoteAddress || + '' + ); +} diff --git a/packages/web/src/@fiora/utils/test/getFriendId.spec.ts b/packages/web/src/@fiora/utils/test/getFriendId.spec.ts new file mode 100644 index 0000000..585abbf --- /dev/null +++ b/packages/web/src/@fiora/utils/test/getFriendId.spec.ts @@ -0,0 +1,10 @@ +import getFriendId from '../getFriendId'; + +describe('utils/getFriendId.ts', () => { + it('should combina two users id as friend id', () => { + const user1 = '111'; + const user2 = '222'; + expect(getFriendId(user1, user2)).toBe('111222'); + expect(getFriendId(user2, user1)).toBe('111222'); + }); +}); diff --git a/packages/web/src/@fiora/utils/test/url.spec.ts b/packages/web/src/@fiora/utils/test/url.spec.ts new file mode 100644 index 0000000..f692697 --- /dev/null +++ b/packages/web/src/@fiora/utils/test/url.spec.ts @@ -0,0 +1,23 @@ +import { addParam } from '../url'; + +describe('utils/url.ts', () => { + it('should add ?key=value into url', () => { + const url = 'https://fiora.suisuijiang.com'; + const key = 'key'; + const value = 'value'; + const params = { + [key]: value, + }; + expect(addParam(url, params)).toBe(`${url}?${key}=${value}`); + }); + + it('should add &key=value into url', () => { + const url = 'https://fiora.suisuijiang.com?a=a'; + const key = 'key'; + const value = 'value'; + const params = { + [key]: value, + }; + expect(addParam(url, params)).toBe(`${url}&${key}=${value}`); + }); +}); diff --git a/packages/web/src/@fiora/utils/time.ts b/packages/web/src/@fiora/utils/time.ts new file mode 100644 index 0000000..98f75be --- /dev/null +++ b/packages/web/src/@fiora/utils/time.ts @@ -0,0 +1,28 @@ +export default { + isToday(time1: Date, time2: Date) { + return ( + time1.getFullYear() === time2.getFullYear() && + time1.getMonth() === time2.getMonth() && + time1.getDate() === time2.getDate() + ); + }, + isYesterday(time1: Date, time2: Date) { + const prevDate = new Date(time1); + prevDate.setDate(time1.getDate() - 1); + return ( + prevDate.getFullYear() === time2.getFullYear() && + prevDate.getMonth() === time2.getMonth() && + prevDate.getDate() === time2.getDate() + ); + }, + getHourMinute(time: Date) { + const hours = time.getHours(); + const minutes = time.getMinutes(); + return `${hours < 10 ? `0${hours}` : hours}:${ + minutes < 10 ? `0${minutes}` : minutes + }`; + }, + getMonthDate(time: Date) { + return `${time.getMonth() + 1}/${time.getDate()}`; + }, +}; diff --git a/packages/web/src/@fiora/utils/ua.ts b/packages/web/src/@fiora/utils/ua.ts new file mode 100644 index 0000000..9c9bc40 --- /dev/null +++ b/packages/web/src/@fiora/utils/ua.ts @@ -0,0 +1,7 @@ +const UA = window.navigator.userAgent; + +export const isiOS = /iPhone/i.test(UA); + +export const isAndroid = /android/i.test(UA); + +export const isMobile = isiOS || isAndroid; diff --git a/packages/web/src/@fiora/utils/url.ts b/packages/web/src/@fiora/utils/url.ts new file mode 100644 index 0000000..14cb747 --- /dev/null +++ b/packages/web/src/@fiora/utils/url.ts @@ -0,0 +1,16 @@ +interface UrlParams { + [key: string]: string; +} + +// eslint-disable-next-line import/prefer-default-export +export function addParam(url: string, params: UrlParams) { + let result = url; + Object.keys(params).forEach((key) => { + if (result.indexOf('?') === -1) { + result += `?${key}=${params[key]}`; + } else { + result += `&${key}=${params[key]}`; + } + }); + return result; +} diff --git a/packages/web/src/@fiora/utils/xss.ts b/packages/web/src/@fiora/utils/xss.ts new file mode 100644 index 0000000..10b48b4 --- /dev/null +++ b/packages/web/src/@fiora/utils/xss.ts @@ -0,0 +1,9 @@ +import xss from 'xss'; + +/** + * xss防护 + * @param text 要处理的文字 + */ +export default function processXss(text: string) { + return xss(text); +} diff --git a/packages/web/src/App.less b/packages/web/src/App.less new file mode 100644 index 0000000..baab299 --- /dev/null +++ b/packages/web/src/App.less @@ -0,0 +1,25 @@ +@import "./styles/variable.less"; + +.app { + width: 100%; + height: 100%; + overflow: hidden; +} + +.blur, .child { + position: absolute; +} + +.blur { + filter: blur(10px); +} + +.child { + display: flex; + border-radius: 10px; + box-shadow: 0px 0px 60px rgba(0, 0, 0, 0.5); + + @media @mobile { + border-radius: 0; + } +} diff --git a/packages/web/src/App.tsx b/packages/web/src/App.tsx new file mode 100644 index 0000000..09ebbf5 --- /dev/null +++ b/packages/web/src/App.tsx @@ -0,0 +1,164 @@ +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import { isMobile } from '@fiora/utils/ua'; +import { useSelector } from 'react-redux'; +import ActiveContactList from './modules/ActiveContactList/ActiveContactList'; +import Chat from './modules/Chat/Chat'; +import FunctionBarAndContactList from './modules/FunctionBarAndContactList/FunctionBarAndContactList'; +import Login from './modules/Login/Login'; +import Sidebar from './modules/Sidebar/Sidebar'; +import Style from './App.less'; +import globalStyles from './globalStyles'; +import inobounce from './utils/inobounce'; +import { ShowUserOrGroupInfoContext } from './context'; +import { State } from './state/reducer'; +import './styles/iconfont.less'; +import './styles/normalize.less'; + +/** + * 获取窗口宽度百分比 + */ +function getWidthPercent() { + let width = 0.6; + if (isMobile) { + width = 1; + } else if (window.innerWidth < 1000) { + width = 0.9; + } else if (window.innerWidth < 1300) { + width = 0.8; + } else if (window.innerWidth < 1600) { + width = 0.7; + } else { + width = 0.6; + } + return width; +} + +/** + * 获取窗口高度百分比 + */ +function getHeightPercent() { + let height = 0.8; + if (isMobile) { + height = 1; + } else if (window.innerHeight < 1000) { + height = 0.9; + } else { + height = 0.8; + } + return height; +} + +function App() { + const backgroundImageUrl = useSelector( + (state: State) => state.status.backgroundImage, + ); + const sidebarTab = useSelector((state: State) => state.sideBarTabState); + const backgroundImage = backgroundImageUrl; + const $app = useRef(null); + + // 计算窗口高度/宽度百分比 + const [width, setWidth] = useState(getWidthPercent()); + const [height, setHeight] = useState(getHeightPercent()); + useEffect(() => { + window.onresize = () => { + setWidth(getWidthPercent()); + setHeight(getHeightPercent()); + }; + + // @ts-ignore + inobounce($app.current); + }, []); + + // 获取底图尺寸 + const [backgroundWidth, setBackgroundWidth] = useState(window.innerWidth); + const [backgroundHeight, setBackgroundHeight] = useState( + window.innerHeight, + ); + useEffect(() => { + const img = new Image(); + img.onload = () => { + setBackgroundWidth(Math.max(img.width, window.innerWidth)); + setBackgroundHeight(Math.max(img.height, window.innerHeight)); + }; + img.src = backgroundImage; + }, [backgroundImage]); + + // 主体样式 + const style = useMemo( + () => ({ + backgroundImage: `url(${backgroundImage})`, + backgroundSize: `${backgroundWidth}px ${backgroundHeight}px`, + backgroundRepeat: 'no-repeat', + }), + [backgroundImage, backgroundWidth, backgroundHeight], + ); + + // 聊天窗口样式 + const childStyle = useMemo( + () => ({ + width: `${width * 100}%`, + height: `${height * 100}%`, + left: `${((1 - width) / 2) * 100}%`, + top: `${((1 - height) / 2) * 100}%`, + }), + [width, height], + ); + + // 模糊背景样式 + const blurStyle = useMemo( + () => ({ + backgroundPosition: `${(-(1 - width) * window.innerWidth) / 2}px ${ + (-(1 - height) * window.innerHeight) / 2 + }px`, + ...style, + ...childStyle, + }), + [width, height, style, childStyle], + ); + + const [userInfoDialog, toggleUserInfoDialog] = useState(false); + const [userInfo, setUserInfo] = useState(null); + + const [groupInfoDialog, toggleGroupInfoDialog] = useState(false); + const [groupInfo, setGroupInfo] = useState(null); + + const contextValue = useMemo( + () => ({ + showUserInfo(user: any) { + setUserInfo(user); + toggleUserInfoDialog(true); + }, + showGroupInfo(group: any) { + setGroupInfo(group); + toggleGroupInfoDialog(true); + }, + }), + [], + ); + + return ( +

    +
    +
    + + + {sidebarTab === 'message' ? ( + + ) : sidebarTab === 'contact' ? ( + + ) : null} + + +
    + +
    + ); +} + +export default App; diff --git a/packages/web/src/components/Avatar.tsx b/packages/web/src/components/Avatar.tsx new file mode 100644 index 0000000..f460e1c --- /dev/null +++ b/packages/web/src/components/Avatar.tsx @@ -0,0 +1,55 @@ +import React, { SyntheticEvent, useMemo, useState } from 'react'; + +export const avatarFailback = '/avatar/0.jpg'; + +type Props = { + /** 头像链接 */ + src: string; + /** 展示大小 */ + size?: number; + /** 额外类名 */ + className?: string; + /** 点击事件 */ + onClick?: () => void; + onMouseEnter?: () => void; + onMouseLeave?: () => void; +}; + +function Avatar({ + src, + size = 60, + className = '', + onClick, + onMouseEnter, + onMouseLeave, +}: Props) { + const [failTimes, updateFailTimes] = useState(0); + + /** + * Handle avatar load fail event. Use faillback avatar instead + * If still fail then ignore error event + */ + function handleError(e: SyntheticEvent) { + if (failTimes >= 2) { + return; + } + e.currentTarget.src = avatarFailback; + updateFailTimes(failTimes + 1); + } + + const url = src; + return ( + + ); +} + +export default Avatar; diff --git a/packages/web/src/components/Button.tsx b/packages/web/src/components/Button.tsx new file mode 100644 index 0000000..25de2e9 --- /dev/null +++ b/packages/web/src/components/Button.tsx @@ -0,0 +1,46 @@ +import React from 'react'; + +import { css } from 'linaria'; + +const button = css` + border: none; + background-color: var(--primary-color-8_5); + color: var(--primary-text-color-10); + border-radius: 4px; + font-size: 14px; + transition: background-color 0.4s; + user-select: none !important; + + &:hover { + background-color: var(--primary-color-10); + } +`; + +type Props = { + /** 类型: primary / danger */ + type?: string; + /** 按钮文本 */ + children: string; + className?: string; + /** 点击事件 */ + onClick?: () => void; +}; + +function Button({ + type = 'primary', + children, + className = '', + onClick, +}: Props) { + return ( + + ); +} + +export default Button; diff --git a/packages/web/src/components/Dialog.less b/packages/web/src/components/Dialog.less new file mode 100644 index 0000000..5605fec --- /dev/null +++ b/packages/web/src/components/Dialog.less @@ -0,0 +1,47 @@ +@import '../styles/variable.less'; + +:global { + .rc-dialog { + width: 450px; + top: 45% !important; + transform: translateY(-50%) !important; + } + .rc-dialog-content { + width: 100%; + } + .rc-dialog-title { + font-size: 16px !important; + } + .rc-dialog-wrap { + overflow: hidden !important; + } + .rc-dialog-close { + top: 0 !important; + right: 10px !important; + z-index: 9999; + + .rc-dialog-close-x { + font-size: 32px !important; + } + } + + .rc-dialog-body { + overflow-y: auto; + -webkit-overflow-scrolling: touch; + max-height: 60vh; + } + + @media @mobile { + .rc-dialog { + width: 94% !important; + margin: 0 auto; + } + .rc-dialog-body { + padding: 10px 10px; + // max-height: 88%; + } + .rc-dialog-content { + max-height: 80vh; + } + } +} \ No newline at end of file diff --git a/packages/web/src/components/Dialog.tsx b/packages/web/src/components/Dialog.tsx new file mode 100644 index 0000000..3d7ec4f --- /dev/null +++ b/packages/web/src/components/Dialog.tsx @@ -0,0 +1,6 @@ +import Dialog from 'rc-dialog'; +import 'rc-dialog/assets/index.css'; + +import './Dialog.less'; + +export default Dialog; diff --git a/packages/web/src/components/Dropdown.less b/packages/web/src/components/Dropdown.less new file mode 100644 index 0000000..1b82172 --- /dev/null +++ b/packages/web/src/components/Dropdown.less @@ -0,0 +1,9 @@ +:global { + .rc-dropdown { + max-width: 100%; + } + + .rc-select-dropdown { + z-index: 1500 !important; + } +} \ No newline at end of file diff --git a/packages/web/src/components/Dropdown.tsx b/packages/web/src/components/Dropdown.tsx new file mode 100644 index 0000000..e9253c5 --- /dev/null +++ b/packages/web/src/components/Dropdown.tsx @@ -0,0 +1,6 @@ +import Dropdown from 'rc-dropdown'; +import 'rc-dropdown/assets/index.css'; + +import './Dropdown.less'; + +export default Dropdown; diff --git a/packages/web/src/components/IconButton.less b/packages/web/src/components/IconButton.less new file mode 100644 index 0000000..f02e83c --- /dev/null +++ b/packages/web/src/components/IconButton.less @@ -0,0 +1,9 @@ +.iconButton { + text-align: center; + color: rgba(165, 181, 192, 1); + cursor: pointer; + + &:hover { + color: rgba(247, 247, 247, 1); + } +} \ No newline at end of file diff --git a/packages/web/src/components/IconButton.tsx b/packages/web/src/components/IconButton.tsx new file mode 100644 index 0000000..dd0c3dd --- /dev/null +++ b/packages/web/src/components/IconButton.tsx @@ -0,0 +1,39 @@ +import React from 'react'; + +import Style from './IconButton.less'; + +type Props = { + width?: number; + height?: number; + icon: string; + iconSize: number; + className?: string; + style?: Object; + onClick?: () => void; +}; + +function IconButton({ + width, + height, + icon, + iconSize, + onClick = () => {}, + className = '', + style = {}, +}: Props) { + return ( +
    + +
    + ); +} + +export default IconButton; diff --git a/packages/web/src/components/Input.less b/packages/web/src/components/Input.less new file mode 100644 index 0000000..340440a --- /dev/null +++ b/packages/web/src/components/Input.less @@ -0,0 +1,31 @@ +.inputContainer { + position: relative; +} + +.input { + width: 100%; + height: 100%; + border-radius: 6px; + border: 1px solid rgba(0, 0, 0, 0.2); + padding: 0 34px 0 8px; + font-size: 14px; + color: #333; + box-sizing: border-box; + user-select: auto; + + &:focus { + border-color: var(--primary-color-10); + } +} + +.inputIconButton { + position: absolute; + top: 0; + bottom: 0; + margin: auto; + right: 5px; + + &:hover { + color: var(--primary-color-10); + } +} \ No newline at end of file diff --git a/packages/web/src/components/Input.tsx b/packages/web/src/components/Input.tsx new file mode 100644 index 0000000..a7157d5 --- /dev/null +++ b/packages/web/src/components/Input.tsx @@ -0,0 +1,102 @@ +import React, { + Ref, + RefObject, + forwardRef, + useImperativeHandle, + useRef, + useState, +} from 'react'; +import IconButton from './IconButton'; +import Style from './Input.less'; + +interface InputProps { + value?: string; + type?: string; + placeholder?: string; + className?: string; + clearable?: boolean; + autoFocus?: boolean; + onChange: (value: string) => void; + onEnter?: (value: string) => void; + onFocus?: () => void; +} + +const Input = forwardRef((props: InputProps, ref) => { + const $input = useRef(null); + const { + value, + type = 'text', + placeholder = '', + className = '', + onChange, + clearable, + autoFocus, + onEnter = () => {}, + onFocus = () => {}, + } = props; + + useImperativeHandle( + ref, + () => ({ + // @ts-ignore + focus: () => $input.current.focus(), + }), + [], + ); + function handleInput(e: any) { + onChange(e.target.value); + } + + const [lockEnter, setLockEnter] = useState(false); + function handleIMEStart() { + setLockEnter(true); + } + function handleIMEEnd() { + setLockEnter(false); + } + function handleKeyDown(e: any) { + if (lockEnter) { + return; + } + if (e.key === 'Enter') { + onEnter(value as string); + } + } + + function handleClickClear() { + onChange(''); + // @ts-ignore + $input.current.focus(); + } + + return ( +
    + + {clearable !== false && ( + + )} +
    + ); +}); + +export default Input; diff --git a/packages/web/src/components/Loading.tsx b/packages/web/src/components/Loading.tsx new file mode 100644 index 0000000..035b116 --- /dev/null +++ b/packages/web/src/components/Loading.tsx @@ -0,0 +1,3 @@ +import Loading from 'react-loading'; + +export default Loading; diff --git a/packages/web/src/components/Menu.tsx b/packages/web/src/components/Menu.tsx new file mode 100644 index 0000000..a3a0780 --- /dev/null +++ b/packages/web/src/components/Menu.tsx @@ -0,0 +1,4 @@ +import Menu, { SubMenu, MenuItem } from 'rc-menu'; +import 'rc-menu/assets/index.css'; + +export { Menu, MenuItem, SubMenu }; diff --git a/packages/web/src/components/Message.less b/packages/web/src/components/Message.less new file mode 100644 index 0000000..5b8d84a --- /dev/null +++ b/packages/web/src/components/Message.less @@ -0,0 +1,37 @@ +:global { + .rc-notification { + top: 5px !important; + z-index: 1100 !important; + } +} + +.componentMessage { + height: 100%; + display: flex; + align-items: center; + margin-top: 1px; + + :global { + .iconfont { + font-size: 22px; + + &.icon-success { + color: green; + } + &.icon-error { + color: #d82e2e; + } + &.icon-warning { + color: orange; + } + &.icon-info { + color: #2773ef; + } + } + } +} + +.messageText { + margin-left: 8px; + font-size: 16px; +} \ No newline at end of file diff --git a/packages/web/src/components/Message.tsx b/packages/web/src/components/Message.tsx new file mode 100644 index 0000000..2b02536 --- /dev/null +++ b/packages/web/src/components/Message.tsx @@ -0,0 +1,34 @@ +import React from 'react'; +import Notification from 'rc-notification'; + +import 'rc-notification/dist/rc-notification.min.css'; +import Style from './Message.less'; + +function showMessage(text: string, duration = 1500, type = 'success') { + Notification.newInstance({}, (notification: any) => { + notification.notice({ + content: ( +
    + + {text} +
    + ), + duration, + }); + }); +} + +export default { + success(text: string, duration = 1.5) { + showMessage(text, duration, 'success'); + }, + error(text: string, duration = 1.5) { + showMessage(text, duration, 'error'); + }, + warning(text: string, duration = 1.5) { + showMessage(text, duration, 'warning'); + }, + info(text: string, duration = 1.5) { + showMessage(text, duration, 'info'); + }, +}; diff --git a/packages/web/src/components/Progress.tsx b/packages/web/src/components/Progress.tsx new file mode 100644 index 0000000..ad8eff1 --- /dev/null +++ b/packages/web/src/components/Progress.tsx @@ -0,0 +1,4 @@ +import { Line as LineProgress, Circle as CircleProgress } from 'rc-progress'; +import 'rc-progress/assets/index.css'; + +export { LineProgress, CircleProgress }; diff --git a/packages/web/src/components/Select.tsx b/packages/web/src/components/Select.tsx new file mode 100644 index 0000000..8d38134 --- /dev/null +++ b/packages/web/src/components/Select.tsx @@ -0,0 +1,4 @@ +import Select, { Option, OptGroup } from 'rc-select'; +import 'rc-select/assets/index.css'; + +export { Select, Option, OptGroup }; diff --git a/packages/web/src/components/Tabs.tsx b/packages/web/src/components/Tabs.tsx new file mode 100644 index 0000000..5ed00eb --- /dev/null +++ b/packages/web/src/components/Tabs.tsx @@ -0,0 +1,6 @@ +import Tabs, { TabPane } from 'rc-tabs'; +import TabContent from 'rc-tabs/lib/TabContent'; +import ScrollableInkTabBar from 'rc-tabs/lib/ScrollableInkTabBar'; +import 'rc-tabs/assets/index.css'; + +export { Tabs, TabPane, TabContent, ScrollableInkTabBar }; diff --git a/packages/web/src/components/Tooltip.less b/packages/web/src/components/Tooltip.less new file mode 100644 index 0000000..7c57fb5 --- /dev/null +++ b/packages/web/src/components/Tooltip.less @@ -0,0 +1,13 @@ +:global { + .rc-tooltip { + display: inline-block !important; + } + .rc-tooltip-hidden { + display: none !important; + } + .rc-tooltip-inner { + span { + color: #f1f1f1 !important; + } + } +} \ No newline at end of file diff --git a/packages/web/src/components/Tooltip.tsx b/packages/web/src/components/Tooltip.tsx new file mode 100644 index 0000000..4150752 --- /dev/null +++ b/packages/web/src/components/Tooltip.tsx @@ -0,0 +1,6 @@ +import Tooltip from 'rc-tooltip'; +import 'rc-tooltip/assets/bootstrap.css'; + +import './Tooltip.less'; + +export default Tooltip; diff --git a/packages/web/src/context.ts b/packages/web/src/context.ts new file mode 100644 index 0000000..5389f9d --- /dev/null +++ b/packages/web/src/context.ts @@ -0,0 +1,4 @@ +import { createContext } from 'react'; + +// eslint-disable-next-line import/prefer-default-export +export const ShowUserOrGroupInfoContext = createContext(null); diff --git a/packages/web/src/globalStyles.ts b/packages/web/src/globalStyles.ts new file mode 100644 index 0000000..42abe6f --- /dev/null +++ b/packages/web/src/globalStyles.ts @@ -0,0 +1,16 @@ +// @ts-ignore +import { css } from 'linaria'; + +const globalStyles = css` + :global() { + .danger { + background-color: #dd514c !important; + + &:hover { + background-color: #d7342e !important; + } + } + } +`; + +export default globalStyles; diff --git a/packages/web/src/hooks/useAction.ts b/packages/web/src/hooks/useAction.ts new file mode 100644 index 0000000..c748a41 --- /dev/null +++ b/packages/web/src/hooks/useAction.ts @@ -0,0 +1,90 @@ +import { useDispatch } from 'react-redux'; +import { ActionTypes } from '../state/action'; +import { Message } from '../state/reducer'; + +/** + * 获取 redux action + */ +export default function useAction() { + const dispatch = useDispatch(); + + return { + logout() { + dispatch({ + type: ActionTypes.Logout, + }); + }, + + setFocus(contactID: string) { + dispatch({ + type: ActionTypes.SetFocus, + payload: contactID, + }); + }, + + addMessage(message: Message) { + dispatch({ + type: ActionTypes.AddMessage, + payload: message, + }); + }, + nextActiveContact() { + dispatch({ + type: ActionTypes.MoveFocusToNextActiveContact, + payload: null, + }); + }, + prevActiveContact() { + dispatch({ + type: ActionTypes.MoveFocusToPrevActiveContact, + payload: null, + }); + }, + deactiveCurrentActiveContact() { + dispatch({ + type: ActionTypes.DeactiveCurrentActiveContact, + payload: null, + }); + }, + forceUpdateMessagesAfterMutation() { + dispatch({ + type: ActionTypes.ForceUpdateMessagesAfterMutation, + payload: null, + }); + }, + forceUpdateContactsAfterMutation() { + dispatch({ + type: ActionTypes.ForceUpdateActiveContactsAfterMutation, + payload: null, + }); + }, + + setStatus(key: string, value: any) { + dispatch({ + type: ActionTypes.SetStatus, + payload: { + key, + value, + }, + }); + window.localStorage.setItem(key, value); + }, + + toggleLoginRegisterDialog(visible: boolean) { + dispatch({ + type: ActionTypes.SetStatus, + payload: { + key: 'loginRegisterDialogVisible', + value: visible, + }, + }); + }, + + setSideBarTabState(state: 'contact' | 'message') { + dispatch({ + type: ActionTypes.ChangeSideBarTabState, + payload: state, + }); + }, + }; +} diff --git a/packages/web/src/hooks/useAero.ts b/packages/web/src/hooks/useAero.ts new file mode 100644 index 0000000..937da90 --- /dev/null +++ b/packages/web/src/hooks/useAero.ts @@ -0,0 +1,12 @@ +import { useSelector } from 'react-redux'; +import { State } from '../state/reducer'; + +/** + * 获取毛玻璃状态属性 + */ +export default function useAero() { + const aero = useSelector((state: State) => state.status.aero); + return { + 'data-aero': aero, + }; +} diff --git a/packages/web/src/hooks/useIsLogin.ts b/packages/web/src/hooks/useIsLogin.ts new file mode 100644 index 0000000..138afd0 --- /dev/null +++ b/packages/web/src/hooks/useIsLogin.ts @@ -0,0 +1,10 @@ +import { useSelector } from 'react-redux'; +import { State } from '../state/reducer'; + +/** + * 获取登录态 + */ +export default function useIsLogin() { + const isLogin = useSelector((state: State) => state.user && state.user.id); + return isLogin; +} diff --git a/packages/web/src/hooks/useStore.ts b/packages/web/src/hooks/useStore.ts new file mode 100644 index 0000000..3b32f38 --- /dev/null +++ b/packages/web/src/hooks/useStore.ts @@ -0,0 +1,20 @@ +import { useSelector } from 'react-redux'; +import { Contact, State } from '../state/reducer'; + +export function useStore() { + return useSelector((state: State) => state); +} + +export function useFocusLinkman(): Contact | null { + const store = useStore(); + const { focusContactID } = store; + if (focusContactID) { + return store.allContacts.get(focusContactID) || null; + } + return null; +} + +export function useSelfId() { + const store = useStore(); + return store.user?.id || ''; +} diff --git a/packages/web/src/localStorage.ts b/packages/web/src/localStorage.ts new file mode 100644 index 0000000..2bfd016 --- /dev/null +++ b/packages/web/src/localStorage.ts @@ -0,0 +1,89 @@ +import config from '@fiora/config/client'; +import themes from './themes'; + +/** LocalStorage存储的键值 */ +export enum LocalStorageKey { + Theme = 'theme', + PrimaryColor = 'primaryColor', + PrimaryTextColor = 'primaryTextColor', + BackgroundImage = 'backgroundImage', + Aero = 'aero', + Sound = 'sound', + SoundSwitch = 'soundSwitch', + NotificationSwitch = 'notificationSwitch', + VoiceSwitch = 'voiceSwitch', + SelfVoiceSwitch = 'selfVoiceSwitch', + TagColorMode = 'tagColorMode', + EnableSearchExpression = 'enableSearchExpression', +} + +/** + * 获取LocalStorage中的文本值 + * @param key 键值 + * @param defaultValue 默认值 + */ +function getTextValue(key: string, defaultValue: string) { + const value = window.localStorage.getItem(key); + return value || defaultValue; +} + +/** + * 获取LocalStorage中的boolean值 + * @param key 键值 + * @param defaultValue 默认值 + */ +function getSwitchValue(key: string, defaultValue: boolean = true) { + const value = window.localStorage.getItem(key); + return value ? value === 'true' : defaultValue; +} + +/** + * 获取LocalStorage值 + */ +export default function getData() { + const theme = getTextValue(LocalStorageKey.Theme, config.defaultTheme); + let themeConfig = { + primaryColor: '', + primaryTextColor: '', + backgroundImage: '', + aero: false, + }; + // @ts-ignore + if (theme && themes[theme]) { + // @ts-ignore + themeConfig = themes[theme]; + } else { + themeConfig = { + primaryColor: getTextValue( + LocalStorageKey.PrimaryColor, + themes[config.defaultTheme]?.primaryColor, + ), + primaryTextColor: getTextValue( + LocalStorageKey.PrimaryTextColor, + themes[config.defaultTheme]?.primaryTextColor, + ), + backgroundImage: getTextValue( + LocalStorageKey.BackgroundImage, + themes[config.defaultTheme]?.backgroundImage, + ), + aero: getSwitchValue(LocalStorageKey.Aero, false), + }; + } + return { + theme, + ...themeConfig, + sound: getTextValue(LocalStorageKey.Sound, config.sound), + soundSwitch: getSwitchValue(LocalStorageKey.SoundSwitch), + notificationSwitch: getSwitchValue(LocalStorageKey.NotificationSwitch), + voiceSwitch: getSwitchValue(LocalStorageKey.VoiceSwitch), + selfVoiceSwitch: getSwitchValue(LocalStorageKey.SelfVoiceSwitch, false), + tagColorMode: getTextValue( + LocalStorageKey.TagColorMode, + config.tagColorMode, + ), + enableSearchExpression: getSwitchValue( + LocalStorageKey.EnableSearchExpression, + false, + ), + }; +} diff --git a/packages/web/src/main.tsx b/packages/web/src/main.tsx new file mode 100644 index 0000000..068b34d --- /dev/null +++ b/packages/web/src/main.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import ReactDom from 'react-dom'; +import { Provider } from 'react-redux'; +/* eslint-disable camelcase */ +import 'core-js/stable'; +import 'regenerator-runtime/runtime'; +import App from './App'; +import getData from './localStorage'; +import setCssVariable from './utils/setCssVariable'; +import store from './state/store'; + +// 注册 Service Worker +if (window.location.protocol === 'https:' && 'serviceWorker' in navigator) { + window.addEventListener('load', () => { + navigator.serviceWorker.register(`/service-worker.js`); + }); +} + +// 更新 css variable +const { primaryColor, primaryTextColor } = getData(); +setCssVariable(primaryColor, primaryTextColor); + +// 请求 Notification 授权 +if ( + window.Notification && + (window.Notification.permission === 'default' || + window.Notification.permission === 'denied') +) { + window.Notification.requestPermission(); +} + +if (window.location.pathname !== '/') { + window.history.pushState({}, 'fiora', '/'); +} + +ReactDom.render( + + + , + document.getElementById('app'), +); diff --git a/packages/web/src/modules/ActiveContactList/ActiveContact.less b/packages/web/src/modules/ActiveContactList/ActiveContact.less new file mode 100644 index 0000000..a119e97 --- /dev/null +++ b/packages/web/src/modules/ActiveContactList/ActiveContact.less @@ -0,0 +1,80 @@ +@import '../../styles/variable.less'; + +.contact { + height: 60px; + display: flex; + align-items: center; + padding: 10px 16px; + cursor: default; + transition: background-color 0.2s; +} + +.focus { + background-color: var(--primary-color-4); + + &[data-aero='true'] { + background-color: rgba(255, 255, 255, 0.15); + } + + @media @mobile { + background-color: var(--primary-color-9); + } +} + +.time { + color: var(--primary-text-color-7); + font-size: 12px; + position: relative; + top: 4px; +} +.unread { + @size: 18px; + background-color: var(--primary-color-10); + background-color: darkred; + width: @size; + height: @size; + border-radius: 50%; + text-align: center; + & > span { + color: #e9e9e9; + font-size: 10px; + line-height: @size; + position: relative; + top: -2px; + } +} + +.container { + flex: 1; + margin-left: 12px; +} + +.rowContainer { + display: flex; + justify-content: space-between; +} + +.nameTimeBlock { + margin-top: 4px; +} + +.name { + color: var(--primary-text-color-10); + font-size: 14px; + margin: 0; +} + +.previewUnreadBlock { + margin-top: 6px; +} + +.preview { + color: var(--primary-text-color-7); + font-size: 12px; + width: 188px; + height: 20px; + line-height: 20px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} diff --git a/packages/web/src/modules/ActiveContactList/ActiveContact.tsx b/packages/web/src/modules/ActiveContactList/ActiveContact.tsx new file mode 100644 index 0000000..4d3dd4b --- /dev/null +++ b/packages/web/src/modules/ActiveContactList/ActiveContact.tsx @@ -0,0 +1,87 @@ +import dayjs from 'dayjs'; +import React, { useRef } from 'react'; +import { useSelector } from 'react-redux'; +import Avatar from '../../components/Avatar'; +import useAction from '../../hooks/useAction'; +import useAero from '../../hooks/useAero'; +import { + Contact as ActiveContact, + Contact, + Message, + State, +} from '../../state/reducer'; +import Style from './ActiveContact.less'; + +interface ActiveContactProps { + contact: Contact; +} + +function ActiveContact(props: ActiveContactProps) { + const C = props.contact; + const aero = useAero(); + const action = useAction(); + const hasFocus = useSelector( + (state: State) => state.focusContactID === C.id, + ); + const messageList = useSelector((state: State) => { + return state.messages[C.id] || []; + }); + const lastMessage = messageList.at(-1); + let preview = lastMessage?.content; + if (lastMessage && lastMessage.speakingGroupMemberName) { + preview = lastMessage.speakingGroupMemberName + ': ' + preview; + } + const lastReadMessageRef: any = useRef(null); + let unread = 0; + if (hasFocus) { + lastReadMessageRef.current = lastMessage; + } else if (messageList.length) { + const idx = messageList.indexOf(lastReadMessageRef.current); + unread = idx === -1 ? messageList.length : messageList.length - idx - 1; + } + + function handleClick() { + action.setFocus(C.id); + } + function formatTime() { + if (!lastMessage) { + return null; + } + return dayjs.unix(lastMessage.createTimestamp).format('HH:ss'); + } + + return ( +
    + +
    +
    + {C.displayName} + {formatTime()} +
    +
    + + {unread > 0 && ( +
    + {unread > 99 ? '99+' : unread} +
    + )} +
    +
    +
    + ); +} + +export default ActiveContact; diff --git a/packages/web/src/modules/ActiveContactList/ActiveContactList.less b/packages/web/src/modules/ActiveContactList/ActiveContactList.less new file mode 100644 index 0000000..bf9af42 --- /dev/null +++ b/packages/web/src/modules/ActiveContactList/ActiveContactList.less @@ -0,0 +1,39 @@ +@import "../../styles/variable.less"; + +.contactList { + overflow-y: auto; + -webkit-overflow-scrolling: touch; + width: 300px; + height: 100%; + position: relative; + display: flex; + background-color: unset; + + @media @mobile { + position: absolute; + left: 0; + z-index: 1; + width: 100%; + background-color: rgba(37, 37, 37, 0.5); + + .container { + background-color: var(--primary-color-7); + } + } +} + +.container { + background-color: var(--primary-color-5); + flex: 1; + max-width: 300px; + display: flex; + flex-direction: column; + + &[data-aero='true'] { + background-color: var(--primary-color-0); + } + + @media @mobile { + background-color: var(--primary-color-7); + } +} diff --git a/packages/web/src/modules/ActiveContactList/ActiveContactList.tsx b/packages/web/src/modules/ActiveContactList/ActiveContactList.tsx new file mode 100644 index 0000000..d45f5b7 --- /dev/null +++ b/packages/web/src/modules/ActiveContactList/ActiveContactList.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { useSelector } from 'react-redux'; +import { State } from '../../state/reducer'; +import ActiveContact from './ActiveContact'; +import Style from './ActiveContactList.less'; + +function ActiveContactList() { + const contacts = useSelector((state: State) => { + return state.activeContacts.sort((c1, c2) => { + const lm1 = state.messages[c1.id]?.at(-1); + const lm2 = state.messages[c2.id]?.at(-1); + if (!lm1 || !lm2) { + if (lm1) { + return -1; + } else if (lm2) { + return 1; + } else { + return 0; + } + } + return lm2.createTimestamp - lm1.createTimestamp; + }); + }); + + return ( +
    +
    + {contacts.map((contact) => ( + + ))} +
    +
    + ); +} + +export default ActiveContactList; diff --git a/packages/web/src/modules/Chat/Chat.less b/packages/web/src/modules/Chat/Chat.less new file mode 100644 index 0000000..d9c7e3d --- /dev/null +++ b/packages/web/src/modules/Chat/Chat.less @@ -0,0 +1,42 @@ +@import '../../styles/variable.less'; + +.chat { + flex: 1; + display: flex; + flex-direction: column; + background-color: rgba(241, 241, 241, 0.6); + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + overflow: hidden; + position: relative; + + &[data-aero=true] { + background-color: rgba(241, 241, 241, 0.15); + } + + @media @mobile { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } +} + +.noLinkman { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} + +.noLinkmanImage { + border-radius: 8px; + width: 170px; + height: 180px; + background-position-y: 180px; +} + +.noLinkmanText { + margin-top: 16px; + font-size: 14px; + color: #666; +} diff --git a/packages/web/src/modules/Chat/Chat.tsx b/packages/web/src/modules/Chat/Chat.tsx new file mode 100644 index 0000000..ae151ff --- /dev/null +++ b/packages/web/src/modules/Chat/Chat.tsx @@ -0,0 +1,32 @@ +import React, { useContext } from 'react'; +import { useSelector } from 'react-redux'; +import useAero from '../../hooks/useAero'; +import { ShowUserOrGroupInfoContext } from '../../context'; +import { State } from '../../state/reducer'; +import ChatInput from './ChatInput'; +import HeaderBar from './HeaderBar'; +import MessageList from './MessageList'; +import Style from './Chat.less'; + +function Chat() { + const activeContact = useSelector((state: State) => { + return state.contacts + .concat(state.groups) + .find((c) => c.id === state.focusContactID); + }); + const aero = useAero(); + + if (!activeContact) { + return null; + } + + return ( +
    + + + +
    + ); +} + +export default Chat; diff --git a/packages/web/src/modules/Chat/ChatInput.less b/packages/web/src/modules/Chat/ChatInput.less new file mode 100644 index 0000000..7f19e57 --- /dev/null +++ b/packages/web/src/modules/Chat/ChatInput.less @@ -0,0 +1,154 @@ +@import '../../styles/variable.less'; + +.chatInput { + height: 70px; + background-color: rgba(255, 255, 255, 0.5); + display: flex; + align-items: center; + padding: 0px 20px; + border-bottom-right-radius: 10px; + position: relative; + + &[data-aero='true'] { + background-color: rgba(255, 255, 255, 0.15); + + .input { + background-color: rgba(255, 255, 255, 0.6); + border: none; + &::placeholder { + color: #888; + } + } + + .iconButton { + :global { + .iconfont { + color: var(--primary-text-color-8); + } + } + &:hover { + :global { + .iconfont { + color: var(--primary-color-10); + } + } + } + } + } + + @media @mobile { + height: 50px; + padding: 0 6px; + border-bottom-right-radius: 0px; + height: calc(50px + env(safe-area-inset-bottom)); + padding-bottom: env(safe-area-inset-bottom); + } +} + +.form { + flex: 1; + display: flex; + position: relative; + margin: 0 10px; +} + +.input { + flex: 1; + padding: 0px 8px; + height: 32px; + line-height: 32px; + outline: none; + border: 1px solid rgba(208, 208, 208, 0.5); + font-size: 14px; + color: #666; + user-select: auto; + + &::placeholder { + color: #999; + } +} + +.tooltip { + position: absolute; + right: 10px; + top: 8px; + font-size: 22px; + color: #aaa; +} + +.iconButton { + :global { + .iconfont { + opacity: 0.8; + color: var(--primary-color-10); + } + } + + &:hover { + :global { + .iconfont { + opacity: 1; + } + } + } +} + +.expressionDropdown { + width: 415px; + height: 240px; + background-color: white; + transform: translateY(-8px); + + @media @mobile { + width: 100%; + } +} + +.featureDropdown { + background-color: white; + + :global { + .rc-menu { + padding: 6px 0; + } + .rc-menu-item { + padding: 12px 20px !important; + } + } +} + +.atPanel { + background-color: white; + position: absolute; + left: 120px; + bottom: 60px; + padding: 6px 0; + border-radius: 3px; + max-height: 266px; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} + +.atUserList { + display: flex; + align-items: center; + cursor: pointer; + margin-bottom: 2px; + height: 30px; + padding: 0 8px; + min-width: 120px; + + &:last-child { + margin-bottom: 0px; + } + &:hover { + background-color: var(--primary-color-4); + } +} + +.atText { + font-size: 14px; + margin-left: 6px; + margin-top: 4px; + color: #444; +} diff --git a/packages/web/src/modules/Chat/ChatInput.tsx b/packages/web/src/modules/Chat/ChatInput.tsx new file mode 100644 index 0000000..552cc1a --- /dev/null +++ b/packages/web/src/modules/Chat/ChatInput.tsx @@ -0,0 +1,636 @@ +import compressImage from '@fiora/utils/compressImage'; +import config from '@fiora/config/client'; +import dayjs from 'dayjs'; +import loadable from '@loadable/component'; +import xss from '@fiora/utils/xss'; +import React, { useEffect, useRef, useState } from 'react'; +import { css } from 'linaria'; +import { isMobile } from '@fiora/utils/ua'; +import { useSelector } from 'react-redux'; +import Avatar from '../../components/Avatar'; +import Dropdown from '../../components/Dropdown'; +import IconButton from '../../components/IconButton'; +import MessageControl from '../../components/Message'; +import Tooltip from '../../components/Tooltip'; +import composeMessage from '../../utils/composeMessage'; +import fetch from '../../utils/fetch'; +import uploadFile from '../../utils/uploadFile'; +import useAction from '../../hooks/useAction'; +import useAero from '../../hooks/useAero'; +import useIsLogin from '../../hooks/useIsLogin'; +import readDiskFile, { ReadFileResult } from '../../utils/readDiskFile'; +import { Menu, MenuItem } from '../../components/Menu'; +import { Message, State } from '../../state/reducer'; +import { sendMessage } from '../../service'; +import Style from './ChatInput.less'; + +const expressionList = css` + display: flex; + width: 100%; + height: 80px; + position: absolute; + left: 0; + top: -80px; + background-color: inherit; + overflow-x: auto; +`; +const expressionImageContainer = css` + min-width: 80px; + height: 80px; +`; +const expressionImage = css` + width: 100%; + height: 100%; + object-fit: cover; +`; + +const ExpressionAsync = loadable( + () => + // @ts-ignore + import(/* webpackChunkName: "expression" */ './Expression'), +); +const CodeEditorAsync = loadable( + // @ts-ignore + () => import(/* webpackChunkName: "code-editor" */ './CodeEditor'), +); + +let searchExpressionTimer: number = 0; + +let inputIME = false; + +function ChatInput() { + const action = useAction(); + const isLogin = useIsLogin(); + const connect = useSelector((state: State) => state.connect); + const selfId = useSelector((state: State) => state.user?.id); + const username = useSelector((state: State) => state.user?.displayName); + const avatar = useSelector((state: State) => state.user?.avatar); + const focus = useSelector((state: State) => state.focusContactID); + const linkman = useSelector((state: State) => state.allContacts.get(focus)); + const [inputFocus, toggleInputFocus] = useState(false); + const [expressionDialog, toggleExpressionDialog] = useState(false); + const [at, setAt] = useState({ enable: false, content: '' }); + const $input = useRef(null); + const aero = useAero(); + + /** 全局输入框聚焦快捷键 */ + function focusInput(e: KeyboardEvent) { + const $target: HTMLElement = e.target as HTMLElement; + if ( + $target.tagName === 'INPUT' || + $target.tagName === 'TEXTAREA' || + e.key !== 'i' + ) { + return; + } + e.preventDefault(); + // @ts-ignore + $input.current.focus(e); + } + useEffect(() => { + window.addEventListener('keydown', focusInput); + return () => window.removeEventListener('keydown', focusInput); + }, []); + + if (!isLogin) { + return ( +
    + 未连接,请刷新 +
    + ); + } + + /** + * 插入文本到输入框光标处 + * @param value 要插入的文本 + */ + function insertAtCursor(value: string) { + const input = ($input.current as unknown) as HTMLInputElement; + if (input.selectionStart || input.selectionStart === 0) { + const startPos = input.selectionStart; + const endPos = input.selectionEnd; + const restoreTop = input.scrollTop; + input.value = + input.value.substring(0, startPos) + + value + + input.value.substring(endPos as number, input.value.length); + if (restoreTop > 0) { + input.scrollTop = restoreTop; + } + input.focus(); + input.selectionStart = startPos + value.length; + input.selectionEnd = startPos + value.length; + } else { + input.value += value; + input.focus(); + } + } + + function handleSelectExpression(expression: string) { + toggleExpressionDialog(false); + insertAtCursor(`#(${expression})`); + } + + async function handleSendMessage({ + type, + toID, + data, + filename, + fileSize, + localFileUrl, + }: { + type: string; + toID: string; + data: string; + filename?: string; + fileSize?: number; + localFileUrl?: string; + }) { + const message: Message = composeMessage({ + type: type as any, + target: toID, + data, + filename, + fileSize, + localFileUrl, + }); + action.addMessage(message); + const [error, idOnlyMessage] = await sendMessage( + toID, + type, + data, + filename, + ); + //TODO: handle result + if (error) { + throw Error(error); + } + } + + function sendImageMessage(image: string): void; + function sendImageMessage(image: ReadFileResult): void; + function sendImageMessage(image: string | ReadFileResult) { + if (typeof image === 'string') { + // handleSendMessage(id, 'emotion', image); + // toggleExpressionDialog(false); + // TODO: send emotion + return; + } + if (image.length > config.maxImageSize) { + MessageControl.warning('要发送的图片过大', 3); + return; + } + const url = URL.createObjectURL(image.result); + const img = new Image(); + img.onload = async () => { + try { + const imageUrl = await uploadFile(image.result as Blob); + handleSendMessage({ + type: 'img', + toID: focus, + data: imageUrl, + localFileUrl: url, + }); + } catch (err) { + MessageControl.error('发送图片失败'); + } + }; + img.src = url; + } + + async function sendFileMessage(file: ReadFileResult) { + if (file.length > config.maxFileSize) { + MessageControl.warning('要发送的文件过大', 3); + return; + } + try { + const fileUrl = await uploadFile( + file.result as Blob, + `FileMessage/${selfId}_${Date.now()}.${file.ext}`, + ); + handleSendMessage({ + type: 'file', + toID: focus, + data: fileUrl, + filename: file.filename, + fileSize: file.length, + }); + } catch (err) { + console.error(err); + MessageControl.error('上传文件失败'); + } + } + + async function handleSendImage() { + if (!connect) { + return MessageControl.error('发送消息失败, 您当前处于离线状态'); + } + const image = await readDiskFile( + 'blob', + 'image/png,image/jpeg,image/gif', + ); + if (!image) { + return null; + } + sendImageMessage(image); + return null; + } + async function handleSendFile() { + if (!connect) { + MessageControl.error('发送消息失败, 您当前处于离线状态'); + return; + } + const file = await readDiskFile('blob'); + if (!file) { + return; + } + sendFileMessage(file); + } + + function handleFeatureMenuClick({ + key, + domEvent, + }: { + key: string; + domEvent: any; + }) { + // Quickly hitting the Enter key causes the button to repeatedly trigger the problem + if (domEvent.keyCode === 13) { + return; + } + + switch (key) { + case 'image': { + handleSendImage(); + break; + } + case 'file': { + handleSendFile(); + break; + } + default: + } + } + + async function handlePaste(e: any) { + // eslint-disable-next-line react/destructuring-assignment + if (!connect) { + e.preventDefault(); + return MessageControl.error('发送消息失败, 您当前处于离线状态'); + } + const { items, types } = + e.clipboardData || e.originalEvent.clipboardData; + // 如果包含文件内容 + if (types.indexOf('Files') > -1) { + if (!window.confirm('发送剪贴板中的图片?')) { + return; + } + for (let index = 0; index < items.length; index++) { + const item = items[index]; + if (item.kind === 'file') { + const file = item.getAsFile(); + if (file) { + const reader = new FileReader(); + reader.onloadend = function handleLoad() { + const image = new Image(); + image.onload = async () => { + const imageBlob = await compressImage( + image, + file.type, + 1, + ); + // @ts-ignore + sendImageMessage({ + filename: file.name, + ext: imageBlob?.type.split('/').pop(), + length: imageBlob?.size, + type: imageBlob?.type, + result: imageBlob, + }); + }; + // eslint-disable-next-line react/no-this-in-sfc + image.src = this.result as string; + }; + reader.readAsDataURL(file); + } + } + } + e.preventDefault(); + } + return null; + } + + async function sendTextMessage() { + if (!connect) { + return MessageControl.error('发送消息失败, 您当前处于离线状态'); + } + // @ts-ignore + const message = $input.current.value.trim(); + if (message.length === 0) { + return null; + } + // @ts-ignore + $input.current.value = ''; + await handleSendMessage({ + type: 'text', + toID: focus, + data: message, + }); + // setExpressions([]); + return null; + } + + async function getExpressionsFromContent() { + if ($input.current) { + const content = $input.current.value.trim(); + if (searchExpressionTimer) { + clearTimeout(searchExpressionTimer); + } + // @ts-ignore + searchExpressionTimer = setTimeout(async () => { + if (content.length >= 1 && content.length <= 4) { + const [err, res] = await fetch( + 'searchExpression', + { keywords: content, limit: 10 }, + { toast: false }, + ); + if (!err && $input.current?.value.trim() === content) { + // setExpressions(res); + return; + } + } + // setExpressions([]); + }, 500); + } + } + + async function handleInputKeyDown( + e: React.KeyboardEvent, + ) { + if (!e.ctrlKey && e.key === 'Tab' && !e.shiftKey) { + action.nextActiveContact(); + e.preventDefault(); + } else if (!e.ctrlKey && e.key === 'Tab' && e.shiftKey) { + action.prevActiveContact(); + e.preventDefault(); + } else if ( + e.ctrlKey && + !e.shiftKey && + e.key.toLowerCase() === 'delete' + ) { + action.deactiveCurrentActiveContact(); + } else if (e.key === 'Enter' && !inputIME) { + sendTextMessage(); + } else if ( + e.ctrlKey && + !e.shiftKey && + e.key.toLowerCase() === 'y' && + !inputIME + ) { + e.preventDefault(); + handleSendImage(); + } else if ( + e.ctrlKey && + e.shiftKey && + e.key.toLowerCase() === 'y' && + !inputIME + ) { + e.preventDefault(); + handleSendFile(); + } else if (e.ctrlKey && (e.key === 'e' || e.key === '∂')) { + // toggleExpressionDialog(true); + e.preventDefault(); + } else if (e.key === '@') { + // 如果按下@建, 则进入@计算模式 + // @ts-ignore + // if (!/@/.test($input.current.value)) { + // setAt({ + // enable: true, + // content: '', + // }); + // } + // eslint-disable-next-line react/destructuring-assignment + } else if (at.enable) { + // 如果处于@计算模式 + const { key } = e; + // 延时, 以便拿到新的value和ime状态 + setTimeout(() => { + // 如果@已经被删掉了, 退出@计算模式 + // @ts-ignore + if (!/@/.test($input.current.value)) { + setAt({ enable: false, content: '' }); + return; + } + // 如果是输入中文, 并且不是空格键, 忽略输入 + if (inputIME && key !== ' ') { + return; + } + // 如果是不是输入中文, 并且是空格键, 则@计算模式结束 + if (!inputIME && key === ' ') { + setAt({ enable: false, content: '' }); + return; + } + + // 如果是正在输入中文, 则直接返回, 避免取到拼音字母 + if (inputIME) { + return; + } + // @ts-ignore + const regexResult = /@([^ ]*)/.exec($input.current.value); + if (regexResult) { + setAt({ enable: true, content: regexResult[1] }); + } + }, 100); + } else { + // Set timer to get current input value + setTimeout(() => { + if (inputIME) { + return; + } + if ($input.current?.value) { + getExpressionsFromContent(); + } else { + clearTimeout(searchExpressionTimer); + // setExpressions([]); + } + }); + } + } + + function getSuggestion() { + if (!at.enable || linkman.type !== 'group') { + return []; + } + return []; + // TODO: 处理@ + // return linkman.memberList.filter((member) => { + // const regex = new RegExp(`^${at.content}`); + // if (regex.test(member.user.username)) { + // return true; + // } + // return false; + // }); + } + + function replaceAt(targetUsername: string) { + // @ts-ignore + $input.current.value = $input.current.value.replace( + `@${at.content}`, + `@${targetUsername} `, + ); + setAt({ + enable: false, + content: '', + }); + // @ts-ignore + $input.current.focus(); + } + + function handleClickExpressionImage( + image: string, + width: number, + height: number, + ) { + sendImageMessage(`${image}?width=${width}&height=${height}`); + // setExpressions([]); + if ($input.current) { + $input.current.value = ''; + } + } + + return ( +
    + + +
    + } + animation="slide-up" + placement="topLeft" + > + + + + + 发送滑稽 + 发送图片 + 发送代码 + 发送文件 + +
    + } + animation="slide-up" + placement="topLeft" + > + + +
    e.preventDefault()} + > + { + inputIME = true; + }} + onCompositionEnd={() => { + inputIME = false; + }} + onFocus={() => toggleInputFocus(true)} + onBlur={() => toggleInputFocus(false)} + /> + + {!isMobile && !inputFocus && ( + + 支持粘贴图片发图 +
    + 全局按 i 键聚焦 + + } + > + +
    + )} + + + + {/*
    + {at.enable && + getSuggestion().map((member) => ( +
    replaceAt(member.user.username)} + role="button" + > + + + {member.user.username} + +
    + ))} +
    */} + + {/* {expressions.length > 0 && ( +
    + {expressions.map(({ image, width, height }) => ( +
    + 表情图 + handleClickExpressionImage( + image, + width, + height, + ) + } + /> +
    + ))} +
    + )} */} + + ); +} + +export default ChatInput; diff --git a/packages/web/src/modules/Chat/CodeEditor.less b/packages/web/src/modules/Chat/CodeEditor.less new file mode 100644 index 0000000..10adb2a --- /dev/null +++ b/packages/web/src/modules/Chat/CodeEditor.less @@ -0,0 +1,52 @@ +@import '../../styles/variable.less'; + +.codeEditor { + width: 600px; + + @media @mobile { + width: 100%; + height: 410px; + } + + :global { + .rc-dialog-body { + overflow-y: hidden; + } + } +} + +.container { + height: 55vh; + display: flex; + flex-direction: column; +} + +.selectContainer { + display: flex; + align-items: center; +} + +.languageSelect { + width: 150px; + margin-left: 10px; +} + +.title { + font-size: 14px; + font-weight: normal; + color: #666; +} + +.editorContainer { + flex: 1; + margin-top: 10px; + border: 1px solid #f1f1f1; + border-radius: 2px; +} + +.sendButton { + width: 100px; + height: 32px; + margin-top: 8px; + align-self: flex-end; +} \ No newline at end of file diff --git a/packages/web/src/modules/Chat/CodeEditor.tsx b/packages/web/src/modules/Chat/CodeEditor.tsx new file mode 100644 index 0000000..eb3dd96 --- /dev/null +++ b/packages/web/src/modules/Chat/CodeEditor.tsx @@ -0,0 +1,242 @@ +import React, { useState, useEffect } from 'react'; +import AceEditor from 'react-ace'; +import 'brace/theme/tomorrow'; +import 'brace/ext/language_tools'; + +import Style from './CodeEditor.less'; +import Dialog from '../../components/Dialog'; +import { Select, Option } from '../../components/Select'; +import Button from '../../components/Button'; + +const languages = [ + 'javascript', + 'typescript', + 'text', + 'java', + 'c_cpp', + 'python', + 'ruby', + 'php', + 'golang', + 'csharp', + 'html', + 'css', + 'sql', + 'json', +]; + +interface LoadedLanguage { + [key: string]: boolean; +} +const loadedLanguage: LoadedLanguage = {}; + +interface CodeEditorProps { + visible: boolean; + onClose: () => void; + onSend: (language: string, code: string) => void; +} + +function CodeEditor(props: CodeEditorProps) { + const { visible, onClose, onSend } = props; + + const [language, setLanguage] = useState('javascript'); + const [value, setValue] = useState(''); + const [timestamp, setTimestamp] = useState(0); + + useEffect(() => { + if (visible) { + setValue(''); + } + }, [visible]); + + useEffect(() => { + (async () => { + // 动态加载语言包 + if (visible && !loadedLanguage[language]) { + /** + * 为了减小打包产物体积, 这里是逐个引入所需的语音包 + * 如果直接用变量路径, 会将该目录下的文件全部打包 + * 另外不单个引入也不好设置 webpackChunkName + */ + switch (language) { + case 'javascript': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-javascript" */ 'brace/mode/javascript' + ); + break; + } + case 'typescript': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-typescript" */ 'brace/mode/typescript' + ); + break; + } + case 'java': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-java" */ 'brace/mode/java' + ); + break; + } + case 'c_cpp': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-c_cpp" */ 'brace/mode/c_cpp' + ); + break; + } + case 'python': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-python" */ 'brace/mode/python' + ); + break; + } + case 'ruby': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-ruby" */ 'brace/mode/ruby' + ); + break; + } + case 'php': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-php" */ 'brace/mode/php' + ); + break; + } + case 'golang': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-golang" */ 'brace/mode/golang' + ); + break; + } + case 'csharp': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-csharp" */ 'brace/mode/csharp' + ); + break; + } + case 'html': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-html" */ 'brace/mode/html' + ); + break; + } + case 'css': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-css" */ 'brace/mode/css' + ); + break; + } + case 'text': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-text" */ 'brace/mode/markdown' + ); + break; + } + case 'sql': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-sql" */ 'brace/mode/sql' + ); + break; + } + case 'json': { + // @ts-ignore + await import( + /* webpackChunkName: "react-ace-mode-json" */ 'brace/mode/json' + ); + break; + } + default: { + console.warn('不支持的语言包', language); + } + } + loadedLanguage[language] = true; + setTimestamp(Date.now()); + } + })(); + }, [visible, language]); + + function renderEditor() { + if (!loadedLanguage[language]) { + return null; + } + + const editorProps = { + theme: 'tomorrow', + value, + onChange: (newValue: string) => setValue(newValue), + fontSize: 12, + width: '100%', + height: '100%', + showPrintMargin: true, + showGutter: true, + highlightActiveLine: true, + setOptions: { + enableBasicAutocompletion: true, + enableLiveAutocompletion: true, + enableSnippets: false, + showLineNumbers: true, + tabSize: 4, + }, + }; + + return ( + + ); + } + + return ( + <> + +
    +
    +

    编程语言:

    + +
    +
    + {renderEditor()} +
    + +
    +
    + {timestamp} + + ); +} + +export default CodeEditor; diff --git a/packages/web/src/modules/Chat/Expression.less b/packages/web/src/modules/Chat/Expression.less new file mode 100644 index 0000000..f5bd8c1 --- /dev/null +++ b/packages/web/src/modules/Chat/Expression.less @@ -0,0 +1,107 @@ +@import '../../styles/variable.less'; + +.expression { + height: 100%; + + :global { + .rc-tabs { + height: 100%; + display: flex; + flex-direction: column; + } + .rc-tabs-content { + flex: 1; + } + } +} + +.defaultExpression { + width: 100%; + height: 100%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + padding: 0 7px; +} + +.defaultExpressionBlock { + width: 40px; + height: 40px;; + padding: 5px; + transition: all 0.3s; + + &:hover { + background-color: #e9e9e9; + cursor: pointer; + } + + @media @mobile { + width: 10%; + height: auto; + } +} + +.defaultExpressionItem { + width: 30px; + height: 30px; + background-repeat: no-repeat; + background-size: 30px auto; + background-image: url('@fiora/assets/images/baidu.png'); +} + +.searchExpression { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + padding: 0 10px; + position: relative; +} + +.searchExpressionInputBlock { + height: 40px; + display: flex; + align-items: center; +} + +.searchExpressionInput { + height: 34px; + flex: 1; +} + +.searchExpressionButton { + height: 34px; + width: 100px; + margin-left: 12px; +} + +.loading { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.searchResult { + height: 155px; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + padding-left: 2px; +} + +.searchImage { + width: 90px; + height: 90px; + margin: 0 4px; + display: inline-block; + position: relative; + + & > img { + max-width: 90px; + max-height: 90px; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } +} \ No newline at end of file diff --git a/packages/web/src/modules/Chat/Expression.tsx b/packages/web/src/modules/Chat/Expression.tsx new file mode 100644 index 0000000..f0c3523 --- /dev/null +++ b/packages/web/src/modules/Chat/Expression.tsx @@ -0,0 +1,127 @@ +import React, { useState } from 'react'; +import Loading from 'react-loading'; + +import expressions from '@fiora/utils/expressions'; +import { addParam } from '@fiora/utils/url'; +import BaiduImage from '@fiora/assets/images/baidu.png'; +import Style from './Expression.less'; +import { + Tabs, + TabPane, + TabContent, + ScrollableInkTabBar, +} from '../../components/Tabs'; +import Input from '../../components/Input'; +import Button from '../../components/Button'; +import Message from '../../components/Message'; + +interface ExpressionProps { + onSelectText: (expression: string) => void; + onSelectImage: (expression: string) => void; +} + +function Expression(props: ExpressionProps) { + const { onSelectText, onSelectImage } = props; + + const [keywords, setKeywords] = useState(''); + const [searchLoading, toggleSearchLoading] = useState(false); + const [searchResults, setSearchResults] = useState([]); + + async function handleSearchExpression() { + } + + const renderDefaultExpression = ( +
    + {expressions.default.map((e, index) => ( +
    + onSelectText(event.currentTarget.dataset.name as string) + } + role="button" + > +
    +
    + ))} +
    + ); + + function handleClickExpression(e: any) { + const $target = e.target; + const url = addParam($target.src, { + width: $target.naturalWidth, + height: $target.naturalHeight, + }); + onSelectImage(url); + } + + const renderSearchExpression = ( +
    +
    + + +
    +
    + +
    +
    + {searchResults.map(({ image }) => ( +
    + 表情 +
    + ))} +
    +
    + ); + + return ( +
    + } + renderTabContent={() => } + > + + {renderDefaultExpression} + + + {renderSearchExpression} + + +
    + ); +} + +export default Expression; diff --git a/packages/web/src/modules/Chat/GroupManagePanel.less b/packages/web/src/modules/Chat/GroupManagePanel.less new file mode 100644 index 0000000..360b922 --- /dev/null +++ b/packages/web/src/modules/Chat/GroupManagePanel.less @@ -0,0 +1,148 @@ +@import '../../styles/variable.less'; + +.groupManagePanel { + height: 100%; + width: 300px; + position: absolute; + right: 0; + transition: transform 0.5s; + + @media @mobile { + width: 100%; + background-color: rgba(37, 37, 37, 0.5); + } +} + +.show { + transform: translateX(0); +} +.hide { + transform: translateX(100%); +} + +.container { + width: 300px; + height: 100%; + display: flex; + flex-direction: column; + background-color: rgba(250, 250, 250, 0.95); + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + position: absolute; + right: 0; + + @media @mobile { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } +} + +.title { + height: 70px; + border-bottom: 1px solid #e8e8e8; + box-sizing: border-box; + text-align: center; + line-height: 70px; + font-size: 14px; + color: #666; + font-weight: bold; + + @media @mobile { + height: 50px; + } +} + +.content { + flex: 1; + padding: 12px; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} + +.block { + margin-bottom: 10px; +} + +.blockTitle { + line-height: 33px; + font-size: 14px; + color: #333; + font-weight: bold; +} + +.name { + & > .component-input { + height: 36px; + } + & > .component-button { + height: 36px; + line-height: 36px; + margin-top: 8px; + } +} +.input { + height: 36px; +} + +.button { + height: 36px; + line-height: 36px; + margin-top: 8px; +} + +.avatar { + width: 100px; + height: 100px; + cursor: pointer; + &:hover { + filter: blur(3px); + } +} + +.onlineMember{ + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 6px; + cursor: default; +} + +.userinfoBlock { + display: flex; + align-items: center; + cursor: pointer; +} + +.username { + margin-left: 10px; + color: #333; + font-size: 14px; + word-break: keep-all; + max-width: 120px; +} + +.clientInfoText { + color: #666; + font-size: 12px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin-left: 12px; + text-align: right; +} + +.deleteGroupConfirmDialog { + width: 250px; + :global { + .rc-dialog-body { + display: flex; + justify-content: flex-end; + } + } +} + +.deleteGroupConfirmButton { + width: 60px; + height: 36px; + margin-left: 12px; +} \ No newline at end of file diff --git a/packages/web/src/modules/Chat/GroupManagePanel.tsx b/packages/web/src/modules/Chat/GroupManagePanel.tsx new file mode 100644 index 0000000..6b6b429 --- /dev/null +++ b/packages/web/src/modules/Chat/GroupManagePanel.tsx @@ -0,0 +1,251 @@ +import React, { useState, useContext } from 'react'; +import { useSelector } from 'react-redux'; + +import readDiskFIle from '../../utils/readDiskFile'; +import Style from './GroupManagePanel.less'; +import useIsLogin from '../../hooks/useIsLogin'; +import { State, GroupMember } from '../../state/reducer'; +import Input from '../../components/Input'; +import Button from '../../components/Button'; +import Message from '../../components/Message'; +import Avatar from '../../components/Avatar'; +import Tooltip from '../../components/Tooltip'; +import Dialog from '../../components/Dialog'; +import { + changeGroupName, + changeGroupAvatar, + deleteGroup, + leaveGroup, +} from '../../service'; +import useAction from '../../hooks/useAction'; +import config from '@fiora/config/client'; +import { ShowUserOrGroupInfoContext } from '../../context'; + +interface GroupManagePanelProps { + visible: boolean; + onClose: () => void; + groupId: string; + avatar: string; + creator: string; + onlineMembers: GroupMember[]; +} + +function GroupManagePanel(props: GroupManagePanelProps) { + const { visible, onClose, groupId, avatar, creator, onlineMembers } = props; + + const action = useAction(); + const isLogin = useIsLogin(); + const selfId = useSelector((state: State) => state.user?._id); + const [deleteConfirmDialog, setDialogStatus] = useState(false); + const [groupName, setGroupName] = useState(''); + const context = useContext(ShowUserOrGroupInfoContext); + + async function handleChangeGroupName() { + const isSuccess = await changeGroupName(groupId, groupName); + if (isSuccess) { + Message.success('修改群名称成功'); + action.setLinkmanProperty(groupId, 'name', groupName); + } + } + + async function handleChangeGroupAvatar() { + const image = await readDiskFIle( + 'blob', + 'image/png,image/jpeg,image/gif', + ); + if (!image) { + return; + } + if (image.length > config.maxAvatarSize) { + // eslint-disable-next-line consistent-return + return Message.error('设置群头像失败, 请选择小于1.5MB的图片'); + } + + try { + const imageUrl = await uploadFile( + image.result as Blob, + `GroupAvatar/${selfId}_${Date.now()}.${image.ext}`, + ); + const isSuccess = await changeGroupAvatar(groupId, imageUrl); + if (isSuccess) { + action.setLinkmanProperty( + groupId, + 'avatar', + URL.createObjectURL(image.result), + ); + Message.success('修改群头像成功'); + } + } catch (err) { + console.error(err); + Message.error('上传群头像失败'); + } + } + + async function handleDeleteGroup() { + const isSuccess = await deleteGroup(groupId); + if (isSuccess) { + setDialogStatus(false); + onClose(); + action.removeLinkman(groupId); + Message.success('解散群组成功'); + } + } + + async function handleLeaveGroup() { + const isSuccess = await leaveGroup(groupId); + if (isSuccess) { + onClose(); + action.removeLinkman(groupId); + Message.success('退出群组成功'); + } + } + + function handleClickMask(e: React.MouseEvent) { + if (e.target === e.currentTarget) { + onClose(); + } + } + + function handleShowUserInfo(userInfo: any) { + if (userInfo._id === selfId) { + return; + } + // @ts-ignore + context.showUserInfo(userInfo); + onClose(); + } + + return ( +
    +
    + 群组信息 +
    + {isLogin && selfId === creator ? ( +
    + 修改群名称 + + +
    + ) : null} + {isLogin && selfId === creator ? ( +
    + 修改群头像 + 群头像预览 +
    + ) : null} + +
    + 功能 + {selfId === creator ? ( + + ) : ( + + )} +
    +
    + + 在线成员  {onlineMembers.length} + +
    + {onlineMembers.map((member) => ( +
    +
    + handleShowUserInfo(member.user) + } + role="button" + > + + + {member.user.username} + +
    + {member.environment} + } + > + + {member.browser} +    + {member.os === + 'Windows Server 2008 R2 / 7' + ? 'Windows 7' + : member.os} + + +
    + ))} +
    +
    + setDialogStatus(false)} + > + + + +
    +
    +
    + ); +} + +export default GroupManagePanel; diff --git a/packages/web/src/modules/Chat/HeaderBar.less b/packages/web/src/modules/Chat/HeaderBar.less new file mode 100644 index 0000000..77e043d --- /dev/null +++ b/packages/web/src/modules/Chat/HeaderBar.less @@ -0,0 +1,69 @@ +@import '../../styles/variable.less'; + +.headerBar { + height: 70px; + border-bottom: 1px solid rgba(208, 208, 208, 0.6); + display: flex; + align-items: center; + padding: 0px 18px; + justify-content: space-between; + position: relative; + + &[data-aero=true] { + border-bottom: 1px solid rgba(208, 208, 208, 0.3); + } + + @media @mobile { + height: 50px; + padding: 0 6px; + } + + :global { + .iconfont { + color: var(--primary-color-10); + &:hover { + color: var(--primary-color-8); + } + } + + .online, .offline { + display: inline-block; + width: 10px; + height: 10px; + border-radius: 50%; + margin-right: 4px; + transform: translateY(1px); + } + } +} + +.buttonContainer { + display: flex; + width: 80px; +} + +.rightButtonContainer { + justify-content: flex-end; +} + +.name { + font-size: 16px; + color: #333; + + @media @mobile { + font-size: 14px; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + flex: 1; + transform: translateY(2px); + } +} + +.status { + color: #999; + font-size: 12px; + transform: scale(0.6); +} diff --git a/packages/web/src/modules/Chat/HeaderBar.tsx b/packages/web/src/modules/Chat/HeaderBar.tsx new file mode 100644 index 0000000..12b7afb --- /dev/null +++ b/packages/web/src/modules/Chat/HeaderBar.tsx @@ -0,0 +1,66 @@ +import React from 'react'; +import { isMobile } from '@fiora/utils/ua'; +import IconButton from '../../components/IconButton'; +import useAction from '../../hooks/useAction'; +import useAero from '../../hooks/useAero'; +import useIsLogin from '../../hooks/useIsLogin'; +import Style from './HeaderBar.less'; + +type Props = { + /** 联系人名称, 没有联系人时会传空 */ + name: string; +}; + +function HeaderBar(props: Props) { + const { name } = props; + + const action = useAction(); + const isLogin = useIsLogin(); + const sidebarVisible = false; + const aero = useAero(); + + return ( +
    + {isMobile && ( +
    + + action.setStatus('sidebarVisible', !sidebarVisible) + } + /> + + action.setStatus( + 'functionBarAndLinkmanListVisible', + true, + ) + } + /> +
    + )} +

    + {{name || '未知联系人'}} +

    +
    + +
    +
    + ); +} + +export default HeaderBar; diff --git a/packages/web/src/modules/Chat/Message/CodeMessage.tsx b/packages/web/src/modules/Chat/Message/CodeMessage.tsx new file mode 100644 index 0000000..962c16a --- /dev/null +++ b/packages/web/src/modules/Chat/Message/CodeMessage.tsx @@ -0,0 +1,83 @@ +import React, { useState } from 'react'; +import loadable from '@loadable/component'; + +import Style from './CodeMessage.less'; + +const CodeDialogAsync = loadable(() => + // @ts-ignore + import(/* webpackChunkName: "code-dialog" */ './CodeDialog'), +); + +type LanguageMap = { + [language: string]: string; +}; + +const languagesMap: LanguageMap = { + javascript: 'javascript', + typescript: 'typescript', + java: 'java', + c_cpp: 'cpp', + python: 'python', + ruby: 'ruby', + php: 'php', + golang: 'go', + csharp: 'csharp', + html: 'html', + css: 'css', + sql: 'sql', + json: 'json', + text: 'text', +}; + +interface CodeMessageProps { + code: string; +} + +function CodeMessage(props: CodeMessageProps) { + const { code } = props; + + const [codeDialog, toggleCodeDialog] = useState(false); + + const parseResult = /@language=([_a-z]+)@/.exec(code); + if (!parseResult) { + return
    不支持的编程语言
    ; + } + + const language = languagesMap[parseResult[1]] || 'text'; + const rawCode = code.replace(/@language=[_a-z]+@/, ''); + let size = `${rawCode.length}B`; + if (rawCode.length > 1024) { + size = `${Math.ceil((rawCode.length / 1024) * 100) / 100}KB`; + } + + return ( + <> +
    toggleCodeDialog(true)} + role="button" + > +
    +
    + +
    +
    + {language} + {size} +
    +
    + 查看 +
    + {codeDialog && ( + toggleCodeDialog(false)} + language={language} + code={rawCode} + /> + )} + + ); +} + +export default CodeMessage; diff --git a/packages/web/src/modules/Chat/Message/FileMessage.tsx b/packages/web/src/modules/Chat/Message/FileMessage.tsx new file mode 100644 index 0000000..5785f08 --- /dev/null +++ b/packages/web/src/modules/Chat/Message/FileMessage.tsx @@ -0,0 +1,60 @@ +import FileSize from 'filesize'; +import React from 'react'; +import { css } from 'linaria'; + +const styles = { + container: css` + display: block; + min-width: 160px; + max-width: 240px; + padding: 0 4px; + text-align: center; + cursor: pointer; + text-decoration: none; + `, + fileInfo: css` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border-bottom: 1px solid green; + padding-bottom: 8px; + `, + fileInfoText: css` + word-break: break-all; + `, + button: css` + display: inline-block; + font-size: 12px; + text-align: center; + margin-top: 8px; + margin-bottom: 4px; + `, +}; + +type Props = { + fileUrl: string; + filename: string; + fileSize: number; +}; + +function FileMessage({ fileUrl, filename, fileSize }: Props) { + return ( +
    +
    + {filename} + + {FileSize(fileSize)} + +
    + 下载 +
    + ); +} + +export default React.memo(FileMessage); diff --git a/packages/web/src/modules/Chat/Message/ImageMessage.tsx b/packages/web/src/modules/Chat/Message/ImageMessage.tsx new file mode 100644 index 0000000..f23dc88 --- /dev/null +++ b/packages/web/src/modules/Chat/Message/ImageMessage.tsx @@ -0,0 +1,104 @@ +import loadable from '@loadable/component'; +import React, { MouseEvent, useCallback, useRef, useState } from 'react'; +import { isMobile } from '@fiora/utils/ua'; +import { CircleProgress } from '../../../components/Progress'; +import Style from './Message.less'; + +const ReactViewerAsync = loadable( + async () => + // @ts-ignore + import(/* webpackChunkName: "react-viewer" */ 'react-viewer'), +); + +interface ImageMessageProps { + src: string; + loading: boolean; + percent: number; +} + +function ImageMessage(props: ImageMessageProps) { + const { src, loading, percent } = props; + + const [viewer, toggleViewer] = useState(false); + const closeViewer = useCallback(() => toggleViewer(false), []); + const $container = useRef(null); + + let imageSrc = src; + const containerWidth = isMobile ? window.innerWidth - 25 - 50 : 450; + const maxWidth = containerWidth - 100 > 500 ? 500 : containerWidth - 100; + const maxHeight = 400; + let width = 200; + const parseResult = /width=([0-9]+)&height=([0-9]+)/.exec(imageSrc); + if (parseResult) { + const natureWidth = +parseResult[1]; + const naturehHeight = +parseResult[2]; + let scale = 1; + if (natureWidth * scale > maxWidth) { + scale = maxWidth / natureWidth; + } + if (naturehHeight * scale > maxHeight) { + scale = maxHeight / naturehHeight; + } + width = natureWidth * scale; + imageSrc = src; + } + + let className = Style.imageMessage; + if (loading) { + className += ` ${Style.iamgeLoading}`; + } + if (/huaji=true/.test(imageSrc)) { + className += ` ${Style.huaji}`; + } + + function handleImageViewerMaskClick(e: MouseEvent) { + // @ts-ignore + if (e.target?.tagName !== 'IMG') { + closeViewer(); + } + } + + return ( + <> +
    + 消息图片 toggleViewer(true)} + /> + +
    + {Math.ceil(percent)}% +
    + {viewer && ( + + )} +
    + + ); +} + +export default React.memo(ImageMessage); diff --git a/packages/web/src/modules/Chat/Message/Message.less b/packages/web/src/modules/Chat/Message/Message.less new file mode 100644 index 0000000..b6f79a5 --- /dev/null +++ b/packages/web/src/modules/Chat/Message/Message.less @@ -0,0 +1,231 @@ +.message { + display: flex; + margin-right: 54px; + margin-bottom: 10px; + position: relative; +} + +.avatar { + min-width: 44px; +} + +.right { + margin-left: 12px; + display: flex; + flex-direction: column; + align-items: flex-start; + overflow: hidden; +} + +.nicknameTimeBlock { + height: 20px; + display: flex; + align-items: flex-end; +} + +.tag { + height: 16px; + line-height: 16px; + border-radius: 3px; + padding: 0 5px; + display: inline-block; + font-size: 12px; + background-color: var(--primary-color-9); + color: var(--primary-text-color-10); + transform: scale(0.9); + margin-left: -1px; + margin-right: 2px; + user-select: text; +} + +.nickname { + color: #333; + font-size: 13px; + user-select: text; + margin-right: 4px; +} + +.time { + color: #666; + font-size: 12px; +} + +.contentButtonBlock { + display: flex; + position: relative; + padding-right: 30px; + max-width: -webkit-fill-available; +} + +.content { + display: inline-block; + color: #555; + font-size: 14px; + background-color: rgba(255, 255, 255, 0.8); + padding: 6px 8px; + border-radius: 8px; + border-top-left-radius: 0px; + min-height: 28px; + margin-top: 3px; + max-width: -webkit-fill-available; + line-height: 22px; +} + +.arrow { + width: 0; + height: 0; + border-style: solid; + border-width: 0px 7px 15px 0; + border-color: transparent rgba(255, 255, 255, 0.8) transparent transparent; + position: absolute; + top: 23px; + left: 50px; +} + +.buttonList { + display: flex; + align-self: flex-end; + margin-left: 5px; + margin-bottom: 2px; + position: absolute; + right: 5px; +} + +.button { + background-color: rgba(255, 255, 255, 0.8); + + &:hover { + background-color: #f0f0f0; + color: rgba(165, 181, 192, 1); + } + + @borderRadius: 3px; + &:first-child { + border-top-left-radius: @borderRadius; + border-bottom-left-radius: @borderRadius; + } + &:last-child { + border-top-right-radius: @borderRadius; + border-bottom-right-radius: @borderRadius; + } +} + +.textMessage { + user-select: text; + word-break: break-word; + overflow: hidden; + line-height: 22px; + padding-bottom: 1px; +} + +.imageMessage { + position: relative; +} + +.imageProgress { + display: none; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80px; + height: 80px; +} + +.imageProgressNumber { + color: var(--primary-text-color-10); + text-align: center; + line-height: 80px; + font-size: 18px; +} + +.image { + max-width: 500px; +} + +.iamgeLoading { + .image { + filter: blur(5px); + } + .imageProgress { + display: block; + } + .imageProgressNumber { + display: block; + } +} + +.huaji { + .image { + width: auto; + max-height: 150px; + } +} + +.selecteAble { + user-select: text; +} + +.baidu { + width: 30px; + height: 30px; + background-repeat: no-repeat; + margin: 0 2px; + background-size: 30px auto; + background-image: url(~@fiora/assets/images/baidu.png); +} + +.self { + color: rgba(255, 255, 255, 0.9); + flex-direction: row-reverse; + margin-right: 0px; + margin-left: 54px; + + .right { + margin-left: 0px; + margin-right: 12px; + display: flex; + flex-direction: column; + align-items: flex-end; + } + .nicknameTimeBlock { + display: flex; + flex-direction: row-reverse; + } + .tag { + margin-left: 2px; + margin-right: -1px; + } + .nickname { + margin-right: 0; + margin-left: 4px; + } + .contentButtonBlock { + flex-direction: row-reverse; + padding-left: 30px; + padding-right: 0; + } + .content { + color: rgba(255, 255, 255, 0.9); + background-color: var(--primary-color-10); + border-top-left-radius: 8px; + border-top-right-radius: 0px; + padding: 8px 12px; + * { + color: rgba(255, 255, 255, 0.9); + } + } + .buttonList { + margin-right: 5px; + left: 0; + right: inherit; + } + .arrow { + border-width: 0 0 15px 7px; + border-color: transparent transparent transparent + var(--primary-color-10); + left: initial; + right: 50px; + top: 23px; + } +} diff --git a/packages/web/src/modules/Chat/Message/Message.tsx b/packages/web/src/modules/Chat/Message/Message.tsx new file mode 100644 index 0000000..0138420 --- /dev/null +++ b/packages/web/src/modules/Chat/Message/Message.tsx @@ -0,0 +1,191 @@ +import Time from '@fiora/utils/time'; +import dayjs from 'dayjs'; +import pureRender from 'pure-render-decorator'; +import React, { Component, createRef } from 'react'; +import Avatar from '../../../components/Avatar'; +import IconButton from '../../../components/IconButton'; +import MessageControl from '../../../components/Message'; +import Tooltip from '../../../components/Tooltip'; +import store from '../../../state/store'; +import { Message } from '../../../state/reducer'; +import { ShowUserOrGroupInfoContext } from '../../../context'; +import FileMessage from './FileMessage'; +import ImageMessage from './ImageMessage'; +import Style from './Message.less'; +import TextMessage from './TextMessage'; + +const { dispatch } = store; + +interface MessageProps { + message: Message; +} + +interface MessageState { + showButtonList: boolean; +} + +/** + * Message组件用hooks实现有些问题 + * 功能上要求Message组件渲染后触发滚动, 实测中发现在useEffect中触发滚动会比在componentDidMount中晚 + * 具体表现就是会先看到历史消息, 然后一闪而过再滚动到合适的位置 + */ +@pureRender +class MessageC extends Component { + constructor(props: MessageProps) { + super(props); + this.state = { + showButtonList: false, + }; + } + + handleMouseEnter = () => { + if (this.props.message.isSentBySelf) { + this.setState({ showButtonList: true }); + } + }; + + handleMouseLeave = () => { + if (this.props.message.isSentBySelf) { + this.setState({ showButtonList: false }); + } + }; + + handleDeleteMessage = async () => { + const m = this.props.message; + if ( + dayjs.unix(m.createTimestamp).add(2, 'minute').millisecond() < + Date.now() + ) { + MessageControl.warning('仅支持撤回2分钟以内的消息'); + return; + } + // TODO: 撤回 + }; + + formatTime() { + const messageTime = new Date(this.props.message.createTimestamp * 1000); + const nowTime = new Date(); + if (Time.isToday(nowTime, messageTime)) { + return Time.getHourMinute(messageTime); + } + if (Time.isYesterday(nowTime, messageTime)) { + return `昨天 ${Time.getHourMinute(messageTime)}`; + } + return `${Time.getMonthDate(messageTime)} ${Time.getHourMinute( + messageTime, + )}`; + } + + renderContent() { + const { + type, + content, + fileUrl, + fileSize, + displayFilename, + } = this.props.message; + switch (type) { + case 'text': { + return ; + } + case 'emotion': + case 'img': { + return ( + + ); + } + case 'video': { + return ( + + ); + } + case 'file': { + return ( + + ); + } + default: + return ( +
    + {content || '不支持的消息类型,请在手机上查看'} +
    + ); + } + } + + render() { + const { showButtonList } = this.state; + const m = this.props.message; + const state = store.getState(); + const isSelf = m.isSentBySelf; + const from = isSelf ? state.user : state.allContacts.get(m.fromID); + const avatar = m.speakingGroupMemberID + ? state.allContacts.get(m.speakingGroupMemberID)?.avatar + : from?.avatar; + return ( +
    + + {(context) => ( + + )} + +
    +
    + + {m.speakingGroupMemberName || from?.displayName} + + {this.formatTime()} +
    +
    +
    + {this.renderContent()} +
    + {showButtonList && ( +
    + 撤回消息} + > +
    + +
    +
    +
    + )} +
    +
    +
    +
    + ); + } +} + +export default MessageC; diff --git a/packages/web/src/modules/Chat/Message/SystemMessage.tsx b/packages/web/src/modules/Chat/Message/SystemMessage.tsx new file mode 100644 index 0000000..1f8a3e8 --- /dev/null +++ b/packages/web/src/modules/Chat/Message/SystemMessage.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { getPerRandomColor } from '@fiora/utils/getRandomColor'; + +interface SystemMessageProps { + message: string; + username: string; +} + +function SystemMessage(props: SystemMessageProps) { + const { message, username } = props; + return ( +
    + + {username} + +   + {message} +
    + ); +} + +export default SystemMessage; diff --git a/packages/web/src/modules/Chat/Message/TextMessage.tsx b/packages/web/src/modules/Chat/Message/TextMessage.tsx new file mode 100644 index 0000000..b7abb10 --- /dev/null +++ b/packages/web/src/modules/Chat/Message/TextMessage.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import expressions from '@fiora/utils/expressions'; +import { TRANSPARENT_IMAGE } from '@fiora/utils/const'; +import Style from './Message.less'; + +interface TextMessageProps { + content: string; +} + +function TextMessage(props: TextMessageProps) { + // eslint-disable-next-line react/destructuring-assignment + const content = props.content + .replace( + /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}(\.[a-z]{2,6})?\b(:[0-9]{2,5})?([-a-zA-Z0-9@:%_+.~#?&//=]*)/g, + (r) => + `${r}`, + ) + .replace(/#\(([\u4e00-\u9fa5a-z]+)\)/g, (r, e) => { + const index = expressions.default.indexOf(e); + if (index !== -1) { + return `${r}`; + } + return r; + }); + return ( +
    + ); +} + +export default TextMessage; diff --git a/packages/web/src/modules/Chat/MessageList.less b/packages/web/src/modules/Chat/MessageList.less new file mode 100644 index 0000000..d680a52 --- /dev/null +++ b/packages/web/src/modules/Chat/MessageList.less @@ -0,0 +1,15 @@ +@import '../../styles/variable.less'; + +.messageList { + width: 100%; + height: 100%; + padding: 8px 10px 0 10px; + overflow-y: auto; + overflow-x: hidden; + -webkit-overflow-scrolling: touch; + position: relative; + + @media @mobile { + padding: 8px 6px 0 6px; + } +} \ No newline at end of file diff --git a/packages/web/src/modules/Chat/MessageList.tsx b/packages/web/src/modules/Chat/MessageList.tsx new file mode 100644 index 0000000..d7ae8fd --- /dev/null +++ b/packages/web/src/modules/Chat/MessageList.tsx @@ -0,0 +1,78 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { css } from 'linaria'; +import { useSelector } from 'react-redux'; +import { Contact, State } from '../../state/reducer'; +import MessageComponent from './Message/Message'; +import Style from './MessageList.less'; + +const styles = { + container: css` + flex: 1; + position: relative; + overflow: hidden; + `, + unread: css` + position: absolute; + bottom: 6px; + left: 50%; + transform: translateX(-50%); + background-color: var(--primary-color-8); + font-size: 14px; + color: var(--primary-text-color-9); + padding: 3px 8px; + border-radius: 3px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + `, +}; + +function MessageList() { + const [prevFocus, setPrevFocus] = useState(''); + const [prevMessages, setPrevMessages] = useState([]); + const focus = useSelector((state: State) => state.focusContactID); + const activeContact = useSelector( + (state: State) => state.allContacts.get(focus) as Contact, + ); + const $list = useRef(null); + const _messages = useSelector((state: State) => state.messages[focus]); + const messages = _messages || []; + + useEffect(() => { + const l = $list.current as HTMLDivElement; + if (prevFocus === focus) { + // 当前联系人新消息 + if ( + (messages.length && messages.at(-1)?.isSentBySelf) || + l.scrollHeight - l.clientHeight - l.scrollTop < l.clientHeight + ) { + $list.current?.scrollTo({ top: $list.current.scrollHeight }); + // FIXME: redux不应该突变属性,因为检测不到其变化 + activeContact.lastReadMessage = messages.at(-1); + } + } else { + // 当前聊天对象改变 + if (activeContact?.lastReadMessage === messages.at(-1)) { + $list.current?.scrollTo({ top: $list.current.scrollHeight }); + } + } + setPrevFocus(focus); + setPrevMessages(messages as any); + }, [focus, _messages]); + + return ( +
    +
    + {messages.map((message) => ( + + ))} +
    +
    + ); +} + +export default MessageList; diff --git a/packages/web/src/modules/FunctionBarAndContactList/Contact.less b/packages/web/src/modules/FunctionBarAndContactList/Contact.less new file mode 100644 index 0000000..839feb2 --- /dev/null +++ b/packages/web/src/modules/FunctionBarAndContactList/Contact.less @@ -0,0 +1,57 @@ +@import '../../styles/variable.less'; + +.contact { + height: 60px; + display: flex; + align-items: center; + padding: 10px 16px; + cursor: default; + transition: background-color 0.2s; +} + +.focus { + background-color: var(--primary-color-4); + + &[data-aero='true'] { + background-color: rgba(255, 255, 255, 0.15); + } + + @media @mobile { + background-color: var(--primary-color-9); + } +} + +.container { + flex: 1; + margin-left: 12px; +} + +.rowContainer { + display: flex; + justify-content: space-between; +} + +.nameTimeBlock { + margin-top: 4px; +} + +.name { + color: var(--primary-text-color-10); + font-size: 14px; + margin: 0; +} + +.previewUnreadBlock { + margin-top: 6px; +} + +.preview { + color: var(--primary-text-color-7); + font-size: 12px; + width: 188px; + height: 20px; + line-height: 20px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} diff --git a/packages/web/src/modules/FunctionBarAndContactList/Contact.tsx b/packages/web/src/modules/FunctionBarAndContactList/Contact.tsx new file mode 100644 index 0000000..5700ba3 --- /dev/null +++ b/packages/web/src/modules/FunctionBarAndContactList/Contact.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import Avatar from '../../components/Avatar'; +import useAction from '../../hooks/useAction'; +import useAero from '../../hooks/useAero'; +import { Contact } from '../../state/reducer'; +import Style from './Contact.less'; + +interface ContactProps { + contact: Contact; +} + +function Contact(props: ContactProps) { + const C = props.contact; + const aero = useAero(); + const action = useAction(); + + function handleClick() { + action.setFocus(C.id); + } + + return ( +
    + +
    +
    + {C.displayName} +
    +
    + +
    +
    +
    + ); +} + +export default Contact; diff --git a/packages/web/src/modules/FunctionBarAndContactList/ContactList.less b/packages/web/src/modules/FunctionBarAndContactList/ContactList.less new file mode 100644 index 0000000..9643985 --- /dev/null +++ b/packages/web/src/modules/FunctionBarAndContactList/ContactList.less @@ -0,0 +1,5 @@ +.linkmanList { + flex: 1; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} \ No newline at end of file diff --git a/packages/web/src/modules/FunctionBarAndContactList/ContactList.tsx b/packages/web/src/modules/FunctionBarAndContactList/ContactList.tsx new file mode 100644 index 0000000..ee775e2 --- /dev/null +++ b/packages/web/src/modules/FunctionBarAndContactList/ContactList.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { useSelector } from 'react-redux'; +import { State } from '../../state/reducer'; +import ContactComponent from './Contact'; +import Style from './ContactList.less'; + +function ContactList() { + const contacts = useSelector((state: State) => state.contacts); + + return ( +
    + {contacts.map((contact) => ( + + ))} +
    + ); +} + +export default ContactList; diff --git a/packages/web/src/modules/FunctionBarAndContactList/FunctionBarAndContactList.less b/packages/web/src/modules/FunctionBarAndContactList/FunctionBarAndContactList.less new file mode 100644 index 0000000..738f186 --- /dev/null +++ b/packages/web/src/modules/FunctionBarAndContactList/FunctionBarAndContactList.less @@ -0,0 +1,37 @@ +@import "../../styles/variable.less"; + +.contactList { + width: 300px; + height: 100%; + position: relative; + display: flex; + background-color: unset; + + @media @mobile { + position: absolute; + left: 0; + z-index: 1; + width: 100%; + background-color: rgba(37, 37, 37, 0.5); + + .container { + background-color: var(--primary-color-7); + } + } +} + +.container { + background-color: var(--primary-color-5); + flex: 1; + max-width: 300px; + display: flex; + flex-direction: column; + + &[data-aero=true] { + background-color: var(--primary-color-0); + } + + @media @mobile { + background-color: var(--primary-color-7); + } +} diff --git a/packages/web/src/modules/FunctionBarAndContactList/FunctionBarAndContactList.tsx b/packages/web/src/modules/FunctionBarAndContactList/FunctionBarAndContactList.tsx new file mode 100644 index 0000000..34a5eba --- /dev/null +++ b/packages/web/src/modules/FunctionBarAndContactList/FunctionBarAndContactList.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { useSelector } from 'react-redux'; +import useAction from '../../hooks/useAction'; +import useAero from '../../hooks/useAero'; +import useIsLogin from '../../hooks/useIsLogin'; +import { State } from '../../state/reducer'; +import ContactList from './ContactList'; +import SearchBar from './SearchBar'; +import Style from './FunctionBarAndContactList.less'; + +function FunctionBarAndContactList() { + const isLogin = useIsLogin(); + const action = useAction(); + const aero = useAero(); + + return ( +
    +
    + {isLogin && } + +
    +
    + ); +} + +export default FunctionBarAndContactList; diff --git a/packages/web/src/modules/FunctionBarAndContactList/SearchBar.less b/packages/web/src/modules/FunctionBarAndContactList/SearchBar.less new file mode 100644 index 0000000..6961d94 --- /dev/null +++ b/packages/web/src/modules/FunctionBarAndContactList/SearchBar.less @@ -0,0 +1,164 @@ +.functionBar { + display: flex; + height: 70px; + align-items: center; + padding: 0 12px; + position: relative; +} + +.form { + flex: 1; + display: flex; +} + +.input { + flex: 1; + height: 36px; + border-radius: 18px; + border: none; + font-size: 14px; + color: #333; + + :global { + input { + padding-left: 35px; + padding-right: 15px; + padding-top: 2px; + border: none; + border-radius: 18px; + background-color: rgba(255, 255, 255, 0.5); + } + } +} + +.inputFocus { + :global { + input { + background-color: rgba(255, 255, 255, 0.9); + } + } +} + +.searchIcon { + font-size: 22px; + position: absolute; + left: 22px; + top: 26px; + color: #666; +} + +.createGroupButton { + margin-left: 5px; + + &:hover { + :global { + .iconfont { + color: rgba(255, 255, 255, 0.9); + } + } + } + + :global { + .iconfont { + color: rgba(255, 255, 255, 0.5); + } + } +} + +.searchResult { + position: absolute; + top: 60px; + left: 8px; + width: 276px; + background-color: rgba(255, 255, 255, 0.9); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); + border-top-left-radius: 6px; + border-top-right-radius: 6px; + z-index: 1300; + + :global { + .rc-tabs-tab { + margin-right: 20px; + } + .rc-tabs-nav { + margin-left: 16px !important; + } + } +} + +.userList { + & > div { + display: flex; + align-items: center; + cursor: pointer; + height: 56px; + padding-left: 8px; + & > p { + color: #333; + margin-left: 10px; + } + &:hover { + background-color: #eee; + } + } +} + +.groupList { + & > div { + display: flex; + padding-left: 8px; + cursor: pointer; + height: 56px; + align-items: center; + & > div { + margin-left: 10px; + & > p { + color: #333; + &:last-child { + color: #666; + font-size: 14px; + } + } + } + &:hover { + background-color: #eee; + } + } +} + +.allList { + padding: 8px 12px; + max-height: 440px; + + & > div { + & > p { + font-size: 14px; + color: #333; + font-weight: bold; + line-height: 31px; + } + } +} + +.none { + font-size: 14px; + line-height: 80px; + text-align: center; + color: #333; +} + +.more { + color: var(--primary-color-10); + font-size: 12px; + text-align: center; + & > span { + cursor: pointer; + } +} + +.only { + padding: 6px 12px; + max-height: 440px; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} \ No newline at end of file diff --git a/packages/web/src/modules/FunctionBarAndContactList/SearchBar.tsx b/packages/web/src/modules/FunctionBarAndContactList/SearchBar.tsx new file mode 100644 index 0000000..b32d037 --- /dev/null +++ b/packages/web/src/modules/FunctionBarAndContactList/SearchBar.tsx @@ -0,0 +1,69 @@ +import React, { useContext, useEffect, useState } from 'react'; +import Avatar from '../../components/Avatar'; +import IconButton from '../../components/IconButton'; +import Input from '../../components/Input'; +import Message from '../../components/Message'; +import { + ScrollableInkTabBar, + TabContent, + TabPane, + Tabs as div, +} from '../../components/Tabs'; +import { ShowUserOrGroupInfoContext } from '../../context'; +import Style from './SearchBar.less'; + +type SearchResult = { + users: any[]; + groups: any[]; +}; + +function FunctionBar() { + const [keywords, setKeywords] = useState(''); + const [searchResultVisible, toggleSearchResultVisible] = useState(false); + const [searchResult, setSearchResult] = useState({ + users: [], + groups: [], + }); + + const context = useContext(ShowUserOrGroupInfoContext); + const placeholder = '搜索群组/用户'; + + function resetSearch() { + setSearchResult({ users: [], groups: [] }); + setKeywords(''); + } + + function handleInputChange(value: string) { + setKeywords(value); + if (!value) { + resetSearch(); + } + } + + function handleInputEnter() { + } + + return ( +
    +
    e.preventDefault()} + > + +
    + +
    + ); +} + +export default FunctionBar; diff --git a/packages/web/src/modules/Login/Login.less b/packages/web/src/modules/Login/Login.less new file mode 100644 index 0000000..5f41ae0 --- /dev/null +++ b/packages/web/src/modules/Login/Login.less @@ -0,0 +1,20 @@ +.wrapper { + height: 80px; + display: flex; + flex-direction: row; + align-items: center; + padding: 0 30px; +} + +.title { + font-size: 16px; + font-weight: normal; + line-height: 27px; + color: #666; +} + +.input { + height: 40px; + line-height: 40px; + flex-grow: 1; +} diff --git a/packages/web/src/modules/Login/Login.tsx b/packages/web/src/modules/Login/Login.tsx new file mode 100644 index 0000000..29213b2 --- /dev/null +++ b/packages/web/src/modules/Login/Login.tsx @@ -0,0 +1,80 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import Dialog from '../../components/Dialog'; +import Input from '../../components/Input'; +import Message from '../../components/Message'; +import useAction from '../../hooks/useAction'; +import { ActionTypes } from '../../state/action'; +import { State } from '../../state/reducer'; +import { getContacts, login } from '../../service'; +import { initSocket } from '../../socket'; +import Style from './Login.less'; + +/** 登录框 */ +function Login() { + const inputRef = useRef(); + const pendingRef = useRef(false); + const action = useAction(); + const dispatch = useDispatch(); + const [passphrase, setPassphrase] = useState(''); + const loginRegisterDialogVisible = useSelector( + (state: State) => state.status.loginRegisterDialogVisible, + ); + + async function handleLogin() { + if (pendingRef.current) { + Message.info('正在连接中...'); + return; + } + pendingRef.current = true; + initSocket(passphrase) + .then(async () => { + const user = await login(); + if (!user) { + throw Error('登录失败'); + } + dispatch({ type: ActionTypes.UpdateUserInfo, payload: user }); + }) + .then(async () => { + getContacts().then((data) => { + dispatch({ + type: ActionTypes.UpdateContacts, + payload: data, + }); + }); + return void 0; + }) + .then(() => { + action.toggleLoginRegisterDialog(false); + }) + .catch((e) => { + Message.error(e.message); + }) + .finally(() => (pendingRef.current = false)); + } + + return ( + action.toggleLoginRegisterDialog(false)} + > +
    +

    口令:

    + +
    +
    + ); +} + +export default Login; diff --git a/packages/web/src/modules/Sidebar/Common.less b/packages/web/src/modules/Sidebar/Common.less new file mode 100644 index 0000000..6f0bc22 --- /dev/null +++ b/packages/web/src/modules/Sidebar/Common.less @@ -0,0 +1,23 @@ +.container { + +} + +.block { + margin-bottom: 14px; + + a, p, li { + line-height: 22px; + font-size: 14px; + } + ul { + margin: 6px 0; + padding-left: 26px; + } +} + +.title { + line-height: 33px; + font-size: 14px; + color: #333; + font-weight: bold; +} \ No newline at end of file diff --git a/packages/web/src/modules/Sidebar/OnlineStatus.less b/packages/web/src/modules/Sidebar/OnlineStatus.less new file mode 100644 index 0000000..ebdadb9 --- /dev/null +++ b/packages/web/src/modules/Sidebar/OnlineStatus.less @@ -0,0 +1,14 @@ +.onlineStatus { + width: 16px; + height: 16px; + background-color: var(--primary-color-8); + border-radius: 50%; +} + +.status { + width: 12px; + height: 12px; + margin-top: 2px; + margin-left: 2px; + border-radius: 50%; +} \ No newline at end of file diff --git a/packages/web/src/modules/Sidebar/OnlineStatus.tsx b/packages/web/src/modules/Sidebar/OnlineStatus.tsx new file mode 100644 index 0000000..c74b40c --- /dev/null +++ b/packages/web/src/modules/Sidebar/OnlineStatus.tsx @@ -0,0 +1,21 @@ +import React from 'react'; + +import Style from './OnlineStatus.less'; + +interface OnlineStatusProps { + /** 状态, online / offline */ + status: string; + className?: string; +} + +function OnlineStatus(props: OnlineStatusProps) { + const { status, className } = props; + + return ( +
    +
    +
    + ); +} + +export default OnlineStatus; diff --git a/packages/web/src/modules/Sidebar/Setting.less b/packages/web/src/modules/Sidebar/Setting.less new file mode 100644 index 0000000..f1cec11 --- /dev/null +++ b/packages/web/src/modules/Sidebar/Setting.less @@ -0,0 +1,137 @@ +.setting { + :global { + .rc-dialog-body { + overflow-y: hidden; + } + .rc-tabs-top { + border-bottom: none; + } + } +} + +.switchContainer { + margin-bottom: 4px; + display: flex; + flex-wrap: wrap; +} + +.button { + margin-right: 10px; + width: 130px; + height: 34px; +} + +.switch { + display: flex; + align-items: center; + margin-right: 10px; + margin-bottom: 8px; +} + +.switchText { + color: #444; + margin-right: 8px; + font-size: 14px; +} + +.radioGroup { + display: flex !important; + flex-wrap: wrap; + justify-content: flex-start; + + & > div { + width: 120px !important; + flex: initial !important; + padding: 12px !important; + margin-bottom: 6px !important; + & > div { + display: flex; + align-items: center; + } + & > div > div { + padding: 0 !important; + font-size: 14px; + } + & > div > div > div { + transform: translate(-2px, -2px); + } + } +} + +.backgroundTip { + font-size: 12px; + color: #777; +} + +.backgroundImageContainer { + text-align: center; + position: relative; +} + +.backgroundImage { + width: 98%; + height: auto; + cursor: pointer; + + &:hover { + filter: blur(3px); + } + + &.blur { + filter: blur(3px); + } +} + +.backgroundImageLoading { + position: absolute; + top: 70px; + left: 175px; + pointer-events: none; +} + +.colorInfo { + display: flex; + align-items: center; + + & > div { + width: 30px; + height: 30px; + border-radius: 4px; + margin-left: 6px; + } + & > span { + margin-left: 12px; + color: #666; + } +} + +.colorPicker { + margin-top: 20px; +} + +.TagModeRadioGroup { + & > div { + width: 130px !important; + flex: initial !important; + padding: 12px !important; + margin-bottom: 6px !important; + & > div { + display: flex; + align-items: center; + } + & > div > div { + padding: 0 !important; + font-size: 14px; + } + & > div > div > div { + transform: translate(-2px, -2px); + } + } +} + +.scrollContainer { + margin-top: 20px; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + max-height: 52vh; +} \ No newline at end of file diff --git a/packages/web/src/modules/Sidebar/Setting.tsx b/packages/web/src/modules/Sidebar/Setting.tsx new file mode 100644 index 0000000..6787da2 --- /dev/null +++ b/packages/web/src/modules/Sidebar/Setting.tsx @@ -0,0 +1,414 @@ +import ReactLoading from 'react-loading'; +import Switch from 'react-switch'; +import config from '@fiora/config/client'; +import React, { useState } from 'react'; +import { RadioButton, RadioGroup } from 'react-radio-buttons'; +import { TwitterPicker } from 'react-color'; +import { useSelector } from 'react-redux'; +import Dialog from '../../components/Dialog'; +import Message from '../../components/Message'; +import playSound from '../../utils/playSound'; +import readDiskFile from '../../utils/readDiskFile'; +import setCssVariable from '../../utils/setCssVariable'; +import themes from '../../themes'; +import uploadFile from '../../utils/uploadFile'; +import useAction from '../../hooks/useAction'; +import { LocalStorageKey } from '../../localStorage'; +import { + ScrollableInkTabBar, + TabContent, + TabPane, + Tabs, +} from '../../components/Tabs'; +import { State } from '../../state/reducer'; +import Common from './Common.less'; +import Style from './Setting.less'; + +interface SettingProps { + visible: boolean; + onClose: () => void; +} + +type Color = { + rgb: { + r: number; + g: number; + b: number; + }; +}; + +function Setting(props: SettingProps) { + const { visible, onClose } = props; + + const action = useAction(); + const soundSwitch = useSelector((state: State) => state.status.soundSwitch); + const notificationSwitch = useSelector( + (state: State) => state.status.notificationSwitch, + ); + const voiceSwitch = useSelector((state: State) => state.status.voiceSwitch); + const selfVoiceSwitch = useSelector( + (state: State) => state.status.selfVoiceSwitch, + ); + const sound = useSelector((state: State) => state.status.sound); + const theme = useSelector((state: State) => state.status.theme); + const primaryColor = useSelector( + (state: State) => state.status.primaryColor, + ); + const primaryTextColor = useSelector( + (state: State) => state.status.primaryTextColor, + ); + const backgroundImage = useSelector( + (state: State) => state.status.backgroundImage, + ); + const aero = useSelector((state: State) => state.status.aero); + const userId = useSelector((state: State) => state.user?._id); + const tagColorMode = useSelector( + (state: State) => state.status.tagColorMode, + ); + const enableSearchExpression = useSelector( + (state: State) => state.status.enableSearchExpression, + ); + + const [backgroundLoading, toggleBackgroundLoading] = useState(false); + + function setTheme(themeName: string) { + action.setStatus('theme', themeName); + // @ts-ignore + const themeConfig = themes[themeName]; + if (themeConfig) { + action.setStatus('primaryColor', themeConfig.primaryColor); + action.setStatus('primaryTextColor', themeConfig.primaryTextColor); + action.setStatus('backgroundImage', themeConfig.backgroundImage); + action.setStatus('aero', themeConfig.aero); + setCssVariable( + themeConfig.primaryColor, + themeConfig.primaryTextColor, + ); + window.localStorage.removeItem(LocalStorageKey.PrimaryColor); + window.localStorage.removeItem(LocalStorageKey.PrimaryTextColor); + window.localStorage.removeItem(LocalStorageKey.BackgroundImage); + window.localStorage.removeItem(LocalStorageKey.Aero); + Message.success('已修改主题'); + } else { + window.localStorage.setItem( + LocalStorageKey.PrimaryColor, + primaryColor, + ); + window.localStorage.setItem( + LocalStorageKey.PrimaryTextColor, + primaryTextColor, + ); + window.localStorage.setItem( + LocalStorageKey.BackgroundImage, + backgroundImage, + ); + window.localStorage.setItem(LocalStorageKey.Aero, aero.toString()); + } + } + + function handleSelectSound(newSound: string) { + playSound(newSound); + action.setStatus('sound', newSound); + } + + async function selectBackgroundImage() { + toggleBackgroundLoading(true); + try { + const image = await readDiskFile( + 'blob', + 'image/png,image/jpeg,image/gif', + ); + if (!image) { + return; + } + if (image.length > config.maxBackgroundImageSize) { + // eslint-disable-next-line consistent-return + return Message.error('设置背景图失败, 请选择小于3MB的图片'); + } + const imageUrl = await uploadFile( + image.result as Blob, + `BackgroundImage/${userId}_${Date.now()}.${image.ext}`, + ); + action.setStatus('backgroundImage', imageUrl); + } finally { + toggleBackgroundLoading(false); + } + } + + function handlePrimaryColorChange(color: Color) { + const newPrimaryColor = `${color.rgb.r}, ${color.rgb.g}, ${color.rgb.b}`; + action.setStatus('primaryColor', newPrimaryColor); + setCssVariable(newPrimaryColor, primaryTextColor); + } + + function handlePrimaryTextColorChange(color: Color) { + const mewPrimaryTextColor = `${color.rgb.r}, ${color.rgb.g}, ${color.rgb.b}`; + action.setStatus('primaryTextColor', mewPrimaryTextColor); + setCssVariable(primaryColor, mewPrimaryTextColor); + } + + return ( + + } + renderTabContent={() => } + > + +
    +
    + 开关 +
    +
    + 声音提醒 + + action.setStatus( + 'soundSwitch', + value, + ) + } + checked={soundSwitch} + /> +
    +
    + 桌面提醒 + + action.setStatus( + 'notificationSwitch', + value, + ) + } + checked={notificationSwitch} + /> +
    +
    + 语音播报 + + action.setStatus( + 'voiceSwitch', + value, + ) + } + checked={voiceSwitch} + /> +
    +
    + + 播报自己消息 + + + action.setStatus( + 'selfVoiceSwitch', + value, + ) + } + checked={selfVoiceSwitch} + /> +
    +
    + + 根据输入内容推荐表情 + + + action.setStatus( + 'enableSearchExpression', + value, + ) + } + checked={enableSearchExpression} + /> +
    +
    +
    +
    + 提示音 +
    + + + 默认 + + + 苹果 + + + 电脑QQ + + + 手机QQ + + 陌陌 + + 滑稽 + + +
    +
    +
    + 标签颜色 +
    + + action.setStatus( + 'tagColorMode', + newValue, + ) + } + horizontal + > + + 单一颜色 + + + 固定颜色 + + + 随机颜色 + + +
    +
    +
    +
    + +
    +
    +
    + + setTheme(newValue) + } + horizontal + > + + 默认 + + 清爽 + + 自定义 + + +
    +
    + {theme === 'custom' && ( + <> +
    + 毛玻璃效果 +
    + + action.setStatus('aero', value) + } + checked={aero} + /> +
    +
    +
    + + 背景图{' '} + + 背景图会被拉伸到浏览器窗口大小, + 合理的比例会取得更好的效果 + + +
    + 背景图预览 + +
    +
    + {TwitterPicker && ( +
    + 主题颜色 +
    +
    + {`rgb(${primaryColor})`} +
    + +
    + )} + {TwitterPicker && ( +
    + 文字颜色 +
    +
    + {`rgb(${primaryTextColor})`} +
    + +
    + )} + + )} +
    + + +
    + ); +} + +export default Setting; diff --git a/packages/web/src/modules/Sidebar/Sidebar.less b/packages/web/src/modules/Sidebar/Sidebar.less new file mode 100644 index 0000000..b00abb9 --- /dev/null +++ b/packages/web/src/modules/Sidebar/Sidebar.less @@ -0,0 +1,67 @@ +@import '../../styles/variable.less'; + +.sidebar { + width: 80px; + min-width: min-content; + background-color: var(--primary-color-8); + display: flex; + flex-direction: column; + align-items: center; + position: relative; + border-top-left-radius: 10px; + border-bottom-left-radius: 10px; + + &[data-aero=true] { + background-color: var(--primary-color-0); + } + + @media @mobile { + width: 60px; + padding: 0 3px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } +} + +.avatar { + margin-top: 50px; + cursor: pointer; +} + +.status { + position: absolute; + top: 99px; + left: 60px; +} + +.tabs { + margin-top: 50px; +} + +.buttons { + position: absolute; + bottom: 40px; + display: flex; + flex-direction: column; + align-items: center; + + :global { + .iconfont { + color: var(--primary-text-color-7); + transition: color 0.2s; + } + } + + & > div, .linkButton { + margin-top: 10px; + &:hover { + .iconfont { + color: var(--primary-text-color-10); + } + } + } +} + +.linkButton { + text-decoration: none; +} diff --git a/packages/web/src/modules/Sidebar/Sidebar.tsx b/packages/web/src/modules/Sidebar/Sidebar.tsx new file mode 100644 index 0000000..1940571 --- /dev/null +++ b/packages/web/src/modules/Sidebar/Sidebar.tsx @@ -0,0 +1,158 @@ +import loadable from '@loadable/component'; +import React, { useState } from 'react'; +import { isMobile } from '@fiora/utils/ua'; +import { useSelector } from 'react-redux'; +import Avatar from '../../components/Avatar'; +import IconButton from '../../components/IconButton'; +import Message from '../../components/Message'; +import Tooltip from '../../components/Tooltip'; +import useAction from '../../hooks/useAction'; +import useAero from '../../hooks/useAero'; +import useIsLogin from '../../hooks/useIsLogin'; +import { State } from '../../state/reducer'; +import { reconnect, socket } from '../../socket'; +import OnlineStatus from './OnlineStatus'; +import Style from './Sidebar.less'; + +const SettingAsync = loadable( + // @ts-ignore + () => import(/* webpackChunkName: "setting" */ './Setting'), +); + +function Sidebar() { + const action = useAction(); + const isLogin = useIsLogin(); + const isConnect = useSelector((state: State) => state.connect); + const avatar = useSelector( + (state: State) => state.user && state.user.avatar, + ); + const [settingDialogVisible, toggleSettingDialogVisible] = useState(false); + const aero = useAero(); + + function logout() { + action.logout(); + window.localStorage.removeItem('token'); + Message.success('您已经退出登录'); + socket.disconnect(); + socket.connect(); + } + function handleReconnect() { + if (socket.connected) { + Message.info('当前已连接'); + return; + } else if (socket.active) { + Message.info('正在重连...'); + return; + } else { + reconnect() + .then(() => { + Message.success('已连接'); + }) + .catch((e) => { + Message.error('连接失败:' + e.message); + }); + } + } + + function renderTooltip(text: string, component: JSX.Element) { + const children =
    {component}
    ; + if (isMobile) { + return children; + } + return ( + {text}} + > + {children} + + ); + } + + return ( + <> +
    + {isLogin && avatar && ( + handleReconnect()} + /> + )} + {isLogin && ( + + )} +
    + {isLogin && ( + 消息} + > + + action.setSideBarTabState('message') + } + /> + + )} + {isLogin && ( + 联系人} + > + + action.setSideBarTabState('contact') + } + /> + + )} + {isLogin && + renderTooltip( + '设置', + toggleSettingDialogVisible(true)} + />, + )} + {isLogin && + renderTooltip( + '退出登录', + , + )} +
    + {isLogin && settingDialogVisible && ( + toggleSettingDialogVisible(false)} + /> + )} +
    + + ); +} + +export default Sidebar; diff --git a/packages/web/src/service.ts b/packages/web/src/service.ts new file mode 100644 index 0000000..2d11fd1 --- /dev/null +++ b/packages/web/src/service.ts @@ -0,0 +1,45 @@ +import fetch from './utils/fetch'; +import { Contact, GroupMember, User } from './state/reducer'; + +/** + * 获取用户信息 + */ +export async function login() { + const [err, user] = await fetch('login'); + return err ? null : user; +} + +/** 获取联系人列表 */ +export async function getContacts(): Promise<{ + contacts: Contact[]; + groups: Contact[]; + specialContacts: Contact[]; +}> { + const res = await fetch('get_contacts', undefined, { toast: true }); + return res[1]; +} + +/** + * 发送消息 + * @param target 目标ID + * @param type 消息类型 + * @param content 消息内容 + */ +export async function sendMessage( + target: string, + type: string, + content: string, + filename?: string, +) { + return fetch('send_message', { target, type, data: content, filename }); +} + +/** + * 删除消息 + * @param messageID 要删除的消息id + * @param targetID 相关的联系人 + */ +export async function deleteMessage(messageID: string, targetID: string) { + const [err] = await fetch('deleteMessage', { messageId: messageID }); + return !err; +} diff --git a/packages/web/src/socket.ts b/packages/web/src/socket.ts new file mode 100644 index 0000000..5389a78 --- /dev/null +++ b/packages/web/src/socket.ts @@ -0,0 +1,104 @@ +import IO from 'socket.io-client'; +import config from '@fiora/config/client'; +import platform from 'platform'; +import notification from './utils/notification'; +import playSound from './utils/playSound'; +import store from './state/store'; +import { ActionTypes } from './state/action'; +import { Message } from './state/reducer'; + +const { dispatch } = store; + +// 会话ID,用于服务端访问静态资源时做身份识别 +const serverSessionID = String( + Math.trunc(Math.random() * 10000) + Math.random(), +); + +let windowStatus = 'focus'; +window.onfocus = () => { + windowStatus = 'focus'; +}; +window.onblur = () => { + windowStatus = 'blur'; +}; + +const socket = IO(config.server, { + autoConnect: false, +}); + +socket.on('connect', async () => { + dispatch({ type: ActionTypes.Connect, payload: '' }); +}); + +socket.on('disconnect', () => { + // @ts-ignore + dispatch({ type: ActionTypes.Disconnect, payload: null }); +}); + +socket.on('message', async (message: Message) => { + dispatch({ + type: ActionTypes.AddMessage, + payload: message, + }); + const state = store.getState(); + const peerID = message.isSentBySelf ? message.toID : message.fromID; + const contact = state.allContacts.get(peerID); + if (!state.focusContactID) { + dispatch({ + type: ActionTypes.MoveFocusToNextActiveContact, + payload: null, + }); + } + if (!message.isSentBySelf && state.status.soundSwitch) { + const soundType = state.status.sound; + playSound(soundType); + } + if ( + !message.isSentBySelf && + windowStatus === 'blur' && + state.status.notificationSwitch + ) { + notification( + message.fromName, + contact?.avatar || '', + (message.isGroupMessage + ? message.speakingGroupMemberName + ': ' + : '') + message.content, + Math.random().toString(), + ); + } +}); + +// 初始化web socket连接 +function initSocket(passphrase: string) { + return new Promise((resolve, reject) => { + if (socket.connected) { + resolve(true); + return; + } + socket.auth = { + appName: config.app_name, + appCode: config.app_code, + passphrase, + sessionID: serverSessionID, + platform: platform.name || '', + }; + socket.connect(); + socket.on('connect', () => resolve(true)); + socket.on('connect_error', reject); + }); +} +function reconnect() { + return new Promise((resolve, reject) => { + if (socket.connected) { + return resolve(true); + } + if (!socket.active) { + socket.connect(); + } + socket.on('connect', () => resolve(true)); + socket.on('connect_error', reject); + }); +} + +export { socket, initSocket, reconnect, serverSessionID as sessionID }; diff --git a/packages/web/src/state/action.ts b/packages/web/src/state/action.ts new file mode 100644 index 0000000..5b11b67 --- /dev/null +++ b/packages/web/src/state/action.ts @@ -0,0 +1,39 @@ +export enum ActionTypes { + /** 更新用户信息 */ + UpdateUserInfo = 'UpdateUserInfo', + /** 更新客户端状态 */ + SetStatus = 'SetStatus', + /** 退出登录 */ + Logout = 'Logout', + /** 设置聚焦的联系人 */ + SetFocus = 'SetFocus', + /** socket连接成功 */ + Connect = 'Connect', + /** socket断开连接 */ + Disconnect = 'Disconnect', + /** 改变侧边栏tab */ + ChangeSideBarTabState = 'ChangeSideBarTabState', + /** 更新联系人 */ + UpdateContacts = 'UpdateContacts', + /** 新增到消息列表 */ + AddMessage = 'AddMessage', + /** 聚焦到下一个联系人 */ + MoveFocusToNextActiveContact = 'MoveFocusToNextActiveContact', + /** 聚焦到上一个联系人 */ + MoveFocusToPrevActiveContact = 'MoveFocusToPrevActiveContact', + DeactiveCurrentActiveContact = 'DeactiveCurrentActiveContact', + /** 更新消息 */ + ForceUpdateMessagesAfterMutation = 'ForceUpdateMessages', + /** 更新消息列表联系人 */ + ForceUpdateActiveContactsAfterMutation = 'ForceUpdateActiveContactsAfterMutation', +} + +export interface SetStatusPayload { + key: string; + value: any; +} + +export interface Action { + type: ActionTypes; + payload: any; +} diff --git a/packages/web/src/state/reducer.ts b/packages/web/src/state/reducer.ts new file mode 100644 index 0000000..975abac --- /dev/null +++ b/packages/web/src/state/reducer.ts @@ -0,0 +1,288 @@ +import getData from '../localStorage'; +import { Action, ActionTypes, SetStatusPayload } from './action'; + +/** 聊天消息 */ +export interface Message { + messageID: string; + type: 'text' | 'img' | 'voice' | 'video' | 'emotion' | 'file' | 'unknown'; + content: string; + fromID: string; + fromName: string; + fromNickName: string; + toID: string; + toName: string; + toNickName: string; + createTimestamp: number; + isGroupMessage: boolean; + isSentBySelf: boolean; + speakingGroupMemberID?: string; + speakingGroupMemberName?: string; + fileUrl?: string; + fileSize?: number; + displayFilename?: string; + // TODO: 消息loading状态 + pending: boolean; + percent: number; +} +export interface MessagesMap { + [msgID: string]: Message[]; +} + +/** 用户信息 */ +export interface User { + id: string; + type: 'friend' | 'group' | 'special'; + createTime: number; + nickname: string; + displayName: string; + signature?: string; + nameInitial?: string; + nameQuanPin?: string; + avatar: string; + lastReadMessage?: Message; +} +export type Contact = User; + +/** redux store state */ +export interface State { + /** 用户信息 */ + user: User | null; + /** 联系人列表 */ + contacts: Contact[]; + groups: Contact[]; + activeContacts: Contact[]; + allContacts: Map; + messages: MessagesMap; + /** 当前聚焦的tab */ + sideBarTabState: 'message' | 'contact'; + /** 聚焦的联系人 */ + focusContactID: string; + /** 客户端连接状态 */ + connect: boolean; + /** 客户端的一些状态值 */ + status: { + /** 是否显示登陆注册框 */ + loginRegisterDialogVisible: boolean; + /** 主题 */ + theme: string; + /** 主题主色调 */ + primaryColor: string; + /** 主题文字主色调 */ + primaryTextColor: string; + /** 背景图 */ + backgroundImage: string; + /** 启用毛玻璃效果 */ + aero: boolean; + /** 新消息声音提示开关 */ + soundSwitch: boolean; + /** 声音类型 */ + sound: string; + /** 新消息桌面提醒开关 */ + notificationSwitch: boolean; + /** + * 用户标签颜色模式 + * singleColor: 固定颜色 + * fixedColor: 同一词始终同一颜色 + * randomColor: 同一词在每次渲染中保持同一颜色 + */ + tagColorMode: string; + }; +} + +const localStorage = getData(); +export const initialState: State = { + sideBarTabState: 'message', + user: null, + contacts: [], + groups: [], + activeContacts: [], + allContacts: new Map(), + messages: {}, + focusContactID: '', + connect: false, + status: { + loginRegisterDialogVisible: true, + theme: localStorage.theme, + primaryColor: localStorage.primaryColor, + primaryTextColor: localStorage.primaryTextColor, + backgroundImage: localStorage.backgroundImage, + aero: localStorage.aero, + soundSwitch: localStorage.soundSwitch, + sound: localStorage.sound, + notificationSwitch: localStorage.notificationSwitch, + tagColorMode: localStorage.tagColorMode, + }, +}; + +function reducer(state: State = initialState, action: Action): State { + switch (action.type) { + case ActionTypes.ChangeSideBarTabState: { + return { + ...state, + sideBarTabState: action.payload, + }; + } + case ActionTypes.Connect: { + return { + ...state, + connect: true, + }; + } + case ActionTypes.Disconnect: { + return { + ...state, + connect: false, + }; + } + case ActionTypes.UpdateUserInfo: { + const payload = action.payload as User; + return { + ...state, + user: { ...action.payload }, + }; + } + case ActionTypes.Logout: { + return { + ...initialState, + status: { + ...state.status, + }, + }; + } + case ActionTypes.SetFocus: { + const focus = action.payload as string; + const contact = state.allContacts.get(focus); + if (!contact) { + return state; + } + if (!state.activeContacts.includes(contact)) { + return { + ...state, + activeContacts: [contact, ...state.activeContacts], + sideBarTabState: 'message', + focusContactID: focus, + }; + } + return { + ...state, + sideBarTabState: 'message', + focusContactID: focus, + }; + } + case ActionTypes.SetStatus: { + const payload = action.payload as SetStatusPayload; + return { + ...state, + status: { + ...state.status, + [payload.key]: payload.value, + }, + }; + } + case ActionTypes.UpdateContacts: { + return { + ...state, + contacts: [ + ...action.payload.specialContacts, + ...action.payload.contacts, + ], + groups: [...action.payload.groups], + allContacts: new Map( + [ + ...action.payload.specialContacts, + ...action.payload.contacts, + ...action.payload.groups, + ].map((c) => [c.id, c]), + ), + }; + } + case ActionTypes.AddMessage: { + const m = action.payload as Message; + const messages = { ...state.messages }; + const id = m.isSentBySelf ? m.toID : m.fromID; + messages[id] = (messages[id] || []).slice(0); + messages[id].push(m); + const contact = state.allContacts.get(id); + if (contact && !state.activeContacts.includes(contact)) { + return { + ...state, + messages, + activeContacts: [contact, ...state.activeContacts], + }; + } + return { + ...state, + messages, + }; + } + case ActionTypes.MoveFocusToNextActiveContact: { + if (state.activeContacts.length <= 1) { + return state; + } + const currIndex = state.activeContacts.findIndex( + (c) => c.id === state.focusContactID, + ); + let newFocus; + if (currIndex === state.activeContacts.length - 1) { + newFocus = state.activeContacts[0].id; + } else { + newFocus = state.activeContacts[currIndex + 1].id; + } + return { + ...state, + focusContactID: newFocus, + }; + } + case ActionTypes.MoveFocusToPrevActiveContact: { + if (state.activeContacts.length <= 1) { + return state; + } + const currIndex = state.activeContacts.findIndex( + (c) => c.id === state.focusContactID, + ); + let newFocus; + if (currIndex <= 0) { + newFocus = state.activeContacts.at(-1).id; + } else { + newFocus = state.activeContacts[currIndex - 1].id; + } + return { + ...state, + focusContactID: newFocus, + }; + } + case ActionTypes.DeactiveCurrentActiveContact: { + const removed = state.activeContacts.filter( + (c) => c.id !== state.focusContactID, + ); + return { + ...state, + activeContacts: removed, + focusContactID: removed.at(0)?.id, + }; + } + // FIXME: ForceUpdate***的action不符合规范,请不要在正规项目中这样写 + case ActionTypes.ForceUpdateMessagesAfterMutation: { + const newMessages = {}; + for (const [contactID, messages] of Object.entries( + state.messages, + )) { + newMessages[contactID] = messages && [...messages]; + } + return { + ...state, + messages: newMessages, + }; + } + case ActionTypes.ForceUpdateActiveContactsAfterMutation: { + return { + ...state, + activeContacts: [...state.activeContacts], + }; + } + default: + return state; + } +} + +export default reducer; diff --git a/packages/web/src/state/store.ts b/packages/web/src/state/store.ts new file mode 100644 index 0000000..7655993 --- /dev/null +++ b/packages/web/src/state/store.ts @@ -0,0 +1,9 @@ +import { createStore } from 'redux'; +import reducer from './reducer'; + +const store = createStore( + reducer, + window.__REDUX_DEVTOOLS_EXTENSION__ && + window.__REDUX_DEVTOOLS_EXTENSION__(), +); +export default store; diff --git a/packages/web/src/styles/iconfont.less b/packages/web/src/styles/iconfont.less new file mode 100644 index 0000000..15c902f --- /dev/null +++ b/packages/web/src/styles/iconfont.less @@ -0,0 +1,147 @@ +:global { + @font-face { + font-family: 'iconfont'; + src: url('data:application/x-font-woff2;charset=utf-8;base64,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') + format('woff2'), + url('//at.alicdn.com/t/font_590033_vsjwaybxn6j.woff?t=1569418645983') + format('woff'), + url('//at.alicdn.com/t/font_590033_vsjwaybxn6j.ttf?t=1569418645983') + format('truetype'), + /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('//at.alicdn.com/t/font_590033_vsjwaybxn6j.svg?t=1569418645983#iconfont') + format('svg'); /* iOS 4.1- */ + } + @font-face { + font-family: 'iconfont2'; + src: url('@fiora/assets/fonts/font2.ttf?t=1634458354172') + format('truetype'); + } + + .iconfont { + font-family: iconfont2, iconfont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + .icon-send:before { + content: '\e600'; + } + + .icon-share:before { + content: '\e637'; + } + + .icon-code:before { + content: '\ea77'; + } + + .icon-success:before { + content: '\e613'; + } + + .icon-clear:before { + content: '\eadb'; + } + + .icon-chat:before { + content: '\e610'; + } + + .icon-error:before { + content: '\e612'; + } + + .icon-search:before { + content: '\e6c8'; + } + + .icon-app:before { + content: '\e654'; + } + + .icon-friends:before { + content: '\e601'; + } + + .icon-about:before { + content: '\e6a1'; + } + + .icon-setting:before { + content: '\e622'; + } + + .icon-close:before { + content: '\e656'; + } + + .icon-down:before { + content: '\e80f'; + } + + .icon-add:before { + content: '\e604'; + } + + .icon-gongneng:before { + content: '\e605'; + } + + .icon-info:before { + content: '\e6f5'; + } + + .icon-warning:before { + content: '\e6be'; + } + + .icon-omit:before { + content: '\e618'; + } + + .icon-dashang:before { + content: '\e606'; + } + + .icon-administrator:before { + content: '\e67c'; + } + + .icon-groups:before { + content: '\e673'; + } + + .icon-login:before { + content: '\e62b'; + } + + .icon-logout:before { + content: '\e67d'; + } + + .icon-feature:before { + content: '\e68e'; + } + + .icon-expression:before { + content: '\e603'; + } + + .icon-github:before { + content: '\ef0e'; + } + + .icon-recall:before { + content: '\e77c'; + } + + .icon-contact:before { + content: '\e644'; + } + + .icon-message:before { + content: '\e6bc'; + } +} diff --git a/packages/web/src/styles/normalize.less b/packages/web/src/styles/normalize.less new file mode 100644 index 0000000..f285cbf --- /dev/null +++ b/packages/web/src/styles/normalize.less @@ -0,0 +1,74 @@ +@import '~normalize.css/normalize.css'; + +@font-face { + font-family: 'local-file'; + src: url('~@fiora/assets/fonts/font.woff'); +} + +:global { + * { + user-select: none; + } + + html, body, #app { + width: 100%; + height: 100%; + overflow: hidden; + } + + html { + font-family: 'local-file', 'Arial', 'Verdana', '微软雅黑', '黑体', 'serif'; + } + + p, h1, h2, h3, h4 { + margin: 0; + } + + div { + box-sizing: border-box; + } + + button, input, textarea { + outline: none; + } + + button { + cursor: pointer; + } + + div, p, span { + color: #333; + } + + body {overflow-y:hidden;} + body:hover {overflow-y:scroll;} + + ::-webkit-scrollbar { + display: none; + } + .show-scrollbar::-webkit-scrollbar { + display: block; + width: 6px; + height: 6px; + } + ::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.2); + } + ::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.1); + } + + .online { + background-color: rgba(94, 212, 92, 1); + } + .offline { + background-color: rgba(206, 12, 35, 1); + } + + .show { + display: block; + } + .hide { + display: none !important; + } +} \ No newline at end of file diff --git a/packages/web/src/styles/variable.less b/packages/web/src/styles/variable.less new file mode 100644 index 0000000..d643865 --- /dev/null +++ b/packages/web/src/styles/variable.less @@ -0,0 +1 @@ +@mobile: ~"only screen and (max-width: 500px)"; \ No newline at end of file diff --git a/packages/web/src/template.html b/packages/web/src/template.html new file mode 100644 index 0000000..d850c62 --- /dev/null +++ b/packages/web/src/template.html @@ -0,0 +1,29 @@ + + + + + fiora + + + + + + <% if (process.env.NODE_ENV === 'production') { %> + + <% } %> + + + + + + + + + + + + +
    + + + diff --git a/packages/web/src/themes.ts b/packages/web/src/themes.ts new file mode 100644 index 0000000..9346a44 --- /dev/null +++ b/packages/web/src/themes.ts @@ -0,0 +1,27 @@ +import BackgroundCoolImage from '@fiora/assets/images/background-cool.jpg'; + +type Themes = { + [theme: string]: { + primaryColor: string; + primaryTextColor: string; + backgroundImage: string; + aero: boolean; + }; +}; + +const themes: Themes = { + default: { + primaryColor: '74, 144, 226', + primaryTextColor: '247, 247, 247', + backgroundImage: BackgroundCoolImage, + aero: false, + }, + cool: { + primaryColor: '5,159,149', + primaryTextColor: '255, 255, 255', + backgroundImage: BackgroundCoolImage, + aero: false, + }, +}; + +export default themes; diff --git a/packages/web/src/types/index.d.ts b/packages/web/src/types/index.d.ts new file mode 100644 index 0000000..f86a076 --- /dev/null +++ b/packages/web/src/types/index.d.ts @@ -0,0 +1,54 @@ +declare module 'opn'; +declare module 'webpack'; +declare module 'http-proxy-middleware'; +declare module 'webpack-dev-middleware'; +declare module 'webpack-hot-middleware'; +declare module 'connect-history-api-fallback'; +declare module 'ora'; +declare module 'rimraf'; +declare module 'less-plugin-autoprefix'; +declare module 'extract-text-webpack-plugin'; +declare module 'webpack-merge'; +declare module 'html-webpack-plugin'; +declare module 'friendly-errors-webpack-plugin'; +declare module 'webpack-dashboard/plugin'; +declare module 'copy-webpack-plugin'; +declare module 'optimize-css-assets-webpack-plugin'; +declare module 'script-ext-html-webpack-plugin'; +declare module 'webpack-bundle-analyzer'; +declare module 'react-radio-buttons'; +declare module 'rc-tabs'; +declare module 'rc-tabs/lib/TabContent'; +declare module 'rc-tabs/lib/ScrollableInkTabBar'; +declare module 'rc-menu'; +declare module 'rc-dropdown'; +declare module 'rc-notification'; +declare module 'brace/mode/javascript'; +declare module 'brace/mode/typescript'; +declare module 'brace/mode/java'; +declare module 'brace/mode/c_cpp'; +declare module 'brace/mode/python'; +declare module 'brace/mode/ruby'; +declare module 'brace/mode/php'; +declare module 'brace/mode/golang'; +declare module 'brace/mode/csharp'; +declare module 'brace/mode/html'; +declare module 'brace/mode/css'; +declare module 'brace/mode/markdown'; +declare module 'brace/mode/sql'; +declare module 'brace/mode/json'; + +declare module '*.less'; +declare module '*.json'; +declare module '*.png'; +declare module '*.jpg'; +declare module '*.jpeg'; +declare module '*.gif'; +declare module '*.mp3'; + +declare var __TEST__: false; + +declare interface Window { + Notification: any; + __REDUX_DEVTOOLS_EXTENSION__: any; +} diff --git a/packages/web/src/utils/composeMessage.ts b/packages/web/src/utils/composeMessage.ts new file mode 100644 index 0000000..83d54c9 --- /dev/null +++ b/packages/web/src/utils/composeMessage.ts @@ -0,0 +1,66 @@ +import dayjs from 'dayjs'; +import store from '../state/store'; +import { Contact, Message } from '../state/reducer'; + +/** 构建本地消息 */ +export default function composeMessage({ + type, + target, + data, + filename, + fileSize, + localFileUrl, +}: { + type: 'text' | 'img' | 'emotion' | 'file'; + target: string; + data: any; + filename?: string; + fileSize?: number; + localFileUrl?: string; +}): Message { + const state = store.getState(); + const to = state.allContacts.get(target); + const isGroupMessage = state.groups.includes(to as Contact); + if (!to) { + throw Error('目标联系人不存在'); + } + const msg = { + type, + messageID: Math.random().toString(), + fileSize: fileSize, + displayFilename: filename, + fileUrl: localFileUrl, + speakingGroupMemberID: isGroupMessage ? state.user?.id : null, + speakingGroupMemberName: isGroupMessage + ? state.user?.displayName + : null, + fromID: state.user?.id, + fromName: state.user?.displayName, + fromNickName: state.user?.nickname, + toID: target, + toName: to?.displayName, + toNickName: to?.nickname, + createTimestamp: dayjs().unix(), + isGroupMessage: isGroupMessage, + isSentBySelf: true, + pending: true, + percent: 0, + } as Message; + switch (type) { + case 'text': + msg.content = data; + break; + case 'img': + msg.content = '[图片]'; + break; + case 'emotion': + msg.content = '[表情]'; + break; + case 'file': + msg.content = '[文件]' + filename; + break; + default: + msg.content = '不支持的消息类型'; + } + return msg; +} diff --git a/packages/web/src/utils/fetch.ts b/packages/web/src/utils/fetch.ts new file mode 100644 index 0000000..7c4cbaf --- /dev/null +++ b/packages/web/src/utils/fetch.ts @@ -0,0 +1,21 @@ +import Message from '../components/Message'; +import { socket } from '../socket'; + +export default function fetch( + event: string, + data = {}, + { toast = true } = {}, +): Promise<[string | null, T | null]> { + return new Promise((resolve) => { + socket.emit(event, data, (res: any) => { + if (typeof res === 'string') { + if (toast) { + Message.error(res); + } + resolve([res, null]); + } else { + resolve([null, res]); + } + }); + }); +} diff --git a/packages/web/src/utils/getRandomHuaji.ts b/packages/web/src/utils/getRandomHuaji.ts new file mode 100644 index 0000000..c7e6b85 --- /dev/null +++ b/packages/web/src/utils/getRandomHuaji.ts @@ -0,0 +1,87 @@ +import HuaJi0 from '@fiora/assets/images/huaji/0.jpg'; +import HuaJi1 from '@fiora/assets/images/huaji/1.gif'; +import HuaJi2 from '@fiora/assets/images/huaji/2.jpeg'; +import HuaJi3 from '@fiora/assets/images/huaji/3.jpeg'; +import HuaJi4 from '@fiora/assets/images/huaji/4.jpeg'; +import HuaJi5 from '@fiora/assets/images/huaji/5.jpg'; +import HuaJi6 from '@fiora/assets/images/huaji/6.jpeg'; +import HuaJi7 from '@fiora/assets/images/huaji/7.jpg'; +import HuaJi8 from '@fiora/assets/images/huaji/8.jpeg'; +import HuaJi9 from '@fiora/assets/images/huaji/9.jpeg'; +import HuaJi10 from '@fiora/assets/images/huaji/10.jpeg'; +import HuaJi11 from '@fiora/assets/images/huaji/11.jpeg'; +import HuaJi12 from '@fiora/assets/images/huaji/12.jpeg'; +import HuaJi13 from '@fiora/assets/images/huaji/13.jpeg'; +import HuaJi14 from '@fiora/assets/images/huaji/14.jpeg'; +import HuaJi15 from '@fiora/assets/images/huaji/15.jpeg'; +import HuaJi16 from '@fiora/assets/images/huaji/16.jpeg'; +import HuaJi17 from '@fiora/assets/images/huaji/17.jpeg'; +import HuaJi18 from '@fiora/assets/images/huaji/18.gif'; +import HuaJi19 from '@fiora/assets/images/huaji/19.jpeg'; +import HuaJi20 from '@fiora/assets/images/huaji/20.jpeg'; +import HuaJi21 from '@fiora/assets/images/huaji/21.jpeg'; +import HuaJi22 from '@fiora/assets/images/huaji/22.jpeg'; +import HuaJi23 from '@fiora/assets/images/huaji/23.jpeg'; +import HuaJi24 from '@fiora/assets/images/huaji/24.jpeg'; +import HuaJi25 from '@fiora/assets/images/huaji/25.png'; +import HuaJi26 from '@fiora/assets/images/huaji/26.jpeg'; +import HuaJi27 from '@fiora/assets/images/huaji/27.jpeg'; +import HuaJi28 from '@fiora/assets/images/huaji/28.jpeg'; +import HuaJi29 from '@fiora/assets/images/huaji/29.jpeg'; +import HuaJi30 from '@fiora/assets/images/huaji/30.jpeg'; +import HuaJi31 from '@fiora/assets/images/huaji/31.jpeg'; +import HuaJi32 from '@fiora/assets/images/huaji/32.jpg'; +import HuaJi33 from '@fiora/assets/images/huaji/33.gif'; +import HuaJi34 from '@fiora/assets/images/huaji/34.gif'; +import HuaJi35 from '@fiora/assets/images/huaji/35.gif'; +import HuaJi36 from '@fiora/assets/images/huaji/36.gif'; + +type Huaji = { + [key: number]: string; +}; + +const huaji: Huaji = { + 0: `${HuaJi0}?width=250&height=250&huaji=true`, + 1: `${HuaJi1}?width=300&height=300&huaji=true`, + 2: `${HuaJi2}?width=245&height=206&huaji=true`, + 3: `${HuaJi3}?width=225&height=225&huaji=true`, + 4: `${HuaJi4}?width=224&height=225&huaji=true`, + 5: `${HuaJi5}?width=200&height=200&huaji=true`, + 6: `${HuaJi6}?width=284&height=177&huaji=true7`, + 7: `${HuaJi7}?width=300&height=300&huaji=true`, + 8: `${HuaJi8}?width=225&height=225&huaji=true`, + 9: `${HuaJi9}?width=204&height=247&huaji=true`, + 10: `${HuaJi10}?width=223&height=226&huaji=true`, + 11: `${HuaJi11}?width=198&height=255&huaji=true`, + 12: `${HuaJi12}?width=212&height=237&huaji=true`, + 13: `${HuaJi13}?width=290&height=174&huaji=true`, + 14: `${HuaJi14}?width=224&height=224&huaji=true`, + 15: `${HuaJi15}?width=224&height=224&huaji=true`, + 16: `${HuaJi16}?width=225&height=225&huaji=true`, + 17: `${HuaJi17}?width=225&height=225&huaji=true`, + 18: `${HuaJi18}?width=100&height=110&huaji=true`, + 19: `${HuaJi19}?width=225&height=225&huaji=true`, + 20: `${HuaJi20}?width=225&height=225&huaji=true`, + 21: `${HuaJi21}?width=225&height=225&huaji=true`, + 22: `${HuaJi22}?width=245&height=206&huaji=true`, + 23: `${HuaJi23}?width=225&height=225&huaji=true`, + 24: `${HuaJi24}?width=225&height=225&huaji=true`, + 25: `${HuaJi25}?width=225&height=225&huaji=true`, + 26: `${HuaJi26}?width=225&height=225&huaji=true`, + 27: `${HuaJi27}?width=180&height=180&huaji=true`, + 28: `${HuaJi28}?width=235&height=215&huaji=true`, + 29: `${HuaJi29}?width=278&height=182&huaji=true`, + 30: `${HuaJi30}?width=228&height=221&huaji=true`, + 31: `${HuaJi31}?width=239&height=211&huaji=true`, + 32: `${HuaJi32}?width=220&height=220&huaji=true`, + 33: `${HuaJi33}?width=220&height=220&huaji=true`, + 34: `${HuaJi34}?width=164&height=192&huaji=true`, + 35: `${HuaJi35}?width=130&height=62&huaji=true`, + 36: `${HuaJi36}?width=187&height=144&huaji=true`, +}; +const HuajiaCount = Object.keys(huaji).length; + +export default function getRandomHuaji() { + const number = Math.floor(Math.random() * HuajiaCount); + return huaji[number]; +} diff --git a/packages/web/src/utils/inobounce.ts b/packages/web/src/utils/inobounce.ts new file mode 100644 index 0000000..e9bdc53 --- /dev/null +++ b/packages/web/src/utils/inobounce.ts @@ -0,0 +1,78 @@ +/** + * 阻止目标元素下不必要的滚动事件. 解决ios橡皮筋效果问题 + * @param {HTMLElement} targetElement 目标元素 + */ +export default function inobounce(targetElement: HTMLElement) { + let startX = 0; + let startY = 0; + + function handleTouchStart(e: any) { + startY = e.touches ? e.touches[0].screenY : e.screenY; + startX = e.touches ? e.touches[0].screenX : e.screenX; + } + function handleTouchMove(e: any) { + let el = e.target; + + while (el !== e.currentTarget) { + const style = window.getComputedStyle(el); + + if (!style) { + break; + } + + if ( + el.nodeName === 'INPUT' && + el.getAttribute('type') === 'range' + ) { + return; + } + + const overflowY = style.getPropertyValue('overflow-y'); + const height = +parseFloat( + style.getPropertyValue('height'), + ).toFixed(0); + const isScrollableY = + overflowY === 'auto' || overflowY === 'scroll'; + const canScrollY = el.scrollHeight > el.offsetHeight; + if (isScrollableY && canScrollY) { + const curY = e.touches ? e.touches[0].screenY : e.screenY; + const isAtTop = startY <= curY && el.scrollTop === 0; + const isAtBottom = + startY >= curY && el.scrollHeight - el.scrollTop === height; + + if (isAtTop || isAtBottom) { + e.preventDefault(); + } + return; + } + + const overflowX = style.getPropertyValue('overflow-x'); + const width = +parseFloat(style.getPropertyValue('width')).toFixed( + 0, + ); + const isScrollableX = + overflowX === 'auto' || overflowX === 'scroll'; + const canScrollX = el.scrollWidth > el.offsetWidth; + if (isScrollableX && canScrollX) { + const curX = e.touches ? e.touches[0].screenX : e.screenX; + const isAtLeft = startX <= curX && el.scrollLeft === 0; + const isAtRight = + startX >= curX && el.scrollWidth - el.scrollLeft === width; + + if (isAtLeft || isAtRight) { + e.preventDefault(); + } + return; + } + + el = el.parentNode; + } + + e.preventDefault(); + } + + if (targetElement) { + targetElement.addEventListener('touchstart', handleTouchStart); + targetElement.addEventListener('touchmove', handleTouchMove); + } +} diff --git a/packages/web/src/utils/notification.ts b/packages/web/src/utils/notification.ts new file mode 100644 index 0000000..7f3717e --- /dev/null +++ b/packages/web/src/utils/notification.ts @@ -0,0 +1,20 @@ +export default function notification( + title: string, + icon: string, + body: string, + tag = 'tag', + duration = 3000, +) { + if (window.Notification && window.Notification.permission === 'granted') { + const n = new window.Notification(title, { + icon, + body, + tag, + }); + n.onclick = function handleClick() { + window.focus(); + this.close(); + }; + setTimeout(n.close.bind(n), duration); + } +} diff --git a/packages/web/src/utils/playSound.ts b/packages/web/src/utils/playSound.ts new file mode 100644 index 0000000..32fd787 --- /dev/null +++ b/packages/web/src/utils/playSound.ts @@ -0,0 +1,53 @@ +import DefaultSound from '@fiora/assets/audios/default.mp3'; +import AppleSound from '@fiora/assets/audios/apple.mp3'; +import PcQQSound from '@fiora/assets/audios/pcqq.mp3'; +import MobileQQSound from '@fiora/assets/audios/mobileqq.mp3'; +import MoMoSound from '@fiora/assets/audios/momo.mp3'; +import HuaJiSound from '@fiora/assets/audios/huaji.mp3'; + +type Sounds = { + [key: string]: string; +}; + +const sounds: Sounds = { + default: DefaultSound, + apple: AppleSound, + pcqq: PcQQSound, + mobileqq: MobileQQSound, + momo: MoMoSound, + huaji: HuaJiSound, +}; + +let prevType = 'default'; +const $audio = document.createElement('audio'); +const $source = document.createElement('source'); +$audio.volume = 0.6; +$source.setAttribute('type', 'audio/mp3'); +$source.setAttribute('src', sounds[prevType]); +$audio.appendChild($source); +document.body.appendChild($audio); + +let isPlaying = false; + +async function play() { + if (!isPlaying) { + isPlaying = true; + + try { + await $audio.play(); + } catch (err) { + console.warn('播放新消息提示音失败', err.message); + } finally { + isPlaying = false; + } + } +} + +export default function playSound(type = 'default') { + if (type !== prevType) { + $source.setAttribute('src', sounds[type]); + $audio.load(); + prevType = type; + } + play(); +} diff --git a/packages/web/src/utils/readDiskFile.ts b/packages/web/src/utils/readDiskFile.ts new file mode 100644 index 0000000..cf349c9 --- /dev/null +++ b/packages/web/src/utils/readDiskFile.ts @@ -0,0 +1,98 @@ +export interface ReadFileResult { + /** 文件名 */ + filename: string; + /** 文件拓展名 */ + ext: string; + /** 文件类型 */ + type: string; + /** 文件内容 */ + result: Blob | ArrayBuffer | string; + /** 文件长度 */ + length: number; +} + +/** + * 读取本地文件 + * @param {string} resultType 数据类型, {blob|base64}, 默认blob + * @param {string} accept 可选文件类型, 默认 * / * + */ +export default async function readDiskFIle( + resultType = 'blob', + accept = '*/*', +) { + const result: ReadFileResult | null = await new Promise((resolve) => { + const $input = document.createElement('input'); + $input.style.display = 'none'; + $input.setAttribute('type', 'file'); + $input.setAttribute('accept', accept); + // 判断用户是否点击取消, 原生没有提供专门事件, 用hack的方法实现 + $input.onclick = () => { + // @ts-ignore + $input.value = null; + document.body.onfocus = () => { + // onfocus事件会比$input.onchange事件先触发, 因此需要延迟一段时间 + setTimeout(() => { + if ($input.value.length === 0) { + resolve(null); + } + document.body.onfocus = null; + }, 500); + }; + }; + $input.onchange = (e: Event) => { + // @ts-ignore + const file = e.target.files[0]; + if (!file) { + return; + } + + const reader = new FileReader(); + reader.onloadend = function handleLoad() { + if (!this.result) { + resolve(null); + return; + } + // @ts-ignore + resolve({ + filename: file.name, + ext: file.name + .split('.') + .pop() + .toLowerCase(), + type: file.type, + // @ts-ignore + result: this.result, + length: + resultType === 'blob' + ? (this.result as ArrayBuffer).byteLength + : (this.result as string).length, + }); + }; + + switch (resultType) { + case 'blob': { + reader.readAsArrayBuffer(file); + break; + } + case 'base64': { + reader.readAsDataURL(file); + break; + } + default: { + reader.readAsArrayBuffer(file); + } + } + }; + $input.click(); + }); + + if (result && resultType === 'blob') { + result.result = new Blob( + [new Uint8Array(result.result as ArrayBuffer)], + { + type: result.type, + }, + ); + } + return result; +} diff --git a/packages/web/src/utils/setCssVariable.ts b/packages/web/src/utils/setCssVariable.ts new file mode 100644 index 0000000..d4bf9b4 --- /dev/null +++ b/packages/web/src/utils/setCssVariable.ts @@ -0,0 +1,14 @@ +/** + * set global css variable + * @param color primary color, three numbers split with comma, like 255,255,255 + * @param textColor text colore, format like color + */ +export default function setCssVariable(color: string, textColor: string) { + let cssText = ''; + for (let i = 0; i <= 10; i++) { + cssText += `--primary-color-${i}:rgba(${color}, ${i / + 10});--primary-color-${i}_5:rgba(${color}, ${(i + 0.5) / + 10});--primary-text-color-${i}:rgba(${textColor}, ${i / 10});`; + } + document.documentElement.style.cssText += cssText; +} diff --git a/packages/web/src/utils/uploadFile.ts b/packages/web/src/utils/uploadFile.ts new file mode 100644 index 0000000..e704b03 --- /dev/null +++ b/packages/web/src/utils/uploadFile.ts @@ -0,0 +1,21 @@ +import config from '@fiora/config/client'; +import { sessionID } from '../socket'; + +/** + * 上传文件 + * @param blob 文件blob数据 + * @param fileName 文件名 + */ +export default async function uploadFile(blob: Blob): Promise { + const formData = new FormData(); + formData.append('file', blob); + const resp = await fetch(config.server + 'upload_file', { + headers: { + session_id: sessionID, + }, + method: 'POST', + body: formData, + }); + const result = await resp.json(); + return result.tempFileName; +} diff --git a/packages/web/test/components/Avatar.spec.tsx b/packages/web/test/components/Avatar.spec.tsx new file mode 100644 index 0000000..9df0c3f --- /dev/null +++ b/packages/web/test/components/Avatar.spec.tsx @@ -0,0 +1,55 @@ +/** + * @jest-environment jsdom + */ + +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom/extend-expect'; +import Avatar, { avatarFailback } from '../../src/components/Avatar'; + +describe('Avatar', () => { + it('shoule render without error', async () => { + render(); + const $img = await screen.findByRole('img'); + expect($img).toBeInTheDocument(); + }); + + it('should call props handler function when fire event', async () => { + const handleClick = jest.fn(); + const handleMouseEnter = jest.fn(); + const handleMouseLeave = jest.fn(); + render( + , + ); + const $img = await screen.findByRole('img'); + fireEvent.click($img); + expect(handleClick).toBeCalled(); + fireEvent.mouseEnter($img); + expect(handleMouseEnter).toBeCalled(); + fireEvent.mouseLeave($img); + expect(handleMouseLeave).toBeCalled(); + }); + + it('shoule use failback avatar when fetch error', async () => { + const src = 'origin.jpg'; + render(); + const $img = (await screen.findByRole('img')) as HTMLImageElement; + expect($img.src).toEqual(expect.stringContaining(src)); + fireEvent.error($img); + expect($img.src).toEqual(expect.stringContaining(avatarFailback)); + fireEvent.error($img); + fireEvent.error($img); + }); + + it('shoule not add CDN query params', async () => { + const src = 'data:base64/png;xxx'; + render(); + const $img = (await screen.findByRole('img')) as HTMLImageElement; + expect($img.src).not.toEqual(expect.stringContaining('x-oss-process=')); + }); +}); diff --git a/packages/web/test/components/Button.spec.tsx b/packages/web/test/components/Button.spec.tsx new file mode 100644 index 0000000..6dffead --- /dev/null +++ b/packages/web/test/components/Button.spec.tsx @@ -0,0 +1,35 @@ +/** + * @jest-environment jsdom + */ + +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom/extend-expect'; +import Button from '../../src/components/Button'; + +describe('Button', () => { + it('shoule render without error', async () => { + render(); + const $button = screen.getByRole('button'); + expect($button).toBeInTheDocument(); + }); + + it('shoule support set custom class name and type', async () => { + render( + , + ); + const $button = screen.getByRole('button'); + expect($button.classList).toContain('custom'); + expect($button.classList).toContain('danger'); + }); + + it('shoule call props handler function when fire event', async () => { + const handleClick = jest.fn(); + render(); + const $button = screen.getByRole('button'); + fireEvent.click($button); + expect(handleClick).toHaveBeenCalled(); + }); +}); diff --git a/packages/web/test/localStorage.spec.ts b/packages/web/test/localStorage.spec.ts new file mode 100644 index 0000000..93409cc --- /dev/null +++ b/packages/web/test/localStorage.spec.ts @@ -0,0 +1,23 @@ +import getData, { LocalStorageKey } from '../src/localStorage'; +import config from '../../config/client'; +import themes from '../src/themes'; + +describe('client/localStorage.ts', () => { + it('should return localStorage value, or default value if not exists', () => { + expect(getData().sound).toBe(config.sound); + localStorage.setItem(LocalStorageKey.Sound, 'huaji'); + expect(getData().sound).toBe('huaji'); + }); + + it('should return default theme config when them not exists', () => { + localStorage.setItem(LocalStorageKey.Theme, 'xxx'); + expect(getData().primaryColor).toBe(themes.cool.primaryColor); + }); + + it('should return boolean type value when value is true / false', () => { + localStorage.setItem(LocalStorageKey.SoundSwitch, 'true'); + expect(getData().soundSwitch).toBe(true); + localStorage.setItem(LocalStorageKey.SoundSwitch, 'false'); + expect(getData().soundSwitch).toBe(false); + }); +}); diff --git a/packages/web/test/state/reducer.spec.ts b/packages/web/test/state/reducer.spec.ts new file mode 100644 index 0000000..d1320fd --- /dev/null +++ b/packages/web/test/state/reducer.spec.ts @@ -0,0 +1,589 @@ +import getFriendId from '@fiora/utils/getFriendId'; +import reducer, { State, initialState } from '../../src/state/reducer'; +import { Action, ActionTypes } from '../../src/state/action'; + +describe('redux reducer', () => { + it('should user initial state', () => { + const action = { type: 'mock' as ActionTypes, payload: {} } as Action; + expect(reducer(undefined, action)).toBe(initialState); + }); + + it('should return origin state with unknown action', () => { + const state = {} as State; + const action = { type: 'mock' as ActionTypes, payload: {} } as Action; + expect(reducer(state, action)).toBe(state); + }); + + it('should set connect status to true', () => { + const state = { + connect: false, + } as State; + const action = { + type: ActionTypes.Connect, + payload: {}, + }; + const newState = reducer(state, action); + expect(newState.connect).toBe(true); + }); + + it('should set connect status to false', () => { + const state = { + connect: true, + } as State; + const action = { + type: ActionTypes.Disconnect, + payload: {}, + }; + const newState = reducer(state, action); + expect(newState.connect).toBe(false); + }); + + it('should set guest user and default group', () => { + const state = {} as State; + const group = { + _id: '1', + name: 'Default Group', + }; + const action = { + type: ActionTypes.SetGuest, + payload: group, + }; + const newState = reducer(state, action); + expect(newState.user).not.toBe(null); + expect(newState.linkmans[group._id]).toBe(group); + expect(newState.focus).toBe(group._id); + }); + + it('should set user and linkmans', () => { + const state = { + linkmans: {}, + } as State; + const group = { + _id: 'group', + name: 'group', + }; + const friend = { + from: '111', + to: { + _id: '222', + username: 'friend', + }, + }; + const action = { + type: ActionTypes.SetUser, + payload: { + _id: 'id', + username: 'user', + friends: [friend], + groups: [group], + }, + }; + const newState = reducer(state, action); + expect(newState.user).not.toBe(null); + expect(Object.keys(newState.linkmans).length).toBe(2); + expect(newState.linkmans[group._id].type).toBe('group'); + + const friendId = getFriendId(friend.from, friend.to._id); + expect(newState.linkmans[friendId].type).toBe('friend'); + expect(newState.linkmans[friendId].name).toBe(friend.to.username); + expect(newState.focus).toBe(group._id); + }); + + it('should update user with payload data', () => { + const state = { + user: { + _id: 'id', + username: 'name', + }, + } as State; + const action = { + type: ActionTypes.UpdateUserInfo, + payload: { + username: 'new', + }, + }; + const newState = reducer(state, action); + expect(newState.user?.username).toBe('new'); + }); + + it('should set user to null', () => { + const state = { + user: { + _id: 'id', + }, + } as State; + const action = { + type: ActionTypes.Logout, + payload: {}, + }; + const newState = reducer(state, action); + expect(newState.user).toEqual(null); + }); + + it('should update user avatar', () => { + const state = { + user: { + _id: 'id', + avatar: 'avatar', + }, + } as State; + const action = { + type: ActionTypes.SetAvatar, + payload: 'new', + }; + const newState = reducer(state, action); + expect(newState.user?.avatar).toBe('new'); + }); + + it('should update focus and reduce exist messages when more than 50', () => { + const linkman = { + _id: '1', + messages: {}, + }; + const state = { + linkmans: { + [linkman._id]: linkman, + }, + focus: '', + } as State; + const action = { + type: ActionTypes.SetFocus, + payload: linkman._id, + }; + const newState = reducer(state, action); + expect(newState.focus).toBe(linkman._id); + expect( + Object.keys(newState.linkmans[newState.focus].messages), + ).toHaveLength(0); + }); + + it('should reduce exist messages when more than 50', () => { + const messages: { [id: string]: any } = {}; + for (let i = 0; i < 51; i++) { + messages[i] = { + _id: i, + }; + } + const linkman = { + _id: '1', + messages, + unread: 10, + }; + const state = { + linkmans: { + [linkman._id]: linkman, + }, + focus: '', + } as State; + const action = { + type: ActionTypes.SetFocus, + payload: linkman._id, + }; + const newState = reducer(state, action); + expect( + Object.keys(newState.linkmans[newState.focus].messages), + ).toHaveLength(50); + }); + + it('should be no change when foucs not exits user id', () => { + const linkman = { + id: '1', + }; + // @ts-ignore + const state = { + linkmans: { + [linkman.id]: linkman, + }, + focus: linkman.id, + } as State; + const action = { + type: ActionTypes.SetFocus, + payload: '2', + }; + const newState = reducer(state, action); + expect(newState).toBe(state); + }); + + it('should add new group linkman into linkmans', () => { + const state = { + linkmans: {}, + } as State; + const linkman = { + _id: 'id', + name: 'name', + type: 'group', + }; + const action = { + type: ActionTypes.AddLinkman, + payload: { + linkman, + focus: true, + }, + }; + const newState = reducer(state, action); + expect(Object.keys(newState.linkmans)).toHaveLength(1); + expect(newState.focus).toBe(linkman._id); + }); + + it('should add new friend linkman into linkmans', () => { + const state = { + linkmans: {}, + } as State; + const linkman = { + name: 'name', + type: 'friend', + from: '111', + to: { + _id: '222', + }, + }; + const action = { + type: ActionTypes.AddLinkman, + payload: { + linkman, + }, + }; + const newState = reducer(state, action); + expect(Object.keys(newState.linkmans)).toHaveLength(1); + expect(newState.linkmans['111222']).toBeTruthy(); + }); + + it('should add new temporary linkman into linkmans', () => { + const state = { + linkmans: {}, + } as State; + const linkman = { + _id: 'id', + name: 'name', + type: 'temporary', + }; + const action = { + type: ActionTypes.AddLinkman, + payload: { + linkman, + }, + }; + const newState = reducer(state, action); + expect(Object.keys(newState.linkmans)).toHaveLength(1); + expect(newState.linkmans[linkman._id].unread).toBe(1); + }); + + it('should return origin state when add unknown linkman', () => { + const state = { + linkmans: {}, + } as State; + const action = { + type: ActionTypes.AddLinkman, + payload: { + linkman: { + type: 'xxx', + }, + }, + }; + const newState = reducer(state, action); + expect(newState).toBe(state); + }); + + it('should remove linkman form linkmans', () => { + const linkman1 = { + _id: '1', + }; + const linkman2 = { + _id: '2', + }; + const state = { + linkmans: { + [linkman1._id]: linkman1, + [linkman2._id]: linkman2, + }, + } as State; + const action1 = { + type: ActionTypes.RemoveLinkman, + payload: linkman1._id, + }; + const newState = reducer(state, action1); + expect(Object.keys(newState.linkmans)).toHaveLength(1); + expect(newState.focus).toBe(linkman2._id); + + const action2 = { + type: ActionTypes.RemoveLinkman, + payload: linkman2._id, + }; + expect(reducer(newState, action2).focus).toBe(''); + }); + + it('should add messages to linkmans', () => { + const state = { + linkmans: { + 1: { + _id: '1', + name: 'name', + messages: {}, + }, + 2: { + _id: '2', + name: 'name', + messages: {}, + }, + }, + } as unknown as State; + const action = { + type: ActionTypes.SetLinkmansLastMessages, + payload: { + '1': { + messages: [ + { + _id: 'm1', + type: 'text', + content: 'content', + }, + { + _id: 'm2', + type: 'text', + content: 'content', + }, + ], + unread: 2, + }, + }, + }; + const newState = reducer(state, action); + expect(Object.keys(newState.linkmans['1'].messages).length).toBe(2); + expect(Object.keys(newState.linkmans['2'].messages).length).toBe(0); + }); + + it('should add messages to linkman', () => { + const state = { + linkmans: { + 1: { + _id: '1', + name: 'name', + messages: {}, + }, + }, + } as unknown as State; + const action = { + type: ActionTypes.AddLinkmanHistoryMessages, + payload: { + linkmanId: '1', + messages: [ + { + _id: 'm1', + type: 'text', + content: 'content', + }, + { + _id: 'm2', + type: 'text', + content: 'content', + }, + ], + }, + }; + const newState = reducer(state, action); + expect(Object.keys(newState.linkmans['1'].messages).length).toBe(2); + }); + + it('should add message to linkman', () => { + const linkman = { + _id: '1', + name: 'name', + messages: {}, + unread: 0, + }; + const state = { + linkmans: { + [linkman._id]: linkman, + }, + } as State; + const action = { + type: ActionTypes.AddLinkmanMessage, + payload: { + linkmanId: '1', + message: { + _id: 'm1', + type: 'text', + content: 'content', + }, + }, + }; + const newState = reducer(state, action); + expect(Object.keys(newState.linkmans['1'].messages)).toHaveLength(1); + expect(newState.linkmans['1'].unread).toBe(1); + }); + + it('should not increase unread count when linkman is foucs', () => { + const linkman = { + _id: '1', + name: 'name', + messages: {}, + unread: 0, + }; + const state = { + linkmans: { + [linkman._id]: linkman, + }, + focus: linkman._id, + } as State; + const action = { + type: ActionTypes.AddLinkmanMessage, + payload: { + linkmanId: '1', + message: { + _id: 'm1', + type: 'text', + content: 'content', + }, + }, + }; + const newState = reducer(state, action); + expect(Object.keys(newState.linkmans['1'].messages)).toHaveLength(1); + expect(newState.linkmans['1'].unread).toBe(0); + }); + + it('should remove message from linkman', () => { + const state = { + linkmans: { + 1: { + _id: '1', + name: 'name', + messages: { + m1: { + _id: 'm1', + type: 'text', + content: 'content', + from: {}, + }, + }, + unread: 0, + }, + }, + } as unknown as State; + const action = { + type: ActionTypes.DeleteMessage, + payload: { + linkmanId: '1', + messageId: 'm1', + }, + }; + const newState = reducer(state, action); + expect(newState.linkmans['1'].messages.m1.deleted).toBe(true); + }); + + it('should return origin state when delete not exists linkman message', () => { + const state = { + linkmans: {}, + } as State; + const action = { + type: ActionTypes.DeleteMessage, + payload: { + linkmanId: '1', + messageId: 'm1', + }, + }; + const newState = reducer(state, action); + expect(newState).toBe(state); + }); + + it('should update linkman property', () => { + const state = { + linkmans: { + 1: { + _id: '1', + name: 'name', + messages: {}, + unread: 0, + }, + }, + } as unknown as State; + const action = { + type: ActionTypes.SetLinkmanProperty, + payload: { + linkmanId: '1', + key: 'name', + value: 'new_name', + }, + }; + const newState = reducer(state, action); + expect(newState.linkmans['1'].name).toBe('new_name'); + }); + + it('should update message from linkman', () => { + const state = { + linkmans: { + 1: { + _id: '1', + name: 'name', + messages: { + m1: { + _id: 'm1', + type: 'text', + content: 'content', + }, + }, + unread: 0, + }, + }, + } as unknown as State; + const action = { + type: ActionTypes.UpdateMessage, + payload: { + linkmanId: '1', + messageId: 'm1', + value: { + _id: 'm1', + type: 'text', + content: 'new_content', + }, + }, + }; + const newState = reducer(state, action); + expect(newState.linkmans['1'].messages.m1.content).toBe('new_content'); + }); + + it('should add instead of update message when it not exists', () => { + const linkman = { + _id: '1', + name: 'name', + messages: {}, + unread: 0, + }; + const state = { + linkmans: { + [linkman._id]: linkman, + }, + } as State; + const action = { + type: ActionTypes.UpdateMessage, + payload: { + linkmanId: linkman._id, + messageId: 'm1', + value: { + type: 'text', + content: 'new_content', + }, + }, + }; + const newState = reducer(state, action); + expect(newState.linkmans[linkman._id].messages.m1.content).toBe( + 'new_content', + ); + }); + + it('should update status of key', () => { + const state = { + status: { + aero: false, + }, + } as unknown as State; + const action = { + type: ActionTypes.SetStatus, + payload: { + key: 'aero', + value: true, + }, + }; + const newState = reducer(state, action); + expect(newState.status.aero).toBe(true); + }); +}); diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json new file mode 100644 index 0000000..9eebf95 --- /dev/null +++ b/packages/web/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "esnext", + "strict": false, + "moduleResolution": "node", + "experimentalDecorators": true, + "jsx": "react", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "lib": ["es2015", "es2016", "es2017", "dom"], + "resolveJsonModule": true, + "skipLibCheck": true, + "paths": { + "@fiora/*": ["./src/@fiora/*"], + } + }, + "exclude": ["node_modules"] +}

    -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