From 23bdb342280ac30ca1a6d60a3e21a822a85e9402 Mon Sep 17 00:00:00 2001 From: safarte <bchichereau@gmail.com> Date: Mon, 7 Oct 2019 18:05:53 +0200 Subject: [PATCH] modifs --- .gitignore | 136 +++---------------- README.md | 75 ++--------- package.json | 9 +- public/favicon.ico | Bin 0 -> 22382 bytes public/index.html | 43 ++++++ public/logo192.png | Bin 0 -> 8581 bytes public/logo512.png | Bin 0 -> 22920 bytes public/manifest.json | 25 ++++ public/robots.txt | 2 + src/App.css | 22 ---- src/App.js | 42 +++--- src/App.test.js | 9 -- src/components/Board.js | 159 ++++++++++++++++++++++ src/components/BoardsList.js | 41 ++++++ src/components/Login.js | 87 ++++++++++++ src/index.css | 13 -- src/index.js | 11 +- src/logo.svg | 1 - src/serviceWorker.js | 135 ------------------- yarn.lock | 247 ++++++++++++++++++++++++++++++++++- 20 files changed, 664 insertions(+), 393 deletions(-) create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 public/logo192.png create mode 100644 public/logo512.png create mode 100644 public/manifest.json create mode 100644 public/robots.txt delete mode 100644 src/App.css delete mode 100644 src/App.test.js create mode 100644 src/components/Board.js create mode 100644 src/components/BoardsList.js create mode 100644 src/components/Login.js delete mode 100644 src/index.css delete mode 100644 src/logo.svg delete mode 100644 src/serviceWorker.js diff --git a/.gitignore b/.gitignore index 01b3c33..52ffbec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,123 +1,25 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -# Created by https://www.gitignore.io/api/node,react,visualstudiocode -# Edit at https://www.gitignore.io/?templates=node,react,visualstudiocode +# dependencies +/node_modules +/.pnp +.pnp.js -### Node ### -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history +# testing +/coverage -# Output of 'npm pack' -*.tgz +# production +/build -# Yarn Integrity file -.yarn-integrity +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# next.js build output -.next - -# nuxt.js build output -.nuxt - -# react / gatsby -public/ - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -### react ### -.DS_* -**/*.backup.* -**/*.back.* - -node_modules -bower_componets - -*.sublime* - -psd -thumb -sketch - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history +npm-debug.log* +yarn-debug.log* +yarn-error.log* -# End of https://www.gitignore.io/api/node,react,visualstudiocode +.vscode/ diff --git a/README.md b/README.md index 89b278a..d5c2032 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,19 @@ -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). +# Formation React -## Available Scripts +By Safarte and Soudini -In the project directory, you can run: +## Install -### `yarn start` +* Install NodeJS +* Install yarn +* Run: -Runs the app in the development mode.<br /> -Open [http://localhost:3000](http://localhost:3000) to view it in the browser. +```bash +git clone https://gitlab.viarezo.fr/LinkCS/react-tutorial-front.git +cd react-tutorial-front +yarn install +``` -The page will reload if you make edits.<br /> -You will also see any lint errors in the console. +## Usage -### `yarn test` - -Launches the test runner in the interactive watch mode.<br /> -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `yarn build` - -Builds the app for production to the `build` folder.<br /> -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.<br /> -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `yarn eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). - -### Code Splitting - -This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting - -### Analyzing the Bundle Size - -This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size - -### Making a Progressive Web App - -This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app - -### Advanced Configuration - -This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration - -### Deployment - -This section has moved here: https://facebook.github.io/create-react-app/docs/deployment - -### `yarn build` fails to minify - -This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify +To run this website locally execute `yarn start` in the working directory. diff --git a/package.json b/package.json index 9b3572c..784ddc6 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,16 @@ { - "name": "app", + "name": "front_messages_brice", "version": "0.1.0", "private": true, "dependencies": { + "axios": "^0.19.0", "react": "^16.10.2", "react-dom": "^16.10.2", - "react-scripts": "3.2.0" + "react-router": "^5.1.2", + "react-router-dom": "^5.1.2", + "react-scripts": "3.2.0", + "semantic-ui-css": "^2.4.1", + "semantic-ui-react": "^0.88.1" }, "scripts": { "start": "react-scripts start", diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c2c86b859eaa20639adf92ff979c2be8d580433e GIT binary patch literal 22382 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 KMvWaJApijD)J}c? literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..c240d2c --- /dev/null +++ b/public/index.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta name="theme-color" content="#000000" /> + <meta + name="description" + content="Web site created using create-react-app" + /> + <link rel="apple-touch-icon" href="logo192.png" /> + <!-- + manifest.json provides metadata used when your web app is installed on a + user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ + --> + <link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> + <!-- + Notice the use of %PUBLIC_URL% in the tags above. + It will be replaced with the URL of the `public` folder during the build. + Only files inside the `public` folder can be referenced from the HTML. + + Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will + work correctly both with client-side routing and a non-root public URL. + Learn how to configure a non-root public URL by running `npm run build`. + --> + <title>React App</title> + </head> + <body> + <noscript>You need to enable JavaScript to run this app.</noscript> + <div id="root"></div> + <!-- + This HTML file is a template. + If you open it directly in the browser, you will see an empty page. + + You can add webfonts, meta tags, or analytics to this file. + The build step will place the bundled scripts into the <body> tag. + + To begin the development, run `npm start` or `yarn start`. + To create a production bundle, use `npm run build` or `yarn build`. + --> + </body> +</html> diff --git a/public/logo192.png b/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fa313abf53936aefc517dbd583b724a57199d415 GIT binary patch literal 8581 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 literal 0 HcmV?d00001 diff --git a/public/logo512.png b/public/logo512.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5d4b5e235ab9d880c202a6a7f7d3e35e115d8c GIT binary patch literal 22920 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 a=ikL$H2!W|`iDIYWQ3=ypUXO@geCw<c4RLA literal 0 HcmV?d00001 diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..01b0f9a --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * diff --git a/src/App.css b/src/App.css deleted file mode 100644 index afc3885..0000000 --- a/src/App.css +++ /dev/null @@ -1,22 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #09d3ac; -} diff --git a/src/App.js b/src/App.js index ce9cbd2..23bc14d 100644 --- a/src/App.js +++ b/src/App.js @@ -1,26 +1,30 @@ import React from 'react'; -import logo from './logo.svg'; -import './App.css'; +import { Route, Switch } from 'react-router-dom'; +import { withRouter } from 'react-router'; +import BoardsList from './components/BoardsList'; +import Board from './components/Board'; +import Login from './components/Login'; + + +// Set this to true in order to use the login page +const USE_LOGIN = false; +// Set this to true in order to use the boards list page +const USE_BOARDSLIST = false; + + +const BoardsListComponent = USE_BOARDSLIST ? BoardsList : Board; +const LoginComponent = USE_LOGIN ? Login : BoardsListComponent; function App() { return ( - <div className="App"> - <header className="App-header"> - <img src={logo} className="App-logo" alt="logo" /> - <p> - Edit <code>src/App.js</code> and save to reload. - </p> - <a - className="App-link" - href="https://reactjs.org" - target="_blank" - rel="noopener noreferrer" - > - Learn React - </a> - </header> - </div> + <div className='App'> + <Switch id='switch'> + <Route exact path='/' component={LoginComponent}/> + <Route exact path='/boards' component={BoardsListComponent}/> + <Route path='/board/:id' component={Board}/> + </Switch> + </div> ); } -export default App; +export default withRouter(App); diff --git a/src/App.test.js b/src/App.test.js deleted file mode 100644 index a754b20..0000000 --- a/src/App.test.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; - -it('renders without crashing', () => { - const div = document.createElement('div'); - ReactDOM.render(<App />, div); - ReactDOM.unmountComponentAtNode(div); -}); diff --git a/src/components/Board.js b/src/components/Board.js new file mode 100644 index 0000000..9fa8054 --- /dev/null +++ b/src/components/Board.js @@ -0,0 +1,159 @@ +import React, { useState, useEffect } from 'react'; +import {withRouter} from 'react-router'; +import axios from 'axios'; +import { Container, Message, TextArea, Button, Grid, Divider } from 'semantic-ui-react'; + +const API_URL = 'http://138.195.142.10'; + +const postMessage = (message, board) => { + const request_options = { + url : `${API_URL}/messages`, + method : 'POST', + data: { + userId: parseInt(localStorage.getItem('userId')) || 1, + content: message, + boardId: parseInt(board) + } + }; + return axios.request(request_options); +}; + +const getMessagesList = async (board) => { + const request_options = { + method: 'GET', + url: `${API_URL}/messages`, + params: { + board: board + } + }; + return axios.request(request_options).then(resp => resp.data); +}; + +const getUserList = async () => { + const request_options = { + method: 'GET', + url: `${API_URL}/users` + }; + return axios.request(request_options).then(resp => resp.data); +}; + +const getBoard = async (id) => { + const request_options = { + method: 'GET', + url: `${API_URL}/boards`, + params: { + id: id + } + }; + return axios.request(request_options).then(resp => resp.data); +}; + +const Board = (props) => { + const [id, setId] = useState(-1); + const [board, setBoard] = useState([]); + + useEffect( + () => { + const boardId = props.location.pathname.split('/')[props.location.pathname.split('/').length-1] || 1; + setId(boardId); + }, + [props.location.pathname] + ); + + useEffect( + () => { + getBoard(id).then(data => setBoard(data)) + }, + [id] + ); + + return ( + <div> + <Container textAlign='left'> + <Container textAlign='center'><h1>{board[id-1] ? board[id-1].name : ''}</h1></Container> + <Divider/> + <Container> + <MessageWriter board={id}/> + <Divider/> + </Container> + <Container> + <MessageList board={id}/> + </Container> + </Container> + </div> + ); +}; + +const MessageList = (props) => { + const [messages, setMessages] = useState([]); + const [users, setUsers] = useState([]); + + useEffect( + () => { + getMessagesList(props.board).then(data => setMessages(data)); + getUserList().then(data => setUsers(data)); + }, + [props.board] + ); + + useEffect( + () => { + const timer = setTimeout(() => { + getMessagesList(props.board).then(data => setMessages(data)); + }, 1000); + return () => clearTimeout(timer); + }, + [messages, props.board] + ); + return ( + <div> + {messages.map(message => ( + <MessageDisplay message={message} user={users[message.userId-1]}/> + ))} + </div> + ); +}; + +const MessageDisplay = (props) => { + return( + <Container> + <Message + key={props.message.id} + header={(props.user ? props.user.username : '') + '@' + props.message.updatedAt.split('T')[1].split('.')[0]} + content={props.message.content} + /> + <Divider/> + </Container> + ); +}; + +const MessageWriter = (props) => { + const [message, setMessage] = useState(''); + + return ( + <div> + <Container textAlign='center'> + <Grid> + <Grid.Column width='16'> + <Grid.Row> + <TextArea style={{width: '100%'}}onChange={(e) => {setMessage(e.target.value)}} value={message}/> + </Grid.Row> + <Grid.Row> + <Button + style={{width: '100%'}} + onClick={() => {if (message.length) { + setMessage(''); + postMessage(message, props.board); + }}} + > + Send + </Button> + </Grid.Row> + </Grid.Column> + </Grid> + </Container> + </div> + ); +}; + +export default withRouter(Board); diff --git a/src/components/BoardsList.js b/src/components/BoardsList.js new file mode 100644 index 0000000..778a5bc --- /dev/null +++ b/src/components/BoardsList.js @@ -0,0 +1,41 @@ +import React, { useState, useEffect } from 'react'; +import { withRouter } from 'react-router'; +import { Link } from 'react-router-dom'; +import axios from 'axios'; +import { Form, Header } from 'semantic-ui-react'; + +const API_URL = 'http://138.195.142.10'; + +const getBoardList = async () => { + const request_options = { + method: 'GET', + url: `${API_URL}/boards` + } + return axios.request(request_options).then(resp => resp.data); +}; + +const BoardsList = () => { + const [boards, setBoards] = useState([]); + + useEffect( + () => { + getBoardList().then(data => setBoards(data, [])); + }, + [] + ); + + return ( + <div style={{ margin: 'auto', maxWidth: '50%', textAlign: 'center', marginTop: '2%' }}> + <Header as='h1'>Boards</Header> + <Form style={{ marginTop: '8%' }}> + {boards.map(board => ( + <Link style={{ margin: '1%' }} to={`/board/${board.id}`}> + <Form.Button fluid content={board.name} /> + </Link> + ))} + </Form> + </div> + ); +}; + +export default withRouter(BoardsList); diff --git a/src/components/Login.js b/src/components/Login.js new file mode 100644 index 0000000..88269f8 --- /dev/null +++ b/src/components/Login.js @@ -0,0 +1,87 @@ +import React, { useState } from 'react'; +import { withRouter } from 'react-router'; +import axios from 'axios'; +import { Form, Image } from 'semantic-ui-react'; + +const API_URL = 'http://138.195.142.10'; + +const handleLogin = async (username, password) => { + const request_options = { + method: 'POST', + url: `${API_URL}/login`, + data: { + username, + password + } + } + return axios.request(request_options).then(resp => { + const res = resp.data; + if (res.length > 0) { + localStorage.setItem('userId', res[0].id); + return window.location.replace('/boards'); + } + }); +}; + +const handleRegister = async (username, password) => { + const request_options = { + method: 'POST', + url: `${API_URL}/users`, + data: { + username, + password + } + } + if (username && password) { + return axios.request(request_options).then(resp => { + if (resp.status === 200) { + console.log(resp); + localStorage.setItem('userId', resp.data.id); + return window.location.replace('/boards'); + } + }); + } +}; + +const Login = () => { + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + + return ( + <div style={{ margin: 'auto', maxWidth: '40%', textAlign: 'left' }}> + <Image + style={{ marginLeft: 'auto', marginRight: 'auto', marginTop: '20%', marginBottom: '10%' }} + src='https://gitlab.viarezo.fr/uploads/-/system/project/avatar/1987/react_round_red.png' size='medium' + /> + <Form> + <Form.Input + label='Username' + placeholder='Username' + value={username} + onChange={({ target }) => setUsername(target.value)} + /> + <Form.Input + label='Password' + placeholder='Password' + type='password' + value={password} + onChange={({ target }) => setPassword(target.value)} + /> + <Form.Group widths={2}> + <Form.Button + fluid + content='Login' + onClick={() => handleLogin(username, password)} + /> + <Form.Button + fluid + content='Register' + onClick={() => handleRegister(username, password)} + /> + </Form.Group> + </Form> + </div> + ); +}; + +export default withRouter(Login); diff --git a/src/index.css b/src/index.css deleted file mode 100644 index 4a1df4d..0000000 --- a/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", - "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", - monospace; -} diff --git a/src/index.js b/src/index.js index 87d1be5..f98d101 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import './index.css'; +import { BrowserRouter as Router } from 'react-router-dom'; +import 'semantic-ui-css/semantic.min.css' import App from './App'; -import * as serviceWorker from './serviceWorker'; -ReactDOM.render(<App />, document.getElementById('root')); - -// If you want your app to work offline and load faster, you can change -// unregister() to register() below. Note this comes with some pitfalls. -// Learn more about service workers: https://bit.ly/CRA-PWA -serviceWorker.unregister(); +ReactDOM.render(<Router><App className={{'backgroundColor' : '#282c34'}}/></Router>, document.getElementById('root')); diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 2e5df0d..0000000 --- a/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 170.96 159.93"><defs><style>.cls-1{fill:#09d3ac;}</style></defs><path class="cls-1" d="M141.35,73.27c0-6.89-8.11-13-20.58-16.73,3-12.67,1.69-22.75-4.28-26.16a9.55,9.55,0,0,0-4.79-1.2c-5.57,0-12.61,3.89-19.72,10.62-7.11-6.68-14.13-10.55-19.69-10.55a9.46,9.46,0,0,0-4.86,1.22c-5.94,3.42-7.17,13.44-4.21,26.05-12.41,3.71-20.48,9.77-20.5,16.63s8.12,13,20.59,16.72c-3,12.68-1.7,22.75,4.28,26.16a9.41,9.41,0,0,0,4.78,1.2c5.58,0,12.62-3.89,19.73-10.62,7.1,6.68,14.12,10.55,19.69,10.55a9.59,9.59,0,0,0,4.86-1.22c5.94-3.42,7.16-13.44,4.21-26C133.27,86.18,141.34,80.12,141.35,73.27ZM96.56,42.06c8.19-7.33,13.31-8.12,15.13-8.12h0a4.71,4.71,0,0,1,2.42.58c2.86,1.63,4,7.38,3.09,15a56.73,56.73,0,0,1-1,5.79,97.7,97.7,0,0,0-12.58-2.07,98.47,98.47,0,0,0-8.24-10.08C95.75,42.79,96.15,42.42,96.56,42.06ZM71.77,78.94c.78,1.5,1.61,3,2.47,4.51S76,86.49,77,88c-2.71-.39-5.34-.88-7.84-1.46C69.86,84,70.75,81.5,71.77,78.94ZM69,59.9c2.53-.59,5.18-1.08,7.93-1.46-1,1.48-1.86,3-2.76,4.59s-1.69,3-2.46,4.52Q70.18,63.65,69,59.9Zm5.21,13.34q1.86-3.93,4.09-7.86c1.5-2.62,3.11-5.17,4.77-7.61,2.91-.22,5.91-.34,9-.33s6,.12,8.89.35c1.66,2.42,3.25,5,4.75,7.55s2.88,5.22,4.12,7.83c-1.23,2.62-2.6,5.25-4.08,7.85s-3.11,5.18-4.77,7.62c-2.91.23-5.91.34-9,.34s-6-.13-8.89-.36c-1.66-2.42-3.26-4.94-4.76-7.55S75.5,75.85,74.25,73.24Zm32.86-14.77c2.72.38,5.35.87,7.84,1.45-.74,2.47-1.62,5-2.64,7.55-.79-1.5-1.61-3-2.48-4.51S108,59.93,107.11,58.47Zm2.76,24.92q1.29-2.27,2.46-4.53c1,2.6,2,5.16,2.7,7.66-2.52.59-5.17,1.07-7.92,1.45Q108.52,85.75,109.87,83.39ZM92,46.56c1.8,1.92,3.57,4,5.3,6.23-1.71-.07-3.46-.12-5.23-.12s-3.58,0-5.33.12C88.45,50.57,90.2,48.48,92,46.56Zm-22.18-12A4.82,4.82,0,0,1,72.29,34a13.11,13.11,0,0,1,5.19,1.31,39.07,39.07,0,0,1,10,6.78l1.17,1.07a98.49,98.49,0,0,0-8.16,10,98.88,98.88,0,0,0-12.65,2.06c-.44-1.94-.8-3.84-1-5.67C65.8,42,67,36.24,69.81,34.6ZM64.53,85.26a58.75,58.75,0,0,1-5.54-2c-7.1-3-11.5-6.85-11.5-10.14S51.91,66,59,63.05a57.63,57.63,0,0,1,5.44-1.94A97.93,97.93,0,0,0,69,73.25,98.72,98.72,0,0,0,64.53,85.26Zm23,19.1c-8.19,7.33-13.31,8.11-15.14,8.11a4.69,4.69,0,0,1-2.42-.58c-2.86-1.63-4-7.38-3.09-15a56.07,56.07,0,0,1,1-5.78,99.51,99.51,0,0,0,12.58,2.06,97.17,97.17,0,0,0,8.24,10.08Zm4.57-4.51c-1.8-1.92-3.57-4-5.31-6.23,1.72.08,3.47.12,5.24.12s3.58,0,5.33-.11C95.63,95.85,93.87,97.93,92.09,99.85Zm22.18,12a4.82,4.82,0,0,1-2.48.59c-1.82,0-7-.8-15.16-8.1l-1.17-1.07a98.44,98.44,0,0,0,8.15-10,97,97,0,0,0,12.66-2.06c.44,1.94.79,3.84,1,5.67C118.27,104.42,117.12,110.18,114.27,111.81Zm10.8-28.44c-1.71.7-3.52,1.35-5.44,1.93a98.54,98.54,0,0,0-4.57-12.14,98.1,98.1,0,0,0,4.49-12,58.75,58.75,0,0,1,5.54,2c7.09,3,11.5,6.85,11.49,10.14S132.17,80.42,125.07,83.37ZM92,82.39a9.18,9.18,0,1,0-9.17-9.19A9.17,9.17,0,0,0,92,82.39ZM31,17.88V128.53H153.07V17.88ZM148.3,123.77H35.78V22.65H148.3Zm-85-33.9c-3,12.68-1.7,22.75,4.28,26.16a9.41,9.41,0,0,0,4.78,1.2c5.58,0,12.62-3.89,19.73-10.62,7.1,6.68,14.12,10.55,19.69,10.55a9.59,9.59,0,0,0,4.86-1.22c5.94-3.42,7.16-13.44,4.21-26,12.41-3.72,20.48-9.78,20.49-16.63s-8.11-13-20.58-16.73c3-12.67,1.69-22.75-4.28-26.16a9.55,9.55,0,0,0-4.79-1.2c-5.57,0-12.61,3.89-19.72,10.62-7.11-6.68-14.13-10.55-19.69-10.55a9.46,9.46,0,0,0-4.86,1.22c-5.94,3.42-7.17,13.44-4.21,26.05-12.41,3.71-20.48,9.77-20.5,16.63S50.84,86.13,63.31,89.87Zm24.21,14.49c-8.19,7.33-13.31,8.11-15.14,8.11a4.69,4.69,0,0,1-2.42-.58c-2.86-1.63-4-7.38-3.09-15a56.07,56.07,0,0,1,1-5.78,99.51,99.51,0,0,0,12.58,2.06,97.17,97.17,0,0,0,8.24,10.08Zm24.79-36.89c-.79-1.5-1.61-3-2.48-4.51s-1.8-3-2.72-4.49c2.72.38,5.35.87,7.84,1.45C114.21,62.39,113.33,64.92,112.31,67.47Zm2.72,19c-2.52.59-5.17,1.07-7.92,1.45q1.41-2.22,2.76-4.58t2.46-4.53C113.37,81.46,114.28,84,115,86.52Zm-5.21-13.35c-1.23,2.62-2.6,5.25-4.08,7.85s-3.11,5.18-4.77,7.62c-2.91.23-5.91.34-9,.34s-6-.13-8.89-.36c-1.66-2.42-3.26-4.94-4.76-7.55s-2.87-5.22-4.12-7.83q1.86-3.93,4.09-7.86c1.5-2.62,3.11-5.17,4.77-7.61,2.91-.22,5.91-.34,9-.33s6,.12,8.89.35c1.66,2.42,3.25,5,4.75,7.55S108.58,70.56,109.82,73.17ZM77,88c-2.71-.39-5.34-.88-7.84-1.46.74-2.46,1.63-5,2.65-7.55.78,1.5,1.61,3,2.47,4.51S76,86.49,77,88ZM74.21,63c-.87,1.5-1.69,3-2.46,4.52Q70.18,63.65,69,59.9c2.53-.59,5.18-1.08,7.93-1.46C76,59.92,75.11,61.45,74.21,63ZM92.09,99.85c-1.8-1.92-3.57-4-5.31-6.23,1.72.08,3.47.12,5.24.12s3.58,0,5.33-.11C95.63,95.85,93.87,97.93,92.09,99.85Zm22.18,12a4.82,4.82,0,0,1-2.48.59c-1.82,0-7-.8-15.16-8.1l-1.17-1.07a98.44,98.44,0,0,0,8.15-10,97,97,0,0,0,12.66-2.06c.44,1.94.79,3.84,1,5.67C118.27,104.42,117.12,110.18,114.27,111.81Zm5.28-50.66a58.75,58.75,0,0,1,5.54,2c7.09,3,11.5,6.85,11.49,10.14s-4.41,7.16-11.51,10.11c-1.71.7-3.52,1.35-5.44,1.93a98.54,98.54,0,0,0-4.57-12.14A98.1,98.1,0,0,0,119.55,61.15Zm-23-19.09c8.19-7.33,13.31-8.12,15.13-8.12h0a4.71,4.71,0,0,1,2.42.58c2.86,1.63,4,7.38,3.09,15a56.73,56.73,0,0,1-1,5.79,97.7,97.7,0,0,0-12.58-2.07,98.47,98.47,0,0,0-8.24-10.08C95.75,42.79,96.15,42.42,96.56,42.06ZM92,46.56c1.8,1.92,3.57,4,5.3,6.23-1.71-.07-3.46-.12-5.23-.12s-3.58,0-5.33.12C88.45,50.57,90.2,48.48,92,46.56Zm-22.18-12A4.82,4.82,0,0,1,72.29,34a13.11,13.11,0,0,1,5.19,1.31,39.07,39.07,0,0,1,10,6.78l1.17,1.07a98.49,98.49,0,0,0-8.16,10,98.88,98.88,0,0,0-12.65,2.06c-.44-1.94-.8-3.84-1-5.67C65.8,42,67,36.24,69.81,34.6ZM59,63.05a57.63,57.63,0,0,1,5.44-1.94A97.93,97.93,0,0,0,69,73.25a98.72,98.72,0,0,0-4.49,12,58.75,58.75,0,0,1-5.54-2c-7.1-3-11.5-6.85-11.5-10.14S51.91,66,59,63.05Zm33,1a9.18,9.18,0,1,0,9.17,9.19A9.17,9.17,0,0,0,92,64Zm0,0a9.18,9.18,0,1,0,9.17,9.19A9.17,9.17,0,0,0,92,64Zm0,0a9.18,9.18,0,1,0,9.17,9.19A9.17,9.17,0,0,0,92,64Zm49.35,9.24c0-6.89-8.11-13-20.58-16.73,3-12.67,1.69-22.75-4.28-26.16a9.55,9.55,0,0,0-4.79-1.2c-5.57,0-12.61,3.89-19.72,10.62-7.11-6.68-14.13-10.55-19.69-10.55a9.46,9.46,0,0,0-4.86,1.22c-5.94,3.42-7.17,13.44-4.21,26.05-12.41,3.71-20.48,9.77-20.5,16.63s8.12,13,20.59,16.72c-3,12.68-1.7,22.75,4.28,26.16a9.41,9.41,0,0,0,4.78,1.2c5.58,0,12.62-3.89,19.73-10.62,7.1,6.68,14.12,10.55,19.69,10.55a9.59,9.59,0,0,0,4.86-1.22c5.94-3.42,7.16-13.44,4.21-26C133.27,86.18,141.34,80.12,141.35,73.27ZM96.56,42.06c8.19-7.33,13.31-8.12,15.13-8.12h0a4.71,4.71,0,0,1,2.42.58c2.86,1.63,4,7.38,3.09,15a56.73,56.73,0,0,1-1,5.79,97.7,97.7,0,0,0-12.58-2.07,98.47,98.47,0,0,0-8.24-10.08C95.75,42.79,96.15,42.42,96.56,42.06ZM71.77,78.94c.78,1.5,1.61,3,2.47,4.51S76,86.49,77,88c-2.71-.39-5.34-.88-7.84-1.46C69.86,84,70.75,81.5,71.77,78.94ZM69,59.9c2.53-.59,5.18-1.08,7.93-1.46-1,1.48-1.86,3-2.76,4.59s-1.69,3-2.46,4.52Q70.18,63.65,69,59.9Zm5.21,13.34q1.86-3.93,4.09-7.86c1.5-2.62,3.11-5.17,4.77-7.61,2.91-.22,5.91-.34,9-.33s6,.12,8.89.35c1.66,2.42,3.25,5,4.75,7.55s2.88,5.22,4.12,7.83c-1.23,2.62-2.6,5.25-4.08,7.85s-3.11,5.18-4.77,7.62c-2.91.23-5.91.34-9,.34s-6-.13-8.89-.36c-1.66-2.42-3.26-4.94-4.76-7.55S75.5,75.85,74.25,73.24Zm32.86-14.77c2.72.38,5.35.87,7.84,1.45-.74,2.47-1.62,5-2.64,7.55-.79-1.5-1.61-3-2.48-4.51S108,59.93,107.11,58.47Zm2.76,24.92q1.29-2.27,2.46-4.53c1,2.6,2,5.16,2.7,7.66-2.52.59-5.17,1.07-7.92,1.45Q108.52,85.75,109.87,83.39ZM92,46.56c1.8,1.92,3.57,4,5.3,6.23-1.71-.07-3.46-.12-5.23-.12s-3.58,0-5.33.12C88.45,50.57,90.2,48.48,92,46.56Zm-22.18-12A4.82,4.82,0,0,1,72.29,34a13.11,13.11,0,0,1,5.19,1.31,39.07,39.07,0,0,1,10,6.78l1.17,1.07a98.49,98.49,0,0,0-8.16,10,98.88,98.88,0,0,0-12.65,2.06c-.44-1.94-.8-3.84-1-5.67C65.8,42,67,36.24,69.81,34.6ZM64.53,85.26a58.75,58.75,0,0,1-5.54-2c-7.1-3-11.5-6.85-11.5-10.14S51.91,66,59,63.05a57.63,57.63,0,0,1,5.44-1.94A97.93,97.93,0,0,0,69,73.25,98.72,98.72,0,0,0,64.53,85.26Zm23,19.1c-8.19,7.33-13.31,8.11-15.14,8.11a4.69,4.69,0,0,1-2.42-.58c-2.86-1.63-4-7.38-3.09-15a56.07,56.07,0,0,1,1-5.78,99.51,99.51,0,0,0,12.58,2.06,97.17,97.17,0,0,0,8.24,10.08Zm4.57-4.51c-1.8-1.92-3.57-4-5.31-6.23,1.72.08,3.47.12,5.24.12s3.58,0,5.33-.11C95.63,95.85,93.87,97.93,92.09,99.85Zm22.18,12a4.82,4.82,0,0,1-2.48.59c-1.82,0-7-.8-15.16-8.1l-1.17-1.07a98.44,98.44,0,0,0,8.15-10,97,97,0,0,0,12.66-2.06c.44,1.94.79,3.84,1,5.67C118.27,104.42,117.12,110.18,114.27,111.81Zm10.8-28.44c-1.71.7-3.52,1.35-5.44,1.93a98.54,98.54,0,0,0-4.57-12.14,98.1,98.1,0,0,0,4.49-12,58.75,58.75,0,0,1,5.54,2c7.09,3,11.5,6.85,11.49,10.14S132.17,80.42,125.07,83.37ZM92,82.39a9.18,9.18,0,1,0-9.17-9.19A9.17,9.17,0,0,0,92,82.39Zm-69.32,54.5V26.2L17.89,31V141.66H139.94l4.78-4.77Z"/></svg> \ No newline at end of file diff --git a/src/serviceWorker.js b/src/serviceWorker.js deleted file mode 100644 index f8c7e50..0000000 --- a/src/serviceWorker.js +++ /dev/null @@ -1,135 +0,0 @@ -// This optional code is used to register a service worker. -// register() is not called by default. - -// This lets the app load faster on subsequent visits in production, and gives -// it offline capabilities. However, it also means that developers (and users) -// will only see deployed updates on subsequent visits to a page, after all the -// existing tabs open on the page have been closed, since previously cached -// resources are updated in the background. - -// To learn more about the benefits of this model and instructions on how to -// opt-in, read https://bit.ly/CRA-PWA - -const isLocalhost = Boolean( - window.location.hostname === 'localhost' || - // [::1] is the IPv6 localhost address. - window.location.hostname === '[::1]' || - // 127.0.0.1/8 is considered localhost for IPv4. - window.location.hostname.match( - /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ - ) -); - -export function register(config) { - if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { - // The URL constructor is available in all browsers that support SW. - const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); - if (publicUrl.origin !== window.location.origin) { - // Our service worker won't work if PUBLIC_URL is on a different origin - // from what our page is served on. This might happen if a CDN is used to - // serve assets; see https://github.com/facebook/create-react-app/issues/2374 - return; - } - - window.addEventListener('load', () => { - const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; - - if (isLocalhost) { - // This is running on localhost. Let's check if a service worker still exists or not. - checkValidServiceWorker(swUrl, config); - - // Add some additional logging to localhost, pointing developers to the - // service worker/PWA documentation. - navigator.serviceWorker.ready.then(() => { - console.log( - 'This web app is being served cache-first by a service ' + - 'worker. To learn more, visit https://bit.ly/CRA-PWA' - ); - }); - } else { - // Is not localhost. Just register service worker - registerValidSW(swUrl, config); - } - }); - } -} - -function registerValidSW(swUrl, config) { - navigator.serviceWorker - .register(swUrl) - .then(registration => { - registration.onupdatefound = () => { - const installingWorker = registration.installing; - if (installingWorker == null) { - return; - } - installingWorker.onstatechange = () => { - if (installingWorker.state === 'installed') { - if (navigator.serviceWorker.controller) { - // At this point, the updated precached content has been fetched, - // but the previous service worker will still serve the older - // content until all client tabs are closed. - console.log( - 'New content is available and will be used when all ' + - 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' - ); - - // Execute callback - if (config && config.onUpdate) { - config.onUpdate(registration); - } - } else { - // At this point, everything has been precached. - // It's the perfect time to display a - // "Content is cached for offline use." message. - console.log('Content is cached for offline use.'); - - // Execute callback - if (config && config.onSuccess) { - config.onSuccess(registration); - } - } - } - }; - }; - }) - .catch(error => { - console.error('Error during service worker registration:', error); - }); -} - -function checkValidServiceWorker(swUrl, config) { - // Check if the service worker can be found. If it can't reload the page. - fetch(swUrl) - .then(response => { - // Ensure service worker exists, and that we really are getting a JS file. - const contentType = response.headers.get('content-type'); - if ( - response.status === 404 || - (contentType != null && contentType.indexOf('javascript') === -1) - ) { - // No service worker found. Probably a different app. Reload the page. - navigator.serviceWorker.ready.then(registration => { - registration.unregister().then(() => { - window.location.reload(); - }); - }); - } else { - // Service worker found. Proceed as normal. - registerValidSW(swUrl, config); - } - }) - .catch(() => { - console.log( - 'No internet connection found. App is running in offline mode.' - ); - }); -} - -export function unregister() { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.ready.then(registration => { - registration.unregister(); - }); - } -} diff --git a/yarn.lock b/yarn.lock index b639a28..1bb4dc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -846,7 +846,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.2.tgz#c3d6e41b304ef10dcf13777a33e7694ec4a9a6dd" integrity sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg== @@ -1097,6 +1097,31 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@semantic-ui-react/event-stack@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@semantic-ui-react/event-stack/-/event-stack-3.1.0.tgz#aadbe4a28b0dd7703c5f451640d0fefe66dd9208" + integrity sha512-WHtU9wutZByZtFZxzj4BVEk+rvWldZpZhRcyv6d84+XLSolm83zLHYJLTACGuSl6Xa/xpgVXquvm9GyMudkJYg== + dependencies: + exenv "^1.2.2" + prop-types "^15.6.2" + +"@stardust-ui/react-component-event-listener@~0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@stardust-ui/react-component-event-listener/-/react-component-event-listener-0.38.0.tgz#1787faded94b40ad41226e6289baf13e701c6e7f" + integrity sha512-sIP/e0dyOrrlb8K7KWumfMxj/gAifswTBC4o68Aa+C/GA73ccRp/6W1VlHvF/dlOR4KLsA+5SKnhjH36xzPsWg== + dependencies: + "@babel/runtime" "^7.1.2" + prop-types "^15.7.2" + +"@stardust-ui/react-component-ref@~0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@stardust-ui/react-component-ref/-/react-component-ref-0.38.0.tgz#52d555f2d5edd213c923c93a106f7de940e427ef" + integrity sha512-xjs6WnvJVueSIXMWw0C3oWIgAPpcD03qw43oGOjUXqFktvpNkB73JoKIhS4sCrtQxBdct75qqr4ZL6JiyPcESw== + dependencies: + "@babel/runtime" "^7.1.2" + prop-types "^15.7.2" + react-is "^16.6.3" + "@svgr/babel-plugin-add-jsx-attribute@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1" @@ -1827,6 +1852,14 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +axios@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" + integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + axobject-query@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" @@ -2426,6 +2459,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + clean-css@4.2.x: version "4.2.1" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" @@ -2769,6 +2807,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-react-context@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" + integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3058,6 +3104,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^3.0.0, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -3781,6 +3834,11 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +exenv@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4070,6 +4128,13 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" @@ -4354,6 +4419,11 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + gzip-size@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" @@ -4482,6 +4552,18 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4491,6 +4573,13 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" + integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== + dependencies: + react-is "^16.7.0" + hosted-git-info@^2.1.4: version "2.8.4" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" @@ -4908,6 +4997,11 @@ is-buffer@^1.0.2, is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" @@ -5126,6 +5220,11 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -5573,6 +5672,11 @@ jest@24.9.0: import-local "^2.0.0" jest-cli "^24.9.0" +jquery@x.*: + version "3.4.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" + integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== + js-levenshtein@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" @@ -5756,6 +5860,11 @@ jsx-ast-utils@^2.1.0, jsx-ast-utils@^2.2.1: array-includes "^3.0.3" object.assign "^4.1.0" +keyboard-key@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/keyboard-key/-/keyboard-key-1.0.4.tgz#52d8fa07b7e17757072aa22a67fb4ae85e4c46b0" + integrity sha512-my04dE6BCwPpwoe4KYKfPxWiwgDYQOHrVmtzn1CfzmoEsGG/ef4oZGaXCzi1+iFhG7CN5JkOuxmei5OABY8/ag== + killable@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -5948,7 +6057,7 @@ loglevel@^1.4.1: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56" integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -6145,6 +6254,15 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mini-create-react-context@^0.3.0: + version "0.3.2" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189" + integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw== + dependencies: + "@babel/runtime" "^7.4.0" + gud "^1.0.0" + tiny-warning "^1.0.2" + mini-css-extract-plugin@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" @@ -6939,6 +7057,13 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= + dependencies: + isarray "0.0.1" + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -7043,6 +7168,11 @@ pnp-webpack-plugin@1.5.0: dependencies: ts-pnp "^1.1.2" +popper.js@^1.14.4: + version "1.15.0" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" + integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== + portfinder@^1.0.9: version "1.0.24" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.24.tgz#11efbc6865f12f37624b6531ead1d809ed965cfa" @@ -7790,7 +7920,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.3" -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -7997,7 +8127,7 @@ react-dev-utils@^9.1.0: strip-ansi "5.2.0" text-table "0.2.0" -react-dom@16.10.2: +react-dom@^16.10.2: version "16.10.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.2.tgz#4840bce5409176bc3a1f2bd8cb10b92db452fda6" integrity sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw== @@ -8012,11 +8142,57 @@ react-error-overlay@^6.0.3: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.3.tgz#c378c4b0a21e88b2e159a3e62b2f531fd63bf60d" integrity sha512-bOUvMWFQVk5oz8Ded9Xb7WVdEi3QGLC8tH7HmYP0Fdp4Bn3qw0tRFmr5TW6mvahzvmrK4a6bqWGfCevBflP+Xw== +react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.6: + version "16.10.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab" + integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA== + react-is@^16.8.1, react-is@^16.8.4: version "16.10.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.1.tgz#0612786bf19df406502d935494f0450b40b8294f" integrity sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw== +react-popper@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.4.tgz#f0cd3b0d30378e1f663b0d79bcc8614221652ced" + integrity sha512-9AcQB29V+WrBKk6X7p0eojd1f25/oJajVdMZkywIoAV6Ag7hzE1Mhyeup2Q1QnvFRtGQFQvtqfhlEoDAPfKAVA== + dependencies: + "@babel/runtime" "^7.1.2" + create-react-context "^0.3.0" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + +react-router-dom@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18" + integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.1.2" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.1.2, react-router@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418" + integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.3.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + react-scripts@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-3.2.0.tgz#58ccd6b4ffa27f1b4d2986cbdcaa916660e9e33c" @@ -8078,7 +8254,7 @@ react-scripts@3.2.0: optionalDependencies: fsevents "2.0.7" -react@16.10.2: +react@^16.10.2: version "16.10.2" resolved "https://registry.yarnpkg.com/react/-/react-16.10.2.tgz#a5ede5cdd5c536f745173c8da47bda64797a4cf0" integrity sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw== @@ -8354,6 +8530,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + resolve-url-loader@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.0.tgz#54d8181d33cd1b66a59544d05cadf8e4aa7d37cc" @@ -8568,6 +8749,30 @@ selfsigned@^1.9.1: dependencies: node-forge "0.9.0" +semantic-ui-css@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/semantic-ui-css/-/semantic-ui-css-2.4.1.tgz#f5aea39fafb787cbd905ec724272a3f9cba9004a" + integrity sha512-Pkp0p9oWOxlH0kODx7qFpIRYpK1T4WJOO4lNnpNPOoWKCrYsfHqYSKgk5fHfQtnWnsAKy7nLJMW02bgDWWFZFg== + dependencies: + jquery x.* + +semantic-ui-react@^0.88.1: + version "0.88.1" + resolved "https://registry.yarnpkg.com/semantic-ui-react/-/semantic-ui-react-0.88.1.tgz#006d63f838b651370d68e73510327308f19ff6fd" + integrity sha512-fCCDnRXiVJUJ9icFVSu0n0pZ2cg2QssiLM2nP4pz6aODQpPZTPtXVI6V/hFciwJ+GPkV6WZAmEmFLxR7nRVF4Q== + dependencies: + "@babel/runtime" "^7.1.2" + "@semantic-ui-react/event-stack" "^3.1.0" + "@stardust-ui/react-component-event-listener" "~0.38.0" + "@stardust-ui/react-component-ref" "~0.38.0" + classnames "^2.2.6" + keyboard-key "^1.0.4" + lodash "^4.17.15" + prop-types "^15.7.2" + react-is "^16.8.6" + react-popper "^1.3.4" + shallowequal "^1.1.0" + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -8680,6 +8885,11 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -9296,6 +9506,16 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tiny-invariant@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" + integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== + +tiny-warning@^1.0.0, tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9430,6 +9650,11 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== +typed-styles@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -9638,6 +9863,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -9685,6 +9915,13 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^4.0.2, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" -- GitLab