From 57ae0ea7006d19352139b660fe7b7188d3ebeb1f Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Wed, 11 Nov 2020 13:18:53 +0100 Subject: [PATCH] Revert "Revert "Bump ESLint, prettier and stylelint"" --- app/components/Comments/Comment.js | 2 +- .../Comments/__tests__/fixtures/comments.js | 4 +- app/components/Form/legoForm.js | 2 +- app/components/Header/index.js | 12 +- app/components/LegoReactions/index.js | 3 +- app/components/LoginForm/LoginPage.js | 2 + app/components/Poll/index.js | 7 +- app/components/Reactions/ReactionPicker.js | 18 +- .../Reactions/ReactionPickerHeader.js | 2 +- app/components/Search/SearchPage.js | 3 + app/components/Search/utils.js | 2 +- app/components/Search/withAutocomplete.js | 2 +- app/components/Table/index.js | 2 +- app/components/Time/Time.spec.js | 6 +- app/components/Tooltip/index.js | 4 + app/components/Upload/ImageUpload.js | 2 +- app/models.js | 181 +++---- app/reducers/announcements.js | 2 + app/reducers/comments.js | 6 + app/reducers/companies.js | 59 +-- app/reducers/companySemesters.js | 3 + app/reducers/events.js | 5 +- app/reducers/galleryPictures.js | 2 +- app/reducers/groups.js | 2 + app/reducers/meetingInvitations.js | 2 + app/reducers/meetingsToken.js | 2 + app/reducers/notificationSettings.js | 4 + app/reducers/notificationsFeed.js | 3 + app/reducers/polls.js | 12 +- app/reducers/pools.js | 2 + app/reducers/quotes.js | 2 + app/reducers/readme.js | 2 + app/reducers/registrations.js | 2 + app/reducers/routing.js | 3 + app/reducers/search.js | 3 + app/reducers/surveySubmissions.js | 4 + app/reducers/surveys.js | 22 +- app/reducers/tags.js | 3 + app/reducers/toasts.js | 5 +- app/reducers/users.js | 3 + .../admin/groups/components/GroupMembers.js | 1 + .../groups/components/GroupMembersList.js | 4 + .../groups/components/GroupPermissions.js | 1 + app/routes/bdb/AddSemesterRoute.js | 2 +- .../bdb/components/__tests__/BdbPage.spec.js | 2 +- .../__tests__/fixtures/companies.js | 4 +- .../__tests__/fixtures/companySemesters.js | 4 +- app/routes/bdb/utils.js | 8 +- .../components/CompanyInterestPage.js | 2 + .../components/CompanySemesterGUI.js | 4 +- app/routes/errors/HTTPError.js | 16 +- app/routes/errors/statusCodePage.js | 4 +- .../components/EventAdministrate/Attendees.js | 2 +- .../events/components/EventEditor/index.js | 2 +- .../components/EventEditor/renderPools.js | 3 +- app/routes/events/components/EventList.js | 2 +- .../JoinEventFormCountdownProvider.js | 14 +- app/routes/events/utils.js | 2 +- .../components/InterestGroupDetail.js | 2 +- .../components/JoblistingEditor.js | 10 +- app/routes/overview/components/NextEvent.js | 2 +- app/routes/overview/components/Overview.js | 2 +- app/routes/pages/components/PageDetail.js | 16 +- app/routes/pages/components/PageHierarchy.js | 20 +- .../photos/components/GalleryPictureModal.js | 2 + app/routes/quotes/components/Quote.js | 3 +- .../SubmissionEditor/SubmissionEditor.js | 1 + .../surveys/components/Submissions/Results.js | 8 +- .../Submissions/SubmissionPublicResults.js | 3 + .../Submissions/SubmissionSummary.js | 2 + .../components/SurveyEditor/SurveyEditor.js | 1 + app/types.js | 27 +- app/utils/createEntityReducer.js | 3 + config/webpack.client.js | 2 +- cypress/support/commands.js | 1 - package.json | 19 +- server/env.js | 4 +- yarn.lock | 463 ++++++++++++------ 78 files changed, 665 insertions(+), 410 deletions(-) diff --git a/app/components/Comments/Comment.js b/app/components/Comments/Comment.js index 2aef5c6464..e8ffb513d1 100644 --- a/app/components/Comments/Comment.js +++ b/app/components/Comments/Comment.js @@ -74,7 +74,7 @@ export default class Comment extends Component { - {user && author.id == user.id && ( + {user && author.id === user.id && ( @@ -121,7 +127,7 @@ class Header extends Component { const isLogin = this.state.mode === 'login'; let title, form; - if (loggedIn && currentUser && currentUser.selectedTheme != getTheme()) { + if (loggedIn && currentUser && currentUser.selectedTheme !== getTheme()) { applySelectedTheme(currentUser.selectedTheme || 'light'); } @@ -138,6 +144,8 @@ class Header extends Component { title = 'Glemt passord'; form = ; break; + default: + break; } const MeetingButton = withRouter(({ history }) => ( diff --git a/app/components/LegoReactions/index.js b/app/components/LegoReactions/index.js index c3ca4405a9..8f9b59be10 100644 --- a/app/components/LegoReactions/index.js +++ b/app/components/LegoReactions/index.js @@ -36,7 +36,8 @@ const LegoReactions = (props: Props) => { const foundReaction = parentEntity.reactionsGrouped && parentEntity.reactionsGrouped.find( - (reaction) => emoji.shortCode == reaction.emoji && reaction.hasReacted + (reaction) => + emoji.shortCode === reaction.emoji && reaction.hasReacted ); return { ...emoji, diff --git a/app/components/LoginForm/LoginPage.js b/app/components/LoginForm/LoginPage.js index d5a74e42d9..158decf918 100644 --- a/app/components/LoginForm/LoginPage.js +++ b/app/components/LoginForm/LoginPage.js @@ -52,6 +52,8 @@ class LoginPage extends Component { title = 'Glemt passord'; form = ; break; + default: + break; } return ( diff --git a/app/components/Poll/index.js b/app/components/Poll/index.js index b8bed11021..ef1f44d0e2 100644 --- a/app/components/Poll/index.js +++ b/app/components/Poll/index.js @@ -19,16 +19,15 @@ type Props = { details?: boolean, }; +type OptionEntityRatio = OptionEntity & { + ratio: number, +}; type State = { truncateOptions: boolean, shuffledOptions: Array, expanded: boolean, }; -type OptionEntityRatio = OptionEntity & { - ratio: number, -}; - class Poll extends React.Component { constructor(props: Props) { super(props); diff --git a/app/components/Reactions/ReactionPicker.js b/app/components/Reactions/ReactionPicker.js index 145e230664..6065ae903f 100644 --- a/app/components/Reactions/ReactionPicker.js +++ b/app/components/Reactions/ReactionPicker.js @@ -1,7 +1,7 @@ // @flow // $FlowFixMe -import React, { useMemo, useState, useCallback } from 'react'; +import React, { useMemo, useState } from 'react'; import fuzzy from 'fuzzy'; import type { EmojiEntity } from 'app/reducers/emojis'; import type { ID } from 'app/models'; @@ -39,9 +39,7 @@ const searchEmojis = (emojis, searchString) => { matchingEmojis.push(emoji); return false; } - { - return true; - } + return true; }); /* @@ -105,7 +103,7 @@ const searchEmojis = (emojis, searchString) => { currentEmojis = currentEmojis.filter((emoji) => { if ( emoji.keywords.find( - (keyword) => keyword.toLowerCase() == searchString + (keyword) => keyword.toLowerCase() === searchString ) !== undefined ) { matchingEmojis.push(emoji); @@ -175,13 +173,13 @@ const ReactionPicker = ({ return searchEmojis(emojis, searchString); }, [searchString, emojis]); - const onCategoryClick = useCallback((category) => { + const onCategoryClick = (category) => { setActiveCategory(category); setSearchString(null); - }); - const onSearch = useCallback((searchString) => - setSearchString(searchString.trim().toLowerCase()) - ); + }; + + const onSearch = (searchString) => + setSearchString(searchString.trim().toLowerCase()); return (
diff --git a/app/components/Reactions/ReactionPickerHeader.js b/app/components/Reactions/ReactionPickerHeader.js index c3672a88e8..8a699be2b7 100644 --- a/app/components/Reactions/ReactionPickerHeader.js +++ b/app/components/Reactions/ReactionPickerHeader.js @@ -20,7 +20,7 @@ const ReactionPickerHeader = ({ ))} diff --git a/app/components/Search/SearchPage.js b/app/components/Search/SearchPage.js index 6f51259599..5916786815 100644 --- a/app/components/Search/SearchPage.js +++ b/app/components/Search/SearchPage.js @@ -64,6 +64,9 @@ class SearchPage extends Component { e.preventDefault(); this.handleSelect(this.props.results[this.state.selectedIndex]); break; + + default: + break; } }; diff --git a/app/components/Search/utils.js b/app/components/Search/utils.js index 58631aa662..ee7607e754 100644 --- a/app/components/Search/utils.js +++ b/app/components/Search/utils.js @@ -146,7 +146,7 @@ function retrieveAllowed(links: Array, { allowed, loggedIn }: Options) { return links .filter(({ key, requireLogin }) => { // If we have a mapping for this from the server, check that: - if (allowed.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(allowed, key)) { return allowed[key]; } diff --git a/app/components/Search/withAutocomplete.js b/app/components/Search/withAutocomplete.js index 1a8f6ba215..965ea4e0ca 100644 --- a/app/components/Search/withAutocomplete.js +++ b/app/components/Search/withAutocomplete.js @@ -55,7 +55,7 @@ function withAutocomplete({ // Set the result to the response result let finalResult = result; // Retain a query with no match - if (retainFailedQuery && result.length == 0) { + if (retainFailedQuery && result.length === 0) { finalResult = [{ title: query, label: query }]; } diff --git a/app/components/Table/index.js b/app/components/Table/index.js index 01f3e76958..445b8c17ec 100644 --- a/app/components/Table/index.js +++ b/app/components/Table/index.js @@ -273,7 +273,7 @@ export default class Table extends Component { const match = Object.keys(this.state.filters).filter((key) => { const { inlineFiltering = true, filterMapping = (val) => val } = - this.props.columns.find((col) => col.dataIndex == key) || {}; + this.props.columns.find((col) => col.dataIndex === key) || {}; if (!inlineFiltering) return true; diff --git a/app/components/Time/Time.spec.js b/app/components/Time/Time.spec.js index 7347c7f176..428ac929cf 100644 --- a/app/components/Time/Time.spec.js +++ b/app/components/Time/Time.spec.js @@ -62,7 +62,7 @@ describe('', () => { }); describe('', () => { - it('should only render day once when start day == end day', () => { + it('should only render day once when start day === end day', () => { const from = '2016-01-18T20:00:00Z'; const to = '2016-01-18T22:00:00Z'; const output = 'Monday 18. Jan 2016 20:00 - 22:00'; @@ -80,7 +80,7 @@ describe('', () => { expect(wrapper.render().text()).toEqual(output); }); - it('should not render year if year == currentYear', () => { + it('should not render year if year === currentYear', () => { const from = '2017-01-18T20:00:00Z'; const to = '2017-01-19T22:00:00Z'; const output = 'Wednesday 18. January, 20:00 - Thursday 19. January, 22:00'; @@ -96,7 +96,7 @@ describe('', () => { } }); - it('should not render year if year == currentYear, and day only once if equal', () => { + it('should not render year if year === currentYear, and day only once if equal', () => { const from = '2017-01-18T20:00:00Z'; const to = '2017-01-18T21:00:00Z'; const output = 'Wednesday 18. January, 20:00 - 21:00'; diff --git a/app/components/Tooltip/index.js b/app/components/Tooltip/index.js index bc370f06dc..572e2ffd12 100644 --- a/app/components/Tooltip/index.js +++ b/app/components/Tooltip/index.js @@ -89,6 +89,8 @@ export default class Tooltip extends Component { case 'right': renderDirectionClass = styles.renderDirectionRight; break; + default: + break; } switch (pointerPosition) { case 'left': @@ -97,6 +99,8 @@ export default class Tooltip extends Component { case 'right': startPointChildren = 10 / 9; break; + default: + break; } } const tooltipClass = this.state.hovered diff --git a/app/components/Upload/ImageUpload.js b/app/components/Upload/ImageUpload.js index c5769d1dab..6e996c6056 100644 --- a/app/components/Upload/ImageUpload.js +++ b/app/components/Upload/ImageUpload.js @@ -164,7 +164,7 @@ export default class ImageUpload extends Component { }; componentDidUpdate = (props: Object) => { - if (props.img != this.props.img) { + if (props.img !== this.props.img) { this.setState({ img: this.props.img }); } }; diff --git a/app/models.js b/app/models.js index 07594dc6f3..95c6060e52 100644 --- a/app/models.js +++ b/app/models.js @@ -28,6 +28,24 @@ type SelectInput = { label: string, value: string }; export type EventStatusType = 'NORMAL' | 'OPEN' | 'TBA' | 'INFINITE'; +export type Grade = { + name: string, +}; + +export type User = { + id: ID, + firstName: string, + fullName: string, + username: string, + grade: Grade, + allergies: string, + profilePicture: string, + email?: string, + phoneNumber?: string, +}; + +export type Tags = string; + type EventBase = { id: ID, title: string, @@ -60,63 +78,51 @@ type EventBase = { useContactTracing: boolean, }; -export type Event = EventBase & { - actionGrant: Array, - activationTime: ?Dateish, - isAdmitted: ?boolean, - activeCapacity: number, - registrationCount: number, - waitingRegistrationCount: number, - totalCapacity: number, - thumbnail: ?string, - company: Company, - comments: Array, - contentTarget: string, - pools: Array, - survey: ?ID, - userReg: EventRegistration, - useConsent: boolean, - unansweredSurveys: Array, - responsibleGroup: Group, - price?: number, -}; - -export type TransformEvent = EventBase & { - addFee: boolean, - pools: Array, - company: SelectInput, - responsibleGroup: SelectInput, +export const GroupTypeCommittee = 'komite'; +export const GroupTypeInterest = 'interesse'; +export const GroupTypeSub = 'under'; +export const GroupTypeGrade = 'klasse'; +export const GroupTypeOther = 'annen'; +export const GroupTypes = { + GroupTypeCommittee, + GroupTypeInterest, + GroupTypeSub, + GroupTypeGrade, + GroupTypeOther, }; -export type Tags = string; +export type GroupType = + | typeof GroupTypeCommittee + | typeof GroupTypeInterest + | typeof GroupTypeSub + | typeof GroupTypeGrade + | typeof GroupTypeOther; -export type UserFollowing = { - id: ID, - follower: User, - target: ID, +export type GroupMembership = { + user: User, + role: string, }; -export type Article = Object; -export type Feed = Object; -export type FeedItem = Object; - -export type Grade = { +export type Group = { + id: ID, + actionGrant: Array, + type: GroupType, name: string, + numberOfUsers?: number, + memberships: Array, + description: string, + text: string, + logo: ?string, + showBadge: boolean, + contactEmail: string, }; -export type User = { - id: ID, - firstName: string, - fullName: string, - username: string, - grade: Grade, - allergies: string, - profilePicture: string, - email?: string, - phoneNumber?: string, -}; +export type Company = Object; + +export type Comment = Object; export type EventRegistrationPresence = 'PRESENT' | 'NOT_PRESENT' | 'UNKNOWN'; + export type EventRegistrationPhotoConsent = | 'PHOTO_NOT_CONSENT' | 'PHOTO_CONSENT' @@ -160,10 +166,48 @@ export type EventPool = EventPoolBase & { permissionGroups: Array, }; +export type Event = EventBase & { + actionGrant: Array, + activationTime: ?Dateish, + isAdmitted: ?boolean, + activeCapacity: number, + registrationCount: number, + waitingRegistrationCount: number, + totalCapacity: number, + thumbnail: ?string, + company: Company, + comments: Array, + contentTarget: string, + pools: Array, + survey: ?ID, + userReg: EventRegistration, + useConsent: boolean, + unansweredSurveys: Array, + responsibleGroup: Group, + price?: number, +}; + type EventTransformPool = EventPoolBase & { permissionGroups: Array, }; +export type TransformEvent = EventBase & { + addFee: boolean, + pools: Array, + company: SelectInput, + responsibleGroup: SelectInput, +}; + +export type UserFollowing = { + id: ID, + follower: User, + target: ID, +}; + +export type Article = Object; +export type Feed = Object; +export type FeedItem = Object; + export type Workplace = { town: string, }; @@ -175,51 +219,8 @@ export type Joblisting = { workplaces: Array, }; -export const GroupTypeCommittee = 'komite'; -export const GroupTypeInterest = 'interesse'; -export const GroupTypeSub = 'under'; -export const GroupTypeGrade = 'klasse'; -export const GroupTypeOther = 'annen'; -export const GroupTypes = { - GroupTypeCommittee, - GroupTypeInterest, - GroupTypeSub, - GroupTypeGrade, - GroupTypeOther, -}; - -export type GroupType = - | typeof GroupTypeCommittee - | typeof GroupTypeInterest - | typeof GroupTypeSub - | typeof GroupTypeGrade - | typeof GroupTypeOther; - -export type Group = { - id: ID, - actionGrant: Array, - type: GroupType, - name: string, - numberOfUsers?: number, - memberships: Array, - description: string, - text: string, - logo: ?string, - showBadge: boolean, - contactEmail: string, -}; - -export type GroupMembership = { - user: User, - role: string, -}; - -export type Company = Object; - export type Permission = string; -export type Comment = Object; - export type Semester = 'spring' | 'autumn'; export type CompanySemesterContactedStatus = diff --git a/app/reducers/announcements.js b/app/reducers/announcements.js index 251f7a56f1..43a3223e1f 100644 --- a/app/reducers/announcements.js +++ b/app/reducers/announcements.js @@ -20,6 +20,8 @@ export default createEntityReducer({ case Announcements.SEND.SUCCESS: newState.byId[action.meta.announcementId].sent = moment(); break; + default: + break; } }), }); diff --git a/app/reducers/comments.js b/app/reducers/comments.js index 811487972c..1a39330412 100644 --- a/app/reducers/comments.js +++ b/app/reducers/comments.js @@ -33,7 +33,10 @@ export function mutateComments(forTargetType: string) { newState.byId[targetId].comments || []; newState.byId[targetId].comments.push(action.payload.result); } + break; } + default: + break; } }); } @@ -45,6 +48,9 @@ const mutate = produce((newState: CommentState, action: any): void => { case Comment.DELETE.SUCCESS: newState.byId[action.meta.id].text = null; newState.byId[action.meta.id].author = null; + break; + default: + break; } }); diff --git a/app/reducers/companies.js b/app/reducers/companies.js index 418d56494c..b5e153b5a7 100644 --- a/app/reducers/companies.js +++ b/app/reducers/companies.js @@ -12,35 +12,6 @@ import type { CompanySemesterContactedStatus, Semester } from 'app/models'; import { selectJoblistings } from 'app/reducers/joblistings'; import produce from 'immer'; -export type BaseCompanyEntity = { - name: string, - companyId?: number, - description?: string, - studentContact?: UserEntity, - phone?: string, - companyType?: string, - website?: string, - address?: string, - paymentMail?: string, - active?: boolean, - adminComment?: string, - companyType?: string, - contentTarget: string, - comments: Array<{ id: string, parent: string }>, - // $FlowFixMe - semesterStatuses: Array, - logo?: string, - files?: Array, - companyContacts: Array, -}; - -export type CompanyEntity = BaseCompanyEntity & { id: number }; - -export type SubmitCompanyEntity = { - ...BaseCompanyEntity, - studentContact?: number, -}; - export type BaseSemesterStatusEntity = { id?: number, companyId?: number, @@ -74,6 +45,34 @@ export type CompanyContactEntity = { id: number, }; +export type BaseCompanyEntity = { + name: string, + companyId?: number, + description?: string, + studentContact?: UserEntity, + phone?: string, + companyType?: string, + website?: string, + address?: string, + paymentMail?: string, + active?: boolean, + adminComment?: string, + companyType?: string, + contentTarget: string, + comments: Array<{ id: string, parent: string }>, + semesterStatuses: Array, + logo?: string, + files?: Array, + companyContacts: Array, +}; + +export type CompanyEntity = BaseCompanyEntity & { id: number }; + +export type SubmitCompanyEntity = { + ...BaseCompanyEntity, + studentContact?: number, +}; + type State = any; function mutateCompanies(state: State, action) { @@ -134,6 +133,8 @@ function mutateCompanies(state: State, action) { ); break; } + default: + break; } }); } diff --git a/app/reducers/companySemesters.js b/app/reducers/companySemesters.js index 77c068151f..c420189cf6 100644 --- a/app/reducers/companySemesters.js +++ b/app/reducers/companySemesters.js @@ -27,6 +27,9 @@ export default createEntityReducer({ case Company.ADD_SEMESTER.SUCCESS: newState.byId[action.payload.id] = action.payload; newState.items.push(action.payload.id); + break; + default: + break; } }); }, diff --git a/app/reducers/events.js b/app/reducers/events.js index c49c63765f..7e2a64449d 100644 --- a/app/reducers/events.js +++ b/app/reducers/events.js @@ -132,6 +132,9 @@ const mutateEvent = produce((newState: State, action: any): void => { newState.byId[action.meta.id].loading = false; } break; + + default: + break; } }); @@ -327,7 +330,7 @@ export const selectAllRegistrationsForEvent = createSelector( updatedBy, }); }) - .filter((reg) => reg.event == eventId) + .filter((reg) => reg.event === eventId) ); export const selectWaitingRegistrationsForEvent = createSelector( diff --git a/app/reducers/galleryPictures.js b/app/reducers/galleryPictures.js index 20ba1e95d4..dd8e0bb242 100644 --- a/app/reducers/galleryPictures.js +++ b/app/reducers/galleryPictures.js @@ -65,7 +65,7 @@ function mutateGalleryPicture(state: any, action: any) { // Only update thumbnail in upload status for each 10th picture const lastUploadedImage = - !uploadStatus.lastUploadedImage || successCount % 10 == 0 + !uploadStatus.lastUploadedImage || successCount % 10 === 0 ? action.payload.result : uploadStatus.lastUploadedImage; return { diff --git a/app/reducers/groups.js b/app/reducers/groups.js index 02f44ed1d1..81f28a3a9e 100644 --- a/app/reducers/groups.js +++ b/app/reducers/groups.js @@ -48,6 +48,8 @@ export default createEntityReducer({ newState.byId[action.meta.groupId].numberOfUsers -= 1; } break; + default: + break; } }), }); diff --git a/app/reducers/meetingInvitations.js b/app/reducers/meetingInvitations.js index d657a9da3e..c64e68df06 100644 --- a/app/reducers/meetingInvitations.js +++ b/app/reducers/meetingInvitations.js @@ -41,6 +41,8 @@ export default createEntityReducer({ newState.byId[invitationId].status = status; break; } + default: + break; } }), }); diff --git a/app/reducers/meetingsToken.js b/app/reducers/meetingsToken.js index 6b550dd1bd..809e0e5b5e 100644 --- a/app/reducers/meetingsToken.js +++ b/app/reducers/meetingsToken.js @@ -32,6 +32,8 @@ const meetingsToken = produce((newState: State, action: any): void | State => { case Meeting.RESET_MEETINGS_TOKEN: { return initialState; } + default: + break; } }, initialState); diff --git a/app/reducers/notificationSettings.js b/app/reducers/notificationSettings.js index 32ccb0d557..304afc816f 100644 --- a/app/reducers/notificationSettings.js +++ b/app/reducers/notificationSettings.js @@ -30,7 +30,11 @@ const notificationSettings = produce((newState: State, action: any): void => { case NotificationSettings.UPDATE.SUCCESS: { newState.settings[action.payload.notificationType] = action.payload; + break; } + + default: + break; } }, initialState); diff --git a/app/reducers/notificationsFeed.js b/app/reducers/notificationsFeed.js index 51b603a652..1b40089ab0 100644 --- a/app/reducers/notificationsFeed.js +++ b/app/reducers/notificationsFeed.js @@ -20,6 +20,9 @@ const notificationsFeed = produce( case NotificationsFeed.MARK_ALL.SUCCESS: return initialState; + + default: + break; } }, initialState diff --git a/app/reducers/polls.js b/app/reducers/polls.js index c52673f1e0..ea1b42ba8f 100644 --- a/app/reducers/polls.js +++ b/app/reducers/polls.js @@ -5,6 +5,12 @@ import createEntityReducer from '../utils/createEntityReducer'; import { Poll } from '../actions/ActionTypes'; import { type Tags, type ID } from 'app/models'; +export type OptionEntity = { + id: number, + name: string, + votes: number, +}; + export type PollEntity = { id: ID, title: string, @@ -16,12 +22,6 @@ export type PollEntity = { options: Array, }; -export type OptionEntity = { - id: number, - name: string, - votes: number, -}; - export default createEntityReducer({ key: 'polls', types: { diff --git a/app/reducers/pools.js b/app/reducers/pools.js index 555e37ac30..f404b3a11f 100644 --- a/app/reducers/pools.js +++ b/app/reducers/pools.js @@ -54,6 +54,8 @@ export default createEntityReducer({ statePool.registrationCount--; break; } + default: + break; } }), }); diff --git a/app/reducers/quotes.js b/app/reducers/quotes.js index 702f27a6d4..d4ea5e1fed 100644 --- a/app/reducers/quotes.js +++ b/app/reducers/quotes.js @@ -35,6 +35,8 @@ const mutateQuote = produce((newState: State, action: any): void => { case Quote.FETCH_RANDOM.SUCCESS: newState.randomQuote = action.payload.result; break; + default: + break; } }); diff --git a/app/reducers/readme.js b/app/reducers/readme.js index a5524c1618..0a5c891255 100644 --- a/app/reducers/readme.js +++ b/app/reducers/readme.js @@ -6,6 +6,8 @@ const mutateReadme = produce((newState: any, action: any): void => { switch (action.type) { case Readme.FETCH.SUCCESS: return action.payload; + default: + break; } }, []); diff --git a/app/reducers/registrations.js b/app/reducers/registrations.js index d00ea016f8..84b2f97582 100644 --- a/app/reducers/registrations.js +++ b/app/reducers/registrations.js @@ -118,6 +118,8 @@ export default createEntityReducer({ newState.items = union(newState.items, [action.payload.id]); break; } + default: + break; } }), }); diff --git a/app/reducers/routing.js b/app/reducers/routing.js index 438fed24ac..87ed1ea358 100644 --- a/app/reducers/routing.js +++ b/app/reducers/routing.js @@ -12,6 +12,9 @@ const routing = produce((newState: State, action: any): void => { switch (action.type) { case Routing.SET_STATUS_CODE: newState.statusCode = action.payload; + break; + default: + break; } }, initialState); diff --git a/app/reducers/search.js b/app/reducers/search.js index ce86a957c9..454b1d680d 100644 --- a/app/reducers/search.js +++ b/app/reducers/search.js @@ -152,6 +152,9 @@ const search = produce((newState: State, action: any): void => { case Search.TOGGLE_OPEN: newState.autocomplete = []; newState.open = !newState.open; + break; + default: + break; } }, initialState); diff --git a/app/reducers/surveySubmissions.js b/app/reducers/surveySubmissions.js index e08eab9598..22c0351f96 100644 --- a/app/reducers/surveySubmissions.js +++ b/app/reducers/surveySubmissions.js @@ -13,6 +13,7 @@ export type SubmissionEntity = { survey: SurveyEntity, submitted: boolean, submittedTime?: string, + // eslint-disable-next-line no-use-before-define answers: Array, }; @@ -35,7 +36,10 @@ const mutateSurveySubmissions = produce( const id = action.payload.result; const surveySubmission = action.payload.entities.surveySubmissions[id]; newState.byId[id] = { ...surveySubmission, survey: surveyId }; + break; } + default: + break; } } ); diff --git a/app/reducers/surveys.js b/app/reducers/surveys.js index ca48caa18e..a8640dfa91 100644 --- a/app/reducers/surveys.js +++ b/app/reducers/surveys.js @@ -7,16 +7,9 @@ import { selectEvents } from './events'; import { omit } from 'lodash'; import type { EventType } from 'app/models'; -export type SurveyEntity = { +export type OptionEntity = { id: number, - title: string, - event: any, - activeFrom?: string, - questions: Array, - templateType?: EventType, - token?: string, - results?: Object, - submissionCount?: number, + optionText: string, }; export type QuestionEntity = { @@ -29,9 +22,16 @@ export type QuestionEntity = { relativeIndex: number, }; -export type OptionEntity = { +export type SurveyEntity = { id: number, - optionText: string, + title: string, + event: any, + activeFrom?: string, + questions: Array, + templateType?: EventType, + token?: string, + results?: Object, + submissionCount?: number, }; export default createEntityReducer({ diff --git a/app/reducers/tags.js b/app/reducers/tags.js index f6be648f0d..7fe7955dcb 100644 --- a/app/reducers/tags.js +++ b/app/reducers/tags.js @@ -15,7 +15,10 @@ export default createEntityReducer({ switch (action.type) { case Tag.POPULAR.SUCCESS: { newState.popular = action.payload; + break; } + default: + break; } }), }); diff --git a/app/reducers/toasts.js b/app/reducers/toasts.js index f96e4856f6..30db7ce0ae 100644 --- a/app/reducers/toasts.js +++ b/app/reducers/toasts.js @@ -24,12 +24,15 @@ const toasts = produce((newState: State, action: any): void => { break; case Toasts.TOAST_REMOVED: { - const toast = newState.items.find((t) => t.id == action.payload.id); + const toast = newState.items.find((t) => t.id === action.payload.id); if (toast) { toast.removed = true; } break; } + + default: + break; } }, initialState); diff --git a/app/reducers/users.js b/app/reducers/users.js index 3ea4b54634..66df3a00ac 100644 --- a/app/reducers/users.js +++ b/app/reducers/users.js @@ -58,6 +58,9 @@ export default createEntityReducer({ newState.byId = mergeObjects(newState.byId, action.payload); break; } + + default: + break; } }), }); diff --git a/app/routes/admin/groups/components/GroupMembers.js b/app/routes/admin/groups/components/GroupMembers.js index be4094446b..b486d076c8 100644 --- a/app/routes/admin/groups/components/GroupMembers.js +++ b/app/routes/admin/groups/components/GroupMembers.js @@ -95,6 +95,7 @@ function loadData({ query, match: { params }, location }, dispatch) { function mapStateToProps(state, props) { const { pathname, search } = state.router.location; + // eslint-disable-next-line no-restricted-globals const showDescendants = location.search.includes('descendants=true'); const groupId = props.match.params && props.match.params.groupId; diff --git a/app/routes/admin/groups/components/GroupMembersList.js b/app/routes/admin/groups/components/GroupMembersList.js index 20466c61f5..9eb01c335e 100644 --- a/app/routes/admin/groups/components/GroupMembersList.js +++ b/app/routes/admin/groups/components/GroupMembersList.js @@ -44,9 +44,12 @@ const GroupMembersList = ({ filters, }: Props) => { const GroupMembersListColumns = (fullName, membership) => { + console.log(groupsById); const { user, abakusGroup } = membership; const performRemove = () => + // eslint-disable-next-line no-restricted-globals confirm( + // eslint-disable-next-line react/prop-types `Er du sikker på at du vil melde ut "${user.fullName}" fra gruppen "${groupsById[abakusGroup].name}?"` ) && removeMember(membership); return ( @@ -68,6 +71,7 @@ const GroupMembersList = ({ const GroupLinkRender = (abakusGroup) => true && ( + {/* eslint-disable-next-line react/prop-types */} {groupsById[abakusGroup] && groupsById[abakusGroup].name} ); diff --git a/app/routes/admin/groups/components/GroupPermissions.js b/app/routes/admin/groups/components/GroupPermissions.js index 610ff85939..6c501b2335 100644 --- a/app/routes/admin/groups/components/GroupPermissions.js +++ b/app/routes/admin/groups/components/GroupPermissions.js @@ -22,6 +22,7 @@ type PermissionListProps = { }; const removePermission = (permission, group, editGroup) => + // eslint-disable-next-line no-restricted-globals confirm(`Er du sikker på at du vil fjerne tilgangen ${permission}?`) && editGroup({ ...group, diff --git a/app/routes/bdb/AddSemesterRoute.js b/app/routes/bdb/AddSemesterRoute.js index 3673e7837b..b545758053 100644 --- a/app/routes/bdb/AddSemesterRoute.js +++ b/app/routes/bdb/AddSemesterRoute.js @@ -24,7 +24,7 @@ const validateSemesterStatus = (data, props) => { const { companies, companyId } = props; const { year, semester, contactedStatus } = data; - const company = companies.find((company) => company.id == Number(companyId)); + const company = companies.find((company) => company.id === Number(companyId)); if (!year) { errors.year = 'Vennligst fyll ut dette feltet'; diff --git a/app/routes/bdb/components/__tests__/BdbPage.spec.js b/app/routes/bdb/components/__tests__/BdbPage.spec.js index b6c67db22e..9801df5c2b 100644 --- a/app/routes/bdb/components/__tests__/BdbPage.spec.js +++ b/app/routes/bdb/components/__tests__/BdbPage.spec.js @@ -2,7 +2,7 @@ import React from 'react'; import BdbPage from '../BdbPage'; import { shallow } from 'enzyme'; import companies from './fixtures/companies'; -import companySemesters from './fixtures/companies'; +import companySemesters from './fixtures/companySemesters'; import CompanyList from '../CompanyList'; import OptionsBox from '../OptionsBox'; import TextInput from 'app/components/Form/TextInput'; diff --git a/app/routes/bdb/components/__tests__/fixtures/companies.js b/app/routes/bdb/components/__tests__/fixtures/companies.js index e9621c85b0..bf8b21b4c8 100644 --- a/app/routes/bdb/components/__tests__/fixtures/companies.js +++ b/app/routes/bdb/components/__tests__/fixtures/companies.js @@ -1,4 +1,4 @@ -export default [ +const companies = [ { name: 'BEKK', id: 1, @@ -40,3 +40,5 @@ export default [ studentContact: 'Ingen', }, ]; + +export default companies; diff --git a/app/routes/bdb/components/__tests__/fixtures/companySemesters.js b/app/routes/bdb/components/__tests__/fixtures/companySemesters.js index 6e7ea625bc..bf9861c423 100644 --- a/app/routes/bdb/components/__tests__/fixtures/companySemesters.js +++ b/app/routes/bdb/components/__tests__/fixtures/companySemesters.js @@ -1,7 +1,9 @@ -export default [ +const companySemesters = [ { id: 1, year: 2018, semester: 'spring', }, ]; + +export default companySemesters; diff --git a/app/routes/bdb/utils.js b/app/routes/bdb/utils.js index a9c401feff..21c51b3fbd 100644 --- a/app/routes/bdb/utils.js +++ b/app/routes/bdb/utils.js @@ -64,8 +64,11 @@ export const selectMostProminentStatus = ( export const semesterNameOf = (index: number) => { const indexToSemesterName = { - '0': 'spring', - '1': 'autumn', + // Non-string literal property keys is not supported in flow yet + // $FlowFixMe + 0: 'spring', + // $FlowFixMe + 1: 'autumn', }; return indexToSemesterName[index] || 'spring'; }; @@ -155,6 +158,7 @@ export const getContactedStatuses = ( ) { contacted.splice(contacted.indexOf(status), 1); } + return null; }); return contacted; diff --git a/app/routes/companyInterest/components/CompanyInterestPage.js b/app/routes/companyInterest/components/CompanyInterestPage.js index a45c9f3fdb..7d45714a86 100644 --- a/app/routes/companyInterest/components/CompanyInterestPage.js +++ b/app/routes/companyInterest/components/CompanyInterestPage.js @@ -158,6 +158,8 @@ const LanguageFlag = ({ language }: { language: string }) => { case 'norwegian': flag = english; break; + default: + break; } return country_flag; }; diff --git a/app/routes/companyInterest/components/CompanySemesterGUI.js b/app/routes/companyInterest/components/CompanySemesterGUI.js index cf7c196829..104ac65c6d 100644 --- a/app/routes/companyInterest/components/CompanySemesterGUI.js +++ b/app/routes/companyInterest/components/CompanySemesterGUI.js @@ -103,8 +103,8 @@ const onSubmit = ({ year, semester }, dispatch, props: Props) => { const { semesters, addSemester, editSemester } = props; const existingCompanySemester = semesters.find((companySemester) => { return ( - Number(companySemester.year) == Number(year) && - companySemester.semester == semester + Number(companySemester.year) === Number(year) && + companySemester.semester === semester ); }); if (existingCompanySemester) diff --git a/app/routes/errors/HTTPError.js b/app/routes/errors/HTTPError.js index 25e2bb058f..448b20796a 100644 --- a/app/routes/errors/HTTPError.js +++ b/app/routes/errors/HTTPError.js @@ -6,11 +6,17 @@ import { Link } from 'react-router-dom'; import renderAbakus from './renderAbakus'; const HTTPMapping = { - '400': 'Noe gikk galt med forespørselen', - '401': 'Du er ikke logget inn', - '403': 'Denne siden har du ikke tilgang på', - '404': 'Denne siden finnes ikke', - '500': 'Noe gikk veldig galt, Webkom er på saken!', + // Non-string literal property keys is not supported in flow yet + // $FlowFixMe + 400: 'Noe gikk galt med forespørselen', + // $FlowFixMe + 401: 'Du er ikke logget inn', + // $FlowFixMe + 403: 'Denne siden har du ikke tilgang på', + // $FlowFixMe + 404: 'Denne siden finnes ikke', + // $FlowFixMe + 500: 'Noe gikk veldig galt, Webkom er på saken!', }; const fallbackStatus = 404; diff --git a/app/routes/errors/statusCodePage.js b/app/routes/errors/statusCodePage.js index 37e15e7eb8..5c096097d1 100644 --- a/app/routes/errors/statusCodePage.js +++ b/app/routes/errors/statusCodePage.js @@ -4,7 +4,9 @@ import HTTPError from 'app/routes/errors'; import { setStatusCode } from 'app/actions/RoutingActions'; import prepare from 'app/utils/prepare'; -export default (statusCode: number) => +const statusCodePage = (statusCode: number) => compose(prepare((props, dispatch) => dispatch(setStatusCode(statusCode))))( HTTPError ); + +export default statusCodePage; diff --git a/app/routes/events/components/EventAdministrate/Attendees.js b/app/routes/events/components/EventAdministrate/Attendees.js index 04b37141d9..6e5c37a4fb 100644 --- a/app/routes/events/components/EventAdministrate/Attendees.js +++ b/app/routes/events/components/EventAdministrate/Attendees.js @@ -144,7 +144,7 @@ export default class Attendees extends Component { {event.useContactTracing && - currentUser.id == event.createdBy && + currentUser.id === event.createdBy && moment().isBefore(moment(event.endTime).add('days', 14)) && (this.state.generatedCsvUrl ? ( diff --git a/app/routes/events/components/EventEditor/index.js b/app/routes/events/components/EventEditor/index.js index d36d77ce13..d0afdaded2 100644 --- a/app/routes/events/components/EventEditor/index.js +++ b/app/routes/events/components/EventEditor/index.js @@ -92,7 +92,7 @@ function EventEditor({ } const isTBA = (value) => - value && value == 'TBA' ? `Velg påmeldingstype TBA` : undefined; + value && value === 'TBA' ? `Velg påmeldingstype TBA` : undefined; const tooLow = (value) => value && value <= 3 ? `Summen må være større enn 3 kr` : undefined; diff --git a/app/routes/events/components/EventEditor/renderPools.js b/app/routes/events/components/EventEditor/renderPools.js index 323a0cf62d..72f74993f8 100644 --- a/app/routes/events/components/EventEditor/renderPools.js +++ b/app/routes/events/components/EventEditor/renderPools.js @@ -68,7 +68,8 @@ const renderPools = ({ fields, startTime, eventStatusType }: poolProps) => (
)}
diff --git a/app/routes/events/components/JoinEventFormCountdownProvider.js b/app/routes/events/components/JoinEventFormCountdownProvider.js index 07accd0fae..0833597517 100644 --- a/app/routes/events/components/JoinEventFormCountdownProvider.js +++ b/app/routes/events/components/JoinEventFormCountdownProvider.js @@ -14,6 +14,13 @@ type Action = | 'REGISTRATION_NOT_AVAILABLE' | 'RESET'; +type State = { + formOpen: boolean, + captchaOpen: boolean, + buttonOpen: boolean, + registrationOpensIn: ?string, +}; + export type Props = { event: Event, registration: ?EventRegistration, @@ -36,13 +43,6 @@ const TICK_ACTIONS: Array<[number, Action]> = [ [Infinity, 'STILL_WAITING'], ]; -type State = { - formOpen: boolean, - captchaOpen: boolean, - buttonOpen: boolean, - registrationOpensIn: ?string, -}; - const countdownReducer = ( state: State, action: Action, diff --git a/app/routes/events/utils.js b/app/routes/events/utils.js index cef3e4cf55..5805776f42 100644 --- a/app/routes/events/utils.js +++ b/app/routes/events/utils.js @@ -95,7 +95,7 @@ const calculatePrice = (data) => { * @param eventStatusType: what kind of registrationmode this event has */ const calculateLocation = (data) => - data.eventStatusType == 'TBA' ? 'TBA' : data.location; + data.eventStatusType === 'TBA' ? 'TBA' : data.location; /* Calculate the event pools * @param eventStatusType: what kind of registrationmode this event has diff --git a/app/routes/interestgroups/components/InterestGroupDetail.js b/app/routes/interestgroups/components/InterestGroupDetail.js index f8e074f7aa..6280b4ae7d 100644 --- a/app/routes/interestgroups/components/InterestGroupDetail.js +++ b/app/routes/interestgroups/components/InterestGroupDetail.js @@ -86,7 +86,7 @@ const ButtonRow = ({ const Contact = ({ group }: { group: Group }) => { const leaders = group.memberships.filter((m) => m.role === 'leader'); - if (leaders.length == 0) { + if (leaders.length === 0) { return (

Leder

diff --git a/app/routes/joblistings/components/JoblistingEditor.js b/app/routes/joblistings/components/JoblistingEditor.js index df10b5deff..ca939ab32e 100644 --- a/app/routes/joblistings/components/JoblistingEditor.js +++ b/app/routes/joblistings/components/JoblistingEditor.js @@ -24,6 +24,11 @@ import { validYoutubeUrl } from 'app/utils/validation'; import type { Joblisting, Workplace, ID } from 'app/models'; +type SelectInputObject = { + label: string, + value: ID, +}; + type Props = { joblistingId?: string, joblisting: Joblisting, @@ -43,11 +48,6 @@ type State = { responsibleOptions: Array, }; -type SelectInputObject = { - label: string, - value: ID, -}; - class JoblistingEditor extends Component { state = { responsibleOptions: [], diff --git a/app/routes/overview/components/NextEvent.js b/app/routes/overview/components/NextEvent.js index 618e101299..0085ffd7fa 100644 --- a/app/routes/overview/components/NextEvent.js +++ b/app/routes/overview/components/NextEvent.js @@ -113,7 +113,7 @@ const inRange = (event) => { const NextEvent = (props: { events: Array }) => { // This will prevent the filler from rendering in the // split second where events have not loaded - if (props.events.length == 0) return null; + if (props.events.length === 0) return null; // Sorted events based on activationfilter take out the // ones that are out of range diff --git a/app/routes/overview/components/Overview.js b/app/routes/overview/components/Overview.js index aba82d3862..b55a2df9d2 100644 --- a/app/routes/overview/components/Overview.js +++ b/app/routes/overview/components/Overview.js @@ -86,7 +86,7 @@ class Overview extends Component { {frontpage .filter((item) => item.documentType === 'event') - .filter((item) => item != frontpage[0]) + .filter((item) => item !== frontpage[0]) .slice(0, this.state.eventsToShow) .map((event) => ( , +}; + type Props = { selectedPage: any, currentUrl: string, @@ -106,14 +114,6 @@ class PageDetail extends Component { export default PageDetail; -export type PageInfo = { - editUrl?: string, - title: string, - /* The page is complete, and can be rendered */ - isComplete: boolean, - actionGrant?: Array, -}; - export const MainPageRenderer = ({ page, pageInfo, diff --git a/app/routes/pages/components/PageHierarchy.js b/app/routes/pages/components/PageHierarchy.js index 24749914b3..a035abffdf 100644 --- a/app/routes/pages/components/PageHierarchy.js +++ b/app/routes/pages/components/PageHierarchy.js @@ -6,6 +6,16 @@ import { Link } from 'react-router-dom'; import styles from './PageHierarchy.css'; import Icon from 'app/components/Icon'; +export type HierarchyEntity = { + title: string, + url: string, +}; + +export type HierarchySectionEntity = { + title: string, + items: HierarchyEntity[], +}; + type Props = { pageHierarchy: Array, currentUrl: string, @@ -36,16 +46,6 @@ const PageHierarchy = ({ export default PageHierarchy; -export type HierarchyEntity = { - title: string, - url: string, -}; - -export type HierarchySectionEntity = { - title: string, - items: HierarchyEntity[], -}; - const HierarchySection = ({ hierarchySection: { title, items }, currentUrl, diff --git a/app/routes/photos/components/GalleryPictureModal.js b/app/routes/photos/components/GalleryPictureModal.js index 6dbb065566..a1251a3377 100644 --- a/app/routes/photos/components/GalleryPictureModal.js +++ b/app/routes/photos/components/GalleryPictureModal.js @@ -53,10 +53,12 @@ const OnKeyDownHandler = ({ }) => ( useEffect( () => ( + // eslint-disable-next-line no-sequences window.addEventListener('keydown', handler), () => window.removeEventListener('keydown', handler) ), [handler] + // eslint-disable-next-line no-sequences ), null ); diff --git a/app/routes/quotes/components/Quote.js b/app/routes/quotes/components/Quote.js index a7f3d6944a..60c499937f 100644 --- a/app/routes/quotes/components/Quote.js +++ b/app/routes/quotes/components/Quote.js @@ -66,7 +66,8 @@ export default class Quote extends Component { if (!fetchingEmojis) { mappedEmojis = emojis.map((emoji) => { const foundReaction = quote.reactionsGrouped.find( - (reaction) => emoji.shortCode == reaction.emoji && reaction.hasReacted + (reaction) => + emoji.shortCode === reaction.emoji && reaction.hasReacted ); if (foundReaction !== undefined) { emoji.hasReacted = true; diff --git a/app/routes/surveys/components/SubmissionEditor/SubmissionEditor.js b/app/routes/surveys/components/SubmissionEditor/SubmissionEditor.js index 344b028adb..48ba3c47a7 100644 --- a/app/routes/surveys/components/SubmissionEditor/SubmissionEditor.js +++ b/app/routes/surveys/components/SubmissionEditor/SubmissionEditor.js @@ -158,6 +158,7 @@ const validateMandatory = (inputAnswers: Array, props) => { if (question.mandatory && !answeredQuestionIds.includes(question.id)) { errors.questions[question.id] = 'Dette feltet er obligatorisk'; } + return null; }); if (Object.keys(errors.questions).length > 0) { diff --git a/app/routes/surveys/components/Submissions/Results.js b/app/routes/surveys/components/Submissions/Results.js index 18da23b50c..a475271240 100644 --- a/app/routes/surveys/components/Submissions/Results.js +++ b/app/routes/surveys/components/Submissions/Results.js @@ -32,16 +32,16 @@ type Props = { value: string, }; -type EventDataProps = { - info: Array, -}; - type Info = { icon: string, data: number, meta: string, }; +type EventDataProps = { + info: Array, +}; + type GraphProps = { cx: number, cy: number, diff --git a/app/routes/surveys/components/Submissions/SubmissionPublicResults.js b/app/routes/surveys/components/Submissions/SubmissionPublicResults.js index 2f6ab6e566..61879d4b7b 100644 --- a/app/routes/surveys/components/Submissions/SubmissionPublicResults.js +++ b/app/routes/surveys/components/Submissions/SubmissionPublicResults.js @@ -35,6 +35,7 @@ const SubmissionPublicResultsPage = ({
  • {answer}
  • )); } + return null; }) .filter(Boolean); @@ -58,6 +59,7 @@ const SubmissionPublicResultsPage = ({ selections: Number(results[questionId][optionId]), }); } + return null; }); return questionData; }; @@ -65,6 +67,7 @@ const SubmissionPublicResultsPage = ({ const graphData = {}; Object.keys(results).map((questionId) => { graphData[Number(questionId)] = generateQuestionData(questionId); + return null; }); return ( diff --git a/app/routes/surveys/components/Submissions/SubmissionSummary.js b/app/routes/surveys/components/Submissions/SubmissionSummary.js index 3de397c77b..8cb3935a2a 100644 --- a/app/routes/surveys/components/Submissions/SubmissionSummary.js +++ b/app/routes/surveys/components/Submissions/SubmissionSummary.js @@ -93,6 +93,7 @@ const SubmissionSummary = ({ option: option.optionText, selections: selectedCount, }); + return null; }); return questionData; }; @@ -100,6 +101,7 @@ const SubmissionSummary = ({ const graphData = {}; survey.questions.map((question) => { graphData[question.id] = generateQuestionData(question); + return null; }); return ( diff --git a/app/routes/surveys/components/SurveyEditor/SurveyEditor.js b/app/routes/surveys/components/SurveyEditor/SurveyEditor.js index a3ee9b5dfe..55b38ad890 100644 --- a/app/routes/surveys/components/SurveyEditor/SurveyEditor.js +++ b/app/routes/surveys/components/SurveyEditor/SurveyEditor.js @@ -67,6 +67,7 @@ function TemplateTypeDropdownItems({ e.preventDefault(); e.stopPropagation(); if ( + // eslint-disable-next-line no-restricted-globals confirm( 'Dette vil slette alle uendrete lagringer i undersøkelsen!\n' + 'Lagrete endringer vil ikke overskrives før du trykker Lagre.' diff --git a/app/types.js b/app/types.js index b44c0dce50..5a51cb968c 100644 --- a/app/types.js +++ b/app/types.js @@ -68,14 +68,6 @@ export type Token = DecodedToken & { // Todo: remove any export type Reducer = any; // (state: State, action: Action) => State; -export type Store = ReduxStore>; - -export type GetState = () => State; - -export type GetCookie = (string) => ?EncodedToken; - -export type Middleware = ReduxMiddleware, Dispatch<*>>; - export type Action = {| type: string, payload?: any, @@ -91,6 +83,17 @@ export type PromiseAction = {| payload?: any, |}; +export type GetState = () => State; + +export type GetCookie = (string) => ?EncodedToken; + +export type Thunk = ( + // eslint-disable-next-line no-use-before-define + dispatch: Dispatch, + getState: GetState, + { getCookie: GetCookie } +) => R; + export type AnyAction = | PromiseAction | Thunk @@ -101,11 +104,9 @@ export type AnyAction = export type Dispatch = (action: AnyAction) => R; -export type Thunk = ( - dispatch: Dispatch, - getState: GetState, - { getCookie: GetCookie } -) => R; +export type Store = ReduxStore>; + +export type Middleware = ReduxMiddleware, Dispatch<*>>; export type ReduxFormProps = { pristine: boolean, diff --git a/app/utils/createEntityReducer.js b/app/utils/createEntityReducer.js index efdcd785ef..71e6b71c1a 100644 --- a/app/utils/createEntityReducer.js +++ b/app/utils/createEntityReducer.js @@ -48,6 +48,8 @@ export function fetching(fetchTypes: ?EntityReducerTypes) { case fetchType.SUCCESS: case fetchType.FAILURE: return { ...state, fetching: false }; + default: + break; } } @@ -158,6 +160,7 @@ export function deleteEntities(deleteTypes: ?EntityReducerTypes) { ? [Number(resultId), resultId.toString()] : [resultId]) ), + // eslint-disable-next-line no-sequences }), newPaginationNext ), diff --git a/config/webpack.client.js b/config/webpack.client.js index b081b6879d..e0943489ec 100644 --- a/config/webpack.client.js +++ b/config/webpack.client.js @@ -20,7 +20,7 @@ const outputPath = path.resolve(root, 'dist-client'); const publicPath = '/'; module.exports = (env, argv) => { - const isProduction = argv.mode == 'production'; + const isProduction = argv.mode === 'production'; const dllPath = path.resolve(root, dllConfig.path); const manifestPath = path.resolve(dllPath, 'vendors.json'); diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 8247ff24e7..4a3aeafd1b 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -75,7 +75,6 @@ Cypress.Commands.add('editorType', { prevSubject: true }, (subject, text) => subject[0].dispatchEvent( new InputEvent('beforeinput', { inputType: 'insertText', data: text }) ); - subject; return subject; }) ); diff --git a/package.json b/package.json index 1f4b0e8a52..3dc38f8933 100644 --- a/package.json +++ b/package.json @@ -114,14 +114,15 @@ "duplicate-package-checker-webpack-plugin": "^3.0.0", "enzyme": "^3.9.0", "enzyme-adapter-react-16": "^1.15.2", - "eslint": "^5.14.1", - "eslint-config-prettier": "^6.10.0", - "eslint-config-react-app": "^3.0.7", + "eslint": "^7.12.1", + "eslint-config-prettier": "^6.15.0", + "eslint-config-react-app": "^6.0.0", "eslint-plugin-cypress": "^2.11.2", - "eslint-plugin-flowtype": "^3.4.2", - "eslint-plugin-import": "^2.16.0", - "eslint-plugin-jsx-a11y": "^6.2.1", - "eslint-plugin-react": "7.20.6", + "eslint-plugin-flowtype": "^5.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4.2.0", "express": "^4.17.1", "file-loader": "^6.1.0", "flow-bin": "0.77.0", @@ -135,13 +136,13 @@ "postcss-loader": "^3.0.0", "postcss-nested": "^4.2.1", "postcss-preset-env": "^6.6.0", - "prettier": "2.0.5", + "prettier": "^2.1.2", "react-hot-loader": "^4.12.13", "react-styleguidist": "^11.0.8", "redux-mock-store": "^1.5.4", "start-server-webpack-plugin": "^2.2.5", "style-loader": "^1.1.3", - "stylelint": "^13.6.1", + "stylelint": "^13.7.2", "stylelint-config-standard": "^20.0.0", "timekeeper": "^2.2.0", "url-loader": "^4.1.1", diff --git a/server/env.js b/server/env.js index e45326f508..833dea1ccd 100644 --- a/server/env.js +++ b/server/env.js @@ -1,4 +1,4 @@ -export default { +const config = { host: process.env.HOST, port: process.env.PORT, https: process.env.HTTPS || false, @@ -8,3 +8,5 @@ export default { release: process.env.RELEASE, environment: process.env.ENVIRONMENT, }; + +export default config; diff --git a/yarn.lock b/yarn.lock index b283c772f0..7cdee9c48d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -947,7 +947,21 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.9.2": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.0.tgz#f10245877042a815e07f7e693faff0ae9d3a2aac" + integrity sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.11.2": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.3.1", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== @@ -1073,6 +1087,22 @@ debug "^3.1.0" lodash.once "^4.1.1" +"@eslint/eslintrc@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" + integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1928,7 +1958,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.0.0, acorn-jsx@^5.1.0, acorn-jsx@^5.2.0: +acorn-jsx@^5.1.0, acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== @@ -1938,7 +1968,7 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.0.7, acorn@^6.4.1: +acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== @@ -1948,6 +1978,11 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + address@1.1.2, address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -1993,7 +2028,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.1.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.4" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== @@ -2003,7 +2038,7 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2013,16 +2048,6 @@ ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.9.1: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -2038,6 +2063,11 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -2375,12 +2405,12 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== -axe-core@^3.5.4: - version "3.5.5" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" - integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== +axe-core@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.0.2.tgz#c7cf7378378a51fcd272d3c09668002a4990b1cb" + integrity sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA== -axobject-query@^2.1.2: +axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== @@ -2908,6 +2938,14 @@ cachedir@^2.3.0: resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -2993,7 +3031,7 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== -chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3472,10 +3510,10 @@ concurrently@^5.2.0: tree-kill "^1.2.2" yargs "^13.3.0" -confusing-browser-globals@^1.0.6: - version "1.0.9" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" - integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== +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== connect-history-api-fallback@^1.6.0: version "1.6.0" @@ -3688,7 +3726,7 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4089,7 +4127,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6. dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -4103,6 +4141,13 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: dependencies: ms "^2.1.1" +debug@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -4148,7 +4193,7 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -4568,6 +4613,13 @@ enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + entities@^1.1.1, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -4738,21 +4790,21 @@ escodegen@^1.12.0, escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^6.10.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" - integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== +eslint-config-prettier@^6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" + integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== dependencies: get-stdin "^6.0.0" -eslint-config-react-app@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz#6f606828ba30bafee7d744c41cd07a3fea8f3035" - integrity sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA== +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.6" + confusing-browser-globals "^1.0.10" -eslint-import-resolver-node@^0.3.3: +eslint-import-resolver-node@^0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== @@ -4775,24 +4827,25 @@ eslint-plugin-cypress@^2.11.2: dependencies: globals "^11.12.0" -eslint-plugin-flowtype@^3.4.2: - version "3.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz#e241ebd39c0ce519345a3f074ec1ebde4cf80f2c" - integrity sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw== +eslint-plugin-flowtype@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.2.0.tgz#a4bef5dc18f9b2bdb41569a4ab05d73805a3d261" + integrity sha512-z7ULdTxuhlRJcEe1MVljePXricuPOrsWfScRXFhNzVD5dmTHWjIF57AxD0e7AbEoLSbjSsaA5S+hCg43WvpXJQ== dependencies: lodash "^4.17.15" + string-natural-compare "^3.0.1" -eslint-plugin-import@^2.16.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" - integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== dependencies: array-includes "^3.1.1" array.prototype.flat "^1.2.3" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.3" + eslint-import-resolver-node "^0.3.4" eslint-module-utils "^2.6.0" has "^1.0.3" minimatch "^3.0.4" @@ -4801,38 +4854,43 @@ eslint-plugin-import@^2.16.0: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-jsx-a11y@^6.2.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660" - integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== +eslint-plugin-jsx-a11y@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== dependencies: - "@babel/runtime" "^7.10.2" + "@babel/runtime" "^7.11.2" aria-query "^4.2.2" array-includes "^3.1.1" ast-types-flow "^0.0.7" - axe-core "^3.5.4" - axobject-query "^2.1.2" + axe-core "^4.0.2" + axobject-query "^2.2.0" damerau-levenshtein "^1.0.6" emoji-regex "^9.0.0" has "^1.0.3" - jsx-ast-utils "^2.4.1" + jsx-ast-utils "^3.1.0" language-tags "^1.0.5" -eslint-plugin-react@7.20.6: - version "7.20.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.6.tgz#4d7845311a93c463493ccfa0a19c9c5d0fd69f60" - integrity sha512-kidMTE5HAEBSLu23CUDvj8dc3LdBU0ri1scwHBZjI41oDv4tjsWZKU7MQccFzH1QYPYhsnTF2ovh7JlcIcmxgg== +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + +eslint-plugin-react@^7.21.5: + version "7.21.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz#50b21a412b9574bfe05b21db176e8b7b3b15bff3" + integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g== dependencies: array-includes "^3.1.1" array.prototype.flatmap "^1.2.3" doctrine "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.4.1" + jsx-ast-utils "^2.4.1 || ^3.0.0" object.entries "^1.1.2" object.fromentries "^2.0.2" object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.17.0" + resolve "^1.18.1" string.prototype.matchall "^4.0.2" eslint-scope@^4.0.3: @@ -4843,68 +4901,82 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +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== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +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== dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^5.14.1: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.12.1: + version "7.12.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" + integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== dependencies: "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" + "@eslint/eslintrc" "^0.2.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.0" + esquery "^1.2.0" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" + glob-parent "^5.0.0" + globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" + levn "^0.4.1" + lodash "^4.17.19" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" table "^5.2.3" text-table "^0.2.0" + v8-compile-cache "^2.0.3" -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== +espree@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" + acorn "^7.4.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" esprima@^2.1.0: version "2.7.3" @@ -4916,34 +4988,34 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: +esquery@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" esrever@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/esrever/-/esrever-0.2.0.tgz#96e9d28f4f1b1a76784cd5d490eaae010e7407b8" integrity sha1-lunSj08bGnZ4TNXUkOquAQ50B7g= -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" - integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== estree-walker@~0.9.0: version "0.9.0" @@ -5600,6 +5672,15 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -5668,7 +5749,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, 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== @@ -5754,11 +5835,18 @@ global@^4.3.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.12.0, globals@^11.7.0: +globals@^11.1.0, globals@^11.12.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + globby@8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" @@ -6246,7 +6334,15 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-fresh@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -6361,25 +6457,6 @@ inquirer@6.5.0: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -7352,7 +7429,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.0, js-yaml@^3.13.1: +js-yaml@^3.13.1: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -7535,13 +7612,13 @@ jss@10.4.0, jss@^10.0.0: is-in-browser "^1.1.3" tiny-warning "^1.0.2" -jsx-ast-utils@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" - integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" + integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== dependencies: array-includes "^3.1.1" - object.assign "^4.1.0" + object.assign "^4.1.1" jwt-decode@2.2.0: version "2.2.0" @@ -7624,7 +7701,15 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" -levn@^0.3.0, levn@~0.3.0: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -8371,7 +8456,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.1.1: +ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -8692,6 +8777,16 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + object.entries@^1.1.1, object.entries@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" @@ -8806,7 +8901,7 @@ optimize-css-assets-webpack-plugin@^5.0.1: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -8818,6 +8913,18 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + ora@^4.0.2: version "4.1.1" resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" @@ -9916,6 +10023,11 @@ precond@0.2: resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -9926,10 +10038,10 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prettier@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" - integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== +prettier@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" + integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== pretty-bytes@^5.3.0: version "5.3.0" @@ -10965,10 +11077,10 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== regexpu-core@4.5.4: version "4.5.4" @@ -11378,13 +11490,20 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.2: +rxjs@^6.3.3, rxjs@^6.5.2: version "6.6.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== dependencies: tslib "^1.9.0" +rxjs@^6.4.0: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -11498,7 +11617,7 @@ selfsigned@^1.10.7: dependencies: node-forge "0.9.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -11513,7 +11632,7 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2: +semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== @@ -12065,6 +12184,11 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -12242,10 +12366,10 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== style-loader@^1.1.3: version "1.2.1" @@ -12281,10 +12405,10 @@ stylelint-config-standard@^20.0.0: dependencies: stylelint-config-recommended "^3.0.0" -stylelint@^13.6.1: - version "13.7.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.7.0.tgz#8d7a4233063b2f06e9f28b3405ff189e334547b5" - integrity sha512-1wStd4zVetnlHO98VjcHQbjSDmvcA39smkZQMct2cf+hom40H0xlQNdzzbswoG/jGBh61/Ue9m7Lu99PY51O6A== +stylelint@^13.7.2: + version "13.7.2" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.7.2.tgz#6f3c58eea4077680ed0ceb0d064b22b100970486" + integrity sha512-mmieorkfmO+ZA6CNDu1ic9qpt4tFvH2QUB7vqXgrMVHe5ENU69q7YDq0YUg/UHLuCsZOWhUAvcMcLzLDIERzSg== dependencies: "@stylelint/postcss-css-in-js" "^0.37.2" "@stylelint/postcss-markdown" "^0.36.1" @@ -12741,7 +12865,12 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.9.0, tslib@^1.9.3: +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== + +tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -12768,6 +12897,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +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" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -13115,6 +13251,11 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + v8-compile-cache@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" @@ -13508,7 +13649,7 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==