finished basic room functionality and user auth

This commit is contained in:
Rushil Umaretiya 2020-12-31 01:15:03 -05:00
parent 2238bd403c
commit afc94bc41b
No known key found for this signature in database
GPG Key ID: 4E8FAF9C926AF959
19 changed files with 1481 additions and 113 deletions

View File

@ -14,11 +14,11 @@ def generate_unique_code():
# Create your models here.
class Room(models.Model):
code = models.CharField(max_length=8, default="", unique=True)
code = models.CharField(max_length=8, default=generate_unique_code, unique=True)
host = models.CharField(max_length=50, unique=True)
guest_can_pause = models.BooleanField(null=False, default=False)
votes_to_skip = models.IntegerField(null=False, default=0)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'Room ({self.code}'
return f'Room ({self.code})'

View File

@ -5,3 +5,15 @@ class RoomSerializer(serializers.ModelSerializer):
class Meta:
model = Room
fields = ('id', 'code', 'host', 'guest_can_pause', 'votes_to_skip', 'created_at')
class CreateRoomSerializer(serializers.ModelSerializer):
class Meta:
model = Room
fields = ('guest_can_pause', 'votes_to_skip')
class UpdateRoomSerializer(serializers.ModelSerializer):
code = serializers.CharField(validators=[])
class Meta:
model = Room
fields = ('guest_can_pause', 'votes_to_skip', 'code')

View File

@ -2,5 +2,11 @@ from django.urls import path
from . import views
urlpatterns = [
path('rooms', views.RoomView.as_view(), name="rooms")
path('rooms', views.RoomView.as_view(), name="rooms"),
path('rooms/create', views.CreateRoomView.as_view(), name="create-room"),
path('rooms/get', views.GetRoom.as_view(), name="get-room"),
path('rooms/join', views.JoinRoom.as_view(), name="join-room"),
path('rooms/leave', views.LeaveRoom.as_view(), name='leave-room'),
path('rooms/update', views.UpdateRoomView.as_view(), name='update-room'),
path('rooms/user-details', views.UserDetails.as_view(), name='user-details')
]

View File

@ -1,16 +1,124 @@
from django.shortcuts import render
from rest_framework.generics import CreateAPIView
from django.http import JsonResponse
from rest_framework.views import APIView
from rest_framework.generics import ListAPIView
from rest_framework import status
from rest_framework.response import Response
from .serializers import RoomSerializer
from .serializers import RoomSerializer, CreateRoomSerializer, UpdateRoomSerializer
from .models import Room
# Create your views here.
class RoomView(CreateAPIView):
class RoomView(ListAPIView):
queryset = Room.objects.all()
serializer_class = RoomSerializer
class GetRoom(APIView):
serializer_class = RoomSerializer
lookup_url_kwarg = 'code'
def get(self, request, format=None):
rooms = Room.objects.all()
serializer = RoomSerializer(rooms, many=True)
return Response(serializer.data)
code = request.GET.get(self.lookup_url_kwarg)
if code != None:
room = Room.objects.filter(code=code)
if room.exists():
data = RoomSerializer(room[0]).data
data['is_host'] = self.request.session.session_key == room[0].host
return Response(data, status=status.HTTP_200_OK)
else:
return Response({'Room Not Found': 'Invalid Room Code.'}, status=status.HTTP_400_BAD_REQUEST)
class JoinRoom(APIView):
lookup_url_kwarg = 'code'
def post(self, request, format=None):
if not self.request.session.exists(self.request.session.session_key):
self.request.session.create()
code = request.data.get(self.lookup_url_kwarg)
if code != None:
room_set = Room.objects.filter(code=code)
if room_set.exists():
room = room_set[0]
self.request.session['code'] = code
return Response({'message': 'Room Joined.'}, status=status.HTTP_200_OK)
else:
return Response({'Bad Request': 'Invalid room code'}, status=status.HTTP_400_BAD_REQUEST)
else:
return Response({'Bad Request': 'Invalid data, did not find code'}, status=status.HTTP_400_BAD_REQUEST)
class LeaveRoom(APIView):
def patch(self, request, format=None):
if 'code' in self.request.session:
self.request.session.pop('code')
host = self.request.session.session_key
room_set = Room.objects.filter(host=host)
if room_set.exists():
room = room_set[0]
room.delete()
return Response({'message': 'Success'}, status=status.HTTP_200_OK)
class CreateRoomView(APIView):
serializer_class = CreateRoomSerializer
def post(self, request, format=None):
if not self.request.session.exists(self.request.session.session_key):
self.request.session.create()
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
guest_can_pause = serializer.data.get("guest_can_pause")
votes_to_skip = serializer.data.get("votes_to_skip")
host = self.request.session.session_key
queryset = Room.objects.filter(host=host)
if queryset.exists():
room = queryset[0]
room.guest_can_pause = guest_can_pause
room.votes_to_skip = votes_to_skip
room.save(update_fields=['guest_can_pause', 'votes_to_skip'])
self.request.session['code'] = room.code
return Response(RoomSerializer(room).data, status=status.HTTP_200_OK)
else:
room = Room(host=host, guest_can_pause=guest_can_pause, votes_to_skip=votes_to_skip)
room.save()
self.request.session['code'] = room.code
return Response(RoomSerializer(room).data, status=status.HTTP_201_CREATED)
else:
return Response({'Bad Request': 'Invalid data...'}, status=status.HTTP_400_BAD_REQUEST)
class UpdateRoomView(APIView):
serializer_class = UpdateRoomSerializer
def patch(self, request, format=None):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
guest_can_pause = serializer.data.get('guest_can_pause')
votes_to_skip = serializer.data.get('votes_to_skip')
code = serializer.data.get('code')
room_set = Room.objects.filter(code=code)
if room_set.exists():
room = room_set[0]
user_id = self.request.session.session_key
if room.host != user_id:
return Response({'message': 'You are not the host of this room.'}, status = status.HTTP_403_FORBIDDEN)
room.guest_can_pause = guest_can_pause
room.votes_to_skip = votes_to_skip
room.code = code
room.save(update_fields=['guest_can_pause', 'votes_to_skip'])
return Response(RoomSerializer(room).data, status=status.HTTP_200_OK)
else:
return Response({'Bad Request': 'No room was found'}, status=status.HTTP_404_NOT_FOUND)
return Response({'Bad Request': 'Invalid data'}, status=status.HTTP_400_BAD_REQUEST)
class UserDetails(APIView):
def get(self, request, format=None):
if not self.request.session.exists(self.request.session.session_key):
self.request.session.create()
data = {
'code': self.request.session.get('code')
}
return JsonResponse(data, status=status.HTTP_200_OK)

View File

@ -31,6 +31,9 @@
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@material-ui/core": "^4.11.2",
"@material-ui/icons": "^4.11.2",
"@material-ui/lab": "^4.0.0-alpha.57",
"eslint-config-react-app": "^6.0.0",
"eslint-plugin-jest": "^24.1.3",
"react-router-dom": "^5.2.0"
}
}

View File

@ -1,46 +1,22 @@
import React, { useEffect, useState } from "react";
import Hello from "./components/Hello";
import { useFetch } from "./useFetch";
import { useForm } from "./useForm";
import React from "react";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import CreateRoom from "./components/CreateRoom";
import Home from "./components/Home";
import JoinRoom from "./components/JoinRoom";
import Room from "./components/Room";
const App = (props) => {
const [values, handleChange] = useForm({
firstName: "",
email: "",
password: "",
});
const [count, setCount] = useState(0);
const { data, loading } = useFetch(`http://numbersapi.com/${count}/math`);
return (
<>
<div>{!data ? "loading..." : data}</div>
<div>count = {count}</div>
<button onClick={() => setCount((c) => c + 1)}>increment</button>
{/* <button onClick={() => setShowHello(!showHello)}>show/hide</button> */}
{/* {showHello && <Hello />} */}
<div>
<input
name="email"
placeholder="email"
value={values.email}
onChange={handleChange}
/>
<input
name="firstName"
placeholder="first name"
value={values.firstName}
onChange={handleChange}
/>
<input
type="password"
placeholder="password"
name="password"
value={values.password}
onChange={handleChange}
/>
<div className="center">
<Router>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/join" component={JoinRoom} />
<Route path="/create" component={CreateRoom} />
<Route path="/room/:code" component={Room} />
</Switch>
</Router>
</div>
</>
);
};

View File

@ -0,0 +1,164 @@
import React, { Component, useState } from "react";
import { Link } from "react-router-dom";
import {
Button,
Grid,
Typography,
TextField,
FormHelperText,
FormControl,
Radio,
RadioGroup,
FormLabel,
FormControlLabel,
Collapse,
} from "@material-ui/core";
import { Alert } from "@material-ui/lab";
const DEFAULT_VOTES = 2;
const CreateRoom = (props) => {
const [guestCanPause, setGuestCanPause] = useState(
props.guestCanPause || true
);
const [votesToSkip, setVotesToSkip] = useState(
props.votesToSkip || DEFAULT_VOTES
);
const [error, setError] = useState("");
const [success, setSuccess] = useState("");
const onSubmitCreate = () => {
const requestOptions = {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
votes_to_skip: votesToSkip,
guest_can_pause: guestCanPause,
}),
};
fetch("/api/rooms/create", requestOptions)
.then((response) => response.json())
.then((data) => props.history.push(`/room/${data.code}`));
};
const onSubmitUpdate = () => {
const requestOptions = {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
votes_to_skip: votesToSkip,
guest_can_pause: guestCanPause,
code: props.code,
}),
};
fetch("/api/rooms/update", requestOptions).then((response) => {
if (response.ok) {
setSuccess("Room updated!");
} else {
setError("Error updating room.");
}
});
props.updateCallback();
};
const title = props.update ? "Update Room" : "Create a Room";
const createButton = () => {
return (
<>
<Grid item xs={12} align="center">
<Button color="primary" variant="contained" onClick={onSubmitCreate}>
Create A room
</Button>
</Grid>
<Grid item xs={12} align="center">
<Button color="secondary" variant="contained" to="/" component={Link}>
Back
</Button>
</Grid>
</>
);
};
const updateButton = () => {
return (
<>
<Grid item xs={12} align="center">
<Button color="primary" variant="contained" onClick={onSubmitUpdate}>
Update room~
</Button>
</Grid>
</>
);
};
return (
<Grid container spacing={1}>
<Grid item xs={12} align="center">
<Collapse in={error != "" || success != ""}>
<Alert>{success != "" ? success : error}</Alert>
</Collapse>
</Grid>
<Grid item xs={12} align="center">
<Typography component="h4" variant="h4">
{title}
</Typography>
</Grid>
<Grid item xs={12} align="center">
<FormControl component="fieldset">
<FormHelperText>
<div align="center">Guest Control of Playback State</div>
</FormHelperText>
<RadioGroup
row
defaultValue={props.guestCanPause.toString()}
onChange={(e) => {
setGuestCanPause(e.target.value === "true" ? true : false);
}}
>
<FormControlLabel
value="true"
control={<Radio color="primary" />}
label="Play/Pause"
labelPlacement="bottom"
/>
<FormControlLabel
value="false"
control={<Radio color="secondary" />}
label="No Control"
labelPlacement="bottom"
/>
</RadioGroup>
</FormControl>
<Grid item xs={12} align="center">
<FormControl>
<TextField
required={true}
type="number"
defaultValue={props.votesToSkip}
inputProps={{
min: 1,
style: { textAlign: "center" },
}}
onChange={(e) => {
setVotesToSkip(e.target.value);
}}
/>
<FormHelperText>
<div align="center">Votes required to skip song</div>
</FormHelperText>
</FormControl>
</Grid>
</Grid>
{props.update ? updateButton() : createButton()}
</Grid>
);
};
export default CreateRoom;

View File

@ -1,15 +0,0 @@
import React, { useEffect } from "react";
function Hello(props) {
useEffect(() => {
console.log("bruh");
return () => {
console.log("unmounted!");
};
}, []);
return <div>Hey!</div>;
}
export default Hello;

View File

@ -0,0 +1,41 @@
import React, { useEffect, useState } from "react";
import { Link, Redirect } from "react-router-dom";
import { Grid, Button, ButtonGroup, Typography } from "@material-ui/core";
const Home = (props) => {
const [code, setCode] = useState();
useEffect(() => {
fetch("/api/rooms/user-details")
.then((response) => response.json())
.then((data) => {
setCode(data.code);
});
}, []);
const homepage = (
<>
<Grid container spacing={3}>
<Grid item xs={12} align="center">
<Typography variant="h3" compact="h3">
House Party
</Typography>
</Grid>
<Grid item xs={12} align="center">
<ButtonGroup disableElevation variant="contained" color="primary">
<Button color="primary" to="/join" component={Link}>
Join a room
</Button>
<Button color="secondary" to="/create" component={Link}>
Create a room
</Button>
</ButtonGroup>
</Grid>
</Grid>
</>
);
return code ? <Redirect to={`/room/${code}`} /> : homepage;
};
export default Home;

View File

@ -0,0 +1,66 @@
import React, { useState } from "react";
import { Link } from "react-router-dom";
import { TextField, Button, Grid, Typography } from "@material-ui/core";
const JoinRoom = (props) => {
const [code, setCode] = useState();
const [error, setError] = useState();
const onSubmit = () => {
const requestOptions = {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
code: code,
}),
};
fetch("/api/rooms/join", requestOptions)
.then((response) => {
if (response.ok) {
props.history.push(`/room/${code}`);
} else {
setCode("");
setError("Room not found.");
}
})
.catch((error) => {
console.log(error);
});
};
return (
<Grid container spacing={1}>
<Grid item align="center" xs={12}>
<Typography variant="h4" component="h4">
Join a room
</Typography>
</Grid>
<Grid item align="center" xs={12}>
<TextField
error={error}
label="Code"
placeholder="Enter a room code"
value={code}
helperText={error}
variant="outlined"
onChange={(e) => {
setCode(e.target.value);
}}
/>
</Grid>
<Grid item align="center" xs={12}>
<Button variant="contained" color="primary" onClick={onSubmit}>
Join Room
</Button>
</Grid>
<Grid item align="center" xs={12}>
<Button variant="contained" color="secondary" to="/" component={Link}>
Back
</Button>
</Grid>
</Grid>
);
};
export default JoinRoom;

View File

@ -0,0 +1,118 @@
import React, { useEffect, useState } from "react";
import { Grid, Button, Typography } from "@material-ui/core";
import "./CreateRoom";
import CreateRoom from "./CreateRoom";
const Room = (props) => {
const [votesToSkip, setVotesToSkip] = useState(2);
const [guestCanPause, setGuestCanPause] = useState(false);
const [isHost, setIsHost] = useState(false);
const [showSettings, setShowSettings] = useState(false);
const code = props.match.params.code;
useEffect(() => {
getRoom();
}, []);
const getRoom = () => {
fetch(`/api/rooms/get?code=${code}`)
.then((response) => {
if (response.ok) {
return response.json();
} else {
props.history.push("/");
}
})
.then((data) => {
setVotesToSkip(data.votes_to_skip);
setGuestCanPause(data.guest_can_pause);
setIsHost(data.is_host);
});
};
const leaveRoom = () => {
const requestOptions = {
method: "PATCH",
headers: { "Content-Type": "application/json" },
};
fetch("/api/rooms/leave", requestOptions).then((response) => {
props.history.push("/");
});
};
const settingsButton = () => {
return (
<Grid item xs={12} align="center">
<Button
variant="contained"
color="primary"
onClick={() => setShowSettings(true)}
>
Settings
</Button>
</Grid>
);
};
const settings = () => {
return (
<Grid container spacing={1}>
<Grid item xs={12} align="center">
<CreateRoom
update={true}
votesToSkip={votesToSkip}
guestCanPause={guestCanPause}
code={code}
updateCallback={getRoom}
/>
</Grid>
<Grid item xs={12} align="center">
<Button
variant="contained"
color="secondary"
onClick={() => setShowSettings(false)}
>
Close
</Button>
</Grid>
</Grid>
);
};
if (showSettings) return settings();
else
return (
<>
<Grid container spacing={1}>
<Grid item xs={12} align="center">
<Typography variant="h2" component="h4">
Code: {code}
</Typography>
</Grid>
<Grid item xs={12} align="center">
<Typography variant="h4" component="h4">
Votes needed to skip: {votesToSkip}
</Typography>
</Grid>
<Grid item xs={12} align="center">
<Typography variant="h4" component="h4">
Guest can pause: {guestCanPause.toString()}
</Typography>
</Grid>
<Grid item xs={12} align="center">
<Typography variant="h4" component="h4">
Is Host: {isHost.toString()}
</Typography>
</Grid>
{isHost ? settingsButton() : null}
<Grid item align="center" xs={12}>
<Button variant="contained" color="secondary" onClick={leaveRoom}>
Leave room
</Button>
</Grid>
</Grid>
</>
);
};
export default Room;

View File

@ -1,15 +0,0 @@
import { useEffect, useState } from "react";
export const useFetch = (url) => {
const [state, setState] = useState({ data: null, loading: true });
useEffect(() => {
setState((state) => ({ data: state.data, loading: true }));
fetch(url)
.then((x) => x.text())
.then((y) => {
setState({ data: y, loading: false });
});
}, []);
return state;
};

View File

@ -1,15 +0,0 @@
import { useState } from "react";
export const useForm = (initialValues) => {
const [values, setValues] = useState(initialValues);
return [
values,
(e) => {
setValues({
...values,
[e.target.name]: e.target.value,
});
},
];
};

View File

@ -0,0 +1,19 @@
#root {
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
}
#app {
width: 100%;
height: 100%;
}
.center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

File diff suppressed because one or more lines are too long

View File

@ -6,22 +6,34 @@
!*** ./src/index.js ***!
\**********************/
/*!************************!*\
!*** ./src/useForm.js ***!
\************************/
/*!********************************!*\
!*** ./src/components/Home.js ***!
\********************************/
/*!*************************!*\
!*** ./src/useFetch.js ***!
\*************************/
/*!********************************!*\
!*** ./src/components/Room.js ***!
\********************************/
/*!*********************************!*\
!*** ./src/components/Hello.js ***!
\*********************************/
/*!************************************!*\
!*** ./src/components/JoinRoom.js ***!
\************************************/
/*!*************************************!*\
!*** ./node_modules/react/index.js ***!
\*************************************/
/*!**************************************!*\
!*** ./src/components/CreateRoom.js ***!
\**************************************/
/*!***************************************!*\
!*** ./node_modules/isarray/index.js ***!
\***************************************/
/*!****************************************!*\
!*** ./node_modules/react-is/index.js ***!
\****************************************/
/*!*****************************************!*\
!*** ./node_modules/react-dom/index.js ***!
\*****************************************/
@ -30,14 +42,246 @@
!*** ./node_modules/scheduler/index.js ***!
\*****************************************/
/*!******************************************!*\
!*** ./node_modules/clsx/dist/clsx.m.js ***!
\******************************************/
/*!******************************************!*\
!*** ./node_modules/jss/dist/jss.esm.js ***!
\******************************************/
/*!******************************************!*\
!*** ./node_modules/prop-types/index.js ***!
\******************************************/
/*!*********************************************!*\
!*** ./node_modules/history/esm/history.js ***!
\*********************************************/
/*!*********************************************!*\
!*** ./node_modules/object-assign/index.js ***!
\*********************************************/
/*!**********************************************!*\
!*** ./node_modules/path-to-regexp/index.js ***!
\**********************************************/
/*!***************************************************!*\
!*** ./node_modules/is-in-browser/dist/module.js ***!
\***************************************************/
/*!****************************************************!*\
!*** ./node_modules/hyphenate-style-name/index.js ***!
\****************************************************/
/*!*****************************************************!*\
!*** ./node_modules/value-equal/esm/value-equal.js ***!
\*****************************************************/
/*!*******************************************************!*\
!*** ./node_modules/@material-ui/system/esm/merge.js ***!
\*******************************************************/
/*!*******************************************************!*\
!*** ./node_modules/react-router/esm/react-router.js ***!
\*******************************************************/
/*!********************************************************!*\
!*** ./node_modules/css-vendor/dist/css-vendor.esm.js ***!
\********************************************************/
/*!********************************************************!*\
!*** ./node_modules/react/cjs/react.production.min.js ***!
\********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Grid/Grid.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Grow/Grow.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/List/List.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Menu/Menu.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/system/esm/memoize.js ***!
\*********************************************************/
/*!*********************************************************!*\
!*** ./node_modules/@material-ui/system/esm/spacing.js ***!
\*********************************************************/
/*!**********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/red.js ***!
\**********************************************************/
/*!**********************************************************!*\
!*** ./node_modules/@material-ui/lab/esm/Alert/Alert.js ***!
\**********************************************************/
/*!**********************************************************!*\
!*** ./node_modules/@material-ui/utils/esm/deepmerge.js ***!
\**********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Input/Input.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Modal/Modal.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Paper/Paper.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Radio/Radio.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/blue.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/grey.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/pink.js ***!
\***********************************************************/
/*!***********************************************************!*\
!*** ./node_modules/react-transition-group/esm/config.js ***!
\***********************************************************/
/*!************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***!
\************************************************************/
/*!************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/green.js ***!
\************************************************************/
/*!************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/shape.js ***!
\************************************************************/
/*!************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/setRef.js ***!
\************************************************************/
/*!************************************************************!*\
!*** ./node_modules/tiny-warning/dist/tiny-warning.esm.js ***!
\************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Button/Button.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Portal/Portal.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Select/Select.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/common.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/indigo.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/colors/orange.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/zIndex.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/@material-ui/system/esm/breakpoints.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/prop-types/factoryWithThrowingShims.js ***!
\*************************************************************/
/*!*************************************************************!*\
!*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
\*************************************************************/
/*!**************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/shadows.js ***!
\**************************************************************/
/*!**************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/debounce.js ***!
\**************************************************************/
/*!**************************************************************!*\
!*** ./node_modules/react-is/cjs/react-is.production.min.js ***!
\**************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/InputBase/utils.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Popover/Popover.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/useTheme.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/react-router-dom/esm/react-router-dom.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/react-transition-group/esm/Transition.js ***!
\***************************************************************/
/*!***************************************************************!*\
!*** ./node_modules/resolve-pathname/esm/resolve-pathname.js ***!
\***************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/createClass.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/List/ListContext.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/capitalize.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/useForkRef.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/react-dom/cjs/react-dom.production.min.js ***!
\****************************************************************/
@ -45,3 +289,439 @@
/*!****************************************************************!*\
!*** ./node_modules/scheduler/cjs/scheduler.production.min.js ***!
\****************************************************************/
/*!****************************************************************!*\
!*** ./node_modules/tiny-invariant/dist/tiny-invariant.esm.js ***!
\****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/ButtonBase/Ripple.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Collapse/Collapse.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/MenuList/MenuList.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/withStyles.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/transitions/utils.js ***!
\*****************************************************************/
/*!*****************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/ownerWindow.js ***!
\*****************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Modal/ModalManager.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Select/SelectInput.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/transitions.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/isMuiElement.js ***!
\******************************************************************/
/*!******************************************************************!*\
!*** ./node_modules/mini-create-react-context/dist/esm/index.js ***!
\******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormGroup/FormGroup.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormLabel/FormLabel.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/InputBase/InputBase.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/TextField/TextField.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/internal/SwitchBase.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createMixins.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/defaultTheme.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/createSvgIcon.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/ownerDocument.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/useControlled.js ***!
\*******************************************************************/
/*!*******************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/useTheme/useTheme.js ***!
\*******************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createPalette.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createSpacing.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/unstable_useId.js ***!
\********************************************************************/
/*!********************************************************************!*\
!*** ./node_modules/react-transition-group/esm/TransitionGroup.js ***!
\********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/IconButton/IconButton.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/InputLabel/InputLabel.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Radio/RadioButtonIcon.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/RadioGroup/RadioGroup.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Typography/Typography.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createMuiTheme.js ***!
\*********************************************************************/
/*!*********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js ***!
\*********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/getScrollbarSize.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/useEventCallback.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/ThemeProvider/nested.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js ***!
\**********************************************************************/
/*!**********************************************************************!*\
!*** ./node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js ***!
\**********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/ButtonGroup/ButtonGroup.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FilledInput/FilledInput.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControl/FormControl.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/colorManipulator.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createTypography.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/useIsFocusVisible.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/core/node_modules/react-is/index.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/lab/esm/internal/svg-icons/Close.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/withStyles/withStyles.js ***!
\***********************************************************************/
/*!***********************************************************************!*\
!*** ./node_modules/react-transition-group/esm/utils/ChildMapping.js ***!
\***********************************************************************/
/*!************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/RadioGroup/useRadioGroup.js ***!
\************************************************************************/
/*!************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/styles/createBreakpoints.js ***!
\************************************************************************/
/*!*************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
\*************************************************************************/
/*!*************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js ***!
\*************************************************************************/
/*!*************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js ***!
\*************************************************************************/
/*!**************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
\**************************************************************************/
/*!**************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControl/useFormControl.js ***!
\**************************************************************************/
/*!**************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js ***!
\**************************************************************************/
/*!***************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js ***!
\***************************************************************************/
/*!***************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/utils/createChainedFunction.js ***!
\***************************************************************************/
/*!***************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js ***!
\***************************************************************************/
/*!***************************************************************************!*\
!*** ./node_modules/react-transition-group/esm/TransitionGroupContext.js ***!
\***************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js ***!
\****************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControl/formControlState.js ***!
\****************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js ***!
\****************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/RadioGroup/RadioGroupContext.js ***!
\****************************************************************************/
/*!****************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js ***!
\****************************************************************************/
/*!*****************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js ***!
\*****************************************************************************/
/*!*****************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js ***!
\*****************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControl/FormControlContext.js ***!
\******************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js ***!
\******************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/@material-ui/lab/esm/internal/svg-icons/ErrorOutline.js ***!
\******************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/@material-ui/lab/esm/internal/svg-icons/InfoOutlined.js ***!
\******************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js ***!
\******************************************************************************/
/*!******************************************************************************!*\
!*** ./node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js ***!
\******************************************************************************/
/*!*******************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
\*******************************************************************************/
/*!*******************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js ***!
\*******************************************************************************/
/*!********************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js ***!
\********************************************************************************/
/*!*********************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***!
\*********************************************************************************/
/*!*********************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js ***!
\*********************************************************************************/
/*!*********************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js ***!
\*********************************************************************************/
/*!*********************************************************************************!*\
!*** ./node_modules/@material-ui/lab/esm/internal/svg-icons/SuccessOutlined.js ***!
\*********************************************************************************/
/*!**********************************************************************************!*\
!*** ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js ***!
\**********************************************************************************/
/*!**********************************************************************************!*\
!*** ./node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js ***!
\**********************************************************************************/
/*!***********************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js ***!
\***********************************************************************************/
/*!*************************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/Unstable_TrapFocus/Unstable_TrapFocus.js ***!
\*************************************************************************************/
/*!*************************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/internal/svg-icons/RadioButtonChecked.js ***!
\*************************************************************************************/
/*!***************************************************************************************!*\
!*** ./node_modules/@material-ui/core/esm/internal/svg-icons/RadioButtonUnchecked.js ***!
\***************************************************************************************/
/*!***************************************************************************************!*\
!*** ./node_modules/@material-ui/lab/esm/internal/svg-icons/ReportProblemOutlined.js ***!
\***************************************************************************************/
/*!****************************************************************************************!*\
!*** ./node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js ***!
\****************************************************************************************/
/*!*********************************************************************************************!*\
!*** ./node_modules/@material-ui/core/node_modules/react-is/cjs/react-is.production.min.js ***!
\*********************************************************************************************/
/*!************************************************************************************************!*\
!*** ./node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js ***!
\************************************************************************************************/
/*!*************************************************************************************************!*\
!*** ./node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js ***!
\*************************************************************************************************/

View File

@ -2,5 +2,8 @@ from django.urls import path
from . import views
urlpatterns = [
path('', views.index)
path('', views.index),
path('create/', views.index),
path('join/', views.index),
path('room/<str:code>', views.index)
]

View File

@ -2,5 +2,5 @@ from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
def index(request, *args, **kwargs):
return render(request, 'frontend/index.html')

View File

@ -929,6 +929,17 @@
dependencies:
"@babel/runtime" "^7.4.4"
"@material-ui/lab@^4.0.0-alpha.57":
version "4.0.0-alpha.57"
resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.57.tgz#e8961bcf6449e8a8dabe84f2700daacfcafbf83a"
integrity sha512-qo/IuIQOmEKtzmRD2E4Aa6DB4A87kmY6h0uYhjUmrrgmEAgbbw9etXpWPVXuRK6AGIQCjFzV6WO2i21m1R4FCw==
dependencies:
"@babel/runtime" "^7.4.4"
"@material-ui/utils" "^4.11.2"
clsx "^1.0.4"
prop-types "^15.7.2"
react-is "^16.8.0 || ^17.0.0"
"@material-ui/styles@^4.11.2":
version "4.11.2"
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.2.tgz#e70558be3f41719e8c0d63c7a3c9ae163fdc84cb"
@ -975,6 +986,27 @@
prop-types "^15.7.2"
react-is "^16.8.0 || ^17.0.0"
"@nodelib/fs.scandir@2.1.4":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==
dependencies:
"@nodelib/fs.stat" "2.0.4"
run-parallel "^1.1.9"
"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655"
integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==
"@nodelib/fs.walk@^1.2.3":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063"
integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==
dependencies:
"@nodelib/fs.scandir" "2.1.4"
fastq "^1.6.0"
"@types/eslint-scope@^3.7.0":
version "3.7.0"
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86"
@ -996,7 +1028,7 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884"
integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==
"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
version "7.0.6"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
@ -1026,6 +1058,53 @@
"@types/prop-types" "*"
csstype "^3.0.2"
"@typescript-eslint/experimental-utils@^4.0.1":
version "4.11.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.1.tgz#2dad3535b878c25c7424e40bfa79d899f3f485bc"
integrity sha512-mAlWowT4A6h0TC9F+J5pdbEhjNiEMO+kqPKQ4sc3fVieKL71dEqfkKgtcFVSX3cjSBwYwhImaQ/mXQF0oaI38g==
dependencies:
"@types/json-schema" "^7.0.3"
"@typescript-eslint/scope-manager" "4.11.1"
"@typescript-eslint/types" "4.11.1"
"@typescript-eslint/typescript-estree" "4.11.1"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/scope-manager@4.11.1":
version "4.11.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.11.1.tgz#72dc2b60b0029ab0888479b12bf83034920b4b69"
integrity sha512-Al2P394dx+kXCl61fhrrZ1FTI7qsRDIUiVSuN6rTwss6lUn8uVO2+nnF4AvO0ug8vMsy3ShkbxLu/uWZdTtJMQ==
dependencies:
"@typescript-eslint/types" "4.11.1"
"@typescript-eslint/visitor-keys" "4.11.1"
"@typescript-eslint/types@4.11.1":
version "4.11.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.11.1.tgz#3ba30c965963ef9f8ced5a29938dd0c465bd3e05"
integrity sha512-5kvd38wZpqGY4yP/6W3qhYX6Hz0NwUbijVsX2rxczpY6OXaMxh0+5E5uLJKVFwaBM7PJe1wnMym85NfKYIh6CA==
"@typescript-eslint/typescript-estree@4.11.1":
version "4.11.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.1.tgz#a4416b4a65872a48773b9e47afabdf7519eb10bc"
integrity sha512-tC7MKZIMRTYxQhrVAFoJq/DlRwv1bnqA4/S2r3+HuHibqvbrPcyf858lNzU7bFmy4mLeIHFYr34ar/1KumwyRw==
dependencies:
"@typescript-eslint/types" "4.11.1"
"@typescript-eslint/visitor-keys" "4.11.1"
debug "^4.1.1"
globby "^11.0.1"
is-glob "^4.0.1"
lodash "^4.17.15"
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/visitor-keys@4.11.1":
version "4.11.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.1.tgz#4c050a4c1f7239786e2dd4e69691436143024e05"
integrity sha512-IrlBhD9bm4bdYcS8xpWarazkKXlE7iYb1HzRuyBP114mIaj5DJPo11Us1HgH60dTt41TCZXMaTCAW+OILIYPOg==
dependencies:
"@typescript-eslint/types" "4.11.1"
eslint-visitor-keys "^2.0.0"
"@webassemblyjs/ast@1.9.1":
version "1.9.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.1.tgz#76c6937716d68bf1484c15139f5ed30b9abc8bb4"
@ -1259,6 +1338,11 @@ array-back@^4.0.1:
resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90"
integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
astral-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
@ -1299,6 +1383,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
braces@^3.0.1:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
browserslist@^4.14.5, browserslist@^4.15.0:
version "4.16.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b"
@ -1421,6 +1512,11 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
confusing-browser-globals@^1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59"
integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==
convert-source-map@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
@ -1487,6 +1583,13 @@ define-properties@^1.1.3:
dependencies:
object-keys "^1.0.12"
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
dependencies:
path-type "^4.0.0"
doctrine@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
@ -1554,7 +1657,21 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
eslint-scope@^5.1.1:
eslint-config-react-app@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e"
integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==
dependencies:
confusing-browser-globals "^1.0.10"
eslint-plugin-jest@^24.1.3:
version "24.1.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz#fa3db864f06c5623ff43485ca6c0e8fc5fe8ba0c"
integrity sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg==
dependencies:
"@typescript-eslint/experimental-utils" "^4.0.1"
eslint-scope@^5.0.0, eslint-scope@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@ -1562,7 +1679,7 @@ eslint-scope@^5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
eslint-utils@^2.1.0:
eslint-utils@^2.0.0, eslint-utils@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
@ -1690,6 +1807,18 @@ fast-deep-equal@^3.1.1:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-glob@^3.1.1:
version "3.2.4"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3"
integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
glob-parent "^5.1.0"
merge2 "^1.3.0"
micromatch "^4.0.2"
picomatch "^2.2.1"
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@ -1700,6 +1829,13 @@ fast-levenshtein@^2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fastq@^1.6.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb"
integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==
dependencies:
reusify "^1.0.4"
file-entry-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a"
@ -1707,6 +1843,13 @@ file-entry-cache@^6.0.0:
dependencies:
flat-cache "^3.0.4"
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
find-cache-dir@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
@ -1781,7 +1924,7 @@ get-stream@^5.0.0:
dependencies:
pump "^3.0.0"
glob-parent@^5.0.0:
glob-parent@^5.0.0, glob-parent@^5.1.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
@ -1817,6 +1960,18 @@ globals@^12.1.0:
dependencies:
type-fest "^0.8.1"
globby@^11.0.1:
version "11.0.1"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357"
integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==
dependencies:
array-union "^2.1.0"
dir-glob "^3.0.1"
fast-glob "^3.1.1"
ignore "^5.1.4"
merge2 "^1.3.0"
slash "^3.0.0"
graceful-fs@^4.1.2, graceful-fs@^4.2.4:
version "4.2.4"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
@ -1878,6 +2033,11 @@ ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
ignore@^5.1.4:
version "5.1.8"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
import-fresh@^3.0.0, import-fresh@^3.2.1:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@ -1953,6 +2113,11 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3:
resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
is-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
@ -2172,6 +2337,19 @@ merge-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
merge2@^1.3.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
dependencies:
braces "^3.0.1"
picomatch "^2.0.5"
mime-db@1.44.0:
version "1.44.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
@ -2349,6 +2527,16 @@ path-to-regexp@^1.7.0:
dependencies:
isarray "0.0.1"
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
picomatch@^2.0.5, picomatch@^2.2.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
pkg-dir@^4.1.0, pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
@ -2568,6 +2756,11 @@ resolve@^1.9.0:
is-core-module "^2.1.0"
path-parse "^1.0.6"
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@ -2575,6 +2768,11 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
run-parallel@^1.1.9:
version "1.1.10"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef"
integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==
safe-buffer@^5.1.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
@ -2626,7 +2824,7 @@ semver@^6.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.2.1:
semver@^7.2.1, semver@^7.3.2:
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
@ -2657,6 +2855,11 @@ signal-exit@^3.0.2:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
slash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
slice-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
@ -2810,11 +3013,25 @@ to-fast-properties@^2.0.0:
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
tslib@^1.9.0:
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tsutils@^3.17.1:
version "3.17.1"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
dependencies:
tslib "^1.8.1"
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"