diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index fa822391f..4dd4ad7f8 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -6,11 +6,13 @@ on: push: paths: - backend/** + - config/** - .github/workflows/backend.yml pull_request: types: [opened] paths: - backend/** + - config/** - .github/workflows/backend.yml concurrency: diff --git a/.github/workflows/cli.yml b/.github/workflows/cli.yml index db08cf75c..6911047dc 100644 --- a/.github/workflows/cli.yml +++ b/.github/workflows/cli.yml @@ -6,11 +6,13 @@ on: push: paths: - cli/** + - config/** - .github/workflows/cli.yml pull_request: types: [opened] paths: - cli/** + - config/** - .github/workflows/cli.yml concurrency: diff --git a/.github/workflows/club_scraper.yml b/.github/workflows/mock_data.yml similarity index 92% rename from .github/workflows/club_scraper.yml rename to .github/workflows/mock_data.yml index e3b6877bb..0f1732add 100644 --- a/.github/workflows/club_scraper.yml +++ b/.github/workflows/mock_data.yml @@ -1,17 +1,17 @@ -name: Club Scraper +name: Mock Data permissions: read-all on: push: paths: - - scraper/club/** - - .github/workflows/club_scraper.yml + - mock_data/** + - .github/workflows/mock_data.yml pull_request: types: [opened] paths: - - scraper/club/** - - .github/workflows/club_scraper.yml + - mock_data/** + - .github/workflows/mock_data.yml concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -19,7 +19,7 @@ concurrency: env: CARGO_TERM_COLOR: always - MANIFEST_PATH: ./scraper/clubs/Cargo.toml + MANIFEST_PATH: ./mock_data/Cargo.toml jobs: test: diff --git a/.gitignore b/.gitignore index 2142bdd9d..c2fd14ed3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ .DS_Store # Cli -sac-cli +sac # VSCode .vscode @@ -22,3 +22,5 @@ backend/tests/api/__debug_* frontend/sac-mobile/ios/ frontend/sac-mobile/android/ tmp/ +ios +android diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f935c8414..c5bbfbdd0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -131,7 +131,7 @@ ### SAC CLI - To install use `./install.sh` and then run `sac-cli` to see all commands. + To install use `./install.sh` and then run `sac` to see all commands. # Git Flow diff --git a/backend/go.mod b/backend/go.mod index 21f721d1c..f867c3506 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -4,7 +4,7 @@ go 1.22.2 require ( github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 - github.com/aws/aws-sdk-go v1.50.5 + github.com/aws/aws-sdk-go v1.51.21 github.com/garrettladley/mattress v0.4.0 github.com/go-playground/validator/v10 v10.19.0 github.com/goccy/go-json v0.10.2 diff --git a/backend/go.sum b/backend/go.sum index a7976b02e..cdbd3120f 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -8,8 +8,8 @@ github.com/awnumar/memcall v0.2.0 h1:sRaogqExTOOkkNwO9pzJsL8jrOV29UuUW7teRMfbqtI github.com/awnumar/memcall v0.2.0/go.mod h1:S911igBPR9CThzd/hYQQmTc9SWNu3ZHIlCGaWsWsoJo= github.com/awnumar/memguard v0.22.5 h1:PH7sbUVERS5DdXh3+mLo8FDcl1eIeVjJVYMnyuYpvuI= github.com/awnumar/memguard v0.22.5/go.mod h1:+APmZGThMBWjnMlKiSM1X7MVpbIVewen2MTkqWkA/zE= -github.com/aws/aws-sdk-go v1.50.5 h1:H2Aadcgwr7a2aqS6ZwcE+l1mA6ZrTseYCvjw2QLmxIA= -github.com/aws/aws-sdk-go v1.50.5/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.51.21 h1:UrT6JC9R9PkYYXDZBV0qDKTualMr+bfK2eboTknMgbs= +github.com/aws/aws-sdk-go v1.51.21/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= diff --git a/backend/src/auth/password.go b/backend/src/auth/password.go new file mode 100644 index 000000000..f1e6a9412 --- /dev/null +++ b/backend/src/auth/password.go @@ -0,0 +1,39 @@ +package auth + +import ( + "regexp" + "strings" + + "github.com/GenerateNU/sac/backend/src/constants" + "github.com/GenerateNU/sac/backend/src/errors" +) + +func ValidatePassword(password string) *errors.Error { + if len(password) < 8 { + return &errors.InvalidPasswordNotLongEnough + } + + if !hasDigit(password) { + return &errors.InvalidPasswordNoDigit + } + + if !hasSpecialChar(password) { + return &errors.InvalidPasswordNoSpecialCharacter + } + + return nil +} + +func hasDigit(str string) bool { + return regexp.MustCompile(`[0-9]`).MatchString(str) +} + +func hasSpecialChar(str string) bool { + for _, c := range constants.SPECIAL_CHARACTERS { + if strings.Contains(str, string(c)) { + return true + } + } + + return false +} diff --git a/backend/src/constants/auth.go b/backend/src/constants/auth.go index 236691482..9cd14511f 100644 --- a/backend/src/constants/auth.go +++ b/backend/src/constants/auth.go @@ -3,6 +3,8 @@ package constants import "time" const ( - ACCESS_TOKEN_EXPIRY time.Duration = time.Hour * 24 * 30 // temporary TODO: change to 60 minutes - REFRESH_TOKEN_EXPIRY time.Duration = time.Hour * 24 * 30 + ACCESS_TOKEN_EXPIRY time.Duration = time.Minute * 24 * 30 // temporary TODO: change to 60 minutes + REFRESH_TOKEN_EXPIRY time.Duration = time.Minute * 24 * 30 ) + +var SPECIAL_CHARACTERS = []rune{' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'} // see https://owasp.org/www-community/password-special-characters diff --git a/backend/src/controllers/tag.go b/backend/src/controllers/tag.go index 665a22aab..39c6cd843 100644 --- a/backend/src/controllers/tag.go +++ b/backend/src/controllers/tag.go @@ -1,7 +1,6 @@ package controllers import ( - "github.com/GenerateNU/sac/backend/src/constants" "github.com/GenerateNU/sac/backend/src/errors" "github.com/GenerateNU/sac/backend/src/models" "github.com/GenerateNU/sac/backend/src/services" @@ -32,7 +31,7 @@ func NewTagController(tagService services.TagServiceInterface) *TagController { // @Failure 500 {object} errors.Error // @Router /tags [get] func (t *TagController) GetTags(c *fiber.Ctx) error { - tags, err := t.tagService.GetTags(c.Query("limit", constants.DEFAULT_LIMIT_STRING), c.Query("page", constants.DEFAULT_PAGE_STRING)) + tags, err := t.tagService.GetTags() if err != nil { return err.FiberError(c) } diff --git a/backend/src/database/super.go b/backend/src/database/super.go index 9d357ba24..7cc9c2b8d 100644 --- a/backend/src/database/super.go +++ b/backend/src/database/super.go @@ -22,6 +22,7 @@ func SuperUser(superUserSettings config.SuperUserSettings) (*models.User, *error PasswordHash: *passwordHash, FirstName: "SAC", LastName: "Super", + Major0: models.ComputerScience, College: models.KCCS, GraduationCycle: models.May, GraduationYear: 2025, diff --git a/backend/src/errors/auth.go b/backend/src/errors/auth.go index 57a6cc2d7..83b3c46c4 100644 --- a/backend/src/errors/auth.go +++ b/backend/src/errors/auth.go @@ -99,4 +99,16 @@ var ( StatusCode: fiber.StatusNotFound, Message: "otp not found", } + InvalidPasswordNotLongEnough = Error{ + StatusCode: fiber.StatusBadRequest, + Message: "password must be at least 8 characters long", + } + InvalidPasswordNoDigit = Error{ + StatusCode: fiber.StatusBadRequest, + Message: "password must contain at least one digit", + } + InvalidPasswordNoSpecialCharacter = Error{ + StatusCode: fiber.StatusBadRequest, + Message: "password must contain at least one special character", + } ) diff --git a/backend/src/file/file.go b/backend/src/file/file.go index 9314ffce5..9e292dbe1 100644 --- a/backend/src/file/file.go +++ b/backend/src/file/file.go @@ -128,7 +128,6 @@ func (aw *AWSClient) UploadFile(folder string, fileHeader *multipart.FileHeader, Body: bytes.NewReader(file), }) if s3Err != nil { - fmt.Printf("Failed to upload data to %s/%s, %v\n", bucket, key, err) return nil, &errors.FailedToUploadFile } diff --git a/backend/src/models/category.go b/backend/src/models/category.go index 6f9770557..a6d757d10 100644 --- a/backend/src/models/category.go +++ b/backend/src/models/category.go @@ -3,7 +3,7 @@ package models type Category struct { Model - Name string `gorm:"type:varchar(255);unique" json:"name" validate:"required,max=255"` + Name string `gorm:"type:varchar(255);unique;not null" json:"name" validate:"required,max=255"` Tag []Tag `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` } diff --git a/backend/src/models/club.go b/backend/src/models/club.go index 23c931720..2e4b31918 100644 --- a/backend/src/models/club.go +++ b/backend/src/models/club.go @@ -30,13 +30,13 @@ type Club struct { SoftDeletedAt gorm.DeletedAt `gorm:"type:timestamptz;default:NULL" json:"-" validate:"-"` - Name string `gorm:"type:varchar(255)" json:"name" validate:"required,max=255"` - Preview string `gorm:"type:varchar(255)" json:"preview" validate:"required,max=255"` - Description string `gorm:"type:text" json:"description" validate:"required,http_url,s3_url,max=255"` // S3 URL - NumMembers int `gorm:"type:int" json:"num_members" validate:"required,min=1"` - IsRecruiting bool `gorm:"type:bool;default:false" json:"is_recruiting" validate:"required"` - RecruitmentCycle RecruitmentCycle `gorm:"type:varchar(255);default:always" json:"recruitment_cycle" validate:"required,max=255,oneof=fall spring fallSpring always"` - RecruitmentType RecruitmentType `gorm:"type:varchar(255);default:unrestricted" json:"recruitment_type" validate:"required,max=255,oneof=unrestricted tryout application"` + Name string `gorm:"type:varchar(255);not null" json:"name" validate:"required,max=255"` + Preview string `gorm:"type:varchar(255);not null" json:"preview" validate:"required,max=255"` + Description string `gorm:"type:text;not null" json:"description" validate:"required,http_url,s3_url,max=255"` // S3 URL + NumMembers int `gorm:"type:int;not null" json:"num_members" validate:"required,min=1"` + IsRecruiting bool `gorm:"type:bool;default:false;not null" json:"is_recruiting" validate:"required"` + RecruitmentCycle RecruitmentCycle `gorm:"type:varchar(255);default:always;not null" json:"recruitment_cycle" validate:"required,max=255,oneof=fall spring fallSpring always"` + RecruitmentType RecruitmentType `gorm:"type:varchar(255);default:unrestricted;not null" json:"recruitment_type" validate:"required,max=255,oneof=unrestricted tryout application"` ApplicationLink string `gorm:"type:varchar(255);default:NULL" json:"application_link" validate:"required,max=255,http_url"` Logo string `gorm:"type:varchar(255);default:NULL" json:"logo" validate:"omitempty,http_url,s3_url,max=255"` // S3 URL diff --git a/backend/src/models/comment.go b/backend/src/models/comment.go index 9e2bb9eb1..30448d0fd 100644 --- a/backend/src/models/comment.go +++ b/backend/src/models/comment.go @@ -5,15 +5,15 @@ import "github.com/google/uuid" type Comment struct { Model - Question string `gorm:"type:varchar(255)" json:"question" validate:"required,max=255"` - Answer string `gorm:"type:varchar(255)" json:"answer" validate:",max=255"` - NumFoundHelpful uint `gorm:"type:int;default:0" json:"num_found_helpful" validate:"min=0"` + Question string `gorm:"type:varchar(255);not null" json:"question" validate:"required,max=255"` + Answer string `gorm:"type:varchar(255);not null" json:"answer" validate:",max=255"` + NumFoundHelpful uint `gorm:"type:int;default:0;not null" json:"num_found_helpful" validate:"min=0"` - AskedByID uuid.UUID `gorm:"type:uuid" json:"-" validate:"uuid4"` - AskedBy User `gorm:"foreignKey:AskedByID" json:"-" validate:"-"` + AskedByID uuid.UUID `gorm:"type:uuid;not null" json:"-" validate:"uuid4"` + AskedBy User `gorm:"foreignKey:AskedByID;not null" json:"-" validate:"-"` - ClubID uuid.UUID `gorm:"type:uuid" json:"-" validate:"uuid4"` - Club Club `gorm:"foreignKey:ClubID" json:"-" validate:"-"` + ClubID uuid.UUID `gorm:"type:uuid;not null" json:"-" validate:"uuid4"` + Club Club `gorm:"foreignKey:ClubID;not null" json:"-" validate:"-"` AnsweredByID *uuid.UUID `gorm:"type:uuid" json:"-" validate:"uuid4"` AnsweredBy *User `gorm:"foreignKey:AnsweredBy" json:"-" validate:"-"` diff --git a/backend/src/models/contact.go b/backend/src/models/contact.go index 25993f43c..dc5280332 100644 --- a/backend/src/models/contact.go +++ b/backend/src/models/contact.go @@ -43,10 +43,10 @@ func GetContentPrefix(contactType ContactType) string { type Contact struct { Model - Type ContactType `gorm:"type:varchar(255);uniqueIndex:idx_contact_type" json:"type" validate:"required,max=255,oneof=facebook instagram x linkedin youtube github slack discord email customSite"` - Content string `gorm:"type:varchar(255)" json:"content" validate:"required,max=255"` + Type ContactType `gorm:"type:varchar(255);uniqueIndex:idx_contact_type;not null" json:"type" validate:"required,max=255,oneof=facebook instagram x linkedin youtube github slack discord email customSite"` + Content string `gorm:"type:varchar(255);not null" json:"content" validate:"required,max=255"` - ClubID uuid.UUID `gorm:"foreignKey:ClubID;uniqueIndex:idx_contact_type" json:"-" validate:"uuid4"` + ClubID uuid.UUID `gorm:"foreignKey:ClubID;uniqueIndex:idx_contact_type;not null" json:"-" validate:"uuid4"` } type PutContactRequestBody struct { diff --git a/backend/src/models/event.go b/backend/src/models/event.go index 22538e154..3ec9c3db9 100644 --- a/backend/src/models/event.go +++ b/backend/src/models/event.go @@ -24,51 +24,46 @@ const ( type Event struct { Model - Name string `gorm:"type:varchar(255)" json:"name" validate:"required,max=255"` - Preview string `gorm:"type:varchar(255)" json:"preview" validate:"required,max=255"` - Content string `gorm:"type:varchar(255)" json:"content" validate:"required,max=255"` - StartTime time.Time `gorm:"type:timestamptz" json:"start_time" validate:"required,ltecsfield=EndTime"` - EndTime time.Time `gorm:"type:timestamptz" json:"end_time" validate:"required,gtecsfield=StartTime"` - Location string `gorm:"type:varchar(255)" json:"location" validate:"required,max=255"` - EventType EventType `gorm:"type:varchar(255);default:open" json:"event_type" validate:"required,max=255,oneof=open membersOnly"` - IsRecurring bool `gorm:"not null;type:bool;default:false" json:"is_recurring" validate:"-"` - - Host *uuid.UUID `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"uuid4"` + Name string `gorm:"type:varchar(255);not null" json:"name" validate:"required,max=255"` + Preview string `gorm:"type:varchar(255);not null" json:"preview" validate:"required,max=255"` + Content string `gorm:"type:varchar(255);not null" json:"content" validate:"required,max=255"` + StartTime time.Time `gorm:"type:timestamptz;not null" json:"start_time" validate:"required,ltecsfield=EndTime"` + EndTime time.Time `gorm:"type:timestamptz;not null" json:"end_time" validate:"required,gtecsfield=StartTime"` + Location string `gorm:"type:varchar(255);not null" json:"location" validate:"required,max=255"` + EventType EventType `gorm:"type:varchar(255);default:open;not null" json:"event_type" validate:"required,max=255,oneof=open membersOnly"` + IsRecurring bool `gorm:"type:bool;default:false;not null" json:"is_recurring" validate:"-"` + + Host *uuid.UUID `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;not null;" json:"-" validate:"uuid4"` RSVP []User `gorm:"many2many:user_event_rsvps;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` Waitlist []User `gorm:"many2many:user_event_waitlists;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` Clubs []Club `gorm:"many2many:club_events;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` Tag []Tag `gorm:"many2many:event_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` - Notification []Notification `gorm:"polymorphic:Reference;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;;" json:"-" validate:"-"` + Notification []Notification `gorm:"polymorphic:Reference;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` } type Series struct { Model - RecurringType RecurringType `gorm:"type:varchar(255);default:open" json:"recurring_type" validate:"max=255"` - SeparationCount int `gorm:"type:int" json:"separation_count" validate:"min=0"` - MaxOccurrences int `gorm:"type:int" json:"max_occurrences" validate:"min=1"` - DayOfWeek int `gorm:"type:int" json:"day_of_week" validate:"min=1,max=7"` - WeekOfMonth int `gorm:"type:int" json:"week_of_month" validate:"min=1,max=5"` - DayOfMonth int `gorm:"type:int" json:"day_of_month" validate:"min=1,max=31"` - Events []Event `gorm:"many2many:event_series;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"events" validate:"-"` + RecurringType RecurringType `gorm:"type:varchar(255);default:open;not null" json:"recurring_type" validate:"max=255"` + MaxOccurrences int `gorm:"type:int;not null" json:"max_occurrences" validate:"min=1"` + Events []Event `gorm:"many2many:event_series;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"events" validate:"-"` } -// TODO: add not null to required fields on all gorm models type EventSeries struct { - EventID uuid.UUID `gorm:"not null; type:uuid;" json:"event_id" validate:"uuid4"` + EventID uuid.UUID `gorm:"type:uuid;not null" json:"event_id" validate:"uuid4"` Event Event `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` - SeriesID uuid.UUID `gorm:"not null; type:uuid;" json:"series_id" validate:"uuid4"` + SeriesID uuid.UUID `gorm:"type:uuid;not null" json:"series_id" validate:"uuid4"` Series Series `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` } // Not needed for now, we will just update the events separately type EventInstanceException struct { Model - EventID int `gorm:"not null; type:uuid" json:"event_id" validate:"required"` + EventID int `gorm:"type:uuid;not null" json:"event_id" validate:"required"` Event Event - IsRescheduled bool `gorm:"type:bool;default:true" json:"is_rescheduled" validate:"required"` - IsCancelled bool `gorm:"type:bool;default:false" json:"is_cancelled" validate:"required"` - StartTime time.Time `gorm:"type:timestamptz" json:"start_time" validate:"required,datetime,ltecsfield=EndTime"` - EndTime time.Time `gorm:"type:timestamptz" json:"end_time" validate:"required,datetime,gtecsfield=StartTime"` + IsRescheduled bool `gorm:"type:bool;default:true;not null" json:"is_rescheduled" validate:"required"` + IsCancelled bool `gorm:"type:bool;default:false;not null" json:"is_cancelled" validate:"required"` + StartTime time.Time `gorm:"type:timestamptz;not null" json:"start_time" validate:"required,datetime,ltecsfield=EndTime"` + EndTime time.Time `gorm:"type:timestamptz;not null" json:"end_time" validate:"required,datetime,gtecsfield=StartTime"` } // TODO We will likely need to update the create and update structs to account for recurring series @@ -83,7 +78,7 @@ type CreateEventRequestBody struct { IsRecurring *bool `json:"is_recurring" validate:"required"` // TODO club/tag/notification logic - Host *uuid.UUID `json:"host" validate:"omitempty"` + Host *uuid.UUID `json:"host" validate:"required,uuid4"` Clubs []Club `json:"-" validate:"omitempty"` Tag []Tag `json:"-" validate:"omitempty"` Notification []Notification `json:"-" validate:"omitempty"` @@ -93,12 +88,8 @@ type CreateEventRequestBody struct { } type CreateSeriesRequestBody struct { - RecurringType RecurringType `json:"recurring_type" validate:"required,max=255,oneof=daily weekly monthly"` - SeparationCount int `json:"separation_count" validate:"required,min=0"` - MaxOccurrences int `json:"max_occurrences" validate:"required,min=2"` - DayOfWeek int `json:"day_of_week" validate:"required,min=1,max=7"` - WeekOfMonth int `json:"week_of_month" validate:"required,min=1,max=5"` - DayOfMonth int `json:"day_of_month" validate:"required,min=1,max=31"` + RecurringType RecurringType `json:"recurring_type" validate:"required,max=255,oneof=daily weekly monthly"` + MaxOccurrences int `json:"max_occurrences" validate:"required,min=2"` } type UpdateEventRequestBody struct { @@ -108,8 +99,9 @@ type UpdateEventRequestBody struct { StartTime time.Time `json:"start_time" validate:"omitempty,ltecsfield=EndTime"` EndTime time.Time `json:"end_time" validate:"omitempty,gtecsfield=StartTime"` Location string `json:"location" validate:"omitempty,max=255"` - EventType EventType `gorm:"type:varchar(255);default:open" json:"event_type" validate:"omitempty,max=255,oneof=open membersOnly"` + EventType EventType `json:"event_type" validate:"omitempty,max=255,oneof=open membersOnly"` + Host *uuid.UUID `json:"host" validate:"omitempty"` RSVP []User `json:"-" validate:"omitempty"` Waitlist []User `json:"-" validate:"omitempty"` Clubs []Club `json:"-" validate:"omitempty"` @@ -119,12 +111,8 @@ type UpdateEventRequestBody struct { // TODO: probably need to make changes to this to update the events as well type UpdateSeriesRequestBody struct { - RecurringType RecurringType `json:"recurring_type" validate:"omitempty,max=255,oneof=daily weekly monthly"` - SeparationCount int `json:"separation_count" validate:"omitempty,min=0"` - MaxOccurrences int `json:"max_occurrences" validate:"omitempty,min=2"` - DayOfWeek int `json:"day_of_week" validate:"omitempty,min=1,max=7"` - WeekOfMonth int `json:"week_of_month" validate:"omitempty,min=1,max=5"` - DayOfMonth int `json:"day_of_month" validate:"omitempty,min=1,max=31"` + RecurringType RecurringType `json:"recurring_type" validate:"omitempty,max=255,oneof=daily weekly monthly"` + MaxOccurrences int `json:"max_occurrences" validate:"omitempty,min=2"` EventDetails UpdateEventRequestBody `json:"event_details" validate:"omitempty"` } diff --git a/backend/src/models/file.go b/backend/src/models/file.go index c64c95fc5..b33a5c68e 100644 --- a/backend/src/models/file.go +++ b/backend/src/models/file.go @@ -18,11 +18,11 @@ type File struct { OwnerID uuid.UUID `gorm:"uniqueIndex:compositeindex;index;not null;type:uuid" json:"-" validate:"required,uuid4"` OwnerType string `gorm:"uniqueIndex:compositeindex;index;not null;type:varchar(255)" json:"-" validate:"required,max=255"` - FileName string `gorm:"type:varchar(255)" json:"file_name" validate:"required,max=255"` - FileType string `gorm:"type:varchar(255)" json:"file_type" validate:"required,max=255"` - FileSize int `gorm:"type:int" json:"file_size" validate:"required,min=1"` - FileURL string `gorm:"type:varchar(255)" json:"file_url" validate:"required,max=255"` - ObjectKey string `gorm:"type:varchar(255)" json:"object_key" validate:"required,max=255"` + FileName string `gorm:"type:varchar(255);not null" json:"file_name" validate:"required,max=255"` + FileType string `gorm:"type:varchar(255);not null" json:"file_type" validate:"required,max=255"` + FileSize int `gorm:"type:int;not null" json:"file_size" validate:"required,min=1"` + FileURL string `gorm:"type:varchar(255);not null" json:"file_url" validate:"required,max=255"` + ObjectKey string `gorm:"type:varchar(255);not null" json:"object_key" validate:"required,max=255"` } type CreateFileRequestBody struct { diff --git a/backend/src/models/follower.go b/backend/src/models/follower.go index 2fe61d680..8002aeb6d 100644 --- a/backend/src/models/follower.go +++ b/backend/src/models/follower.go @@ -9,8 +9,8 @@ func (Follower) TableName() string { } type Follower struct { - UserID uuid.UUID `gorm:"type:uuid;not null;primaryKey" json:"user_id" validate:"required,uuid4"` - ClubID uuid.UUID `gorm:"type:uuid;not null;primaryKey" json:"club_id" validate:"required,uuid4"` + UserID uuid.UUID `gorm:"type:uuid;primaryKey;not null" json:"user_id" validate:"required,uuid4"` + ClubID uuid.UUID `gorm:"type:uuid;primaryKey;not null" json:"club_id" validate:"required,uuid4"` Club *Club `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` User *User `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` diff --git a/backend/src/models/membership.go b/backend/src/models/membership.go index f225acf72..ec28b2304 100644 --- a/backend/src/models/membership.go +++ b/backend/src/models/membership.go @@ -16,11 +16,11 @@ func (Membership) TableName() string { } type Membership struct { - UserID uuid.UUID `gorm:"type:uuid;not null;primaryKey" json:"user_id" validate:"required,uuid4"` - ClubID uuid.UUID `gorm:"type:uuid;not null;primaryKey" json:"club_id" validate:"required,uuid4"` + UserID uuid.UUID `gorm:"type:uuid;primaryKey;not null" json:"user_id" validate:"required,uuid4"` + ClubID uuid.UUID `gorm:"type:uuid;primaryKey;not null" json:"club_id" validate:"required,uuid4"` Club *Club `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` User *User `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` - MembershipType MembershipType `gorm:"type:varchar(255);not null;default:member" json:"membership_type" validate:"required,oneof=member admin"` + MembershipType MembershipType `gorm:"type:varchar(255);default:member;not null" json:"membership_type" validate:"required,oneof=member admin"` } diff --git a/backend/src/models/notification.go b/backend/src/models/notification.go index fd07e4580..87d84a4ec 100644 --- a/backend/src/models/notification.go +++ b/backend/src/models/notification.go @@ -16,12 +16,12 @@ const ( type Notification struct { Model - SendAt time.Time `gorm:"type:timestamptz" json:"send_at" validate:"required"` - Title string `gorm:"type:varchar(255)" json:"title" validate:"required,max=255"` - Content string `gorm:"type:varchar(255)" json:"content" validate:"required,max=255"` - DeepLink string `gorm:"type:varchar(255)" json:"deep_link" validate:"required,max=255"` - Icon string `gorm:"type:varchar(255)" json:"icon" validate:"required,http_url,max=255"` // S3 URL + SendAt time.Time `gorm:"type:timestamptz;not null" json:"send_at" validate:"required"` + Title string `gorm:"type:varchar(255);not null" json:"title" validate:"required,max=255"` + Content string `gorm:"type:varchar(255);not null" json:"content" validate:"required,max=255"` + DeepLink string `gorm:"type:varchar(255);not null" json:"deep_link" validate:"required,max=255"` + Icon string `gorm:"type:varchar(255);not null" json:"icon" validate:"required,s3_url,http_url,max=255"` // S3 URL - ReferenceID uuid.UUID `gorm:"type:int" json:"-" validate:"uuid4"` - ReferenceType NotificationType `gorm:"type:varchar(255)" json:"-" validate:"max=255"` + ReferenceID uuid.UUID `gorm:"type:int;not null" json:"-" validate:"uuid4"` + ReferenceType NotificationType `gorm:"type:varchar(255);not null" json:"-" validate:"max=255"` } diff --git a/backend/src/models/poc.go b/backend/src/models/poc.go index c2d424f1a..bfbf0a9c9 100644 --- a/backend/src/models/poc.go +++ b/backend/src/models/poc.go @@ -7,13 +7,13 @@ import ( type PointOfContact struct { Model - Name string `gorm:"type:varchar(255)" json:"name" validate:"required,max=255"` + Name string `gorm:"type:varchar(255);not null" json:"name" validate:"required,max=255"` Email string `gorm:"uniqueIndex:compositeindex;index;not null;type:varchar(255)" json:"email" validate:"required,email,max=255"` - Position string `gorm:"type:varchar(255);" json:"position" validate:"required,max=255"` + Position string `gorm:"type:varchar(255);not null" json:"position" validate:"required,max=255"` - ClubID uuid.UUID `gorm:"uniqueIndex:compositeindex;index;not null;foreignKey:ClubID" json:"-" validate:"min=1"` + ClubID uuid.UUID `gorm:"uniqueIndex:compositeindex;index;foreignKey:ClubID;not null" json:"-" validate:"required,uuid4"` - PhotoFile File `gorm:"polymorphic:Owner;" json:"photo_file"` + PhotoFile File `gorm:"polymorphic:Owner;not null" json:"photo_file"` } type CreatePointOfContactBody struct { diff --git a/backend/src/models/root.go b/backend/src/models/root.go index cf9a23f5e..b1f29154c 100644 --- a/backend/src/models/root.go +++ b/backend/src/models/root.go @@ -11,7 +11,7 @@ type Tabler interface { } type Model struct { - ID uuid.UUID `gorm:"type:uuid;primaryKey;default:uuid_generate_v4()" json:"id" example:"123e4567-e89b-12d3-a456-426614174000"` - CreatedAt time.Time `gorm:"type:timestamp;default:CURRENT_TIMESTAMP" json:"created_at" example:"2023-09-20T16:34:50Z"` - UpdatedAt time.Time `gorm:"type:timestamp;default:CURRENT_TIMESTAMP" json:"updated_at" example:"2023-09-20T16:34:50Z"` + ID uuid.UUID `gorm:"type:uuid;primaryKey;default:uuid_generate_v4();not null" json:"id" example:"123e4567-e89b-12d3-a456-426614174000"` + CreatedAt time.Time `gorm:"type:timestamp;default:CURRENT_TIMESTAMP;not null" json:"created_at" example:"2023-09-20T16:34:50Z"` + UpdatedAt time.Time `gorm:"type:timestamp;default:CURRENT_TIMESTAMP;not null" json:"updated_at" example:"2023-09-20T16:34:50Z"` } diff --git a/backend/src/models/tag.go b/backend/src/models/tag.go index 560e74d1b..42a2fea7b 100644 --- a/backend/src/models/tag.go +++ b/backend/src/models/tag.go @@ -5,9 +5,9 @@ import "github.com/google/uuid" type Tag struct { Model - Name string `gorm:"type:varchar(255)" json:"name" validate:"required,max=255"` + Name string `gorm:"type:varchar(255);not null" json:"name" validate:"required,max=255"` - CategoryID uuid.UUID `json:"category_id" validate:"required,uuid4"` + CategoryID uuid.UUID `gorm:"type:uuid;not null" json:"category_id" validate:"required,uuid4"` User []User `gorm:"many2many:user_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` Club []Club `gorm:"many2many:club_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` diff --git a/backend/src/models/user.go b/backend/src/models/user.go index a4b5d3632..e0c4015fc 100644 --- a/backend/src/models/user.go +++ b/backend/src/models/user.go @@ -26,6 +26,112 @@ const ( CSSH College = "CSSH" // College of Social Sciences and Humanities ) +type Major string + +// see https://admissions.northeastern.edu/academics/areas-of-study/ +const ( + AfricanaStudies Major = "africanaStudies" + AmericanSignLanguage Major = "americanSignLanguage" + AmericanSignLanguageEnglishInterpreting Major = "americanSignLanguage-EnglishInterpreting" + AppliedPhysics Major = "appliedPhysics" + ArchitecturalStudies Major = "architecturalStudies" + Architecture Major = "architecture" + ArtArtVisualStudies Major = "art:ArtVisualStudies" + BehavioralNeuroscience Major = "behavioralNeuroscience" + Biochemistry Major = "biochemistry" + Bioengineering Major = "bioengineering" + Biology Major = "biology" + BiomedicalPhysics Major = "biomedicalPhysics" + BusinessAdministration Major = "businessAdministration" + BusinessAdministrationAccounting Major = "businessAdministration:Accounting" + BusinessAdministrationAccountingAndAdvisoryServices Major = "businessAdministration:AccountingAndAdvisoryServices" + BusinessAdministrationBrandManagement Major = "businessAdministration:BrandManagement" + BusinessAdministrationBusinessAnalytics Major = "businessAdministration:BusinessAnalytics" + BusinessAdministrationCorporateInnovation Major = "businessAdministration:CorporateInnovation" + BusinessAdministrationEntrepreneurialStartups Major = "businessAdministration:EntrepreneurialStartups" + BusinessAdministrationFamilyBusiness Major = "businessAdministration:FamilyBusiness" + BusinessAdministrationFinance Major = "businessAdministration:Finance" + BusinessAdministrationFintech Major = "businessAdministration:Fintech" + BusinessAdministrationHealthcareManagementAndConsulting Major = "businessAdministration:HealthcareManagementAndConsulting" + BusinessAdministrationManagement Major = "businessAdministration:Management" + BusinessAdministrationManagementInformationSystems Major = "businessAdministration:ManagementInformationSystems" + BusinessAdministrationMarketing Major = "businessAdministration:Marketing" + BusinessAdministrationMarketingAnalytics Major = "businessAdministration:MarketingAnalytics" + BusinessAdministrationSocialInnovationAndEntrepreneurship Major = "businessAdministration:SocialInnovationAndEntrepreneurship" + BusinessAdministrationSupplyChainManagement Major = "businessAdministration:SupplyChainManagement" + CellAndMolecularBiology Major = "cellAndMolecularBiology" + ChemicalEngineering Major = "chemicalEngineering" + Chemistry Major = "chemistry" + CivilEngineering Major = "civilEngineering" + CommunicationStudies Major = "communicationStudies" + ComputerEngineering Major = "computerEngineering" + ComputerScience Major = "computerScience" + ComputingAndLaw Major = "computingAndLaw" + CriminologyAndCriminalJustice Major = "criminologyAndCriminalJustice" + CulturalAnthropology Major = "culturalAnthropology" + Cybersecurity Major = "cybersecurity" + DataScience Major = "dataScience" + Design Major = "design" + Economics Major = "economics" + ElectricalEngineering Major = "electricalEngineering" + English Major = "english" + EnvironmentalAndSustainabilityStudies Major = "environmentalAndSustainabilityStudies" + EnvironmentalEngineering Major = "environmentalEngineering" + EnvironmentalScience Major = "environmentalScience" + EnvironmentalStudies Major = "environmentalStudies" + GameArtAndAnimation Major = "gameArtAndAnimation" + GameDesign Major = "gameDesign" + GlobalAsianStudies Major = "globalAsianStudies" + HealthScience Major = "healthScience" + History Major = "history" + HistoryCultureAndLaw Major = "historyCultureAndLaw" + HumanServices Major = "humanServices" + IndustrialEngineering Major = "industrialEngineering" + InternationalAffairs Major = "internationalAffairs" + InternationalBusiness Major = "internationalBusiness" + InternationalBusinessAccounting Major = "internationalBusiness:Accounting" + InternationalBusinessAccountingAndAdvisoryServices Major = "internationalBusiness:AccountingAndAdvisoryServices" + InternationalBusinessBrandManagement Major = "internationalBusiness:BrandManagement" + InternationalBusinessBusinessAnalytics Major = "internationalBusiness:BusinessAnalytics" + InternationalBusinessCorporateInnovation Major = "internationalBusiness:CorporateInnovation" + InternationalBusinessEntrepreneurialStartups Major = "internationalBusiness:EntrepreneurialStartups" + InternationalBusinessFamilyBusiness Major = "internationalBusiness:FamilyBusiness" + InternationalBusinessFinance Major = "internationalBusiness:Finance" + InternationalBusinessFintech Major = "internationalBusiness:Fintech" + InternationalBusinessHealthcareManagementAndConsulting Major = "internationalBusiness:HealthcareManagementAndConsulting" + InternationalBusinessManagement Major = "internationalBusiness:Management" + InternationalBusinessManagementInformationSystems Major = "internationalBusiness:ManagementInformationSystems" + InternationalBusinessMarketing Major = "internationalBusiness:Marketing" + InternationalBusinessMarketingAnalytics Major = "internationalBusiness:MarketingAnalytics" + InternationalBusinessSocialInnovationAndEntrepreneurship Major = "internationalBusiness:SocialInnovationAndEntrepreneurship" + InternationalBusinessSupplyChainManagement Major = "internationalBusiness:SupplyChainManagement" + Journalism Major = "journalism" + LandscapeArchitecture Major = "landscapeArchitecture" + Linguistics Major = "linguistics" + MarineBiology Major = "marineBiology" + Mathematics Major = "mathematics" + MechanicalEngineering Major = "mechanicalEngineering" + MediaAndScreenStudies Major = "mediaAndScreenStudies" + MediaArts Major = "mediaArts" + Music Major = "music" + MusicTechnology Major = "musicTechnology" + Nursing Major = "nursing" + PharmaceuticalSciences Major = "pharmaceuticalSciences" + PharmacyPharmD Major = "pharmacy(PharmD)" + Philosophy Major = "philosophy" + Physics Major = "physics" + PoliticalScience Major = "politicalScience" + PoliticsPhilosophyEconomics Major = "politicsPhilosophyEconomics" + Psychology Major = "psychology" + PublicHealth Major = "publicHealth" + PublicRelations Major = "publicRelations" + ReligiousStudies Major = "religiousStudies" + Sociology Major = "sociology" + Spanish Major = "spanish" + SpeechLanguagePathologyAndAudiology Major = "speechLanguagePathologyAndAudiology" + Theatre Major = "theatre" +) + type GraduationCycle string const ( @@ -41,15 +147,18 @@ type Tokens struct { type User struct { Model - Role UserRole `gorm:"type:varchar(255);default:'student'" json:"role" validate:"required,oneof=super student"` - FirstName string `gorm:"type:varchar(255)" json:"first_name" validate:"required,max=255"` - LastName string `gorm:"type:varchar(255)" json:"last_name" validate:"required,max=255"` - Email string `gorm:"type:varchar(255);unique" json:"email" validate:"required,email,max=255"` - PasswordHash string `gorm:"type:varchar(97)" json:"-" validate:"required,len=97"` - College College `gorm:"type:varchar(255)" json:"college" validate:"required,max=255"` - GraduationCycle GraduationCycle `gorm:"type:varchar(255)" json:"graduation_cycle" validate:"required,max=255,oneof=december may"` - GraduationYear int16 `gorm:"type:smallint" json:"graduation_year" validate:"required"` - IsVerified bool `gorm:"type:boolean;default:false" json:"is_verified"` + Role UserRole `gorm:"type:varchar(255);default:'student';not null" json:"role" validate:"required,oneof=super student"` + FirstName string `gorm:"type:varchar(255);not null" json:"first_name" validate:"required,max=255"` + LastName string `gorm:"type:varchar(255);not null" json:"last_name" validate:"required,max=255"` + Email string `gorm:"type:varchar(255);unique;not null" json:"email" validate:"required,email,max=255"` + PasswordHash string `gorm:"type:varchar(97);not null" json:"-" validate:"required,len=97"` + Major0 Major `gorm:"type:varchar(255)" json:"major0" validate:"not_equal_if_not_empty=Major1,not_equal_if_not_empty=Major2,required,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` + Major1 Major `gorm:"type:varchar(255);" json:"major1" validate:"not_equal_if_not_empty=Major0,not_equal_if_not_empty=Major2,omitempty,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` + Major2 Major `gorm:"type:varchar(255);" json:"major2" validate:"not_equal_if_not_empty=Major0,not_equal_if_not_empty=Major1,omitempty,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` + College College `gorm:"type:varchar(255);" json:"college" validate:"required,max=255"` // TODO: gorm not null? + GraduationCycle GraduationCycle `gorm:"type:varchar(255);" json:"graduation_cycle" validate:"required,max=255,oneof=december may"` // TODO: gorm not null? + GraduationYear int16 `gorm:"type:smallint;" json:"graduation_year" validate:"required"` // TODO: gorm not null? + IsVerified bool `gorm:"type:boolean;default:false;not null" json:"is_verified"` Tag []Tag `gorm:"many2many:user_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` Admin []Club `gorm:"many2many:user_club_admins;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"` @@ -66,8 +175,11 @@ type CreateUserRequestBody struct { FirstName string `json:"first_name" validate:"required,max=255"` LastName string `json:"last_name" validate:"required,max=255"` Email string `json:"email" validate:"required,email,neu_email,max=255"` - Password string `json:"password" validate:"required,password,min=8,max=255"` + Password string `json:"password" validate:"required,max=255"` // MARK: must be validated manually // Optional fields + Major0 Major `json:"major0" validate:"not_equal_if_not_empty=Major1,not_equal_if_not_empty=Major2,omitempty,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` + Major1 Major `json:"major1" validate:"not_equal_if_not_empty=Major0,not_equal_if_not_empty=Major2,omitempty,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` + Major2 Major `json:"major2" validate:"not_equal_if_not_empty=Major0,not_equal_if_not_empty=Major1,omitempty,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` College College `json:"college" validate:"omitempty,oneof=CAMD DMSB KCCS CE BCHS SL CPS CS CSSH"` GraduationCycle GraduationCycle `json:"graduation_cycle" validate:"omitempty,max=255,oneof=december may"` GraduationYear int16 `json:"graduation_year" validate:"omitempty"` @@ -76,6 +188,9 @@ type CreateUserRequestBody struct { type UpdateUserRequestBody struct { FirstName string `json:"first_name" validate:"omitempty,max=255"` LastName string `json:"last_name" validate:"omitempty,max=255"` + Major0 Major `json:"major0" validate:"not_equal_if_not_empty=Major1,not_equal_if_not_empty=Major2,omitempty,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` + Major1 Major `json:"major1" validate:"not_equal_if_not_empty=Major0,not_equal_if_not_empty=Major2,omitempty,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` + Major2 Major `json:"major2" validate:"not_equal_if_not_empty=Major0,not_equal_if_not_empty=Major1,omitempty,max=255,oneof=africanaStudies americanSignLanguage americanSignLanguage-EnglishInterpreting appliedPhysics architecturalStudies architecture art:ArtVisualStudies behavioralNeuroscience biochemistry bioengineering biology biomedicalPhysics businessAdministration businessAdministration:Accounting businessAdministration:AccountingAndAdvisoryServices businessAdministration:BrandManagement businessAdministration:BusinessAnalytics businessAdministration:CorporateInnovation businessAdministration:EntrepreneurialStartups businessAdministration:FamilyBusiness businessAdministration:Finance businessAdministration:Fintech businessAdministration:HealthcareManagementAndConsulting businessAdministration:Management businessAdministration:ManagementInformationSystems businessAdministration:Marketing businessAdministration:MarketingAnalytics businessAdministration:SocialInnovationAndEntrepreneurship businessAdministration:SupplyChainManagement cellAndMolecularBiology chemicalEngineering chemistry civilEngineering communicationStudies computerEngineering computerScience computingAndLaw criminologyAndCriminalJustice culturalAnthropology cybersecurity dataScience design economics electricalEngineering english environmentalAndSustainabilityStudies environmentalEngineering environmentalScience environmentalStudies gameArtAndAnimation gameDesign globalAsianStudies healthScience history historyCultureAndLaw humanServices industrialEngineering internationalAffairs internationalBusiness internationalBusiness:Accounting internationalBusiness:AccountingAndAdvisoryServices internationalBusiness:BrandManagement internationalBusiness:BusinessAnalytics internationalBusiness:CorporateInnovation internationalBusiness:EntrepreneurialStartups internationalBusiness:FamilyBusiness internationalBusiness:Finance internationalBusiness:Fintech internationalBusiness:HealthcareManagementAndConsulting internationalBusiness:Management internationalBusiness:ManagementInformationSystems internationalBusiness:Marketing internationalBusiness:MarketingAnalytics internationalBusiness:SocialInnovationAndEntrepreneurship internationalBusiness:SupplyChainManagement journalism landscapeArchitecture linguistics marineBiology mathematics mechanicalEngineering mediaAndScreenStudies mediaArts music musicTechnology nursing pharmaceuticalSciences pharmacy(PharmD) philosophy physics politicalScience politicsPhilosophyEconomics psychology publicHealth publicRelations religiousStudies sociology spanish speechLanguagePathologyAndAudiology theatre"` College College `json:"college" validate:"omitempty,oneof=CAMD DMSB KCCS CE BCHS SL CPS CS CSSH"` GraduationCycle GraduationCycle `json:"graduation_cycle" validate:"omitempty,max=255,oneof=december may"` GraduationYear int16 `json:"graduation_year" validate:"omitempty"` @@ -83,12 +198,12 @@ type UpdateUserRequestBody struct { type LoginUserResponseBody struct { Email string `json:"email" validate:"required,email"` - Password string `json:"password" validate:"required,password,min=8,max=255"` + Password string `json:"password" validate:"required,max=255"` // MARK: must be validated manually } type UpdatePasswordRequestBody struct { - OldPassword string `json:"old_password" validate:"required,password,min=8,max=255"` - NewPassword string `json:"new_password" validate:"required,password,nefield=OldPassword,min=8,max=255"` + OldPassword string `json:"old_password" validate:"required,max=255"` // MARK: must be validated manually + NewPassword string `json:"new_password" validate:"required,not_equal_if_not_empty=OldPassword,max=255"` // MARK: must be validated manually } type RefreshTokenRequestBody struct { diff --git a/backend/src/models/verification.go b/backend/src/models/verification.go index 434bb727e..db8fd37da 100644 --- a/backend/src/models/verification.go +++ b/backend/src/models/verification.go @@ -14,9 +14,9 @@ const ( ) type Verification struct { - UserID uuid.UUID `gorm:"type:varchar(36);not null;primaryKey" json:"user_id" validate:"required,uuid4"` + UserID uuid.UUID `gorm:"type:varchar(36);primaryKey;not null" json:"user_id" validate:"required,uuid4"` Token string `gorm:"type:varchar(255);unique" json:"token" validate:"required,max=255"` - ExpiresAt time.Time `gorm:"type:timestamp;not null;primaryKey" json:"expires_at" validate:"required"` + ExpiresAt time.Time `gorm:"type:timestamp;primaryKey;not null" json:"expires_at" validate:"required"` Type VerificationType `gorm:"type:varchar(255);not null" json:"type" validate:"required,oneof=email_verification password_reset"` } diff --git a/backend/src/services/auth.go b/backend/src/services/auth.go index aa6d627a0..30079cd8f 100644 --- a/backend/src/services/auth.go +++ b/backend/src/services/auth.go @@ -40,6 +40,10 @@ func (a *AuthService) Login(loginBody models.LoginUserResponseBody) (*models.Use return nil, nil, &errors.FailedToValidateUser } + if pwordValErr := auth.ValidatePassword(loginBody.Password); pwordValErr != nil { + return nil, nil, pwordValErr + } + user, getUserByEmailErr := transactions.GetUserByEmail(a.DB, loginBody.Email) if getUserByEmailErr != nil { return nil, nil, getUserByEmailErr diff --git a/backend/src/services/event.go b/backend/src/services/event.go index e9c92e896..e544714b1 100644 --- a/backend/src/services/event.go +++ b/backend/src/services/event.go @@ -225,11 +225,11 @@ func createEventSlice(firstEvent *models.Event, series models.Series) []models.E switch series.RecurringType { case "daily": - days = series.SeparationCount + 1 + days = 1 case "weekly": - days = 7 * (series.SeparationCount + 1) + days = 7 case "monthly": - months = series.SeparationCount + 1 + months = 1 } for i := 1; i < series.MaxOccurrences; i++ { @@ -252,6 +252,7 @@ func mapToEvent(eventBody models.UpdateEventRequestBody) *models.Event { Location: eventBody.Location, EventType: eventBody.EventType, + Host: eventBody.Host, RSVP: eventBody.RSVP, Waitlist: eventBody.Waitlist, Clubs: eventBody.Clubs, diff --git a/backend/src/services/tag.go b/backend/src/services/tag.go index 2152b1717..38eb8b192 100644 --- a/backend/src/services/tag.go +++ b/backend/src/services/tag.go @@ -9,7 +9,7 @@ import ( ) type TagServiceInterface interface { - GetTags(limit string, page string) ([]models.Tag, *errors.Error) + GetTags() ([]models.Tag, *errors.Error) CreateTag(tagBody models.CreateTagRequestBody) (*models.Tag, *errors.Error) GetTag(id string) (*models.Tag, *errors.Error) UpdateTag(id string, tagBody models.UpdateTagRequestBody) (*models.Tag, *errors.Error) @@ -37,18 +37,8 @@ func (t *TagService) CreateTag(tagBody models.CreateTagRequestBody) (*models.Tag return transactions.CreateTag(t.DB, *tag) } -func (t *TagService) GetTags(limit string, page string) ([]models.Tag, *errors.Error) { - limitAsInt, err := utilities.ValidateNonNegative(limit) - if err != nil { - return nil, &errors.FailedToValidateLimit - } - - pageAsInt, err := utilities.ValidateNonNegative(page) - if err != nil { - return nil, &errors.FailedToValidatePage - } - - return transactions.GetTags(t.DB, *limitAsInt, *pageAsInt) +func (t *TagService) GetTags() ([]models.Tag, *errors.Error) { + return transactions.GetTags(t.DB) } func (t *TagService) GetTag(tagID string) (*models.Tag, *errors.Error) { diff --git a/backend/src/services/user.go b/backend/src/services/user.go index 71dbf22d9..e10b6fee4 100644 --- a/backend/src/services/user.go +++ b/backend/src/services/user.go @@ -35,6 +35,10 @@ func (u *UserService) CreateUser(userBody models.CreateUserRequestBody) (*models return nil, nil, &errors.FailedToValidateUser } + if pwordValErr := auth.ValidatePassword(userBody.Password); pwordValErr != nil { + return nil, nil, pwordValErr + } + user, err := utilities.MapRequestToModel(userBody, &models.User{}) if err != nil { return nil, nil, &errors.FailedToMapRequestToModel @@ -141,6 +145,14 @@ func (u *UserService) UpdatePassword(id string, passwordBody models.UpdatePasswo return &errors.FailedToValidateUpdatePasswordBody } + if pwordValErr := auth.ValidatePassword(passwordBody.OldPassword); pwordValErr != nil { + return pwordValErr + } + + if pwordValErr := auth.ValidatePassword(passwordBody.NewPassword); pwordValErr != nil { + return pwordValErr + } + passwordHash, err := transactions.GetUserPasswordHash(u.DB, *idAsUUID) if err != nil { return err diff --git a/backend/src/transactions/event.go b/backend/src/transactions/event.go index f7525cbad..44b1a293f 100644 --- a/backend/src/transactions/event.go +++ b/backend/src/transactions/event.go @@ -106,15 +106,7 @@ func CreateEvent(db *gorm.DB, event models.Event) ([]models.Event, *errors.Error } func CreateEventSeries(db *gorm.DB, series models.Series) ([]models.Event, *errors.Error) { - tx := db.Begin() - - if err := tx.Create(&series).Error; err != nil { - tx.Rollback() - return nil, &errors.FailedToCreateEventSeries - } - - if err := tx.Commit().Error; err != nil { - tx.Rollback() + if err := db.Create(&series).Error; err != nil { return nil, &errors.FailedToCreateEventSeries } diff --git a/backend/src/transactions/tag.go b/backend/src/transactions/tag.go index 282d06e76..caf6576ea 100644 --- a/backend/src/transactions/tag.go +++ b/backend/src/transactions/tag.go @@ -48,12 +48,10 @@ func GetTag(db *gorm.DB, tagID uuid.UUID) (*models.Tag, *errors.Error) { return &tag, nil } -func GetTags(db *gorm.DB, limit int, page int) ([]models.Tag, *errors.Error) { +func GetTags(db *gorm.DB) ([]models.Tag, *errors.Error) { var tags []models.Tag - offset := (page - 1) * limit - - if err := db.Limit(limit).Offset(offset).Find(&tags).Error; err != nil { + if err := db.Find(&tags).Error; err != nil { return nil, &errors.FailedToGetTags } diff --git a/backend/src/utilities/validator.go b/backend/src/utilities/validator.go index fe332be54..092165f60 100644 --- a/backend/src/utilities/validator.go +++ b/backend/src/utilities/validator.go @@ -2,7 +2,6 @@ package utilities import ( "reflect" - "regexp" "strconv" "strings" @@ -22,10 +21,6 @@ func RegisterCustomValidators() (*validator.Validate, error) { return nil, err } - if err := validate.RegisterValidation("password", validatePassword); err != nil { - return nil, err - } - if err := validate.RegisterValidation("s3_url", validateS3URL); err != nil { return nil, err } @@ -36,6 +31,10 @@ func RegisterCustomValidators() (*validator.Validate, error) { return nil, err } + if err := validate.RegisterValidation("not_equal_if_not_empty", validateNotEqualIfNotEmpty); err != nil { + return nil, err + } + return validate, nil } @@ -56,16 +55,6 @@ func validateEmail(fl validator.FieldLevel) bool { return true } -func validatePassword(fl validator.FieldLevel) bool { - password := fl.Field().String() - - hasMinLength := len(password) >= 8 - hasDigit, _ := regexp.MatchString(`[0-9]`, password) - hasSpecialChar, _ := regexp.MatchString(`[@#%&*+]`, password) - - return hasMinLength && hasDigit && hasSpecialChar -} - func validateS3URL(fl validator.FieldLevel) bool { return strings.HasPrefix(fl.Field().String(), "https://s3.amazonaws.com/") } @@ -97,6 +86,13 @@ func validateContactPointer(validate *validator.Validate, fl validator.FieldLeve return validate.Var(contact.Content, rule) == nil && strings.HasPrefix(contact.Content, models.GetContentPrefix(contact.Type)) } +func validateNotEqualIfNotEmpty(fl validator.FieldLevel) bool { + field := fl.Field().String() + otherField := fl.Parent().FieldByName(fl.Param()).String() + + return field == "" || field != otherField +} + func ValidateID(id string) (*uuid.UUID, *errors.Error) { idAsUUID, err := uuid.Parse(id) if err != nil { diff --git a/backend/tests/api/club_test.go b/backend/tests/api/club_test.go index e725eb1b3..d6ef0dcd6 100644 --- a/backend/tests/api/club_test.go +++ b/backend/tests/api/club_test.go @@ -42,8 +42,6 @@ func AssertClubBodyRespDB(eaa h.ExistingAppAssert, resp *http.Response, body *ma eaa.Assert.NilError(err) - eaa.Assert.Equal(2, len(dbClubs)) - dbClub := dbClubs[0] eaa.Assert.Equal(dbClub.ID, respClub.ID) @@ -255,7 +253,7 @@ func TestCreateClubFailsOnInvalidDescription(t *testing.T) { []interface{}{ "Not an URL", "@#139081#$Ad_Axf", - // "https://google.com", <-- TODO fix once we handle mongo urls + "https://google.com", }, ) } @@ -300,7 +298,7 @@ func TestCreateClubFailsOnInvalidLogo(t *testing.T) { []interface{}{ "Not an URL", "@#139081#$Ad_Axf", - // "https://google.com", <-- TODO uncomment once we figure out s3 url validation + "https://google.com", }, ) } diff --git a/backend/tests/api/event_test.go b/backend/tests/api/event_test.go index 0caf089f7..643140e5d 100644 --- a/backend/tests/api/event_test.go +++ b/backend/tests/api/event_test.go @@ -16,9 +16,9 @@ import ( "gorm.io/gorm" ) -type EventFactory func() *map[string]interface{} +type EventFactory func(hostID uuid.UUID) *map[string]interface{} -func SampleEventFactory() *map[string]interface{} { +func SampleEventFactory(hostID uuid.UUID) *map[string]interface{} { return &map[string]interface{}{ "name": "Generate", "preview": "Generate is Northeastern's premier student-led product development studio.", @@ -28,23 +28,21 @@ func SampleEventFactory() *map[string]interface{} { "location": "Carter Fields", "event_type": "open", "is_recurring": false, + "host": hostID, } } -func SampleSeriesFactory() *map[string]interface{} { +func SampleSeriesFactory(hostID uuid.UUID) *map[string]interface{} { return CustomSampleSeriesFactory( + hostID, models.CreateSeriesRequestBody{ - RecurringType: "daily", - MaxOccurrences: 10, - SeparationCount: 4, - DayOfWeek: 3, - WeekOfMonth: 2, - DayOfMonth: 1, + RecurringType: "daily", + MaxOccurrences: 10, }, ) } -func CustomSampleSeriesFactory(series models.CreateSeriesRequestBody) *map[string]interface{} { +func CustomSampleSeriesFactory(hostID uuid.UUID, series models.CreateSeriesRequestBody) *map[string]interface{} { return &map[string]interface{}{ "name": "Software Development", "preview": "CS4500 at northeastern", @@ -54,6 +52,7 @@ func CustomSampleSeriesFactory(series models.CreateSeriesRequestBody) *map[strin "location": "ISEC", "event_type": "membersOnly", "is_recurring": true, + "host": hostID, "series": series, } } @@ -142,25 +141,25 @@ func AssertEventBodyRespDB(eaa h.ExistingAppAssert, resp *http.Response, body *m return dbEvent.ID } -func AssertSampleEventBodyRespDB(eaa h.ExistingAppAssert, resp *http.Response) []uuid.UUID { - sampleEvent := SampleEventFactory() +func AssertSampleEventBodyRespDB(eaa h.ExistingAppAssert, hostID uuid.UUID, resp *http.Response) []uuid.UUID { + sampleEvent := SampleEventFactory(hostID) return AssertEventListBodyRespDB(eaa, resp, sampleEvent) } -func CreateSampleEvent(existingAppAssert h.ExistingAppAssert, factoryFunction EventFactory) (h.ExistingAppAssert, []uuid.UUID) { +func CreateSampleEvent(existingAppAssert h.ExistingAppAssert, hostID uuid.UUID, factoryFunction EventFactory) (h.ExistingAppAssert, []uuid.UUID) { var sampleEventUUIDs []uuid.UUID newAppAssert := existingAppAssert.TestOnStatusAndTester( h.TestRequest{ Method: fiber.MethodPost, Path: "/api/v1/events/", - Body: factoryFunction(), + Body: factoryFunction(hostID), Role: &models.Super, }, h.TesterWithStatus{ Status: fiber.StatusCreated, Tester: func(eaa h.ExistingAppAssert, resp *http.Response) { - sampleEventUUIDs = AssertSampleEventBodyRespDB(eaa, resp) + sampleEventUUIDs = AssertSampleEventBodyRespDB(eaa, hostID, resp) }, }, ) @@ -189,18 +188,20 @@ func AssertNumSeriesRemainsAtN(eaa h.ExistingAppAssert, resp *http.Response, n i } func TestCreateEventWorks(t *testing.T) { - existingAppAssert, _ := CreateSampleEvent(h.InitTest(t), SampleEventFactory) - existingAppAssert.Close() + eaa, _, clubID := CreateSampleClub(h.InitTest(t)) + eaa, _ = CreateSampleEvent(eaa, clubID, SampleEventFactory) + eaa.Close() } func TestCreateEventSeriesWorks(t *testing.T) { - existingAppAssert, _ := CreateSampleEvent(h.InitTest(t), SampleSeriesFactory) - existingAppAssert.Close() + eaa, _, clubID := CreateSampleClub(h.InitTest(t)) + eaa, _ = CreateSampleEvent(eaa, clubID, SampleSeriesFactory) + eaa.Close() } func TestGetEventWorks(t *testing.T) { - existingAppAssert, eventUUID := CreateSampleEvent(h.InitTest(t), SampleEventFactory) - + existingAppAssert, _, clubID := CreateSampleClub(h.InitTest(t)) + existingAppAssert, eventUUID := CreateSampleEvent(existingAppAssert, clubID, SampleEventFactory) existingAppAssert.TestOnStatusAndTester(h.TestRequest{ Method: fiber.MethodGet, Path: fmt.Sprintf("/api/v1/events/%s", eventUUID[0]), @@ -209,14 +210,15 @@ func TestGetEventWorks(t *testing.T) { h.TesterWithStatus{ Status: fiber.StatusOK, Tester: func(eaa h.ExistingAppAssert, resp *http.Response) { - AssertEventListBodyRespDB(eaa, resp, SampleEventFactory()) + AssertEventListBodyRespDB(eaa, resp, SampleEventFactory(clubID)) }, }, ).Close() } func TestGetEventsWorks(t *testing.T) { - existingAppAssert, _ := CreateSampleEvent(h.InitTest(t), SampleEventFactory) + existingAppAssert, _, clubID := CreateSampleClub(h.InitTest(t)) + existingAppAssert, _ = CreateSampleEvent(existingAppAssert, clubID, SampleEventFactory) existingAppAssert.TestOnStatusAndTester(h.TestRequest{ Method: fiber.MethodGet, @@ -239,7 +241,8 @@ func TestGetEventsWorks(t *testing.T) { } func TestGetSeriesByEventIDWorks(t *testing.T) { - existingAppAssert, eventUUIDs := CreateSampleEvent(h.InitTest(t), SampleSeriesFactory) + existingAppAssert, _, clubID := CreateSampleClub(h.InitTest(t)) + existingAppAssert, eventUUIDs := CreateSampleEvent(existingAppAssert, clubID, SampleSeriesFactory) existingAppAssert.TestOnStatusAndTester(h.TestRequest{ Method: fiber.MethodGet, @@ -258,9 +261,10 @@ func TestGetSeriesByEventIDWorks(t *testing.T) { func AssertCreateBadEventDataFails(t *testing.T, jsonKey string, badValues []interface{}, expectedErr errors.Error) { appAssert, _, _ := CreateSampleStudent(t, nil) + appAssert, _, clubID := CreateSampleClub(appAssert) for _, badValue := range badValues { - sampleEventPermutation := *SampleEventFactory() + sampleEventPermutation := *SampleEventFactory(clubID) sampleEventPermutation[jsonKey] = badValue appAssert.TestOnErrorAndTester( @@ -324,8 +328,9 @@ func TestCreateEventFailsOnInvalidEventType(t *testing.T) { func AssertCreateBadEventSeriesDataFails(t *testing.T, badSeries models.CreateSeriesRequestBody, expectedErr errors.Error) { appAssert, _, _ := CreateSampleStudent(t, nil) + appAssert, _, clubID := CreateSampleClub(appAssert) - sampleSeriesPermutation := CustomSampleSeriesFactory(badSeries) + sampleSeriesPermutation := CustomSampleSeriesFactory(clubID, badSeries) appAssert.TestOnErrorAndTester( h.TestRequest{ @@ -347,12 +352,8 @@ func AssertCreateBadEventSeriesDataFails(t *testing.T, badSeries models.CreateSe func TestCreateSeriesFailsOnInvalidRecurringType(t *testing.T) { AssertCreateBadEventSeriesDataFails(t, models.CreateSeriesRequestBody{ - RecurringType: "annually", - MaxOccurrences: 10, - SeparationCount: 0, - DayOfWeek: 3, - WeekOfMonth: 2, - DayOfMonth: 1, + RecurringType: "annually", + MaxOccurrences: 10, }, errors.FailedToValidateEventSeries, ) @@ -361,77 +362,18 @@ func TestCreateSeriesFailsOnInvalidRecurringType(t *testing.T) { func TestCreateSeriesFailsOnInvalidMaxOccurrences(t *testing.T) { AssertCreateBadEventSeriesDataFails(t, models.CreateSeriesRequestBody{ - RecurringType: "weekly", - MaxOccurrences: -1, - SeparationCount: 0, - DayOfWeek: 3, - WeekOfMonth: 2, - DayOfMonth: 1, - }, - errors.FailedToValidateEventSeries, - ) -} - -func TestCreateSeriesFailsOnInvalidSeparationCount(t *testing.T) { - AssertCreateBadEventSeriesDataFails(t, - models.CreateSeriesRequestBody{ - RecurringType: "weekly", - MaxOccurrences: 10, - SeparationCount: -1, - DayOfWeek: 3, - WeekOfMonth: 2, - DayOfMonth: 1, - }, - errors.FailedToValidateEventSeries, - ) -} - -func TestCreateSeriesFailsOnInvalidDayOfWeek(t *testing.T) { - AssertCreateBadEventSeriesDataFails(t, - models.CreateSeriesRequestBody{ - RecurringType: "weekly", - MaxOccurrences: 10, - SeparationCount: 0, - DayOfWeek: 8, - WeekOfMonth: 2, - DayOfMonth: 1, - }, - errors.FailedToValidateEventSeries, - ) -} - -func TestCreateSeriesFailsOnInvalidWeekOfMonth(t *testing.T) { - AssertCreateBadEventSeriesDataFails(t, - models.CreateSeriesRequestBody{ - RecurringType: "weekly", - MaxOccurrences: 10, - SeparationCount: 0, - DayOfWeek: 5, - WeekOfMonth: -5, - DayOfMonth: 1, - }, - errors.FailedToValidateEventSeries, - ) -} - -func TestCreateSeriesFailsOnInvalidDayOfMonth(t *testing.T) { - AssertCreateBadEventSeriesDataFails(t, - models.CreateSeriesRequestBody{ - RecurringType: "weekly", - MaxOccurrences: 10, - SeparationCount: 0, - DayOfWeek: 5, - WeekOfMonth: 2, - DayOfMonth: 42, + RecurringType: "weekly", + MaxOccurrences: -1, }, errors.FailedToValidateEventSeries, ) } func TestUpdateEventWorks(t *testing.T) { - appAssert, eventUUID := CreateSampleEvent(h.InitTest(t), SampleEventFactory) + appAssert, _, clubID := CreateSampleClub(h.InitTest(t)) + appAssert, eventUUID := CreateSampleEvent(appAssert, clubID, SampleEventFactory) - updatedEvent := SampleEventFactory() + updatedEvent := SampleEventFactory(clubID) (*updatedEvent)["name"] = "Updated Name" (*updatedEvent)["preview"] = "Updated Preview" @@ -452,15 +394,12 @@ func TestUpdateEventWorks(t *testing.T) { } func TestUpdateEventSeriesWorks(t *testing.T) { - appAssert, eventUUIDs := CreateSampleEvent(h.InitTest(t), SampleSeriesFactory) + appAssert, _, clubID := CreateSampleClub(h.InitTest(t)) + appAssert, eventUUIDs := CreateSampleEvent(appAssert, clubID, SampleSeriesFactory) updatedSeries := &map[string]interface{}{ - "recurring_type": "daily", - "max_occurrences": 5, - "separation_count": 4, - "day_of_week": 3, - "week_of_month": 2, - "day_of_month": 1, + "recurring_type": "daily", + "max_occurrences": 5, "event_details": &map[string]interface{}{ "name": "eece test", "preview": "the best class ever", @@ -470,6 +409,7 @@ func TestUpdateEventSeriesWorks(t *testing.T) { "location": "Richards 224", "event_type": "open", "is_recurring": true, + "host": clubID, }, } @@ -490,9 +430,10 @@ func TestUpdateEventSeriesWorks(t *testing.T) { } func TestUpdateEventFailsOnInvalidBody(t *testing.T) { - appAssert, eventUUID := CreateSampleEvent(h.InitTest(t), SampleEventFactory) + appAssert, _, clubID := CreateSampleClub(h.InitTest(t)) + appAssert, eventUUID := CreateSampleEvent(appAssert, clubID, SampleEventFactory) - body := SampleEventFactory() + body := SampleEventFactory(clubID) for _, invalidData := range []map[string]interface{}{ {"start_time": "Not a datetime"}, @@ -538,7 +479,7 @@ func TestUpdateEventFailsOnInvalidBody(t *testing.T) { } func TestUpdateEventFailsBadRequest(t *testing.T) { - appAssert := h.InitTest(t) + appAssert, _, clubID := CreateSampleClub(h.InitTest(t)) badRequests := []string{ "0", @@ -553,7 +494,7 @@ func TestUpdateEventFailsBadRequest(t *testing.T) { h.TestRequest{ Method: fiber.MethodPatch, Path: fmt.Sprintf("/api/v1/events/%s", badRequest), - Body: SampleEventFactory(), + Body: SampleEventFactory(clubID), Role: &models.Super, }, errors.FailedToValidateID, @@ -564,12 +505,14 @@ func TestUpdateEventFailsBadRequest(t *testing.T) { } func TestUpdateEventFailsOnEventIdNotExist(t *testing.T) { + eaa, _, clubID := CreateSampleClub(h.InitTest(t)) + uuid := uuid.New() - h.InitTest(t).TestOnErrorAndTester(h.TestRequest{ + eaa.TestOnErrorAndTester(h.TestRequest{ Method: fiber.MethodPatch, Path: fmt.Sprintf("/api/v1/events/%s", uuid), - Body: SampleEventFactory(), + Body: SampleEventFactory(clubID), Role: &models.Super, TestUserIDReplaces: h.StringToPointer("user_id"), }, @@ -587,7 +530,7 @@ func TestUpdateEventFailsOnEventIdNotExist(t *testing.T) { } func TestUpdateSeriesFailsBadRequest(t *testing.T) { - appAssert := h.InitTest(t) + appAssert, _, clubID := CreateSampleClub(h.InitTest(t)) badRequests := []string{ "0", @@ -602,7 +545,7 @@ func TestUpdateSeriesFailsBadRequest(t *testing.T) { h.TestRequest{ Method: fiber.MethodPatch, Path: fmt.Sprintf("/api/v1/events/%s/series", badRequest), - Body: SampleEventFactory(), + Body: SampleEventFactory(clubID), Role: &models.Super, }, errors.FailedToValidateID, @@ -613,7 +556,8 @@ func TestUpdateSeriesFailsBadRequest(t *testing.T) { } func AssertDeleteWorks(t *testing.T, factoryFunction EventFactory, requestPath string, tester h.Tester) { - appAssert, eventUUIDs := CreateSampleEvent(h.InitTest(t), factoryFunction) + appAssert, _, clubID := CreateSampleClub(h.InitTest(t)) + appAssert, eventUUIDs := CreateSampleEvent(appAssert, clubID, factoryFunction) appAssert.TestOnStatusAndTester( h.TestRequest{ @@ -642,7 +586,8 @@ func TestDeleteSeriesByEventIDWorks(t *testing.T) { } func AssertDeleteNotExistFails(t *testing.T, factoryFunction EventFactory, requestPath string, tester h.Tester, badUUID uuid.UUID) { - appAssert, _ := CreateSampleEvent(h.InitTest(t), factoryFunction) + appAssert, _, clubID := CreateSampleClub(h.InitTest(t)) + appAssert, _ = CreateSampleEvent(appAssert, clubID, factoryFunction) appAssert.TestOnErrorAndTester( h.TestRequest{ diff --git a/backend/tests/api/helpers/auth.go b/backend/tests/api/helpers/auth.go index ab21ac2d0..c36778cb9 100644 --- a/backend/tests/api/helpers/auth.go +++ b/backend/tests/api/helpers/auth.go @@ -151,6 +151,8 @@ func SampleStudentFactory() (models.User, string) { LastName: "Doe", Email: "doe.jane@northeastern.edu", PasswordHash: *hashedPassword, + Major0: models.ComputerScience, + Major1: models.Economics, College: models.KCCS, GraduationCycle: models.May, GraduationYear: 2025, @@ -166,6 +168,9 @@ func SampleStudentJSONFactory(sampleStudent models.User, rawPassword string) *ma "last_name": sampleStudent.LastName, "email": sampleStudent.Email, "password": rawPassword, + "major0": string(sampleStudent.Major0), + "major1": string(sampleStudent.Major1), + "major2": string(sampleStudent.Major2), "college": string(sampleStudent.College), "graduation_cycle": string(sampleStudent.GraduationCycle), "graduation_year": int(sampleStudent.GraduationYear), diff --git a/backend/tests/api/user_test.go b/backend/tests/api/user_test.go index c9df6c605..2db88c551 100644 --- a/backend/tests/api/user_test.go +++ b/backend/tests/api/user_test.go @@ -42,7 +42,10 @@ func TestGetUsersWorksForSuper(t *testing.T) { eaa.Assert.Equal("SAC", respUser.FirstName) eaa.Assert.Equal("Super", respUser.LastName) eaa.Assert.Equal("generatesac@gmail.com", respUser.Email) - eaa.Assert.Equal(models.College("KCCS"), respUser.College) + eaa.Assert.Equal(models.ComputerScience, respUser.Major0) + eaa.Assert.Equal(models.Major(""), respUser.Major1) + eaa.Assert.Equal(models.Major(""), respUser.Major2) + eaa.Assert.Equal(models.KCCS, respUser.College) eaa.Assert.Equal(models.May, respUser.GraduationCycle) eaa.Assert.Equal(int16(2025), respUser.GraduationYear) @@ -95,6 +98,9 @@ func TestGetUserWorks(t *testing.T) { eaa.Assert.Equal(sampleUser["first_name"].(string), respUser.FirstName) eaa.Assert.Equal(sampleUser["last_name"].(string), respUser.LastName) eaa.Assert.Equal(sampleUser["email"].(string), respUser.Email) + eaa.Assert.Equal(models.Major(sampleUser["major0"].(string)), respUser.Major0) + eaa.Assert.Equal(models.Major(sampleUser["major1"].(string)), respUser.Major1) + eaa.Assert.Equal(models.Major(sampleUser["major2"].(string)), respUser.Major2) eaa.Assert.Equal(models.College(sampleUser["college"].(string)), respUser.College) eaa.Assert.Equal(models.GraduationCycle(sampleUser["graduation_cycle"].(string)), respUser.GraduationCycle) eaa.Assert.Equal(int16(sampleUser["graduation_year"].(int)), respUser.GraduationYear) @@ -187,6 +193,9 @@ func TestUpdateUserWorks(t *testing.T) { eaa.Assert.Equal(newFirstName, respUser.FirstName) eaa.Assert.Equal(newLastName, respUser.LastName) eaa.Assert.Equal((sampleStudentJSON)["email"].(string), respUser.Email) + eaa.Assert.Equal(models.Major((sampleStudentJSON)["major0"].(string)), respUser.Major0) + eaa.Assert.Equal(models.Major((sampleStudentJSON)["major1"].(string)), respUser.Major1) + eaa.Assert.Equal(models.Major((sampleStudentJSON)["major2"].(string)), respUser.Major2) eaa.Assert.Equal(models.College((sampleStudentJSON)["college"].(string)), respUser.College) eaa.Assert.Equal(models.GraduationCycle(sampleStudentJSON["graduation_cycle"].(string)), respUser.GraduationCycle) eaa.Assert.Equal(int16(sampleStudentJSON["graduation_year"].(int)), respUser.GraduationYear) @@ -199,6 +208,9 @@ func TestUpdateUserWorks(t *testing.T) { eaa.Assert.Equal(dbUser.FirstName, respUser.FirstName) eaa.Assert.Equal(dbUser.LastName, respUser.LastName) eaa.Assert.Equal(dbUser.Email, respUser.Email) + eaa.Assert.Equal(dbUser.Major0, respUser.Major0) + eaa.Assert.Equal(dbUser.Major1, respUser.Major1) + eaa.Assert.Equal(dbUser.Major2, respUser.Major2) eaa.Assert.Equal(dbUser.College, respUser.College) eaa.Assert.Equal(dbUser.GraduationCycle, respUser.GraduationCycle) eaa.Assert.Equal(dbUser.GraduationYear, respUser.GraduationYear) @@ -367,6 +379,9 @@ func AssertUserWithIDBodyRespDB(eaa h.ExistingAppAssert, resp *http.Response, bo eaa.Assert.Equal(dbUser.FirstName, respUser.FirstName) eaa.Assert.Equal(dbUser.LastName, respUser.LastName) eaa.Assert.Equal(dbUser.Email, respUser.Email) + eaa.Assert.Equal(dbUser.Major0, respUser.Major0) + eaa.Assert.Equal(dbUser.Major1, respUser.Major1) + eaa.Assert.Equal(dbUser.Major2, respUser.Major2) eaa.Assert.Equal(dbUser.College, respUser.College) eaa.Assert.Equal(dbUser.GraduationCycle, respUser.GraduationCycle) eaa.Assert.Equal(dbUser.GraduationYear, respUser.GraduationYear) @@ -380,6 +395,9 @@ func AssertUserWithIDBodyRespDB(eaa h.ExistingAppAssert, resp *http.Response, bo eaa.Assert.Equal((*body)["first_name"].(string), dbUser.FirstName) eaa.Assert.Equal((*body)["last_name"].(string), dbUser.LastName) eaa.Assert.Equal((*body)["email"].(string), dbUser.Email) + eaa.Assert.Equal(models.Major((*body)["major0"].(string)), dbUser.Major0) + eaa.Assert.Equal(models.Major((*body)["major1"].(string)), dbUser.Major1) + eaa.Assert.Equal(models.Major((*body)["major2"].(string)), dbUser.Major2) eaa.Assert.Equal(models.College((*body)["college"].(string)), dbUser.College) eaa.Assert.Equal(models.GraduationCycle((*body)["graduation_cycle"].(string)), dbUser.GraduationCycle) eaa.Assert.Equal(int16((*body)["graduation_year"].(int)), dbUser.GraduationYear) @@ -463,7 +481,7 @@ func TestCreateUserFailsIfUserWithEmailAlreadyExists(t *testing.T) { } func AssertCreateBadDataFails(t *testing.T, jsonKey string, badValues []interface{}) { - appAssert, _, _ := CreateSampleStudent(t, nil) + appAssert := h.InitTest(t) sampleStudent, rawPassword := h.SampleStudentFactory() @@ -480,7 +498,7 @@ func AssertCreateBadDataFails(t *testing.T, jsonKey string, badValues []interfac }, h.ErrorWithTester{ Error: errors.FailedToValidateUser, - Tester: TestNumUsersRemainsAt2, + Tester: TestNumUsersRemainsAt1, }, ) } @@ -502,15 +520,40 @@ func TestCreateUserFailsOnInvalidEmail(t *testing.T) { } func TestCreateUserFailsOnInvalidPassword(t *testing.T) { - AssertCreateBadDataFails(t, - "password", - []interface{}{ - "", - "foo", - "abcdefg", - "abcdefg0", - "abcdefg@", - }) + appAssert := h.InitTest(t) + + sampleStudent, rawPassword := h.SampleStudentFactory() + + inputsWithDesiredErr := []struct { + Password string + Error errors.Error + }{ + {"0", errors.InvalidPasswordNotLongEnough}, + {"foo", errors.InvalidPasswordNotLongEnough}, + {"abcdefgh", errors.InvalidPasswordNoDigit}, + {"abcdefg0", errors.InvalidPasswordNoSpecialCharacter}, + {"abcdefg@", errors.InvalidPasswordNoDigit}, + } + + for _, inputWithDesiredErr := range inputsWithDesiredErr { + sampleUserPermutation := *h.SampleStudentJSONFactory(sampleStudent, rawPassword) + sampleUserPermutation["password"] = inputWithDesiredErr.Password + + appAssert = appAssert.TestOnErrorAndTester( + h.TestRequest{ + Method: fiber.MethodPost, + Path: "/api/v1/users/", + Body: &sampleUserPermutation, + Role: &models.Super, + }, + h.ErrorWithTester{ + Error: inputWithDesiredErr.Error, + Tester: TestNumUsersRemainsAt1, + }, + ) + } + + appAssert.Close() } func TestCreateUserFailsOnMissingFields(t *testing.T) { diff --git a/cli/commands/clean_tests.go b/cli/commands/clean_tests.go index a3923ce53..edc7955bd 100644 --- a/cli/commands/clean_tests.go +++ b/cli/commands/clean_tests.go @@ -7,6 +7,7 @@ import ( "os/user" "sync" + "github.com/GenerateNU/sac/backend/src/config" _ "github.com/lib/pq" "github.com/urfave/cli/v2" ) @@ -32,7 +33,12 @@ func ClearDBCommand() *cli.Command { func CleanTestDBs(ctx context.Context) error { fmt.Println("Cleaning test databases") - db, err := sql.Open("postgres", CONFIG.Database.WithDb()) + config, err := config.GetConfiguration(CONFIG, false) + if err != nil { + return err + } + + db, err := sql.Open("postgres", config.Database.WithDb()) if err != nil { return err } @@ -45,7 +51,7 @@ func CleanTestDBs(ctx context.Context) error { } query := "SELECT datname FROM pg_database WHERE datistemplate = false AND datname != 'postgres' AND datname != $1 AND datname != $2 AND datname LIKE 'sac_test_%';" - rows, err := db.Query(query, currentUser.Username, CONFIG.Database.DatabaseName) + rows, err := db.Query(query, currentUser.Username, config.Database.DatabaseName) if err != nil { return err } diff --git a/cli/commands/config.go b/cli/commands/config.go index e33a7f4ab..b7bb45e1a 100644 --- a/cli/commands/config.go +++ b/cli/commands/config.go @@ -3,7 +3,6 @@ package commands import ( "path/filepath" - "github.com/GenerateNU/sac/backend/src/config" "github.com/GenerateNU/sac/cli/utils" ) @@ -12,6 +11,6 @@ var ( FRONTEND_DIR = filepath.Join(ROOT_DIR, "/frontend") BACKEND_DIR = filepath.Join(ROOT_DIR, "/backend") BACKEND_SRC_DIR = filepath.Join(BACKEND_DIR, "/src") - CONFIG, _ = config.GetConfiguration(filepath.Join(ROOT_DIR, "/config"), false) + CONFIG = filepath.Join(ROOT_DIR, "/config") MIGRATION_FILE = filepath.Join(BACKEND_SRC_DIR, "/migrations/data.sql") ) diff --git a/cli/commands/drop.go b/cli/commands/drop.go index 3a34f1ae1..37d90980e 100644 --- a/cli/commands/drop.go +++ b/cli/commands/drop.go @@ -5,6 +5,7 @@ import ( "fmt" "sync" + "github.com/GenerateNU/sac/backend/src/config" "github.com/urfave/cli/v2" ) @@ -52,7 +53,12 @@ func DropData() error { dbMutex.Lock() defer dbMutex.Unlock() - db, err := sql.Open("postgres", CONFIG.Database.WithDb()) + config, err := config.GetConfiguration(CONFIG, false) + if err != nil { + return err + } + + db, err := sql.Open("postgres", config.Database.WithDb()) if err != nil { return err } @@ -95,7 +101,12 @@ func DropDB() error { dbMutex.Lock() defer dbMutex.Unlock() - db, err := sql.Open("postgres", CONFIG.Database.WithDb()) + config, err := config.GetConfiguration(CONFIG, false) + if err != nil { + return err + } + + db, err := sql.Open("postgres", config.Database.WithDb()) if err != nil { return err } diff --git a/cli/commands/insert.go b/cli/commands/insert.go index afbf4dec8..b3d40eb1c 100644 --- a/cli/commands/insert.go +++ b/cli/commands/insert.go @@ -6,6 +6,7 @@ import ( "os" "os/exec" + "github.com/GenerateNU/sac/backend/src/config" "github.com/lib/pq" "github.com/urfave/cli/v2" ) @@ -34,7 +35,12 @@ func InsertCommand() *cli.Command { } func InsertDB() error { - db, err := sql.Open("postgres", CONFIG.Database.WithDb()) + config, err := config.GetConfiguration(CONFIG, false) + if err != nil { + return err + } + + db, err := sql.Open("postgres", config.Database.WithDb()) if err != nil { return err } diff --git a/cli/commands/migrate.go b/cli/commands/migrate.go index 12076ec44..88bd04b12 100644 --- a/cli/commands/migrate.go +++ b/cli/commands/migrate.go @@ -32,7 +32,7 @@ func MigrateCommand() *cli.Command { func Migrate() error { fmt.Println("Migrating database") - goCmd := exec.Command("go", "run", "main.go", "--only-migrate") + goCmd := exec.Command("go", "run", "main.go", "--only-migrate", "--use-dev-dot-env=false") goCmd.Dir = BACKEND_SRC_DIR output, err := goCmd.CombinedOutput() diff --git a/cli/commands/reset.go b/cli/commands/reset.go index 2ca80e1f7..f6801d730 100644 --- a/cli/commands/reset.go +++ b/cli/commands/reset.go @@ -87,7 +87,7 @@ func ResetMigration() error { err := DropDB() if err != nil { - return cli.Exit(err.Error(), 1) + return cli.Exit(fmt.Sprintf("Error dropping database: %s", err.Error()), 1) } cmd := exec.Command("sleep", "1") @@ -100,7 +100,7 @@ func ResetMigration() error { err = Migrate() if err != nil { - return cli.Exit(err.Error(), 1) + return cli.Exit(fmt.Sprintf("Error migrating database: %s", err.Error()), 1) } fmt.Println("Migration reset successfully") diff --git a/cli/main.go b/cli/main.go index 880a7598a..a81e5667b 100755 --- a/cli/main.go +++ b/cli/main.go @@ -10,7 +10,7 @@ import ( func main() { app := &cli.App{ - Name: "sac-cli", + Name: "sac", Usage: "CLI for the GenerateNU SAC", Commands: []*cli.Command{ commands.SwaggerCommand(), diff --git a/cli/utils/path.go b/cli/utils/path.go index 01b9a6a1a..7ff98bf94 100644 --- a/cli/utils/path.go +++ b/cli/utils/path.go @@ -13,7 +13,7 @@ func GetRootDir() (string, error) { return "", err } - // Find the closest directory containing "sac-cli" (the root directory) + // Find the closest directory containing "sac" (the root directory) rootDir, err := FindRootDir(currentDir) if err != nil { return "", err @@ -23,19 +23,19 @@ func GetRootDir() (string, error) { } func FindRootDir(dir string) (string, error) { - // Check if "sac-cli" exists in the current directory - mainGoPath := filepath.Join(dir, "sac-cli") + // Check if "sac" exists in the current directory + mainGoPath := filepath.Join(dir, "sac") _, err := os.Stat(mainGoPath) if err == nil { - // "sac-cli" found, this is the root directory + // "sac" found, this is the root directory return dir, nil } // If not found, go up one level parentDir := filepath.Dir(dir) if parentDir == dir { - // Reached the top without finding "sac-cli" - return "", fmt.Errorf("could not find root directory containing sac-cli") + // Reached the top without finding "sac" + return "", fmt.Errorf("could not find root directory containing sac") } // Recursively search in the parent directory diff --git a/config/.env.template b/config/.env.template index 4ed05577b..64e07fbf4 100644 --- a/config/.env.template +++ b/config/.env.template @@ -6,4 +6,4 @@ SAC_RESEND_API_KEY="SAC_RESEND_API_KEY" SAC_AWS_BUCKET_NAME="SAC_AWS_BUCKET_NAME" SAC_AWS_ID="SAC_AWS_ID" SAC_AWS_SECRET="SAC_AWS_SECRET" -SAC_AWS_REGION="SAC_AWS_REGION" +SAC_AWS_REGION="SAC_AWS_REGION" \ No newline at end of file diff --git a/config/local.yml b/config/local.yml index 994ae216c..8a88af9b2 100644 --- a/config/local.yml +++ b/config/local.yml @@ -13,4 +13,4 @@ superuser: password: Password#!1 auth: accesskey: g(r|##*?>\Qp}h37e+,T2 - refreshkey: amk*2!gG}1i"8D9RwJS$p + refreshkey: amk*2!gG}1i"8D9RwJS$p \ No newline at end of file diff --git a/frontend/sac-mobile/app/(app)/(tabs)/_components/club-homepage-card.tsx b/frontend/sac-mobile/app/(app)/(tabs)/_components/club-homepage-card.tsx new file mode 100644 index 000000000..8b44d5b83 --- /dev/null +++ b/frontend/sac-mobile/app/(app)/(tabs)/_components/club-homepage-card.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Pressable, Text, View } from 'react-native'; + +import { router } from 'expo-router'; + +import { Club } from '@/types/club'; + +export const ClubHomePageCard = ({ club }: { club: Club }) => { + return ( + router.push(`/club/${club.id}`)} + > + + + + + {club.name} + + + {club.description} + + + + + ); +}; diff --git a/frontend/sac-mobile/app/(app)/(tabs)/_components/event-homepage-card.tsx b/frontend/sac-mobile/app/(app)/(tabs)/_components/event-homepage-card.tsx new file mode 100644 index 000000000..f81b9c89c --- /dev/null +++ b/frontend/sac-mobile/app/(app)/(tabs)/_components/event-homepage-card.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import { Pressable, Text, View } from 'react-native'; + +import { router } from 'expo-router'; + +import Pin from '@/assets/images/svg/pin.svg'; +import Time from '@/assets/images/svg/time.svg'; +import { useEventHosts } from '@/hooks/use-event'; +import { Event } from '@/types/event'; + +const EventHomePageCard = ({ event }: { event: Event }) => { + const { data: hosts, isLoading, error } = useEventHosts(event.id); + + if (isLoading) { + return Loading...; + } + + if (error) { + return Error: {error.message}; + } + + return ( + router.push(`/event/${event.id}`)} + > + + + + + + + {hosts?.[0].name ?? 'No Hosts'} + + + {event.name} + + + + + {event.location} + + + + + + + + {event.preview} + + + + + + ); +}; + +export { EventHomePageCard }; diff --git a/frontend/sac-mobile/app/(app)/(tabs)/_components/faq-homepage-card.tsx b/frontend/sac-mobile/app/(app)/(tabs)/_components/faq-homepage-card.tsx new file mode 100644 index 000000000..f84763413 --- /dev/null +++ b/frontend/sac-mobile/app/(app)/(tabs)/_components/faq-homepage-card.tsx @@ -0,0 +1,103 @@ +import React from 'react'; +import { Controller, useForm } from 'react-hook-form'; +import { Alert, Pressable, Text, View } from 'react-native'; + +import { ZodError, z } from 'zod'; + +import { Error } from '@/components/error'; +import { Input } from '@/components/input'; +import { FAQ } from '@/types/faq'; + +type FAQData = { + question: string; +}; + +const FAQSchema = z.object({ + question: z.string() +}); + +const FAQHomePageCard = ({ faq }: { faq: FAQ }) => { + const length = () => { + if (faq.club_name.length > 11) { + return faq.club_name.substring(0, 11) + '...'; + } else { + return faq.club_name; + } + }; + + const { + control, + handleSubmit, + formState: { errors }, + reset + } = useForm(); + + const onSubmit = ({ question }: FAQData) => { + try { + FAQSchema.parse({ question }); + Alert.alert('Form Submitted', JSON.stringify(question)); + reset(); + } catch (error) { + if (error instanceof ZodError) { + Alert.alert('Validation Error', error.errors[0].message); + } else { + console.error('An unexpected error occurred:', error); + } + } + }; + + return ( + + + + + + {faq.club_name} + + + Frequently Asked + + + Questions + + + + + Question: + {faq.question} + Answer: + + {faq.answer} + + + ( + + )} + name="question" + rules={{ + required: 'Question is required' + }} + /> + {errors.question && ( + + + + )} + + + + ); +}; + +export { FAQHomePageCard }; diff --git a/frontend/sac-mobile/app/(app)/(tabs)/_components/following-header.tsx b/frontend/sac-mobile/app/(app)/(tabs)/_components/following-header.tsx new file mode 100644 index 000000000..31b6c04a8 --- /dev/null +++ b/frontend/sac-mobile/app/(app)/(tabs)/_components/following-header.tsx @@ -0,0 +1,93 @@ +import React from 'react'; +import { + FlatList, + Pressable, + Text, + TouchableOpacity, + View +} from 'react-native'; + +import { Stack, router } from 'expo-router'; + +import { useUserFollowing } from '@/hooks/use-user'; +import { Club } from '@/types/club'; + +const ViewAll = ({ isFollowingAny }: { isFollowingAny: boolean }) => { + return ( + <> + {isFollowingAny && ( + + router.push('/(app)/following/')} + className="flex-row items-center" + > + View all + + + )} + + ); +}; + +const FollowingHeader = ({ id }: { id: string }) => { + const { data: userFollowingData, isLoading, error } = useUserFollowing(id); + + if (isLoading) { + return Loading...; + } + + if (error) { + return Error: {error.message}; + } + + const renderFollowing = ({ item }: { item: Club }) => { + return ( + router.push(`/club/${item.id}`)} + > + + + {item.name} + + + ); + }; + + if (!userFollowingData) { + return null; + } + + return ( + <> + { + return ( + 0} + /> + ); + } + }} + /> + + + item.id.toString()} + /> + + + ); +}; + +export { FollowingHeader }; diff --git a/frontend/sac-mobile/app/(app)/(tabs)/_components/homepage.tsx b/frontend/sac-mobile/app/(app)/(tabs)/_components/homepage.tsx new file mode 100644 index 000000000..2185710ef --- /dev/null +++ b/frontend/sac-mobile/app/(app)/(tabs)/_components/homepage.tsx @@ -0,0 +1,70 @@ +import React from 'react'; +import { FlatList, Text, View } from 'react-native'; + +import { useClubs } from '@/hooks/use-club'; +import { useEvents } from '@/hooks/use-event'; +import { HomepageFAQ } from '@/lib/const'; +import { isClub, isEvent, isFAQ } from '@/lib/utils'; +import { Club } from '@/types/club'; +import { Event } from '@/types/event'; +import { FAQ } from '@/types/faq'; + +import { ClubHomePageCard } from './club-homepage-card'; +import { EventHomePageCard } from './event-homepage-card'; +import { FAQHomePageCard } from './faq-homepage-card'; + +export type HomepageItem = Event | Club | FAQ; + +const HomepageList = () => { + const { data: events, isLoading: eIsLoading, error: eError } = useEvents(); + const { data: clubs, isLoading: cIsLoading, error: cError } = useClubs(); + + if (eIsLoading || cIsLoading) { + return Loading...; + } + + if (eError || cError) { + return Error: {eError?.message || cError?.message}; + } + + const getHomepageItems = () => { + const allItems: HomepageItem[] = []; + if (events !== undefined) { + allItems.push(...events); + } + if (clubs !== undefined) { + allItems.push(...clubs); + } + allItems.push(...HomepageFAQ); + return allItems.sort(() => Math.random() - 0.5); + }; + + const renderItems = (items: HomepageItem[]) => { + return items.map((item: HomepageItem, index) => { + if (isClub(item)) { + const club = item as Club; + if (club.name === 'SAC') { + return null; + } + return ; + } else if (isEvent(item)) { + return ; + } else if (isFAQ(item)) { + return ; + } + }); + }; + + return ( + + <>{item}} + keyExtractor={(_, index) => index.toString()} + showsVerticalScrollIndicator={false} + /> + + ); +}; + +export { HomepageList }; diff --git a/frontend/sac-mobile/app/(app)/(tabs)/_layout.tsx b/frontend/sac-mobile/app/(app)/(tabs)/_layout.tsx index 1f1bdf094..c8ce473ab 100644 --- a/frontend/sac-mobile/app/(app)/(tabs)/_layout.tsx +++ b/frontend/sac-mobile/app/(app)/(tabs)/_layout.tsx @@ -1,24 +1,18 @@ import React, { useEffect } from 'react'; +import { View } from 'react-native'; import { Tabs } from 'expo-router'; -import { MaterialCommunityIcons } from '@expo/vector-icons'; - +import HomeSelectedIcon from '@/assets/images/svg/home-selected.svg'; +import HomeIcon from '@/assets/images/svg/home.svg'; +import ProfileSelectedIcon from '@/assets/images/svg/profile-selected.svg'; +import ProfileIcon from '@/assets/images/svg/profile.svg'; +import SearchSelectedIcon from '@/assets/images/svg/search-selected.svg'; +import SearchIcon from '@/assets/images/svg/search.svg'; +import { Wordmark } from '@/components/wordmark'; import { useAuthStore } from '@/hooks/use-auth'; import { useAuth } from '@/context/AuthContext'; -const HomeTabBarIcon = ({ color }: { color: string }) => ( - -); - -const ProfileTabBarIcon = ({ color }: { color: string }) => ( - -); - -const SearchTabBarIcon = ({ color }: { color: string }) => ( - -); - const Layout = () => { // const { isLoggedIn, fetchUser } = useAuthStore(); const { initialized, getUser } = useAuth(); @@ -28,31 +22,40 @@ const Layout = () => { }, [initialized]); return ( - + ( + + ), + headerLeft: () => ( + + + + ), + headerShown: true, + tabBarIcon: ({ focused }) => + focused ? : }} - redirect={!isLoggedIn} /> + focused ? : }} - redirect={!isLoggedIn} /> + focused ? : }} // redirect={!isLoggedIn} /> diff --git a/frontend/sac-mobile/app/(app)/(tabs)/index.tsx b/frontend/sac-mobile/app/(app)/(tabs)/index.tsx index f79b705cf..805129222 100644 --- a/frontend/sac-mobile/app/(app)/(tabs)/index.tsx +++ b/frontend/sac-mobile/app/(app)/(tabs)/index.tsx @@ -1,79 +1,42 @@ import React from 'react'; -import { FlatList, Text } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; +import { SectionList, View } from 'react-native'; -import { Link } from 'expo-router'; +import { StatusBar } from 'expo-status-bar'; -import { clubs } from '@/data/clubs'; +import { HomepageList } from '@/app/(app)/(tabs)/_components/homepage'; import { useAuthStore } from '@/hooks/use-auth'; -import { useEvents } from '@/hooks/use-event'; -import { Club } from '@/types/club'; -import { Event } from '@/types/event'; -<<<<<<< Updated upstream -const Home = () => { - const { user } = useAuthStore(); - const { data: events, isLoading, error } = useEvents(); - - if (isLoading) { - return Loading...; - } - - if (error) { - return Error: {error.message}; - } - - const renderEvent = ({ item: event }: { item: Event }) => ( - - {event.name} - - ); - - const renderClub = ({ item: club }: { item: Club }) => ( - - {club.name} - - ); -======= import { FollowingHeader } from './_components/following-header'; import { useAuth } from '@/context/AuthContext'; + const HomePage = () => { - // const { user } = useAuthStore(); - const { user } = useAuth(); ->>>>>>> Stashed changes + const { user } = useAuthStore(); return ( - - Welcome {user?.first_name} - item.id.toString()} - /> - item.id.toString()} + <> + + + ] + }, + { + data: [] + } + ]} + keyExtractor={(_, index) => index.toString()} + renderItem={({ item }) => <>{item}} + renderSectionHeader={() => } + stickySectionHeadersEnabled={false} /> - + ); }; -export default Home; +export default HomePage; diff --git a/frontend/sac-mobile/app/(app)/(tabs)/profile.tsx b/frontend/sac-mobile/app/(app)/(tabs)/profile.tsx index 77ec40ddb..2bf332b4d 100644 --- a/frontend/sac-mobile/app/(app)/(tabs)/profile.tsx +++ b/frontend/sac-mobile/app/(app)/(tabs)/profile.tsx @@ -1,35 +1,24 @@ import React from 'react'; -import { View } from 'react-native'; +import { SafeAreaView, Text, View } from 'react-native'; import { Button } from '@/components/button'; import { useAuthStore } from '@/hooks/use-auth'; import { useAuth } from '@/context/AuthContext'; const Profile = () => { -<<<<<<< Updated upstream - const { signOut } = useAuthStore(); -======= // const { signOut, user } = useAuthStore(); const { onLogout, user } = useAuth(); ->>>>>>> Stashed changes - const handleSignOut = async () => { onLogout!(); }; return ( -<<<<<<< Updated upstream - - - -======= Welcome {user?.first_name} ->>>>>>> Stashed changes ); }; diff --git a/frontend/sac-mobile/app/(app)/(tabs)/search.tsx b/frontend/sac-mobile/app/(app)/(tabs)/search.tsx index 55f256958..89b989329 100644 --- a/frontend/sac-mobile/app/(app)/(tabs)/search.tsx +++ b/frontend/sac-mobile/app/(app)/(tabs)/search.tsx @@ -1,11 +1,23 @@ import React from 'react'; -import { Text, View } from 'react-native'; +import { SafeAreaView, ScrollView, Text, View } from 'react-native'; +import { TextInput } from 'react-native-gesture-handler'; + +import { Button } from '@/components/button'; const Search = () => { return ( - - Search - + + + Search + + + + + + ); }; diff --git a/frontend/sac-mobile/app/(app)/_components/club-kebab.tsx b/frontend/sac-mobile/app/(app)/_components/club-kebab.tsx new file mode 100644 index 000000000..70de0ac3f --- /dev/null +++ b/frontend/sac-mobile/app/(app)/_components/club-kebab.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Platform } from 'react-native'; + +import { NativeActionEvent } from '@react-native-menu/menu'; + +import { Kebab } from '@/components/kebab'; + +const ClubKebab = () => { + const items = [ + { + id: 'share', + title: 'Share Club', + image: Platform.select({ + ios: 'square.and.arrow.up', + android: 'share-variant' + }) + }, + { + id: 'report', + title: 'Report Club', + image: Platform.select({ + ios: 'person.crop.circle.badge.exclamationmark.fill', + android: 'person-circle-outline' + }) + } + ]; + + const onPress = ({ nativeEvent }: NativeActionEvent) => { + console.warn(JSON.stringify(nativeEvent)); + }; + + return ; +}; + +export { ClubKebab }; diff --git a/frontend/sac-mobile/app/(app)/_components/event-kebab.tsx b/frontend/sac-mobile/app/(app)/_components/event-kebab.tsx new file mode 100644 index 000000000..05c8a295a --- /dev/null +++ b/frontend/sac-mobile/app/(app)/_components/event-kebab.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Platform } from 'react-native'; + +import { NativeActionEvent } from '@react-native-menu/menu'; + +import { Kebab } from '@/components/kebab'; + +const EventKabab = () => { + const items = [ + { + id: 'share', + title: 'Share Event', + image: Platform.select({ + ios: 'square.and.arrow.up', + android: 'share-variant' + }) + }, + { + id: 'report', + title: 'Report Event', + image: Platform.select({ + ios: 'person.crop.circle.badge.exclamationmark.fill', + android: 'person-circle-outline' + }) + } + ]; + + const onPress = ({ nativeEvent }: NativeActionEvent) => { + console.warn(JSON.stringify(nativeEvent)); + }; + + return ; +}; + +export { EventKabab }; diff --git a/frontend/sac-mobile/app/(app)/_layout.tsx b/frontend/sac-mobile/app/(app)/_layout.tsx index 3071cb8e8..0f0a0e82f 100644 --- a/frontend/sac-mobile/app/(app)/_layout.tsx +++ b/frontend/sac-mobile/app/(app)/_layout.tsx @@ -1,13 +1,13 @@ import React from 'react'; -import { Platform, View } from 'react-native'; +import { View } from 'react-native'; import { Stack } from 'expo-router'; -import { MaterialCommunityIcons } from '@expo/vector-icons'; -import { MenuView } from '@react-native-menu/menu'; - import { LeftArrow } from '@/components/left-arrow'; +import { ClubKebab } from './_components/club-kebab'; +import { EventKabab } from './_components/event-kebab'; + const Layout = () => { return ( @@ -15,8 +15,6 @@ const Layout = () => { { ), headerLeft: () => , - headerRight: () => { - return ( - { - console.warn(JSON.stringify(nativeEvent)); - }} - actions={[ - { - id: 'share', - title: 'Share Event', - image: Platform.select({ - ios: 'square.and.arrow.up', - android: 'share-variant' - }) - }, - { - id: 'report', - title: 'Report Event', - image: Platform.select({ - ios: 'person.crop.circle.badge.exclamationmark.fill', - android: 'person-circle-outline' - }) - } - ]} - > - - - ); - } + headerRight: () => }} /> { ), headerLeft: () => , - headerRight: () => { - return ( - { - console.warn(JSON.stringify(nativeEvent)); - }} - actions={[ - { - id: 'share', - title: 'Share Club', - image: Platform.select({ - ios: 'square.and.arrow.up', - android: 'share-variant' - }) - }, - { - id: 'report', - title: 'Report Club', - image: Platform.select({ - ios: 'person.crop.circle.badge.exclamationmark.fill', - android: 'person-circle-outline' - }) - } - ]} - > - - - ); - } + headerRight: () => + }} + /> + ( + + ), + headerLeft: () => }} /> diff --git a/frontend/sac-mobile/app/(app)/club/[id].tsx b/frontend/sac-mobile/app/(app)/club/[id].tsx index 5c2e6a67a..c1cc4b510 100644 --- a/frontend/sac-mobile/app/(app)/club/[id].tsx +++ b/frontend/sac-mobile/app/(app)/club/[id].tsx @@ -1,19 +1,40 @@ import React from 'react'; -import { SafeAreaView, Text } from 'react-native'; +import { Text, View } from 'react-native'; -import { Link, Stack, useLocalSearchParams } from 'expo-router'; +import { Stack, useLocalSearchParams } from 'expo-router'; +import { StatusBar } from 'expo-status-bar'; + +import { useClub } from '@/hooks/use-club'; const ClubPage = () => { const { id } = useLocalSearchParams<{ id: string }>(); + const { data: club, isLoading, error } = useClub(id); + + if (isLoading) { + return Loading...; + } + + if (error) { + return Error: {error.message}; + } + + if (!club) { + return Club not found; + } + return ( - - - ClubPage - - FAQ - - + <> + + + + {club.name} + {club.description} + {club.num_members} + {club.recruitment_cycle} + {club.application_link} + + ); }; diff --git a/frontend/sac-mobile/app/(app)/club/_layout.tsx b/frontend/sac-mobile/app/(app)/club/_layout.tsx index f16dcf3fe..beb0de35a 100644 --- a/frontend/sac-mobile/app/(app)/club/_layout.tsx +++ b/frontend/sac-mobile/app/(app)/club/_layout.tsx @@ -10,6 +10,12 @@ const Layout = () => { name="faq/[id]" options={{ headerShown: false, presentation: 'modal' }} /> + {/* */} ); }; diff --git a/frontend/sac-mobile/app/(app)/event/[id].tsx b/frontend/sac-mobile/app/(app)/event/[id].tsx index 84e5a7fa8..3097c630d 100644 --- a/frontend/sac-mobile/app/(app)/event/[id].tsx +++ b/frontend/sac-mobile/app/(app)/event/[id].tsx @@ -1,29 +1,33 @@ -import React from 'react'; +import React, { useRef } from 'react'; import { ScrollView, Text, View } from 'react-native'; import { Stack, useLocalSearchParams } from 'expo-router'; +import { StatusBar } from 'expo-status-bar'; + +import BottomSheet from '@gorhom/bottom-sheet'; import { AllHosts } from '@/app/(app)/event/_components/all-hosts'; import { TagList } from '@/components/all-tags'; import { Button } from '@/components/button'; import { Description } from '@/components/description'; -import { useAuthStore } from '@/hooks/use-auth'; +import { Title } from '@/components/title'; import { useEvent } from '@/hooks/use-event'; -import { Title } from '../_components/title'; import { EventHeader } from './_components/event-header'; import { EventLocation } from './_components/event-location'; import { EventTime } from './_components/event-time'; import { HostNames } from './_components/host-names'; import { LocationView } from './_components/location-view'; +import { RSVPBottomSheet } from './_components/rsvp-bottom-sheet'; // TODO: handle link OR location const EventPage = () => { const { id } = useLocalSearchParams<{ id: string }>(); - const { user } = useAuthStore(); const { data: event, isLoading, error } = useEvent(id); + const ref = useRef(null); + if (error) { console.error(error); return Error fetching event; @@ -37,18 +41,15 @@ const EventPage = () => { return Event not found; } - console.log('[event]', event); - return ( <> - + + - + <HostNames eventID={event.id} /> @@ -84,6 +85,7 @@ const EventPage = () => { </View> </View> </ScrollView> + <RSVPBottomSheet ref={ref} /> </> ); }; diff --git a/frontend/sac-mobile/app/(app)/event/_components/event-header.tsx b/frontend/sac-mobile/app/(app)/event/_components/event-header.tsx index 094661de5..6003a6d75 100644 --- a/frontend/sac-mobile/app/(app)/event/_components/event-header.tsx +++ b/frontend/sac-mobile/app/(app)/event/_components/event-header.tsx @@ -1,10 +1,21 @@ +import { forwardRef } from 'react'; import { Platform, View } from 'react-native'; +import BottomSheet from '@gorhom/bottom-sheet'; import { MenuView } from '@react-native-menu/menu'; import { Button } from '@/components/button'; -const EventHeader = () => { +type Ref = BottomSheet; + +const EventHeader = forwardRef<Ref>((_, ref) => { + if (!ref) { + return null; + } + + // @ts-ignore + const handleOpenPress = () => ref.current?.snapToIndex(0); + return ( <View className="flex-row items-center justify-between -translate-y-10"> <View className="w-24 h-24 bg-gray-300 rounded-xl" /> @@ -51,9 +62,18 @@ const EventHeader = () => { RSVP </Button> </MenuView> + + <Button + size={'default'} + variant={'default'} + className="w-18" + onPress={handleOpenPress} + > + Save + </Button> </View> </View> ); -}; +}); export { EventHeader }; diff --git a/frontend/sac-mobile/app/(app)/event/_components/location-view.tsx b/frontend/sac-mobile/app/(app)/event/_components/location-view.tsx index 647a6ef61..abc882879 100644 --- a/frontend/sac-mobile/app/(app)/event/_components/location-view.tsx +++ b/frontend/sac-mobile/app/(app)/event/_components/location-view.tsx @@ -1,9 +1,8 @@ import React from 'react'; -import { Image, Linking, Text, TouchableOpacity, View } from 'react-native'; +import { Linking, Text, TouchableOpacity, View } from 'react-native'; +import MapView from 'react-native-maps'; import { createOpenLink } from 'react-native-open-maps'; -import { useAssets } from 'expo-asset'; - import { Button } from '@/components/button'; type LocationViewProps = { @@ -12,16 +11,9 @@ type LocationViewProps = { }; const LocationView = ({ location, meetingLink }: LocationViewProps) => { - const [assets, error] = useAssets([ - require('@/assets/images/placeholder_location.png') - ]); const coordinates = { latitude: 42.3393326, longitude: -71.0869942 }; const openMap = createOpenLink({ ...coordinates }); - if (error) { - console.error(error); - } - return ( <> <View className="inline-flex flex-row items-center justify-between"> @@ -52,13 +44,15 @@ const LocationView = ({ location, meetingLink }: LocationViewProps) => { )} <View className="w-full mt-4 overflow-hidden border-2 rounded-xl border-zinc-300"> - {assets ? ( - <Image - source={{ uri: assets[0].uri }} - style={{ width: '100%', height: assets[0].height }} - className="rounded-[22px]" - /> - ) : null} + <MapView + onPress={openMap} + style={{ width: '100%', height: 200 }} + initialRegion={{ + ...coordinates, + latitudeDelta: 0.0922, + longitudeDelta: 0.0421 + }} + /> </View> </> ); diff --git a/frontend/sac-mobile/app/(app)/event/_components/rsvp-bottom-sheet.tsx b/frontend/sac-mobile/app/(app)/event/_components/rsvp-bottom-sheet.tsx new file mode 100644 index 000000000..c11fc4795 --- /dev/null +++ b/frontend/sac-mobile/app/(app)/event/_components/rsvp-bottom-sheet.tsx @@ -0,0 +1,56 @@ +import React, { forwardRef, useCallback } from 'react'; +import { Text, View } from 'react-native'; + +import BottomSheet, { BottomSheetBackdrop } from '@gorhom/bottom-sheet'; + +import { Button } from '@/components/button'; + +type Ref = BottomSheet; + +const RSVPBottomSheet = forwardRef<Ref>((_, ref) => { + const snapPoints = ['35%']; + + const renderBackdrop = useCallback( + (props: any) => ( + <BottomSheetBackdrop + appearsOnIndex={0} + disappearsOnIndex={-1} + {...props} + /> + ), + [] + ); + + // @ts-ignore + const handleClosePress = () => ref.current?.close(); + + return ( + <BottomSheet + ref={ref} + index={-1} + snapPoints={snapPoints} + enablePanDownToClose={true} + backgroundStyle={{ backgroundColor: 'white' }} + backdropComponent={renderBackdrop} + > + <View className="items-center justify-center p-4"> + <Text className="text-2xl font-bold">Save Event</Text> + <Text className="mt-2 text-lg"> + By saving this event, you are automatically signed up for + notifications and this event will be added to your calendar. + </Text> + <View className="w-full mt-4"> + <Button + className="rounded-xl" + onPress={handleClosePress} + size={'screenwide'} + > + Save Event + </Button> + </View> + </View> + </BottomSheet> + ); +}); + +export { RSVPBottomSheet }; diff --git a/frontend/sac-mobile/app/(app)/tag/[id].tsx b/frontend/sac-mobile/app/(app)/tag/[id].tsx new file mode 100644 index 000000000..426581a43 --- /dev/null +++ b/frontend/sac-mobile/app/(app)/tag/[id].tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { Text, View } from 'react-native'; + +const TagPage = () => { + return ( + <View> + <Text>TagPage</Text> + </View> + ); +}; + +export default TagPage; diff --git a/frontend/sac-mobile/app/(auth)/_components/code.tsx b/frontend/sac-mobile/app/(auth)/_components/code.tsx new file mode 100644 index 000000000..142090c43 --- /dev/null +++ b/frontend/sac-mobile/app/(auth)/_components/code.tsx @@ -0,0 +1,67 @@ +import React from 'react'; +import { useState } from 'react'; +import { Text, View } from 'react-native'; +import { + CodeField, + Cursor, + useBlurOnFulfill, + useClearByFocusCell +} from 'react-native-confirmation-code-field'; + +import { Button } from '@/components/button'; + +const CELL_COUNT = 6; + +type CodeProps = { + onCompleted: (code: string) => void; +}; + +const Code = ({ onCompleted }: CodeProps) => { + const [value, setValue] = useState(''); + const ref = useBlurOnFulfill({ value, cellCount: CELL_COUNT }); + const [props, getCellOnLayoutHandler] = useClearByFocusCell({ + value, + setValue + }); + + return ( + <View className="flex-col gap-y-5"> + <CodeField + ref={ref} + {...props} + value={value} + onChangeText={setValue} + cellCount={CELL_COUNT} + rootStyle={{ marginTop: 20 }} + keyboardType="number-pad" + textContentType="oneTimeCode" + renderCell={({ index, symbol, isFocused }) => ( + <View + onLayout={getCellOnLayoutHandler(index)} + key={index} + style={{ + width: 40, + height: 40, + justifyContent: 'center', + alignItems: 'center', + borderBottomWidth: 2, + borderBottomColor: isFocused ? 'gray' : 'black' + }} + > + <Text style={{ fontSize: 24, color: 'gray' }}> + {symbol || (isFocused ? <Cursor /> : null)} + </Text> + </View> + )} + /> + <Button + className="bg-primary-500" + onPress={() => onCompleted(value)} + > + Submit + </Button> + </View> + ); +}; + +export default Code; diff --git a/frontend/sac-mobile/app/(auth)/_components/login-form.tsx b/frontend/sac-mobile/app/(auth)/_components/login-form.tsx index 116753cb3..970e9cf84 100644 --- a/frontend/sac-mobile/app/(auth)/_components/login-form.tsx +++ b/frontend/sac-mobile/app/(auth)/_components/login-form.tsx @@ -42,12 +42,7 @@ const LoginForm = () => { try { const validData = loginSchema.parse(loginData); console.log({ validData }); -<<<<<<< Updated upstream - await signIn(validData.email, validData.password); - // router.replace('/(app)/(tabs)/'); -======= await onLogin!(validData.email, validData.password); ->>>>>>> Stashed changes } catch (err: any) { if (err instanceof ZodError) { Alert.alert(err.errors[0].message); diff --git a/frontend/sac-mobile/app/(auth)/_components/registration-form.tsx b/frontend/sac-mobile/app/(auth)/_components/registration-form.tsx index 9651c1f44..30657ebfa 100644 --- a/frontend/sac-mobile/app/(auth)/_components/registration-form.tsx +++ b/frontend/sac-mobile/app/(auth)/_components/registration-form.tsx @@ -53,13 +53,8 @@ const RegistrationForm = () => { try { registerSchema.parse({ password_confirmation, ...rest }); const updatedData = { ...rest }; -<<<<<<< Updated upstream - - await signUp(updatedData); -======= console.log(updatedData); await onRegister!(updatedData); ->>>>>>> Stashed changes } catch (error: any) { if (error instanceof ZodError) { Alert.alert(error.errors[0].message); @@ -147,7 +142,7 @@ const RegistrationForm = () => { <Input title="Email" autoCorrect={false} - placeholder="Northeastern email" + placeholder="doe.j@northeastern.edu" onChangeText={onChange} value={value} onSubmitEditing={handleSubmit(onSignUp)} @@ -174,7 +169,9 @@ const RegistrationForm = () => { render={({ field: { onChange, value } }) => ( <Input title="Password" + autoComplete="password" autoCorrect={false} + textContentType="password" placeholder="Password" onChangeText={onChange} value={value} @@ -225,6 +222,8 @@ const RegistrationForm = () => { <Input title="Password Confirmation" autoCorrect={false} + autoComplete="password" + textContentType="password" placeholder="Confirm your password" onChangeText={onChange} value={value} diff --git a/frontend/sac-mobile/app/(auth)/_components/verification-form.tsx b/frontend/sac-mobile/app/(auth)/_components/verification-form.tsx index bc83da81b..fc26551be 100644 --- a/frontend/sac-mobile/app/(auth)/_components/verification-form.tsx +++ b/frontend/sac-mobile/app/(auth)/_components/verification-form.tsx @@ -1,5 +1,4 @@ import { useEffect, useState } from 'react'; -import { Controller, useForm } from 'react-hook-form'; import { Alert, Text, TouchableOpacity, View } from 'react-native'; import Spinner from 'react-native-loading-spinner-overlay'; @@ -7,20 +6,15 @@ import { router } from 'expo-router'; import { ZodError, z } from 'zod'; -import { Button } from '@/components/button'; -import { Error } from '@/components/error'; -import { Input } from '@/components/input'; import { useAuthStore } from '@/hooks/use-auth'; import { requestVerification } from '@/services/auth'; +import { useForm } from 'react-hook-form'; +import { useAuth } from '@/context/AuthContext'; +import Code from './code'; -<<<<<<< Updated upstream type VerificationFormData = { code: string; }; -======= -import Code from './code'; -import { useAuth } from '@/context/AuthContext'; ->>>>>>> Stashed changes const verificationSchema = z.object({ code: z.string().min(6, { @@ -29,29 +23,21 @@ const verificationSchema = z.object({ }); const VerificationForm = () => { -<<<<<<< Updated upstream const { control, handleSubmit, formState: { errors } } = useForm<VerificationFormData>(); - const { user, completeVerification } = useAuthStore(); -======= // const { user, completeVerification } = useAuthStore(); const { user, onVerify } = useAuth(); ->>>>>>> Stashed changes const [loading, setLoading] = useState(false); useEffect(() => { console.log('[verification-form]', { user }); }, [user]); -<<<<<<< Updated upstream - const onVerify = async ({ code }: VerificationFormData) => { -======= const onPressVerify = async (code: string) => { ->>>>>>> Stashed changes setLoading(true); try { @@ -80,42 +66,19 @@ const VerificationForm = () => { return ( <> {loading && <Spinner visible={loading} />} -<<<<<<< Updated upstream - <View className="w-full mb-[8.5%]"> - <Controller - control={control} - render={({ field: { onChange, value } }) => ( - <Input - title="Verification code" - placeholder="Verification code" - onChangeText={onChange} - value={value} - keyboardType="numeric" - maxLength={6} - /> - )} - name="code" - rules={{ - required: 'Verification code is required' - }} - /> - {errors.code && <Error message={errors.code.message} />} - </View> - <View className="pt-[2%]"> - <Button onPress={handleSubmit(onVerify)} size="screenwide"> - Submit - </Button> - </View> -======= <Code onCompleted={onPressVerify} /> ->>>>>>> Stashed changes <View className="mt-[5%] flex-row justify-center"> - <Text>Did not receive a code?</Text> + <Text className="text-gray-500 text-md"> + Didn't receive the code? + </Text> <TouchableOpacity onPress={requestCode} className="font-bold underline" > - <Text> Resend</Text> + <Text className="font-bold text-gray-500 underline text-md"> + {' '} + Resend + </Text> </TouchableOpacity> </View> </> diff --git a/frontend/sac-mobile/app/(auth)/_layout.tsx b/frontend/sac-mobile/app/(auth)/_layout.tsx index 9dc36228e..70d3b7338 100644 --- a/frontend/sac-mobile/app/(auth)/_layout.tsx +++ b/frontend/sac-mobile/app/(auth)/_layout.tsx @@ -1,8 +1,12 @@ import React from 'react'; +import { View } from 'react-native'; -import { Stack } from 'expo-router'; +import { Stack, router } from 'expo-router'; -const AuthLayout = () => { +import { Button } from '@/components/button'; +import { Wordmark } from '@/components/wordmark'; + +const Layout = () => { return ( <Stack initialRouteName="welcome"> <Stack.Screen @@ -10,22 +14,82 @@ const AuthLayout = () => { options={{ title: '', headerShown: true, + animationTypeForReplace: 'pop', + animation: 'slide_from_left', + statusBarColor: 'dark', + headerLeft: () => <Wordmark color={'primary'} />, + headerBackground: () => ( + <View className="h-full bg-neutral-100" /> + ) + }} + /> + <Stack.Screen + name="login" + options={{ + title: '', + headerShown: true, + headerLeft: () => <Wordmark />, + headerBackground: () => ( + <View className="h-full bg-neutral-500" /> + ), animationTypeForReplace: 'push', - statusBarColor: 'dark' + animation: 'slide_from_right' + }} + /> + <Stack.Screen + name="register" + options={{ + title: '', + headerShown: true, + headerLeft: () => <Wordmark />, + headerRight: () => ( + <Button + variant={'secondary'} + onPress={() => router.replace('/login')} + > + Login + </Button> + ), + headerBackground: () => ( + <View className="h-full bg-neutral-500" /> + ), + animationTypeForReplace: 'pop', + animation: 'slide_from_left' }} /> - <Stack.Screen name="login" options={{ headerShown: false }} /> - <Stack.Screen name="register" options={{ headerShown: false }} /> <Stack.Screen name="verification" - options={{ headerShown: false }} + options={{ + title: 'SAC', + headerShown: true, + headerLeft: () => null, + headerBackground: () => <View className="h-full bg-white" /> + }} + /> + <Stack.Screen + name="user-interests" + options={{ + headerShown: true, + title: '', + headerLeft: () => <Wordmark color={'primary'} />, + headerBackground: () => ( + <View className="h-full bg-neutral-100" /> + ) + }} /> <Stack.Screen name="user-details" - options={{ headerShown: false }} + options={{ + headerShown: true, + title: '', + headerLeft: () => <Wordmark color={'primary'} />, + headerBackground: () => ( + <View className="h-full bg-neutral-100" /> + ) + }} /> </Stack> ); }; -export default AuthLayout; +export default Layout; diff --git a/frontend/sac-mobile/app/(auth)/login.tsx b/frontend/sac-mobile/app/(auth)/login.tsx index 8e106bab0..9671211fd 100644 --- a/frontend/sac-mobile/app/(auth)/login.tsx +++ b/frontend/sac-mobile/app/(auth)/login.tsx @@ -1,20 +1,17 @@ import React from 'react'; -import { Text, View } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; - -import { Wordmark } from '@/components/wordmark'; +import { Keyboard, Pressable, Text, View } from 'react-native'; import { LoginForm } from './_components/login-form'; const Login = () => { return ( - <SafeAreaView className="bg-neutral-500 h-[100%]" edges={['top']}> + <Pressable + className="flex-1 bg-neutral-500 h-[100%] pt-[8%]" + onPress={() => Keyboard.dismiss()} + > <View className="flex-1"> <View className="px-[8%] pb-[10%]"> - <View className="pt-[1%]"> - <Wordmark /> - </View> - <View className="pt-[9.5%] pb-[6%]"> + <View className="pt-[5%] pb-[7%]"> <Text className="text-5xl font-bold text-white"> Let's go </Text> @@ -36,7 +33,7 @@ const Login = () => { </View> </View> </View> - </SafeAreaView> + </Pressable> ); }; diff --git a/frontend/sac-mobile/app/(auth)/register.tsx b/frontend/sac-mobile/app/(auth)/register.tsx index db5ec52d5..ad215021a 100644 --- a/frontend/sac-mobile/app/(auth)/register.tsx +++ b/frontend/sac-mobile/app/(auth)/register.tsx @@ -1,44 +1,37 @@ import React from 'react'; -import { ScrollView, Text, View } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; - -import { router } from 'expo-router'; - -import { Button } from '@/components/button'; -import { Wordmark } from '@/components/wordmark'; +import { + KeyboardAvoidingView, + Platform, + ScrollView, + Text, + View +} from 'react-native'; import { RegistrationForm } from './_components/registration-form'; const Register = () => { return ( - <SafeAreaView className="bg-neutral-500" edges={['top']}> - <ScrollView> - <View className="px-[8%] pb-[9%]"> - <View className="flex flex-row justify-between mx-auto w-full items-center pt-[3%] pb-[5.5%]"> - <Wordmark /> - <Button - onPress={() => router.replace('/(auth)/login')} - variant="secondary" - size="sm" - > - Login - </Button> - </View> - <View className="pt-[9%] pb-[7.5%]"> + <KeyboardAvoidingView + behavior={Platform.OS === 'ios' ? 'padding' : 'height'} + className="flex-1" + > + <ScrollView showsVerticalScrollIndicator={false}> + <View className="bg-neutral-500"> + <View className="px-[8%] pt-[8%] pb-[7.5%]"> <Text className="text-5xl font-bold text-white"> Sign up </Text> </View> - <Text className="text-lg leading-6 text-white"> + <Text className="px-[8%] mb-[9%] text-lg leading-6 text-white"> Discover, follow, and join all the clubs & events Northeastern has to offer </Text> - </View> - <View className="bg-white px-[8%] pt-[13%] rounded-t-3xl"> - <RegistrationForm /> + <View className="bg-white px-[8%] pt-[13%] rounded-t-3xl"> + <RegistrationForm /> + </View> </View> </ScrollView> - </SafeAreaView> + </KeyboardAvoidingView> ); }; diff --git a/frontend/sac-mobile/app/(auth)/user-details.tsx b/frontend/sac-mobile/app/(auth)/user-details.tsx index 40da8df67..db52f6881 100644 --- a/frontend/sac-mobile/app/(auth)/user-details.tsx +++ b/frontend/sac-mobile/app/(auth)/user-details.tsx @@ -1,24 +1,21 @@ -import { View } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; +import { SafeAreaView, ScrollView, Text, View } from 'react-native'; -import { router } from 'expo-router'; +import { StatusBar } from 'expo-status-bar'; -import { Button } from '@/components/button'; +import UserDetailForm from './_components/user-details-form'; const UserDetails = () => { return ( <SafeAreaView> - <View className="px-[8%] pb-[9%]"> - <View className="flex-row justify-end pt-[5%]"> - <Button - size="lg" - variant="default" - onPress={() => router.push('/(app)/')} - > - Continue - </Button> + <ScrollView className="px-[8%] pb-[9%]"> + <StatusBar style="dark" /> + <Text className="font-bold text-5xl pt-[8%] pb-[10%]"> + Let's learn more about you + </Text> + <View className="pb-[10%]"> + <UserDetailForm /> </View> - </View> + </ScrollView> </SafeAreaView> ); }; diff --git a/frontend/sac-mobile/app/(auth)/user-interests.tsx b/frontend/sac-mobile/app/(auth)/user-interests.tsx new file mode 100644 index 000000000..387c6b440 --- /dev/null +++ b/frontend/sac-mobile/app/(auth)/user-interests.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Text, View } from 'react-native'; + +import { StatusBar } from 'expo-status-bar'; + +import UserInterestsForm from './_components/user-interest-form'; + +const UserInterests = () => { + return ( + <View className="px-[8%] pt-[4%]"> + <StatusBar style="dark" /> + <Text className="text-5xl pt-[6%] pb-[5%] font-bold"> + What are you interested in? + </Text> + <UserInterestsForm /> + </View> + ); +}; + +export default UserInterests; diff --git a/frontend/sac-mobile/app/(auth)/verification.tsx b/frontend/sac-mobile/app/(auth)/verification.tsx index 258f16c60..0d7a5849d 100644 --- a/frontend/sac-mobile/app/(auth)/verification.tsx +++ b/frontend/sac-mobile/app/(auth)/verification.tsx @@ -1,33 +1,28 @@ import React from 'react'; -import { ScrollView, Text, View } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; +import { Text, View } from 'react-native'; -import { Wordmark } from '@/components/wordmark'; +import { StatusBar } from 'expo-status-bar'; import { VerificationForm } from './_components/verification-form'; const Verification = () => { return ( - <SafeAreaView className="bg-neutral-500" edges={['top']}> - <ScrollView> - <View className="px-[8%] pb-[9%]"> - <View className="flex flex-row justify-between mx-auto w-full items-center pt-[3%] pb-[5.5%]"> - <Wordmark /> - </View> - <View className="pt-[9%] pb-[7.5%]"> - <Text className="text-5xl font-bold text-white"> - Verify your email - </Text> - </View> - <Text className="text-lg leading-6 text-white "> - Please enter the verification code sent to your email. + <View className="h-full bg-white"> + <StatusBar style="dark" /> + <View className="px-[8%] pb-[9%]"> + <View className="pt-[9%] pb-[7.5%]"> + <Text className="text-5xl font-bold text-gray-500"> + Verify your email </Text> </View> - <View className="bg-white px-[8%] pt-[13%] pb-[20%] mt-[50%] rounded-t-3xl"> - <VerificationForm /> - </View> - </ScrollView> - </SafeAreaView> + <Text className="text-lg leading-6 text-gray-500 "> + Please enter the verification code sent to your email. + </Text> + </View> + <View className=" px-[8%] pt-[13%] pb-[20%]"> + <VerificationForm /> + </View> + </View> ); }; diff --git a/frontend/sac-mobile/app/(auth)/welcome.tsx b/frontend/sac-mobile/app/(auth)/welcome.tsx index e481455c0..3a116c7a7 100644 --- a/frontend/sac-mobile/app/(auth)/welcome.tsx +++ b/frontend/sac-mobile/app/(auth)/welcome.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { SafeAreaView, Text, View } from 'react-native'; +import { Text, View } from 'react-native'; import { router } from 'expo-router'; @@ -7,10 +7,10 @@ import { Button } from '@/components/button'; const Welcome = () => { return ( - <SafeAreaView className="flex-col mb-[8%] mx-[8%]"> + <View className="flex-col mb-[8%] mx-[8%]"> <View className="bg-gray-500 h-[45%] w-ful rounded-xl mt-[5%]" /> <Text className="h-[18%] text-6xl font-bold mt-[10%]"> - Welcome to StudCal + Welcome to SAC </Text> <Text className="text-2xl leading-8 pl-[1%] pb-[10%]"> Discover, follow, and join all the clubs & events Northeastern @@ -25,7 +25,7 @@ const Welcome = () => { Get Started </Button> </View> - </SafeAreaView> + </View> ); }; diff --git a/frontend/sac-mobile/app/_layout.tsx b/frontend/sac-mobile/app/_layout.tsx index 40c75999d..a4bc358cc 100644 --- a/frontend/sac-mobile/app/_layout.tsx +++ b/frontend/sac-mobile/app/_layout.tsx @@ -1,5 +1,6 @@ import { useEffect } from 'react'; import { View } from 'react-native'; +import { GestureHandlerRootView } from 'react-native-gesture-handler'; import Spinner from 'react-native-loading-spinner-overlay'; import { useFonts } from 'expo-font'; @@ -13,7 +14,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { useAuthStore } from '@/hooks/use-auth'; import { AuthProvider, useAuth } from '@/context/AuthContext'; import * as SecureStore from 'expo-secure-store'; -import { GestureHandlerRootView } from 'react-native-gesture-handler'; export { // Catch any errors thrown by the Layout component. @@ -23,7 +23,7 @@ export { // Prevent the splash screen from auto-hiding before asset loading is complete. SplashScreen.preventAutoHideAsync(); -const queryClient = new QueryClient({ +export const queryClient = new QueryClient({ defaultOptions: { queries: { refetchOnWindowFocus: false, diff --git a/frontend/sac-mobile/assets/images/svg/home-selected.svg b/frontend/sac-mobile/assets/images/svg/home-selected.svg new file mode 100644 index 000000000..44721e51d --- /dev/null +++ b/frontend/sac-mobile/assets/images/svg/home-selected.svg @@ -0,0 +1,3 @@ +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M8.79077 16.877C8.33333 17.8715 8.33333 19.003 8.33333 21.2659V28.3332C8.33333 31.4759 8.33333 33.0473 9.30964 34.0236C10.2685 34.9825 11.8014 34.9996 14.8333 34.9999V26.6667C14.8333 25.1939 16.0272 24 17.5 24H22.5C23.9728 24 25.1667 25.1939 25.1667 26.6667V34.9999C28.1986 34.9996 29.7315 34.9825 30.6904 34.0236C31.6667 33.0473 31.6667 31.4759 31.6667 28.3332V21.2659C31.6667 19.003 31.6667 17.8715 31.2092 16.877C30.7518 15.8824 29.8927 15.146 28.1746 13.6733L26.5079 12.2448C23.4024 9.58289 21.8496 8.25195 20 8.25195C18.1504 8.25195 16.5976 9.58289 13.4921 12.2448L11.8254 13.6733C10.1073 15.146 9.2482 15.8824 8.79077 16.877ZM23.1667 34.9999V26.6667C23.1667 26.2985 22.8682 26 22.5 26H17.5C17.1318 26 16.8333 26.2985 16.8333 26.6667V34.9999H23.1667Z" fill="#333333"/> +</svg> diff --git a/frontend/sac-mobile/assets/images/svg/home.svg b/frontend/sac-mobile/assets/images/svg/home.svg new file mode 100644 index 000000000..cf07f3ef0 --- /dev/null +++ b/frontend/sac-mobile/assets/images/svg/home.svg @@ -0,0 +1,4 @@ +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M8.33333 21.266C8.33333 19.0031 8.33333 17.8716 8.79077 16.8771C9.2482 15.8825 10.1073 15.1461 11.8254 13.6735L13.4921 12.2449C16.5976 9.583 18.1504 8.25206 20 8.25206C21.8496 8.25206 23.4024 9.583 26.5079 12.2449L28.1746 13.6735C29.8927 15.1461 30.7518 15.8825 31.2092 16.8771C31.6667 17.8716 31.6667 19.0031 31.6667 21.266V28.3333C31.6667 31.476 31.6667 33.0474 30.6904 34.0237C29.714 35 28.1427 35 25 35H15C11.8573 35 10.286 35 9.30964 34.0237C8.33333 33.0474 8.33333 31.476 8.33333 28.3333V21.266Z" stroke="#333333" stroke-width="2"/> +<path d="M24.1667 35V26C24.1667 25.4477 23.719 25 23.1667 25H16.8333C16.281 25 15.8333 25.4477 15.8333 26V35" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +</svg> diff --git a/frontend/sac-mobile/assets/images/svg/pin.svg b/frontend/sac-mobile/assets/images/svg/pin.svg new file mode 100644 index 000000000..be2ec400d --- /dev/null +++ b/frontend/sac-mobile/assets/images/svg/pin.svg @@ -0,0 +1,3 @@ +<svg width="10" height="14" viewBox="0 0 10 14" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M2.5226 1.57915C4.08322 0.608356 6.00148 0.625324 7.54746 1.62359C9.07824 2.6422 10.0086 4.4601 9.99994 6.41566C9.96431 8.35839 8.96669 10.1846 7.71967 11.5963C6.99992 12.4147 6.19476 13.1385 5.32063 13.7527C5.23061 13.8084 5.132 13.8457 5.02966 13.8628C4.93117 13.8583 4.83526 13.8271 4.75057 13.7721C3.41604 12.8492 2.24525 11.6712 1.29453 10.2946C0.498995 9.1456 0.0470258 7.75739 8.29814e-07 6.31853C-0.00103192 4.35922 0.961981 2.54994 2.5226 1.57915ZM3.42429 7.12953C3.68681 7.8224 4.30645 8.27434 4.9939 8.27435C5.44426 8.27781 5.87718 8.08468 6.1962 7.738C6.51521 7.39132 6.69382 6.91989 6.69222 6.42875C6.69463 5.67908 6.28237 5.00176 5.64794 4.71306C5.01352 4.42435 4.28206 4.5812 3.79511 5.11038C3.30816 5.63955 3.16177 6.43666 3.42429 7.12953Z" fill="black"/> +</svg> diff --git a/frontend/sac-mobile/assets/images/svg/profile-selected.svg b/frontend/sac-mobile/assets/images/svg/profile-selected.svg new file mode 100644 index 000000000..78a5a2237 --- /dev/null +++ b/frontend/sac-mobile/assets/images/svg/profile-selected.svg @@ -0,0 +1,4 @@ +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M33.3777 32.212C33.9673 32.0891 34.3181 31.4744 34.0581 30.9311C33.0784 28.8834 31.375 27.0832 29.1314 25.7442C26.5117 24.1808 23.302 23.3333 20 23.3333C16.698 23.3333 13.4882 24.1808 10.8685 25.7442C8.6249 27.0832 6.92149 28.8834 5.9418 30.9311C5.68186 31.4744 6.03261 32.0891 6.62222 32.212L11.8391 33.2992C17.2219 34.421 22.7781 34.421 28.1608 33.2992L33.3777 32.212Z" fill="#333333"/> +<circle cx="20" cy="13.3333" r="8.33333" fill="#333333"/> +</svg> diff --git a/frontend/sac-mobile/assets/images/svg/profile.svg b/frontend/sac-mobile/assets/images/svg/profile.svg new file mode 100644 index 000000000..8f607b254 --- /dev/null +++ b/frontend/sac-mobile/assets/images/svg/profile.svg @@ -0,0 +1,4 @@ +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M32.879 34.0785C32.1193 31.9522 30.4454 30.0732 28.1168 28.7331C25.7882 27.393 22.9351 26.6667 20 26.6667C17.0649 26.6667 14.2118 27.393 11.8832 28.7331C9.55458 30.0732 7.88065 31.9521 7.12098 34.0785" stroke="#333333" stroke-width="2" stroke-linecap="round"/> +<circle cx="20" cy="13.3333" r="6.66667" stroke="#333333" stroke-width="2" stroke-linecap="round"/> +</svg> diff --git a/frontend/sac-mobile/assets/images/svg/search-selected.svg b/frontend/sac-mobile/assets/images/svg/search-selected.svg new file mode 100644 index 000000000..725f63085 --- /dev/null +++ b/frontend/sac-mobile/assets/images/svg/search-selected.svg @@ -0,0 +1,4 @@ +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M18.3333 30C24.7767 30 30 24.7767 30 18.3333C30 11.89 24.7767 6.66667 18.3333 6.66667C11.89 6.66667 6.66666 11.89 6.66666 18.3333C6.66666 24.7767 11.89 30 18.3333 30ZM18.3333 10.6667C17.3265 10.6667 16.3296 10.865 15.3994 11.2503C14.4693 11.6355 13.6241 12.2003 12.9122 12.9122C12.2003 13.6241 11.6355 14.4693 11.2503 15.3994C10.865 16.3296 10.6667 17.3265 10.6667 18.3333C10.6667 18.8856 11.1144 19.3333 11.6667 19.3333C12.2189 19.3333 12.6667 18.8856 12.6667 18.3333C12.6667 17.5892 12.8132 16.8523 13.098 16.1648C13.3828 15.4773 13.8002 14.8526 14.3264 14.3264C14.8526 13.8002 15.4773 13.3828 16.1648 13.098C16.8523 12.8132 17.5892 12.6667 18.3333 12.6667C18.8856 12.6667 19.3333 12.219 19.3333 11.6667C19.3333 11.1144 18.8856 10.6667 18.3333 10.6667Z" fill="#333333"/> +<path d="M33.3333 33.3333L30 30" stroke="#333333" stroke-width="2" stroke-linecap="round"/> +</svg> diff --git a/frontend/sac-mobile/assets/images/svg/search.svg b/frontend/sac-mobile/assets/images/svg/search.svg new file mode 100644 index 000000000..90fbb18bb --- /dev/null +++ b/frontend/sac-mobile/assets/images/svg/search.svg @@ -0,0 +1,5 @@ +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> +<circle cx="18.3333" cy="18.3333" r="10" stroke="#333333" stroke-width="2"/> +<path d="M18.3333 13.3333C17.6767 13.3333 17.0265 13.4627 16.4199 13.7139C15.8133 13.9652 15.2621 14.3335 14.7978 14.7978C14.3335 15.2621 13.9652 15.8133 13.7139 16.4199C13.4627 17.0265 13.3333 17.6767 13.3333 18.3333" stroke="#333333" stroke-width="2" stroke-linecap="round"/> +<path d="M33.3333 33.3333L28.3333 28.3333" stroke="#333333" stroke-width="2" stroke-linecap="round"/> +</svg> diff --git a/frontend/sac-mobile/assets/images/svg/time.svg b/frontend/sac-mobile/assets/images/svg/time.svg new file mode 100644 index 000000000..9f137b948 --- /dev/null +++ b/frontend/sac-mobile/assets/images/svg/time.svg @@ -0,0 +1,3 @@ +<svg width="10" height="11" viewBox="0 0 10 11" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M4.99999 0.862793C4.79236 0.862793 4.62405 1.0311 4.62405 1.23874V2.87209C4.62405 3.07971 4.79236 3.24802 4.99999 3.24802C5.20762 3.24802 5.37593 3.07971 5.37593 2.87209V1.63108C7.54602 1.82137 9.24812 3.6433 9.24812 5.86279C9.24812 8.20896 7.34617 10.1109 4.99999 10.1109C2.65383 10.1109 0.751881 8.20896 0.751881 5.86279C0.751881 4.81477 1.1309 3.85625 1.75978 3.11536C1.89414 2.95708 1.87474 2.71984 1.71645 2.58548C1.55817 2.45112 1.32093 2.47051 1.18656 2.6288C0.446671 3.50046 0 4.62994 0 5.86279C0 8.62423 2.23857 10.8628 4.99999 10.8628C7.76143 10.8628 10 8.62423 10 5.86279C10 3.10136 7.76143 0.862793 4.99999 0.862793ZM4.42895 6.29943L2.53658 3.66158C2.48295 3.58683 2.49134 3.48425 2.55639 3.4192C2.62143 3.35414 2.72402 3.34576 2.79876 3.39939L5.43662 5.29176C5.79871 5.55152 5.84141 6.07401 5.52631 6.38912C5.2112 6.70422 4.68871 6.66151 4.42895 6.29943Z" fill="black"/> +</svg> diff --git a/frontend/sac-mobile/babel.config.js b/frontend/sac-mobile/babel.config.js index 0464179ed..94046263e 100644 --- a/frontend/sac-mobile/babel.config.js +++ b/frontend/sac-mobile/babel.config.js @@ -2,6 +2,6 @@ module.exports = function (api) { api.cache(true); return { presets: ['babel-preset-expo'], - plugins: ['nativewind/babel'] + plugins: ['nativewind/babel', 'react-native-reanimated/plugin'] }; }; diff --git a/frontend/sac-mobile/components/button.tsx b/frontend/sac-mobile/components/button.tsx index bb302a6bd..52af65559 100644 --- a/frontend/sac-mobile/components/button.tsx +++ b/frontend/sac-mobile/components/button.tsx @@ -11,7 +11,9 @@ const buttonVariants = { secondary: ['bg-white', 'text-gray'], outline: ['border border-gray-600 text-gray-500 font-medium'], icon: ['bg-transparent'], - pill: ['bg-gray-500', 'text-white', 'rounded-full'] + underline: ['border-b font-bold border-gray-600 text-lg'], + pill: ['bg-gray-500', 'text-white', 'rounded-full'], + menu: ['text-black text-lg'] }, size: { default: 'h-10 px-4 py-2', @@ -46,7 +48,8 @@ const Button = ({ children, variant, size, ...props }: ButtonProps) => { > <Text className={cn( - ...buttonVariants.variant[variant ?? 'default'], + ...(buttonVariants.variant[variant ?? 'default'] ?? + buttonVariants.variant.default), 'text-center' )} > diff --git a/frontend/sac-mobile/components/dropdown.tsx b/frontend/sac-mobile/components/dropdown.tsx index c2164c255..611a641e2 100644 --- a/frontend/sac-mobile/components/dropdown.tsx +++ b/frontend/sac-mobile/components/dropdown.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { DimensionValue, ScrollView, StyleSheet, Text } from 'react-native'; +import { DimensionValue, StyleSheet, Text, View } from 'react-native'; import { Dropdown } from 'react-native-element-dropdown'; import { Item } from '@/types/item'; @@ -14,7 +14,7 @@ interface DropdownProps { onChangeText: (...event: any[]) => void; value: Item; onSubmitEditing: () => void; - search?: boolean; // true for enable search + search?: boolean; // true to enable search height?: DimensionValue; error?: boolean; } @@ -26,11 +26,10 @@ const DropdownComponent = (props: DropdownProps) => { const styles = StyleSheet.create({ container: { - backgroundColor: 'white', height: props.height || 78 }, dropdown: { - height: '85%', + height: 50, borderColor: borderColor, borderWidth: borderWidth, borderRadius: 12, @@ -47,7 +46,8 @@ const DropdownComponent = (props: DropdownProps) => { inputSearchStyle: { height: 40, fontSize: 14, - borderRadius: 11 + borderRadius: 11, + marginLeft: 8 }, containerStyle: { borderRadius: 12, @@ -70,7 +70,7 @@ const DropdownComponent = (props: DropdownProps) => { }); return ( - <ScrollView style={styles.container}> + <View style={styles.container}> <Text className="pb-[2%]">{props.title}</Text> <Dropdown style={[styles.dropdown, isFocus && styles.isFocus]} @@ -92,7 +92,7 @@ const DropdownComponent = (props: DropdownProps) => { onChange={props.onChangeText} value={props.value} /> - </ScrollView> + </View> ); }; diff --git a/frontend/sac-mobile/components/input.tsx b/frontend/sac-mobile/components/input.tsx index ec09055ff..4a3120e0f 100644 --- a/frontend/sac-mobile/components/input.tsx +++ b/frontend/sac-mobile/components/input.tsx @@ -1,17 +1,80 @@ -import { Text, TextInput, TextInputProps, View } from 'react-native'; +import { + GestureResponderEvent, + Text, + TextInput, + TextInputProps, + View +} from 'react-native'; -interface InputProps extends TextInputProps { - title: string; +import { VariantProps, cva } from 'class-variance-authority'; + +import { Button } from '@/components/button'; +import { cn } from '@/lib/utils'; + +const inputVariants = { + variant: { + default: ['pt-[4.5%]', 'pb-[4.5%]', 'pl-[5%]', 'border', 'rounded-xl'], + faq: [ + 'bg-gray-100', + 'rounded-lg', + 'py-[2%]', + 'pl-[4.5%]', + 'pr-[2%]', + 'flex-row', + 'justify-between' + ] + } +}; + +const inputStyles = cva(['w-full'], { + variants: inputVariants, + defaultVariants: { + variant: 'default' + } +}); + +export interface InputProps + extends TextInputProps, + VariantProps<typeof inputStyles> { + title?: string; error?: boolean; } -const Input = ({ title, error, ...props }: InputProps) => { +const Input = ({ title, error, variant, ...props }: InputProps) => { const borderColor = error ? 'border-red-600' : 'border-gray-500'; - return ( - <View> - <Text className="pb-[2%]">{title}</Text> + + let inputComponent = null; + if (variant === 'faq') { + inputComponent = ( + <View + className={cn(inputStyles({ variant }), props.className)} + {...props} + > + <TextInput + className="bg-transparent w-[85%]" + placeholder={props.placeholder} + autoCapitalize={props.autoCapitalize || 'none'} + autoCorrect={props.autoCorrect} + onChangeText={props.onChangeText} + value={props.value} + secureTextEntry={props.secureTextEntry || false} + /> + {/* @ts-ignore */} + <Button + className="w-10 h-6 bg-gray-300" + onPress={(e: GestureResponderEvent) => + props.onSubmitEditing!(e) + } + /> + </View> + ); + } else { + inputComponent = ( <TextInput - className={`pt-[4.5%] pb-[4.5%] pl-[5%] w-full border rounded-xl ${borderColor}`} + className={cn( + ...inputVariants.variant[variant ?? 'default'], + borderColor + )} autoCapitalize={props.autoCapitalize || 'none'} autoCorrect={props.autoCorrect} placeholder={props.placeholder} @@ -20,6 +83,13 @@ const Input = ({ title, error, ...props }: InputProps) => { secureTextEntry={props.secureTextEntry || false} onSubmitEditing={props.onSubmitEditing} /> + ); + } + + return ( + <View> + {title && <Text className="pb-[2%]">{title}</Text>} + {inputComponent} </View> ); }; diff --git a/frontend/sac-mobile/components/kebab.tsx b/frontend/sac-mobile/components/kebab.tsx new file mode 100644 index 000000000..9fa01eaf4 --- /dev/null +++ b/frontend/sac-mobile/components/kebab.tsx @@ -0,0 +1,25 @@ +import { MaterialCommunityIcons } from '@expo/vector-icons'; +import { + MenuAction, + MenuView, + NativeActionEvent +} from '@react-native-menu/menu'; + +type KebabProps = { + items: MenuAction[]; + onPressAction: (event: NativeActionEvent) => void; +}; + +const Kebab = ({ items, onPressAction }: KebabProps) => { + return ( + <MenuView onPressAction={onPressAction} actions={items}> + <MaterialCommunityIcons + name="dots-vertical" + size={24} + color="white" + /> + </MenuView> + ); +}; + +export { Kebab }; diff --git a/frontend/sac-mobile/components/multiselect.tsx b/frontend/sac-mobile/components/multiselect.tsx new file mode 100644 index 000000000..ce179dadc --- /dev/null +++ b/frontend/sac-mobile/components/multiselect.tsx @@ -0,0 +1,99 @@ +import React, { useState } from 'react'; +import { StyleSheet, Text, View } from 'react-native'; +import { MultiSelect } from 'react-native-element-dropdown'; + +import { Item } from '@/types/item'; + +interface MultiSelectProps { + title: string; + item: Array<Item>; + placeholder: string; + onSubmitEditing: () => void; + search?: boolean; + error?: boolean; + onChange: (selectedItems: Item[]) => void; + maxSelect: number; +} + +const MultiSelectComponent = (props: MultiSelectProps) => { + const borderColor = props.error ? 'red' : 'black'; + const borderWidth = props.error ? 1 : 0.5; + const marginBottom = props.error ? '0.5%' : '2%'; + const [selected, setSelected] = useState(Array<Item>); + + const styles = StyleSheet.create({ + container: { + padding: 0 + }, + itemContainerStyle: { + borderBottomWidth: 1, + borderColor: '#F0F0F0' + }, + itemTextStyle: { + fontSize: 14, + paddingLeft: '2%' + }, + containerStyle: { + borderRadius: 14, + marginTop: 6, + height: '88%' + }, + dropdown: { + height: 50, + borderWidth: borderWidth, + borderRadius: 12, + paddingLeft: '5%', + paddingRight: '5%', + marginBottom: marginBottom, + borderColor: borderColor + }, + placeholderStyle: { + fontSize: 14, + color: '#CDCBCB' + }, + selectedTextStyle: { + fontSize: 14 + }, + inputSearchStyle: { + height: 45, + fontSize: 14, + borderRadius: 13, + paddingLeft: 7 + }, + selectedStyle: { + borderRadius: 10, + marginTop: '1%' + } + }); + + return ( + <View style={styles.container}> + <Text className="mb-[2%]">{props.title}</Text> + <MultiSelect + style={styles.dropdown} + placeholderStyle={styles.placeholderStyle} + selectedTextStyle={styles.selectedTextStyle} + inputSearchStyle={styles.inputSearchStyle} + containerStyle={styles.containerStyle} + itemContainerStyle={styles.itemContainerStyle} + itemTextStyle={styles.itemTextStyle} + search={props.search} + data={props.item} + activeColor={'#DCDCDC'} + labelField="label" + valueField="value" + maxSelect={props.maxSelect} + placeholder={props.placeholder} + searchPlaceholder="Search..." + value={selected} + onChange={(item) => { + setSelected(item); + props.onChange(item); + }} + selectedStyle={styles.selectedStyle} + /> + </View> + ); +}; + +export default MultiSelectComponent; diff --git a/frontend/sac-mobile/components/tag.tsx b/frontend/sac-mobile/components/tag.tsx index faea441ad..455cc24a8 100644 --- a/frontend/sac-mobile/components/tag.tsx +++ b/frontend/sac-mobile/components/tag.tsx @@ -1,5 +1,7 @@ import { Text } from 'react-native'; +import { router } from 'expo-router'; + import { Button } from '@/components/button'; import { Tag as T } from '@/types/tag'; @@ -10,7 +12,7 @@ type TagProps = { const Tag = ({ tag }: TagProps) => { return ( <Button - onPress={() => console.log('Pressed:', tag)} + onPress={() => router.push(`/tag/${tag.id}`)} size={'pill'} variant={'pill'} className="my-1 mr-1" diff --git a/frontend/sac-mobile/app/(app)/_components/title.tsx b/frontend/sac-mobile/components/title.tsx similarity index 100% rename from frontend/sac-mobile/app/(app)/_components/title.tsx rename to frontend/sac-mobile/components/title.tsx diff --git a/frontend/sac-mobile/data/categories.ts b/frontend/sac-mobile/data/categories.ts new file mode 100644 index 000000000..bba81d015 --- /dev/null +++ b/frontend/sac-mobile/data/categories.ts @@ -0,0 +1,16 @@ +import { Category } from '@/types/category'; + +import { tags } from './tags'; + +export const categories: Category[] = []; + +for (let i = 1; i <= 10; i++) { + const category: Category = { + id: i.toString(), + created_at: new Date(), + updated_at: new Date(), + name: `Tag${i}`, + tags: tags.slice(0, Math.floor(Math.random() * tags.length)) + }; + categories.push(category); +} diff --git a/frontend/sac-mobile/hooks/use-auth.ts b/frontend/sac-mobile/hooks/use-auth.ts index 8c92470ed..de4f97d68 100644 --- a/frontend/sac-mobile/hooks/use-auth.ts +++ b/frontend/sac-mobile/hooks/use-auth.ts @@ -6,21 +6,21 @@ import { getCurrentUser } from '@/services/user'; import { Tokens } from '@/types/auth'; import { User } from '@/types/user'; -export type UserSignUp = { +type UserSignUp = { first_name: string; last_name: string; email: string; password: string; }; -export type AuthStoreState = { +type AuthStoreState = { user: User | null; isLoggedIn: boolean | null; isVerified: boolean | null; tokens: Tokens | null; }; -export type AuthStoreActions = { +type AuthStoreActions = { fetchUser: () => void; fetchCache: () => Promise<void>; setTokens: (tokens: Tokens) => void; @@ -30,73 +30,73 @@ export type AuthStoreActions = { signOut: () => void; }; -export const useAuthStore = create<AuthStoreState & AuthStoreActions>( - (set) => ({ - user: null, - isLoggedIn: null, - isVerified: null, - tokens: null, - setTokens: (tokens: Tokens) => { - set({ tokens }); - tokenCache.saveToken('accessToken', tokens.accessToken); - tokenCache.saveToken('refreshToken', tokens.refreshToken); - }, - fetchCache: async () => { - const accessToken = await tokenCache.getToken('accessToken'); - const refreshToken = await tokenCache.getToken('refreshToken'); - const user = await tokenCache.getToken('user'); +const useAuthStore = create<AuthStoreState & AuthStoreActions>((set) => ({ + user: null, + isLoggedIn: null, + isVerified: null, + tokens: null, + setTokens: (tokens: Tokens) => { + set({ tokens }); + tokenCache.saveToken('accessToken', tokens.accessToken); + tokenCache.saveToken('refreshToken', tokens.refreshToken); + }, + fetchCache: async () => { + const accessToken = await tokenCache.getToken('accessToken'); + const refreshToken = await tokenCache.getToken('refreshToken'); + const user = await tokenCache.getToken('user'); - if (accessToken && refreshToken && user) { - set({ - user: JSON.parse(user), - tokens: { accessToken, refreshToken }, - isLoggedIn: true - }); - } else { - set({ isLoggedIn: false }); - } - }, - signIn: async (email: string, password: string) => { - const { user, tokens } = await login(email, password); - if (user.is_verified === false) { - set({ user, tokens, isLoggedIn: true, isVerified: false }); - } else { - set({ user, tokens, isLoggedIn: true, isVerified: true }); - } - await tokenCache.saveToken('user', JSON.stringify(user)); - await tokenCache.saveToken('accessToken', tokens.accessToken); - await tokenCache.saveToken('refreshToken', tokens.refreshToken); - }, - signUp: async (userObj: UserSignUp) => { - const { user, tokens } = await signUp( - userObj.first_name, - userObj.last_name, - userObj.email, - userObj.password - ); - set({ user, tokens, isLoggedIn: true, isVerified: false }); - await tokenCache.saveToken('user', JSON.stringify(user)); - await tokenCache.saveToken('accessToken', tokens.accessToken); - await tokenCache.saveToken('refreshToken', tokens.refreshToken); - }, - completeVerification: async (email: string, code: string) => { - await completeVerification(email, code); - set({ isVerified: true }); - }, - signOut: async () => { - await logout(); + if (accessToken && refreshToken && user) { set({ - tokens: null, - isLoggedIn: false, - isVerified: false, - user: null + user: JSON.parse(user), + tokens: { accessToken, refreshToken }, + isLoggedIn: true }); - tokenCache.deleteToken('accessToken'); - tokenCache.deleteToken('refreshToken'); - }, - fetchUser: async () => { - const user = await getCurrentUser(); - set({ user, isLoggedIn: true, isVerified: user.is_verified }); + } else { + set({ isLoggedIn: false }); + } + }, + signIn: async (email: string, password: string) => { + const { user, tokens } = await login(email, password); + if (user.is_verified === false) { + set({ user, tokens, isLoggedIn: true, isVerified: false }); + } else { + set({ user, tokens, isLoggedIn: true, isVerified: true }); } - }) -); + await tokenCache.saveToken('user', JSON.stringify(user)); + await tokenCache.saveToken('accessToken', tokens.accessToken); + await tokenCache.saveToken('refreshToken', tokens.refreshToken); + }, + signUp: async (userObj: UserSignUp) => { + const { user, tokens } = await signUp( + userObj.first_name, + userObj.last_name, + userObj.email, + userObj.password + ); + set({ user, tokens, isLoggedIn: true, isVerified: false }); + await tokenCache.saveToken('user', JSON.stringify(user)); + await tokenCache.saveToken('accessToken', tokens.accessToken); + await tokenCache.saveToken('refreshToken', tokens.refreshToken); + }, + completeVerification: async (email: string, code: string) => { + await completeVerification(email, code); + set({ isVerified: true }); + }, + signOut: async () => { + await logout(); + set({ + tokens: null, + isLoggedIn: false, + isVerified: false, + user: null + }); + tokenCache.deleteToken('accessToken'); + tokenCache.deleteToken('refreshToken'); + }, + fetchUser: async () => { + const user = await getCurrentUser(); + set({ user, isLoggedIn: true, isVerified: user.is_verified }); + } +})); + +export { UserSignUp, AuthStoreState, AuthStoreActions, useAuthStore }; diff --git a/frontend/sac-mobile/hooks/use-categories.ts b/frontend/sac-mobile/hooks/use-categories.ts new file mode 100644 index 000000000..5bc433a86 --- /dev/null +++ b/frontend/sac-mobile/hooks/use-categories.ts @@ -0,0 +1,12 @@ +import { type UseQueryResult, useQuery } from '@tanstack/react-query'; + +import { Category } from '@/types/category'; + +import { getAllCategories } from './../services/categories'; + +export const useCategories = (): UseQueryResult<Category[], Error> => { + return useQuery<Category[], Error>({ + queryKey: ['category'], + queryFn: getAllCategories + }); +}; diff --git a/frontend/sac-mobile/hooks/use-club.ts b/frontend/sac-mobile/hooks/use-club.ts index 9181de8e5..754230285 100644 --- a/frontend/sac-mobile/hooks/use-club.ts +++ b/frontend/sac-mobile/hooks/use-club.ts @@ -1,11 +1,20 @@ import { UseQueryResult, useQuery } from '@tanstack/react-query'; -import { fetchClub, fetchClubContacts } from '@/services/club'; +import { fetchClub, fetchClubContacts, fetchClubs } from '@/services/club'; import { Club } from '@/types/club'; import { Contact } from '@/types/contact'; import { uuid } from '@/types/uuid'; -export const useClub = (clubID: uuid): UseQueryResult<Club, Error> => { +const useClubs = (): UseQueryResult<Club[], Error> => { + return useQuery<Club[], Error>({ + queryKey: ['clubs'], + queryFn: () => { + return fetchClubs(); + } + }); +}; + +const useClub = (clubID: uuid): UseQueryResult<Club, Error> => { return useQuery<Club, Error>({ queryKey: ['club', clubID], queryFn: () => { @@ -14,9 +23,7 @@ export const useClub = (clubID: uuid): UseQueryResult<Club, Error> => { }); }; -export const useClubContacts = ( - clubID: uuid -): UseQueryResult<Contact[], Error> => { +const useClubContacts = (clubID: uuid): UseQueryResult<Contact[], Error> => { return useQuery<Contact[], Error>({ queryKey: ['club', clubID, 'contacts'], queryFn: () => { @@ -43,3 +50,5 @@ export const useClubContacts = ( } }); }; + +export { useClub, useClubs, useClubContacts }; diff --git a/frontend/sac-mobile/hooks/use-event.ts b/frontend/sac-mobile/hooks/use-event.ts index 274f4ab20..936bf9956 100644 --- a/frontend/sac-mobile/hooks/use-event.ts +++ b/frontend/sac-mobile/hooks/use-event.ts @@ -11,7 +11,7 @@ import { Event } from '@/types/event'; import { Tag } from '@/types/tag'; import { uuid } from '@/types/uuid'; -export const useEvent = (eventID: string): UseQueryResult<Event, Error> => { +const useEvent = (eventID: string): UseQueryResult<Event, Error> => { return useQuery<Event, Error>({ queryKey: ['event', eventID], queryFn: () => { @@ -20,7 +20,7 @@ export const useEvent = (eventID: string): UseQueryResult<Event, Error> => { }); }; -export const useEvents = (): UseQueryResult<Event[], Error> => { +const useEvents = (): UseQueryResult<Event[], Error> => { return useQuery<Event[], Error>({ queryKey: ['events'], queryFn: () => { @@ -29,7 +29,7 @@ export const useEvents = (): UseQueryResult<Event[], Error> => { }); }; -export const useEventTags = (eventID: uuid): UseQueryResult<Tag[], Error> => { +const useEventTags = (eventID: uuid): UseQueryResult<Tag[], Error> => { return useQuery<Tag[], Error>({ queryKey: ['event', eventID, 'tags'], queryFn: () => { @@ -38,7 +38,7 @@ export const useEventTags = (eventID: uuid): UseQueryResult<Tag[], Error> => { }); }; -export const useEventHosts = (eventID: uuid): UseQueryResult<Club[], Error> => { +const useEventHosts = (eventID: uuid): UseQueryResult<Club[], Error> => { return useQuery<Club[], Error>({ queryKey: ['event', eventID, 'hosts'], queryFn: () => { @@ -46,3 +46,5 @@ export const useEventHosts = (eventID: uuid): UseQueryResult<Club[], Error> => { } }); }; + +export { useEvent, useEvents, useEventTags, useEventHosts }; diff --git a/frontend/sac-mobile/hooks/use-tags.ts b/frontend/sac-mobile/hooks/use-tags.ts new file mode 100644 index 000000000..dd1f7cc73 --- /dev/null +++ b/frontend/sac-mobile/hooks/use-tags.ts @@ -0,0 +1,11 @@ +import { type UseQueryResult, useQuery } from '@tanstack/react-query'; + +import { getAllTags } from '@/services/tags'; +import { Tag } from '@/types/tag'; + +export const useTags = (): UseQueryResult<Tag[], Error> => { + return useQuery<Tag[], Error>({ + queryKey: ['tags'], + queryFn: getAllTags + }); +}; diff --git a/frontend/sac-mobile/hooks/use-user.ts b/frontend/sac-mobile/hooks/use-user.ts new file mode 100644 index 000000000..5fa022d99 --- /dev/null +++ b/frontend/sac-mobile/hooks/use-user.ts @@ -0,0 +1,96 @@ +import { + UseMutationResult, + type UseQueryResult, + useMutation, + useQuery +} from '@tanstack/react-query'; + +import { queryClient } from '@/app/_layout'; +import { + createUserFollowing, + createUserTags, + deleteUserFollowing, + fetchUserFollowing, + updateUser +} from '@/services/user'; +import { Club } from '@/types/club'; + +const useUserFollowing = (userID: string): UseQueryResult<Club[], Error> => { + return useQuery<Club[], Error>({ + queryKey: ['user', userID, 'following'], + queryFn: async () => await fetchUserFollowing(userID) + }); +}; + +const useUpdateUser = () => { + return useMutation({ + mutationFn: ({ + userId, + updateUserRequestBody + }: { + userId: string; + updateUserRequestBody: { + graduation_year: number; + college: string; + graduation_cycle: string; + }; + }) => updateUser(userId, updateUserRequestBody), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['users'] }); + } + }); +}; + +const useCreateUserTags = (): UseMutationResult< + void, + Error, + { + userId: string; + tagIDs: string[]; + }, + unknown +> => { + return useMutation({ + mutationFn: ({ userId, tagIDs }) => createUserTags(userId, tagIDs), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['user_tags'] }); + } + }); +}; + +const useCreateClubFollowing = (): UseMutationResult< + void, + Error, + { + userId: string; + clubId: string; + }, + unknown +> => { + return useMutation({ + mutationFn: ({ userId, clubId }) => createUserFollowing(userId, clubId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['user_following'] }); + } + }); +}; + +const useDeleteClubFollowing = () => { + return useMutation({ + mutationFn: ({ userId, clubId }: { userId: string; clubId: string }) => + deleteUserFollowing(userId, clubId), + onSuccess: (_, variables: { userId: string; clubId: string }, __) => { + return queryClient.invalidateQueries({ + queryKey: [`user${variables.userId}following`] + }); + } + }); +}; + +export { + useUserFollowing, + useUpdateUser, + useCreateUserTags, + useCreateClubFollowing, + useDeleteClubFollowing +}; diff --git a/frontend/sac-mobile/lib/const.ts b/frontend/sac-mobile/lib/const.ts index 6be4c895a..4fb900339 100644 --- a/frontend/sac-mobile/lib/const.ts +++ b/frontend/sac-mobile/lib/const.ts @@ -1 +1,208 @@ -export const API_BASE_URL = 'https://ad79-50-170-49-148.ngrok-free.app/api/v1'; // 'http://localhost:8080/api/v1'; +import { FAQ } from '@/types/faq'; + +export const API_BASE_URL = 'http://localhost:8080/api/v1'; // 'http://localhost:8080/api/v1'; + +export const college = [ + { label: 'College of Arts, Media and Design', value: 'CAMD' }, + { label: "D'Amore-McKim School of Business", value: 'DMSB' }, + { label: 'Khoury College of Computer Sciences', value: 'KCCS' }, + { label: 'College of Engineering', value: 'CE' }, + { label: 'Bouvé College of Health Sciences', value: 'BCHS' }, + { label: 'School of Law', value: 'SL' }, + { label: 'College of Professional Studies', value: 'CPS' }, + { label: 'College of Science', value: 'CS' }, + { label: 'College of Social Sciences and Humanities', value: 'CSSH' } +]; + +export const graduationCycle = [ + { label: 'December', value: 'december' }, + { label: 'May', value: 'may' } +]; + +export const majorArr = [ + 'Africana Studies', + 'American Sign Language', + 'American Sign Language – English Interpreting', + 'Applied Physics', + 'Architectural Studies', + 'Architecture', + 'Art: Art, Visual Studies', + 'Behavioral Neuroscience*', + 'Biochemistry', + 'Bioengineering', + 'Biology', + 'Biomedical Physics', + 'Bouvé Undeclared', + 'Business Administration: Accounting', + 'Business Administration: Accounting and Advisory Services', + 'Business Administration: Brand Management', + 'Business Administration: Business Analytics', + 'Business Administration: Corporate Innovation', + 'Business Administration: Entrepreneurial Startups', + 'Business Administration: Family Business', + 'Business Administration: Finance', + 'Business Administration: Fintech', + 'Business Administration: Healthcare Management and Consulting', + 'Business Administration: Management', + 'Business Administration: Management Information Systems', + 'Business Administration: Marketing', + 'Business Administration: Marketing Analytics', + 'Business Administration: Social Innovation and Entrepreneurship', + 'Business Administration: Supply Chain Management', + 'Business Administration: Undeclared', + 'Business Administration', + 'CAMD Undeclared', + 'Cell and Molecular Biology', + 'Chemical Engineering', + 'Chemistry', + 'Civil Engineering', + 'COE Undeclared', + 'Communication Studies', + 'Computer Engineering', + 'Computer Science', + 'Computing and Law', + 'Criminology and Criminal Justice', + 'Cultural Anthropology', + 'Cybersecurity', + 'Data Science', + 'Design', + 'Economics', + 'Electrical Engineering', + 'English', + 'Environmental and Sustainability Sciences', + 'Environmental Engineering', + 'Environmental Science', + 'Environmental Studies', + 'Explore Program for undeclared students', + 'Game Art and Animation', + 'Game Design', + 'Global Asian Studies', + 'Health Science', + 'History', + 'History, Culture, and Law', + 'Human Services', + 'Industrial Engineering', + 'International Affairs', + 'International Business: Accounting', + 'International Business: Accounting and Advisory Services', + 'International Business: Brand Management', + 'International Business: Business Analytics', + 'International Business: Corporate Innovation', + 'International Business: Entrepreneurial Startups', + 'International Business: Family Business', + 'International Business: Finance', + 'International Business: Fintech', + 'International Business: Healthcare Management and Consulting', + 'International Business: Management', + 'International Business: Management Information Systems', + 'International Business: Marketing', + 'International Business: Marketing Analytics', + 'International Business: Social Innovation and Entrepreneurship', + 'International Business: Supply Chain Management', + 'International Business: Undeclared', + 'Journalism', + 'Landscape Architecture', + 'Linguistics', + 'Marine Biology', + 'Mathematics', + 'Mechanical Engineering', + 'Media and Screen Studies', + 'Media Arts', + 'Music', + 'Music Industry', + 'Music Technology', + 'Northeastern Explore Program (Undeclared)', + 'Nursing', + 'Pharmaceutical Sciences', + 'Pharmacy (PharmD)', + 'Philosophy', + 'Physics', + 'Political Science', + 'Politics, Philosophy, Economics', + 'Psychology', + 'Public Health', + 'Public Relations', + 'Religious Studies', + 'Sociology', + 'Spanish', + 'Speech Language Pathology and Audiology', + 'Theatre' +]; + +export const categories = [ + { + name: 'Pre-Professional', + tags: ['Pre-med', 'Pre-law'] + }, + { + name: 'Cultural and Identity', + tags: [ + 'Judaism', + 'Christianity', + 'Hinduism', + 'Islam', + 'Latin America', + 'African American', + 'Asian American', + 'LGBTQ' + ] + }, + { + name: 'Arts and Creativity', + tags: ['Performing Arts', 'Visual Arts', 'Creative Writing', 'Music'] + }, + { + name: 'Sports and Recreation', + tags: ['Soccer', 'Hiking', 'Climbing', 'Lacrosse'] + }, + { + name: 'Science and Technology', + tags: [ + 'Mathematics', + 'Physics', + 'Biology', + 'Chemistry', + 'Environmental Science', + 'Geology', + 'Neuroscience', + 'Psychology', + 'Software Engineering', + 'Artificial Intelligence', + 'DataScience', + 'Mechanical Engineering', + 'Electrical Engineering', + 'Industrial Engineering' + ] + }, + { + name: 'Community Service and Advocacy', + tags: [ + 'Volunteerism', + 'Environmental Advocacy', + 'Human Rights', + 'Community Outreach' + ] + }, + { + name: 'Media and Communication', + tags: ['Journalism', 'Broadcasting', 'Film', 'Public Relations'] + } +]; + +export const HomepageFAQ: FAQ[] = [ + { + club_name: 'Oasis', + question: 'How do you assess applications?', + answer: "We don't assess them in the traditional sense. We pride ourselves on being open to students from all backgrounds and experience levels, so our application is first-come first-serve to keep it simple and fair for everybody." + }, + { + club_name: 'Oasis', + question: 'How many students are there in normal cohort?', + answer: 'A typical semester is roughly 80 students. We target 10 mentors each semester, and each mentor works with two groups of four students each.' + }, + { + club_name: "Nor'easters A Capella", + question: 'Is the ticket free?', + answer: 'Yes, the event is opened to all students, and the tickets are free. You can purchase them here.' + } +]; diff --git a/frontend/sac-mobile/lib/utils.ts b/frontend/sac-mobile/lib/utils.ts index 8f45a1624..ad33ab73c 100644 --- a/frontend/sac-mobile/lib/utils.ts +++ b/frontend/sac-mobile/lib/utils.ts @@ -5,7 +5,10 @@ import { Buffer } from 'buffer'; import clsx, { ClassValue } from 'clsx'; import { twMerge } from 'tailwind-merge'; +import { majorArr } from '@/lib/const'; +import { categories } from '@/lib/const'; import { Tokens } from '@/types/auth'; +import { FAQ } from '@/types/faq'; import { Item } from '@/types/item'; /** @@ -23,8 +26,9 @@ const cn = (...inputs: ClassValue[]) => { */ const graduationYear = () => { var year = new Date().getFullYear(); + const range = 5; const graduationYears: Item[] = []; - for (let i = 0; i < 5; i++) { + for (let i = 0; i < range; i++) { graduationYears.push({ label: String(year + i), value: String(year + i) @@ -33,6 +37,32 @@ const graduationYear = () => { return graduationYears; }; +/** + * Generates an array of item of major + * @returns an Item array of majors + */ +export const major = () => { + const majors: Item[] = []; + for (let i = 0; i < majorArr.length; i++) { + majors.push({ + label: majorArr[i], + value: majorArr[i] + }); + } + return majors; +}; + +/** + * Combine all tags of different categories into one for All tab + * @return a list of tags + */ +export const allTags = () => { + let allTags: string[] = []; + for (let i = 0; i < categories.length; i++) { + allTags = allTags.concat(categories[i].tags); + } + return allTags; +}; /** * Defines the token cache object. * This object is used to interact with the SecureStore API. @@ -117,4 +147,35 @@ const extractTokens = ( return { accessToken, refreshToken }; }; -export { cn, graduationYear, tokenCache, experationTime, extractTokens }; +const isClub = (item: any) => { + return typeof item === 'object' && item.hasOwnProperty('is_recruiting'); +}; + +const isEvent = (item: any) => { + return ( + typeof item === 'object' && + item.hasOwnProperty('name') && + item.hasOwnProperty('start_time') && + typeof item.start_time === 'object' && + item.start_time instanceof Date + ); +}; + +const isFAQ = (item: any): FAQ => { + return ( + typeof item === 'object' && + item.hasOwnProperty('question') && + item.hasOwnProperty('answer') + ); +}; + +export { + cn, + isClub, + isEvent, + isFAQ, + graduationYear, + tokenCache, + experationTime, + extractTokens +}; diff --git a/frontend/sac-mobile/package.json b/frontend/sac-mobile/package.json index 4623b7374..d4f7011a8 100644 --- a/frontend/sac-mobile/package.json +++ b/frontend/sac-mobile/package.json @@ -4,8 +4,8 @@ "version": "1.0.0", "scripts": { "start": "expo start", - "android": "expo run:android", - "ios": "expo run:ios", + "android": "expo start --android", + "ios": "expo start --ios", "web": "expo start --web", "test": "echo \"Woah there, we have no frontend tests as of right now. Let's just say we're passing.\" && exit 0", "lint": "eslint . --ext .js,.jsx,.ts,.tsx", @@ -17,10 +17,13 @@ }, "dependencies": { "@expo/vector-icons": "^14.0.0", - "@react-native-menu/menu": "^0.9.1", + "@gorhom/bottom-sheet": "^4", + "@react-native-community/masked-view": "^0.1.11", + "@react-native-menu/menu": "^1.0.0", "@react-navigation/native": "^6.1.17", - "@types/uuid": "^9.0.8", + "@react-navigation/stack": "^6.3.29", "@tanstack/react-query": "^5.29.0", + "@types/uuid": "^9.0.8", "axios": "^1.6.8", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -31,6 +34,7 @@ "expo-auth-session": "^5.4.0", "expo-dev-client": "~3.3.11", "expo-font": "~11.10.2", + "expo-haptics": "~12.8.1", "expo-linking": "~6.2.2", "expo-router": "~3.4.8", "expo-secure-store": "~12.8.1", @@ -38,20 +42,27 @@ "expo-status-bar": "~1.11.1", "expo-system-ui": "~2.9.3", "expo-web-browser": "~12.8.2", + "install": "^0.13.0", "nativewind": "^2.0.11", "react": "18.2.0", "react-dom": "18.2.0", "react-hook-form": "^7.51.2", "react-native": "0.73.6", + "react-native-confirmation-code-field": "^7.4.0", "react-native-cookies": "^3.3.0", "react-native-element-dropdown": "^2.10.4", + "react-native-gesture-handler": "^2.16.0", "react-native-loading-spinner-overlay": "^3.0.1", + "react-native-maps": "1.14.0", + "react-native-menu": "^0.23.0", "react-native-open-maps": "^0.4.3", "react-native-reanimated": "^3.8.1", - "react-native-safe-area-context": "4.9.0", + "react-native-safe-area-context": "^4.9.0", "react-native-screens": "~3.30.1", "react-native-svg": "^15.1.0", + "react-native-svg-transformer": "^1.3.0", "react-native-web": "~0.19.6", + "react-query": "^3.39.3", "tailwind-merge": "^2.2.2", "zod": "^3.22.4", "zustand": "^4.5.2" @@ -60,7 +71,7 @@ "@babel/core": "^7.24.4", "@react-native-community/eslint-config": "^3.2.0", "@trivago/prettier-plugin-sort-imports": "^4.3.0", - "@types/react": "~18.2.74", + "@types/react": "~18.2.78", "eslint": "^8.56.0", "eslint-plugin-prettier": "^5.1.3", "jest": "^29.2.1", @@ -68,8 +79,8 @@ "prettier": "^3.2.4", "react-native-svg-transformer": "^1.3.0", "react-test-renderer": "18.2.0", - "tailwindcss": "3.4.3", - "typescript": "^5.4.4" + "tailwindcss": "3.3.2", + "typescript": "^5.4.5" }, "private": true } diff --git a/frontend/sac-mobile/services/categories.ts b/frontend/sac-mobile/services/categories.ts new file mode 100644 index 000000000..129fd2067 --- /dev/null +++ b/frontend/sac-mobile/services/categories.ts @@ -0,0 +1,14 @@ +import { API_BASE_URL } from '@/lib/const'; +import { Category } from '@/types/category'; + +import { api } from './api'; + +export const getAllCategories = async (): Promise<Category[]> => { + try { + const response = await api.get(`${API_BASE_URL}/categories`); + return response.data as Category[]; + } catch (error) { + console.log('Error fetching categories'); + throw new Error('Error fetching categories'); + } +}; diff --git a/frontend/sac-mobile/services/club.ts b/frontend/sac-mobile/services/club.ts index e93ce0360..40c41228e 100644 --- a/frontend/sac-mobile/services/club.ts +++ b/frontend/sac-mobile/services/club.ts @@ -5,6 +5,23 @@ import { uuid } from '@/types/uuid'; import { api } from './api'; +/** + * Fetches all clubs. + * + * @returns A Promise that resolves to the fetched clubs or rejects with an error + * @throws Error if the clubs cannot be fetched + * @see Club + */ +const fetchClubs = async (): Promise<Club[]> => { + return api + .get('/clubs') + .then((response) => response.data as Club[]) + .catch((error) => { + console.error(error); + throw new Error('Error fetching clubs'); + }); +}; + /** * Fetches a club by its ID. * @@ -13,7 +30,7 @@ import { api } from './api'; * @throws Error if the club cannot be fetched * @see Club */ -export const fetchClub = async (clubID: uuid): Promise<Club> => { +const fetchClub = async (clubID: uuid): Promise<Club> => { return api .get(`/clubs/${clubID}`) .then((response) => response.data as Club) @@ -32,7 +49,7 @@ export const fetchClub = async (clubID: uuid): Promise<Club> => { * @see Contact * @see Contact[] */ -export const fetchClubContacts = async (clubID: uuid): Promise<Contact[]> => { +const fetchClubContacts = async (clubID: uuid): Promise<Contact[]> => { // return api // .get(`/clubs/${clubID}/contacts`) // .then((response) => response.data as Contact[]) @@ -50,3 +67,5 @@ export const fetchClubContacts = async (clubID: uuid): Promise<Contact[]> => { return allContacts; }; + +export { fetchClubContacts, fetchClub, fetchClubs }; diff --git a/frontend/sac-mobile/services/tags.ts b/frontend/sac-mobile/services/tags.ts new file mode 100644 index 000000000..8cf33c5d3 --- /dev/null +++ b/frontend/sac-mobile/services/tags.ts @@ -0,0 +1,13 @@ +import { Tag } from '@/types/tag'; + +import { api } from './api'; + +export const getAllTags = async (): Promise<Tag[]> => { + try { + const response = await api.get('/tags'); + return response.data as Tag[]; + } catch (error) { + console.log('Error fetching tags'); + throw new Error('Error fetching tags'); + } +}; diff --git a/frontend/sac-mobile/services/user.ts b/frontend/sac-mobile/services/user.ts index 146d83b26..22c0c8fc5 100644 --- a/frontend/sac-mobile/services/user.ts +++ b/frontend/sac-mobile/services/user.ts @@ -1,6 +1,7 @@ import { AxiosError } from 'axios'; import { api } from '@/services/api'; +import { Club } from '@/types/club'; import { ErrorResponse } from '@/types/error'; import { User } from '@/types/user'; @@ -9,7 +10,7 @@ import { User } from '@/types/user'; * @param accessToken The access token of the user. * @returns The user that was retrieved. */ -export const getCurrentUser = async (): Promise<User> => { +const getCurrentUser = async (): Promise<User> => { try { const response = await api.get<User>('/users/me'); @@ -25,3 +26,99 @@ export const getCurrentUser = async (): Promise<User> => { } } }; + +const createUserTags = async ( + userId: string, + tagsId: string[] +): Promise<void> => { + try { + await api.post<User>(`/users/${userId}/tags`, { tags: tagsId }); + } catch (error) { + console.log('Error associating users to a tag'); + throw new Error('Error associating users to a tag'); + } +}; + +/** + * Update user details after signup. + * @param userId ID of this specific user + * @param updateUserBody JSON body of updated information + * @returns The user whose info is updated + */ +const updateUser = async ( + userId: string, + updateUserBody: { + graduation_year: number; + college: string; + graduation_cycle: string; + } +): Promise<User> => { + try { + const response = await api.patch<User>( + `/users/${userId}/`, + updateUserBody + ); + return response.data as User; + } catch (error) { + console.log('Error updating user'); + throw new Error('Error updating user'); + } +}; + +/** + * Fetches the clubs that the user is following. + * @param userId The ID of the user. + * @returns The clubs that the user is following. + */ +const fetchUserFollowing = async (userId: string): Promise<Club[]> => { + try { + const response = await api.get(`/users/${userId}/follower`); + return response.data as Club[]; + } catch (error) { + console.log('Error fetching followed clubs'); + throw new Error('Error fetching followed clubs'); + } +}; + +/** + * Follows a club. + * @param userId The ID of the user. + * @param clubId The ID of the club. + */ +const createUserFollowing = async ( + userId: string, + clubId: string +): Promise<void> => { + try { + await api.post(`/users/${userId}/follower/${clubId}`); + } catch (error) { + console.log('Error following clubs'); + throw new Error('Error following clubs'); + } +}; + +/** + * Unfollows a club. + * @param userId The ID of the user. + * @param clubId The ID of the club. + */ +const deleteUserFollowing = async ( + userId: string, + clubId: string +): Promise<void> => { + try { + await api.delete(`/users/${userId}/follower/${clubId}`); + } catch (error) { + console.log('Error unfollowing clubs'); + throw new Error('Error unfollowing clubs'); + } +}; + +export { + getCurrentUser, + createUserTags, + updateUser, + fetchUserFollowing, + createUserFollowing, + deleteUserFollowing +}; diff --git a/frontend/sac-mobile/types/categories.ts b/frontend/sac-mobile/types/categories.ts deleted file mode 100644 index 1571c1474..000000000 --- a/frontend/sac-mobile/types/categories.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { z } from 'zod'; - -import { rootModelSchema } from './root'; -import { tagSchema } from './tag'; - -export const categorySchema = z.object({ - name: z.string(), - tags: z.array(tagSchema) -}); - -const Category = categorySchema.merge(rootModelSchema); -export type Category = z.infer<typeof Category>; diff --git a/frontend/sac-mobile/types/category.ts b/frontend/sac-mobile/types/category.ts new file mode 100644 index 000000000..619032b79 --- /dev/null +++ b/frontend/sac-mobile/types/category.ts @@ -0,0 +1,15 @@ +import { z } from 'zod'; + +import { tagSchema } from '@/types/tag'; + +import { rootModelSchema } from './root'; + +const categorySchemaIntermediate = z.object({ + name: z.string().min(1), + tags: z.array(tagSchema) +}); + +const categorySchema = categorySchemaIntermediate.merge(rootModelSchema); +type Category = z.infer<typeof categorySchema>; + +export { categorySchema, Category }; diff --git a/frontend/sac-mobile/types/faq.ts b/frontend/sac-mobile/types/faq.ts new file mode 100644 index 000000000..65b06e44c --- /dev/null +++ b/frontend/sac-mobile/types/faq.ts @@ -0,0 +1,5 @@ +export type FAQ = { + club_name: string; + question: string; + answer: string; +}; diff --git a/frontend/sac-mobile/types/tag.ts b/frontend/sac-mobile/types/tag.ts index fb7a14220..9bf3ba92f 100644 --- a/frontend/sac-mobile/types/tag.ts +++ b/frontend/sac-mobile/types/tag.ts @@ -2,9 +2,12 @@ import { z } from 'zod'; import { rootModelSchema } from './root'; -export const tagSchema = z.object({ - name: z.string().max(255) +const tagIntermediate = z.object({ + name: z.string().min(1), + category_id: z.string().uuid() }); -const Tag = tagSchema.merge(rootModelSchema); -export type Tag = z.infer<typeof Tag>; +const tagSchema = tagIntermediate.merge(rootModelSchema); +type Tag = z.infer<typeof tagSchema>; + +export { tagSchema, Tag }; diff --git a/frontend/sac-mobile/yarn.lock b/frontend/sac-mobile/yarn.lock index 75f99b6da..22783ab9a 100644 --- a/frontend/sac-mobile/yarn.lock +++ b/frontend/sac-mobile/yarn.lock @@ -2,32 +2,32 @@ # yarn lockfile v1 -"@0no-co/graphql.web@^1.0.1": - version "1.0.4" - resolved "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.4.tgz" - integrity sha512-W3ezhHGfO0MS1PtGloaTpg0PbaT8aZSmmaerL7idtU5F7oCI+uu25k+MsMS31BVFlp4aMkHSrNRxiD72IlK8TA== +"@0no-co/graphql.web@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.0.6.tgz#3def68bbaf654a301bd910ce3744506cad97ab9a" + integrity sha512-KZ7TnwMcQJcFgzjoY623AVxtlDQonkqp3rSz0wb15/jHPyU1v5gynUibEpuutDeoyGJ5Tp+FwxjGyDGDwq3vIw== "@aashutoshrathi/word-wrap@^1.2.3": version "1.2.6" - resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@alloc/quick-lru@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@babel/code-frame@7.10.4", "@babel/code-frame@~7.10.4": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: "@babel/highlight" "^7.10.4" @@ -40,10 +40,10 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.14.0", "@babel/core@^7.20.0", "@babel/core@^7.21.3", "@babel/core@^7.23.9", "@babel/core@^7.24.4": version "7.24.4" @@ -67,9 +67,9 @@ semver "^6.3.1" "@babel/eslint-parser@^7.18.2": - version "7.23.10" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz#2d4164842d6db798873b40e0c4238827084667a2" - integrity sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz#e27eee93ed1d271637165ef3a86e2b9332395c32" + integrity sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -77,7 +77,7 @@ "@babel/generator@7.17.7": version "7.17.7" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== dependencies: "@babel/types" "^7.17.0" @@ -96,7 +96,7 @@ "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: "@babel/types" "^7.22.5" @@ -108,9 +108,9 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: "@babel/compat-data" "^7.23.5" @@ -119,41 +119,30 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6", "@babel/helper-create-class-features-plugin@^7.23.9": - version "7.23.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" - integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" + integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-replace-supers" "^7.24.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" - integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - "@babel/helper-define-polyfill-provider@^0.6.1": version "0.6.1" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" @@ -167,12 +156,12 @@ "@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.20": version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== "@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: "@babel/template" "^7.22.15" @@ -180,35 +169,35 @@ "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": +"@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" "@babel/helper-module-imports@7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.0" "@babel/helper-module-transforms@^7.23.3": version "7.23.3" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" @@ -219,78 +208,73 @@ "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-plugin-utils@^7.24.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== "@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== +"@babel/helper-replace-supers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" + integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-simple-access@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: "@babel/types" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: "@babel/types" "^7.22.5" "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.18.10", "@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== "@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": +"@babel/helper-validator-option@^7.23.5": version "7.23.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== dependencies: "@babel/helper-function-name" "^7.22.5" @@ -306,16 +290,7 @@ "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" -"@babel/highlight@^7.10.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/highlight@^7.24.2": +"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.2": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== @@ -330,33 +305,41 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1" + integrity sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" + integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" + integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/plugin-transform-optional-chaining" "^7.24.1" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" - integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" + integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-proposal-async-generator-functions@^7.0.0": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -366,32 +349,32 @@ "@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.18.0": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.12.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.9.tgz#126d947d62ee72022ec46813983c6dd861456fa3" - integrity sha512-hJhBCb0+NnTWybvWq2WpbCYDOcflSbx0t+BYP65e5R9GVnukiDTi+on5bFkk4p7QGuv190H6KfNiV9Knf/3cZA== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz#bab2b9e174a2680f0a80f341f3ec70f809f8bb4b" + integrity sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.23.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-decorators" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-decorators" "^7.24.1" "@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.23.3.tgz" - integrity sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz#d242019488277c9a5a8035e5b70de54402644b89" + integrity sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-default-from" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-export-default-from" "^7.24.1" "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.0": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -399,7 +382,7 @@ "@babel/plugin-proposal-numeric-separator@^7.0.0": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -407,7 +390,7 @@ "@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.20.0": version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: "@babel/compat-data" "^7.20.5" @@ -418,7 +401,7 @@ "@babel/plugin-proposal-optional-catch-binding@^7.0.0": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -426,7 +409,7 @@ "@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.20.0": version "7.21.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -440,21 +423,21 @@ "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" @@ -466,138 +449,138 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz" - integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== +"@babel/plugin-syntax-decorators@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz#71d9ad06063a6ac5430db126b5df48c70ee885fa" + integrity sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.23.3.tgz" - integrity sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw== +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz#a92852e694910ae4295e6e51e87b83507ed5e6e8" + integrity sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz" - integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz#875c25e3428d7896c87589765fc8b9d32f24bd8d" + integrity sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== +"@babel/plugin-syntax-import-assertions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" + integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== +"@babel/plugin-syntax-import-attributes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" + integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.24.1", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -607,362 +590,350 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-0", "@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-0", "@babel/plugin-transform-arrow-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-async-generator-functions@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" - integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== +"@babel/plugin-transform-async-generator-functions@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" + integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.20.0", "@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-async-to-generator@^7.20.0", "@babel/plugin-transform-async-to-generator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" + integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-imports" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" + integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" + integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== +"@babel/plugin-transform-class-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" + integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== +"@babel/plugin-transform-class-static-block@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" + integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.4" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.23.8": - version "7.23.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz" - integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" + integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" + integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/template" "^7.24.0" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" + integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-dotall-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" + integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== +"@babel/plugin-transform-duplicate-keys@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" + integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== +"@babel/plugin-transform-dynamic-import@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" + integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== +"@babel/plugin-transform-exponentiation-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" + integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-export-namespace-from@^7.22.11", "@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== +"@babel/plugin-transform-export-namespace-from@^7.22.11", "@babel/plugin-transform-export-namespace-from@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" + integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz" - integrity sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz#fa8d0a146506ea195da1671d38eed459242b2dcc" + integrity sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-flow" "^7.24.1" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" + integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" + integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== +"@babel/plugin-transform-json-strings@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" + integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" + integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== +"@babel/plugin-transform-logical-assignment-operators@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" + integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" + integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== +"@babel/plugin-transform-modules-amd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" + integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" + integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" - integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== +"@babel/plugin-transform-modules-systemjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" + integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-umd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" + integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.0.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-new-target@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" + integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" + integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== +"@babel/plugin-transform-numeric-separator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" + integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.12.13": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== - dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" - -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1" - integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w== +"@babel/plugin-transform-object-rest-spread@^7.12.13", "@babel/plugin-transform-object-rest-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" + integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== dependencies: - "@babel/compat-data" "^7.23.5" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.24.1" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" + integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== +"@babel/plugin-transform-optional-catch-binding@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" + integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.0.0-0", "@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== +"@babel/plugin-transform-optional-chaining@^7.0.0-0", "@babel/plugin-transform-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" + integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" + integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" + integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-private-property-in-object@^7.22.11", "@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== +"@babel/plugin-transform-private-property-in-object@^7.22.11", "@babel/plugin-transform-private-property-in-object@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" + integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" + integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== +"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" + integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-react-jsx-development@^7.22.5": version "7.22.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== dependencies: "@babel/plugin-transform-react-jsx" "^7.22.5" "@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz" - integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz#a21d866d8167e752c6a7c4555dba8afcdfce6268" + integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz" - integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz#a2dedb12b09532846721b5df99e52ef8dc3351d0" + integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" @@ -971,138 +942,139 @@ "@babel/plugin-syntax-jsx" "^7.23.3" "@babel/types" "^7.23.4" -"@babel/plugin-transform-react-pure-annotations@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== +"@babel/plugin-transform-react-pure-annotations@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" + integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-regenerator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" + integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== +"@babel/plugin-transform-reserved-words@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" + integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-runtime@^7.0.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz#2c64d0680fc8e09e1dfe8fd5c646fe72abd82004" - integrity sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ== + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz#dc58ad4a31810a890550365cc922e1ff5acb5d7f" + integrity sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" + "@babel/helper-module-imports" "^7.24.3" + "@babel/helper-plugin-utils" "^7.24.0" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-0", "@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-0", "@babel/plugin-transform-shorthand-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" + integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" + integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== +"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" + integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.0.0-0", "@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.0.0-0", "@babel/plugin-transform-template-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" + integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-typeof-symbol@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" + integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typescript@^7.23.3", "@babel/plugin-transform-typescript@^7.5.0": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz" - integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== +"@babel/plugin-transform-typescript@^7.24.1", "@babel/plugin-transform-typescript@^7.5.0": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz#03e0492537a4b953e491f53f2bc88245574ebd15" + integrity sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.4" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-typescript" "^7.24.1" -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-unicode-escapes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" + integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-unicode-property-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" + integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" + integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== +"@babel/plugin-transform-unicode-sets-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" + integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/preset-env@^7.20.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" - integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.4.tgz#46dbbcd608771373b88f956ffb67d471dce0d23b" + integrity sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A== dependencies: - "@babel/compat-data" "^7.23.5" + "@babel/compat-data" "^7.24.4" "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.4" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-assertions" "^7.24.1" + "@babel/plugin-syntax-import-attributes" "^7.24.1" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1114,69 +1086,69 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.9" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.8" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.9" - "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-arrow-functions" "^7.24.1" + "@babel/plugin-transform-async-generator-functions" "^7.24.3" + "@babel/plugin-transform-async-to-generator" "^7.24.1" + "@babel/plugin-transform-block-scoped-functions" "^7.24.1" + "@babel/plugin-transform-block-scoping" "^7.24.4" + "@babel/plugin-transform-class-properties" "^7.24.1" + "@babel/plugin-transform-class-static-block" "^7.24.4" + "@babel/plugin-transform-classes" "^7.24.1" + "@babel/plugin-transform-computed-properties" "^7.24.1" + "@babel/plugin-transform-destructuring" "^7.24.1" + "@babel/plugin-transform-dotall-regex" "^7.24.1" + "@babel/plugin-transform-duplicate-keys" "^7.24.1" + "@babel/plugin-transform-dynamic-import" "^7.24.1" + "@babel/plugin-transform-exponentiation-operator" "^7.24.1" + "@babel/plugin-transform-export-namespace-from" "^7.24.1" + "@babel/plugin-transform-for-of" "^7.24.1" + "@babel/plugin-transform-function-name" "^7.24.1" + "@babel/plugin-transform-json-strings" "^7.24.1" + "@babel/plugin-transform-literals" "^7.24.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" + "@babel/plugin-transform-member-expression-literals" "^7.24.1" + "@babel/plugin-transform-modules-amd" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-modules-systemjs" "^7.24.1" + "@babel/plugin-transform-modules-umd" "^7.24.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/plugin-transform-new-target" "^7.24.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" + "@babel/plugin-transform-numeric-separator" "^7.24.1" + "@babel/plugin-transform-object-rest-spread" "^7.24.1" + "@babel/plugin-transform-object-super" "^7.24.1" + "@babel/plugin-transform-optional-catch-binding" "^7.24.1" + "@babel/plugin-transform-optional-chaining" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-private-methods" "^7.24.1" + "@babel/plugin-transform-private-property-in-object" "^7.24.1" + "@babel/plugin-transform-property-literals" "^7.24.1" + "@babel/plugin-transform-regenerator" "^7.24.1" + "@babel/plugin-transform-reserved-words" "^7.24.1" + "@babel/plugin-transform-shorthand-properties" "^7.24.1" + "@babel/plugin-transform-spread" "^7.24.1" + "@babel/plugin-transform-sticky-regex" "^7.24.1" + "@babel/plugin-transform-template-literals" "^7.24.1" + "@babel/plugin-transform-typeof-symbol" "^7.24.1" + "@babel/plugin-transform-unicode-escapes" "^7.24.1" + "@babel/plugin-transform-unicode-property-regex" "^7.24.1" + "@babel/plugin-transform-unicode-regex" "^7.24.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" core-js-compat "^3.31.0" semver "^6.3.1" "@babel/preset-flow@^7.13.13": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz" - integrity sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.1.tgz#da7196c20c2d7dd4e98cfd8b192fe53b5eb6f0bb" + integrity sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-flow-strip-types" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-transform-flow-strip-types" "^7.24.1" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" @@ -1188,31 +1160,31 @@ esutils "^2.0.2" "@babel/preset-react@^7.22.15": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz" - integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.1.tgz#2450c2ac5cc498ef6101a6ca5474de251e33aa95" + integrity sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.23.3" - "@babel/plugin-transform-react-jsx" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-transform-react-display-name" "^7.24.1" + "@babel/plugin-transform-react-jsx" "^7.23.4" "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.23.3" + "@babel/plugin-transform-react-pure-annotations" "^7.24.1" "@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" + integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-syntax-jsx" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-typescript" "^7.24.1" "@babel/register@^7.13.16": version "7.23.7" - resolved "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== dependencies: clone-deep "^4.0.1" @@ -1223,13 +1195,13 @@ "@babel/regjsgen@^0.8.0": version "0.8.0" - resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0", "@babel/runtime@^7.24.0", "@babel/runtime@^7.8.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0", "@babel/runtime@^7.23.8", "@babel/runtime@^7.24.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== dependencies: regenerator-runtime "^0.14.0" @@ -1244,7 +1216,7 @@ "@babel/traverse@7.23.2": version "7.23.2" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== dependencies: "@babel/code-frame" "^7.22.13" @@ -1276,7 +1248,7 @@ "@babel/types@7.17.0": version "7.17.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== dependencies: "@babel/helper-validator-identifier" "^7.16.7" @@ -1284,7 +1256,7 @@ "@babel/types@7.19.0": version "7.19.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== dependencies: "@babel/helper-string-parser" "^7.18.10" @@ -1302,24 +1274,31 @@ "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@egjs/hammerjs@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124" + integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A== + dependencies: + "@types/hammerjs" "^2.0.36" + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": version "4.10.0" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== "@eslint/eslintrc@^2.1.4": version "2.1.4" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" @@ -1339,7 +1318,7 @@ "@expo/bunyan@^4.0.0": version "4.0.0" - resolved "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/bunyan/-/bunyan-4.0.0.tgz#be0c1de943c7987a9fbd309ea0b1acd605890c7b" integrity sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA== dependencies: uuid "^8.0.0" @@ -1431,7 +1410,7 @@ "@expo/code-signing-certificates@0.0.5": version "0.0.5" - resolved "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz" + resolved "https://registry.yarnpkg.com/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz#a693ff684fb20c4725dade4b88a6a9f96b02496c" integrity sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw== dependencies: node-forge "^1.2.1" @@ -1439,7 +1418,7 @@ "@expo/config-plugins@7.8.4", "@expo/config-plugins@~7.8.0", "@expo/config-plugins@~7.8.2": version "7.8.4" - resolved "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-7.8.4.tgz" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-7.8.4.tgz#533b5d536c1dc8b5544d64878b51bda28f2e1a1f" integrity sha512-hv03HYxb/5kX8Gxv/BTI8TLc9L06WzqAfHRRXdbar4zkLcP2oTzvsLEF4/L/TIpD3rsnYa0KU42d0gWRxzPCJg== dependencies: "@expo/config-types" "^50.0.0-alpha.1" @@ -1462,12 +1441,12 @@ "@expo/config-types@^50.0.0", "@expo/config-types@^50.0.0-alpha.1": version "50.0.0" - resolved "https://registry.npmjs.org/@expo/config-types/-/config-types-50.0.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-50.0.0.tgz#b534d3ec997ec60f8af24f6ad56244c8afc71a0b" integrity sha512-0kkhIwXRT6EdFDwn+zTg9R2MZIAEYGn1MVkyRohAd+C9cXOb5RA8WLQi7vuxKF9m1SMtNAUrf0pO+ENK0+/KSw== "@expo/config@8.5.4", "@expo/config@~8.5.0": version "8.5.4" - resolved "https://registry.npmjs.org/@expo/config/-/config-8.5.4.tgz" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-8.5.4.tgz#bb5eb06caa36e4e35dc8c7647fae63e147b830ca" integrity sha512-ggOLJPHGzJSJHVBC1LzwXwR6qUn8Mw7hkc5zEKRIdhFRuIQ6s2FE4eOvP87LrNfDF7eZGa6tJQYsiHSmZKG+8Q== dependencies: "@babel/code-frame" "~7.10.4" @@ -1484,7 +1463,7 @@ "@expo/devcert@^1.0.0": version "1.1.0" - resolved "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/devcert/-/devcert-1.1.0.tgz#d148eb9180db6753c438192e73a123fb13b662ac" integrity sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA== dependencies: application-config-path "^0.1.0" @@ -1502,19 +1481,19 @@ tslib "^2.4.0" "@expo/env@~0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@expo/env/-/env-0.2.2.tgz#49f589f32e9bae279a6509d7a02218c0f4e32a60" - integrity sha512-m9nGuaSpzdvMzevQ1H60FWgf4PG5s4J0dfKUzdAGnDu7sMUerY/yUeDaA4+OBo3vBwGVQ+UHcQS9vPSMBNaPcg== + version "0.2.3" + resolved "https://registry.yarnpkg.com/@expo/env/-/env-0.2.3.tgz#59ffe29ffe58f8ee9ee99581a6cb6e003831d469" + integrity sha512-a+uJ/e6MAVxPVVN/HbXU5qxzdqrqDwNQYxCfxtAufgmd5VZj54e5f3TJA3LEEUW3pTSZR8xK0H0EtVN297AZnw== dependencies: chalk "^4.0.0" debug "^4.3.4" - dotenv "~16.0.3" - dotenv-expand "~10.0.0" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" getenv "^1.0.0" "@expo/fingerprint@^0.6.0": version "0.6.0" - resolved "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.6.0.tgz#77366934673d4ecea37284109b4dd67f9e6a7487" integrity sha512-KfpoVRTMwMNJ/Cf5o+Ou8M/Y0EGSTqK+rbi70M2Y0K2qgWNfMJ1gm6sYO9uc8lcTr7YSYM1Rme3dk7QXhpScNA== dependencies: "@expo/spawn-async" "^1.5.0" @@ -1527,7 +1506,7 @@ "@expo/image-utils@^0.4.0": version "0.4.1" - resolved "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.4.1.tgz#78c54b8aaa974d0ac37fee5285683b54ff161b2c" integrity sha512-EZb+VHSmw+a5s2hS9qksTcWylY0FDaIAVufcxoaRS9tHIXLjW5zcKW7Rhj9dSEbZbRVy9yXXdHKa3GQdUQIOFw== dependencies: "@expo/spawn-async" "1.5.0" @@ -1543,7 +1522,7 @@ "@expo/json-file@^8.2.37", "@expo/json-file@~8.3.0": version "8.3.0" - resolved "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.3.0.tgz#fc84af77b532a4e9bfb5beafd0e3b7f692b6bd7e" integrity sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g== dependencies: "@babel/code-frame" "~7.10.4" @@ -1578,12 +1557,12 @@ "@expo/metro-runtime@3.1.3": version "3.1.3" - resolved "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/@expo/metro-runtime/-/metro-runtime-3.1.3.tgz#e29503808bd8ffeb706ef9a17b644230a379f298" integrity sha512-u1CaQJJlSgvxBB5NJ6YMVvSDTTRzjT71dHpEBnKPZhpFv5ebVry52FZ2sEeEEA6mHG5zGxWXmHImW3hNKHh8EA== "@expo/osascript@^2.0.31": version "2.1.0" - resolved "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/osascript/-/osascript-2.1.0.tgz#c407dfe839b5e898829d31e6accd962f91adac1c" integrity sha512-bOhuFnlRaS7CU33+rFFIWdcET/Vkyn1vsN8BYFwCDEF5P1fVVvYN7bFOsQLTMD3nvi35C1AGmtqUr/Wfv8Xaow== dependencies: "@expo/spawn-async" "^1.5.0" @@ -1591,7 +1570,7 @@ "@expo/package-manager@^1.1.1": version "1.4.2" - resolved "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.4.2.tgz" + resolved "https://registry.yarnpkg.com/@expo/package-manager/-/package-manager-1.4.2.tgz#8c12a9163c5ff7c7cc89806c4b75cff4974c57fc" integrity sha512-LKdo/6y4W7llZ6ghsg1kdx2CeH/qR/c6QI/JI8oPUvppsZoeIYjSkdflce978fAMfR8IXoi0wt0jA2w0kWpwbg== dependencies: "@expo/json-file" "^8.2.37" @@ -1609,7 +1588,7 @@ "@expo/plist@^0.1.0": version "0.1.0" - resolved "https://registry.npmjs.org/@expo/plist/-/plist-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.1.0.tgz#eabc95f951d14e10c87fd0443ee01d567371f058" integrity sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g== dependencies: "@xmldom/xmldom" "~0.7.7" @@ -1618,7 +1597,7 @@ "@expo/prebuild-config@6.7.4": version "6.7.4" - resolved "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-6.7.4.tgz" + resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-6.7.4.tgz#b3e4c8545d7a101bf1fc263c5b7290abc4635e69" integrity sha512-x8EUdCa8DTMZ/dtEXjHAdlP+ljf6oSeSKNzhycXiHhpMSMG9jEhV28ocCwc6cKsjK5GziweEiHwvrj6+vsBlhA== dependencies: "@expo/config" "~8.5.0" @@ -1634,7 +1613,7 @@ "@expo/rudder-sdk-node@1.1.1": version "1.1.1" - resolved "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz#6aa575f346833eb6290282118766d4919c808c6a" integrity sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ== dependencies: "@expo/bunyan" "^4.0.0" @@ -1647,12 +1626,12 @@ "@expo/sdk-runtime-versions@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== "@expo/server@^0.3.0": version "0.3.1" - resolved "https://registry.npmjs.org/@expo/server/-/server-0.3.1.tgz" + resolved "https://registry.yarnpkg.com/@expo/server/-/server-0.3.1.tgz#dbdb23af31877aeb35e8ea31a4962e128c8fa920" integrity sha512-cCKyVA2IR9J4hDFPXzj3L08+Ngd/7z2F+JtdW0NLy03qShXBI5NSEEcaiHtjrgsLXPDe9PBw5Xgsfmxuduyggg== dependencies: "@remix-run/node" "^1.19.3" @@ -1662,26 +1641,26 @@ "@expo/spawn-async@1.5.0": version "1.5.0" - resolved "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.5.0.tgz#799827edd8c10ef07eb1a2ff9dcfe081d596a395" integrity sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew== dependencies: cross-spawn "^6.0.5" "@expo/spawn-async@^1.5.0", "@expo/spawn-async@^1.7.2": version "1.7.2" - resolved "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz" + resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.7.2.tgz#fcfe66c3e387245e72154b1a7eae8cada6a47f58" integrity sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew== dependencies: cross-spawn "^7.0.3" "@expo/vector-icons@^14.0.0": version "14.0.0" - resolved "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.0.tgz" + resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-14.0.0.tgz#48ce0aa5c05873b07c0c78bfe16c870388f4de9a" integrity sha512-5orm59pdnBQlovhU9k4DbjMUZBHNlku7IRgFY56f7pcaaCnXq9yaLJoOQl9sMwNdFzf4gnkTyHmR5uN10mI9rA== "@expo/xcpretty@^4.3.0": version "4.3.1" - resolved "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/@expo/xcpretty/-/xcpretty-4.3.1.tgz#e0a6a92d1e46ab5ac5e90d9a8e66ac1a2a2f5920" integrity sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw== dependencies: "@babel/code-frame" "7.10.4" @@ -1691,29 +1670,44 @@ "@gar/promisify@^1.0.1": version "1.1.3" - resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@gorhom/bottom-sheet@^4": + version "4.6.1" + resolved "https://registry.yarnpkg.com/@gorhom/bottom-sheet/-/bottom-sheet-4.6.1.tgz#e45e2183246e338cf732fe4f8f2c91875b22ddce" + integrity sha512-sXqsYqX1/rAbmCC5fb9o6hwSF3KXriC0EGUGvLlhFvjaEEMBrRKFTNndiluRK1HmpUzazVaYdTm/lLkSiA2ooQ== + dependencies: + "@gorhom/portal" "1.0.14" + invariant "^2.2.4" + +"@gorhom/portal@1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@gorhom/portal/-/portal-1.0.14.tgz#1953edb76aaba80fb24021dc774550194a18e111" + integrity sha512-MXyL4xvCjmgaORr/rtryDNFy3kU4qUbKlwtQqqsygd0xX3mhKjOLn6mQK8wfu0RkoE0pBE0nAasRoHua+/QZ7A== + dependencies: + nanoid "^3.3.1" + "@graphql-typed-document-node/core@^3.1.0": version "3.2.0" - resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" - resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== "@hapi/topo@^5.1.0": version "5.1.0" - resolved "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== dependencies: "@hapi/hoek" "^9.0.0" "@humanwhocodes/config-array@^0.11.14": version "0.11.14" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: "@humanwhocodes/object-schema" "^2.0.2" @@ -1722,17 +1716,17 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -1744,12 +1738,12 @@ "@isaacs/ttlcache@^1.4.1": version "1.4.1" - resolved "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz#21fb23db34e9b6220c6ba023a0118a2dd3461ea2" integrity sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -1760,12 +1754,12 @@ "@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: "@jest/types" "^29.6.3" @@ -1777,7 +1771,7 @@ "@jest/core@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: "@jest/console" "^29.7.0" @@ -1811,14 +1805,14 @@ "@jest/create-cache-key-function@^29.2.1", "@jest/create-cache-key-function@^29.6.3": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0" integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== dependencies: "@jest/types" "^29.6.3" "@jest/environment@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: "@jest/fake-timers" "^29.7.0" @@ -1828,14 +1822,14 @@ "@jest/expect-utils@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: jest-get-type "^29.6.3" "@jest/expect@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== dependencies: expect "^29.7.0" @@ -1843,7 +1837,7 @@ "@jest/fake-timers@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: "@jest/types" "^29.6.3" @@ -1855,7 +1849,7 @@ "@jest/globals@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: "@jest/environment" "^29.7.0" @@ -1865,7 +1859,7 @@ "@jest/reporters@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -1895,14 +1889,14 @@ "@jest/schemas@^29.6.3": version "29.6.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" "@jest/source-map@^29.6.3": version "29.6.3" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: "@jridgewell/trace-mapping" "^0.3.18" @@ -1911,7 +1905,7 @@ "@jest/test-result@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: "@jest/console" "^29.7.0" @@ -1921,7 +1915,7 @@ "@jest/test-sequencer@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: "@jest/test-result" "^29.7.0" @@ -1931,7 +1925,7 @@ "@jest/transform@^29.7.0": version "29.7.0" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" @@ -1952,7 +1946,7 @@ "@jest/types@^26.6.2": version "26.6.2" - resolved "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" @@ -1963,7 +1957,7 @@ "@jest/types@^29.6.3": version "29.6.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: "@jest/schemas" "^29.6.3" @@ -1973,16 +1967,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== @@ -1993,41 +1978,28 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - "@jridgewell/set-array@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.22" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" - integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -2037,14 +2009,14 @@ "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" - resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== dependencies: eslint-scope "5.1.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -2052,12 +2024,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -2065,7 +2037,7 @@ "@npmcli/fs@^1.0.0": version "1.1.1" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" @@ -2073,7 +2045,7 @@ "@npmcli/move-file@^1.0.1": version "1.1.2" - resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: mkdirp "^1.0.4" @@ -2081,7 +2053,7 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@pkgr/core@^0.1.0": @@ -2091,14 +2063,14 @@ "@radix-ui/react-compose-refs@1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz#37595b1f16ec7f228d698590e78eeed18ff218ae" integrity sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA== dependencies: "@babel/runtime" "^7.13.10" "@radix-ui/react-slot@1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.1.tgz#e7868c669c974d649070e9ecbec0b367ee0b4d81" integrity sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw== dependencies: "@babel/runtime" "^7.13.10" @@ -2257,7 +2229,7 @@ "@react-native-community/eslint-config@^3.2.0": version "3.2.0" - resolved "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-3.2.0.tgz#42f677d5fff385bccf1be1d3b8faa8c086cf998d" integrity sha512-ZjGvoeiBtCbd506hQqwjKmkWPgynGUoJspG8/MuV/EfKnkjCtBmeJvq2n+sWbWEvL9LWXDp2GJmPzmvU5RSvKQ== dependencies: "@babel/core" "^7.14.0" @@ -2276,29 +2248,34 @@ "@react-native-community/eslint-plugin@^1.1.0": version "1.3.0" - resolved "https://registry.npmjs.org/@react-native-community/eslint-plugin/-/eslint-plugin-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/@react-native-community/eslint-plugin/-/eslint-plugin-1.3.0.tgz#9e558170c106bbafaa1ef502bd8e6d4651012bf9" integrity sha512-+zDZ20NUnSWghj7Ku5aFphMzuM9JulqCW+aPXT6IfIXFbb8tzYTTOSeRFOtuekJ99ibW2fUCSsjuKNlwDIbHFg== -"@react-native-menu/menu@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@react-native-menu/menu/-/menu-0.9.1.tgz#aff9f327938dbb7dc44eeabc00da4d2d8e1a4222" - integrity sha512-PdZoN1P72ESQ7UTzm5YI4W+87KU5mv7vVJ3GsQVRtnrzzuVskfp5E9ds1biGClcTieXAdIZ7hvPD1HHHZPobdg== +"@react-native-community/masked-view@^0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.11.tgz#2f4c6e10bee0786abff4604e39a37ded6f3980ce" + integrity sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw== + +"@react-native-menu/menu@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@react-native-menu/menu/-/menu-1.0.0.tgz#10a7ef82752bd0a297c5d1886e22d47f0cf2900a" + integrity sha512-DFtREX4I4w4Vh89ohnhvxzYtf4iPmJVILpTbpBOx0iDuVO94NFF1pqtULdlhzdqeJlyuE1FwTlBifziD9ZBx6g== "@react-native/assets-registry@0.73.1", "@react-native/assets-registry@~0.73.1": version "0.73.1" - resolved "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.73.1.tgz" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.73.1.tgz#e2a6b73b16c183a270f338dc69c36039b3946e85" integrity sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg== "@react-native/babel-plugin-codegen@0.73.4": version "0.73.4" - resolved "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz#8a2037d5585b41877611498ae66adbf1dddfec1b" integrity sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ== dependencies: "@react-native/codegen" "0.73.3" "@react-native/babel-preset@0.73.21", "@react-native/babel-preset@^0.73.18": version "0.73.21" - resolved "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.73.21.tgz" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.73.21.tgz#174c16493fa4e311b2f5f0c58d4f3c6a5a68bbea" integrity sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA== dependencies: "@babel/core" "^7.20.0" @@ -2346,7 +2323,7 @@ "@react-native/codegen@0.73.3": version "0.73.3" - resolved "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.73.3.tgz" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.73.3.tgz#cc984a8b17334d986cc600254a0d4b7fa7d68a94" integrity sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg== dependencies: "@babel/parser" "^7.20.0" @@ -2376,7 +2353,7 @@ "@react-native/debugger-frontend@0.73.3": version "0.73.3" - resolved "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz#033757614d2ada994c68a1deae78c1dd2ad33c2b" integrity sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw== "@react-native/dev-middleware@0.73.8", "@react-native/dev-middleware@^0.73.6": @@ -2398,12 +2375,12 @@ "@react-native/gradle-plugin@0.73.4": version "0.73.4" - resolved "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz#aa55784a8c2b471aa89934db38c090d331baf23b" integrity sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg== "@react-native/js-polyfills@0.73.1": version "0.73.1" - resolved "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz#730b0a7aaab947ae6f8e5aa9d995e788977191ed" integrity sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g== "@react-native/metro-babel-transformer@0.73.15": @@ -2418,28 +2395,28 @@ "@react-native/normalize-color@^2.0.0", "@react-native/normalize-color@^2.1.0": version "2.1.0" - resolved "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.1.0.tgz#939b87a9849e81687d3640c5efa2a486ac266f91" integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== "@react-native/normalize-colors@0.73.2", "@react-native/normalize-colors@^0.73.0": version "0.73.2" - resolved "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz#cc8e48fbae2bbfff53e12f209369e8d2e4cf34ec" integrity sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w== "@react-native/virtualized-lists@0.73.4": version "0.73.4" - resolved "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz#640e594775806f63685435b5d9c3d05c378ccd8c" integrity sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" "@react-navigation/bottom-tabs@~6.5.7": - version "6.5.12" - resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.12.tgz#73adce8b147debe909985257bf436757894e99f6" - integrity sha512-8gBHHvgmJSRGfQ5fcFUgDFcXj1MzDzEZJ/llDYvcSb6ZxgN5xVq+4oVkwPMxOM6v+Qm2nKvXiUKuB/YydhzpLw== + version "6.5.20" + resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz#5335e75b02c527ef0569bd97d4f9185d65616e49" + integrity sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA== dependencies: - "@react-navigation/elements" "^1.3.22" + "@react-navigation/elements" "^1.3.30" color "^4.2.3" warn-once "^0.1.0" @@ -2455,17 +2432,17 @@ react-is "^16.13.0" use-latest-callback "^0.1.9" -"@react-navigation/elements@^1.3.22": - version "1.3.29" - resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.29.tgz#1dcbd95c319a8990d66e2aef8e108198d7a93cb2" - integrity sha512-sMkqqQHlxdBxrBVw6E2a3LJjb9Hrb1ola8+zRgJn4Ox8iKtjqtWEdg349DPWU77VpIekcMLsqQvEtZox3XkXgA== +"@react-navigation/elements@^1.3.30": + version "1.3.30" + resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.30.tgz#a81371f599af1070b12014f05d6c09b1a611fd9a" + integrity sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ== "@react-navigation/native-stack@~6.9.12": - version "6.9.18" - resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-6.9.18.tgz#60380b058bf916f69db46cdb32b3127d0589f055" - integrity sha512-PSe0qjROy8zD78ehW048NSuzWRktioSCJmB8LzWSR65ndgVaC2rO+xvgyjhHjqm01YdyVM1XTct2EorSjDV2Ow== + version "6.9.26" + resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-6.9.26.tgz#90facf7783c9927f094bc9f01c613af75b6c241e" + integrity sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw== dependencies: - "@react-navigation/elements" "^1.3.22" + "@react-navigation/elements" "^1.3.30" warn-once "^0.1.0" "@react-navigation/native@^6.1.17", "@react-navigation/native@~6.1.6": @@ -2480,14 +2457,23 @@ "@react-navigation/routers@^6.1.9": version "6.1.9" - resolved "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.9.tgz" + resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-6.1.9.tgz#73f5481a15a38e36592a0afa13c3c064b9f90bed" integrity sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA== dependencies: nanoid "^3.1.23" +"@react-navigation/stack@^6.3.29": + version "6.3.29" + resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-6.3.29.tgz#b03b2f2baa36c06e4c9e8c7da80d62f83ad0b835" + integrity sha512-tzlGkoRgB6P7vgw7rHuWo3TL7Gzu6xh5LMf+zSdCuEiKp/qASzxYfnTEr9tOLbVs/gf+qeukEDheCSAJKVpBXw== + dependencies: + "@react-navigation/elements" "^1.3.30" + color "^4.2.3" + warn-once "^0.1.0" + "@remix-run/node@^1.19.3": version "1.19.3" - resolved "https://registry.npmjs.org/@remix-run/node/-/node-1.19.3.tgz" + resolved "https://registry.yarnpkg.com/@remix-run/node/-/node-1.19.3.tgz#d27e2f742fc45379525cb3fca466a883ca06d6c9" integrity sha512-z5qrVL65xLXIUpU4mkR4MKlMeKARLepgHAk4W5YY3IBXOreRqOGUC70POViYmY7x38c2Ia1NwqL80H+0h7jbMw== dependencies: "@remix-run/server-runtime" "1.19.3" @@ -2502,12 +2488,12 @@ "@remix-run/router@1.7.2": version "1.7.2" - resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.2.tgz#cba1cf0a04bc04cb66027c51fa600e9cbc388bc8" integrity sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A== "@remix-run/server-runtime@1.19.3": version "1.19.3" - resolved "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-1.19.3.tgz" + resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-1.19.3.tgz#206b55337c266c5bc254878f8ff3cd5677cc60fb" integrity sha512-KzQ+htUsKqpBgKE2tWo7kIIGy3MyHP58Io/itUPvV+weDjApwr9tQr9PZDPA3yAY6rAzLax7BU0NMSYCXWFY5A== dependencies: "@remix-run/router" "1.7.2" @@ -2519,7 +2505,7 @@ "@remix-run/web-blob@^3.1.0": version "3.1.0" - resolved "https://registry.npmjs.org/@remix-run/web-blob/-/web-blob-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/@remix-run/web-blob/-/web-blob-3.1.0.tgz#e0c669934c1eb6028960047e57a13ed38bbfb434" integrity sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g== dependencies: "@remix-run/web-stream" "^1.1.0" @@ -2527,7 +2513,7 @@ "@remix-run/web-fetch@^4.3.6": version "4.4.2" - resolved "https://registry.npmjs.org/@remix-run/web-fetch/-/web-fetch-4.4.2.tgz" + resolved "https://registry.yarnpkg.com/@remix-run/web-fetch/-/web-fetch-4.4.2.tgz#ce7aedef72cc26e15060e8cf84674029f92809b6" integrity sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA== dependencies: "@remix-run/web-blob" "^3.1.0" @@ -2541,28 +2527,28 @@ "@remix-run/web-file@^3.0.3", "@remix-run/web-file@^3.1.0": version "3.1.0" - resolved "https://registry.npmjs.org/@remix-run/web-file/-/web-file-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/@remix-run/web-file/-/web-file-3.1.0.tgz#07219021a2910e90231bc30ca1ce693d0e9d3825" integrity sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ== dependencies: "@remix-run/web-blob" "^3.1.0" "@remix-run/web-form-data@^3.1.0": version "3.1.0" - resolved "https://registry.npmjs.org/@remix-run/web-form-data/-/web-form-data-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/@remix-run/web-form-data/-/web-form-data-3.1.0.tgz#47f9ad8ce8bf1c39ed83eab31e53967fe8e3df6a" integrity sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A== dependencies: web-encoding "1.1.5" "@remix-run/web-stream@^1.0.4", "@remix-run/web-stream@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@remix-run/web-stream/-/web-stream-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@remix-run/web-stream/-/web-stream-1.1.0.tgz#b93a8f806c2c22204930837c44d81fdedfde079f" integrity sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA== dependencies: web-streams-polyfill "^3.1.1" "@segment/loosely-validate-event@^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681" integrity sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw== dependencies: component-type "^1.2.1" @@ -2577,17 +2563,17 @@ "@sideway/formula@^3.0.1": version "3.0.1" - resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== "@sideway/pinpoint@^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== "@sinclair/typebox@^0.27.8": version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinonjs/commons@^3.0.0": @@ -2599,7 +2585,7 @@ "@sinonjs/fake-timers@^10.0.2": version "10.3.0" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" @@ -2702,20 +2688,20 @@ integrity sha512-WgPTRs58hm9CMzEr5jpISe8HXa3qKQ8CxewdYZeVnA54JrPY9B1CZiwsCoLpLkf0dGRZq+LcX5OiJb0bEsOFww== "@tanstack/react-query@^5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.29.0.tgz#42b3a2de4ed1d63666f0af04392a34b5e70d49c0" - integrity sha512-yxlhHB73jaBla6h5B6zPaGmQjokkzAhMHN4veotkPNiQ3Ac/mCxgABRZPsJJrgCTvhpcncBZcDBFxaR2B37vug== + version "5.29.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.29.2.tgz#c55ffbfaf9d8cf34212428db2b6c61ca6b545188" + integrity sha512-nyuWILR4u7H5moLGSiifLh8kIqQDLNOHGuSz0rcp+J75fNc8aQLyr5+I2JCHU3n+nJrTTW1ssgAD8HiKD7IFBQ== dependencies: "@tanstack/query-core" "5.29.0" "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@trivago/prettier-plugin-sort-imports@^4.3.0": version "4.3.0" - resolved "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz#725f411646b3942193a37041c84e0b2116339789" integrity sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ== dependencies: "@babel/generator" "7.17.7" @@ -2732,7 +2718,7 @@ "@types/babel__core@^7.1.14": version "7.20.5" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" @@ -2743,14 +2729,14 @@ "@types/babel__generator@*": version "7.6.8" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.4" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" @@ -2758,45 +2744,55 @@ "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.20.5" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" "@types/cookie@^0.4.1": version "0.4.1" - resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== +"@types/geojson@^7946.0.13": + version "7946.0.14" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.14.tgz#319b63ad6df705ee2a65a73ef042c8271e696613" + integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== + "@types/graceful-fs@^4.1.3": version "4.1.9" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" +"@types/hammerjs@^2.0.36": + version "2.0.45" + resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.45.tgz#ffa764bb68a66c08db6efb9c816eb7be850577b1" + integrity sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": version "3.0.3" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/jsdom@^20.0.0": version "20.0.1" - resolved "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== dependencies: "@types/node" "*" @@ -2805,25 +2801,25 @@ "@types/json-schema@^7.0.9": version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/node@*": - version "20.11.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" - integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== dependencies: undici-types "~5.26.4" "@types/prop-types@*": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/react@~18.2.74": - version "18.2.74" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.74.tgz#2d52eb80e4e7c4ea8812c89181d6d590b53f958c" - integrity sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw== +"@types/react@~18.2.78": + version "18.2.79" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.79.tgz#c40efb4f255711f554d47b449f796d1c7756d865" + integrity sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -2965,11 +2961,11 @@ wonka "^4.0.14" "@urql/core@>=2.3.1": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@urql/core/-/core-4.3.0.tgz#5e150412ed08d167861b05ceed417abbd048553f" - integrity sha512-wT+FeL8DG4x5o6RfHEnONNFVDM3616ouzATMYUClB6CB+iIu2mwfBKd7xSUxYOZmwtxna5/hDRQdMl3nbQZlnw== + version "5.0.0" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-5.0.0.tgz#690e664cf66f733077c558bf685adbdac2b25823" + integrity sha512-kFkZxusq/VBQKEUcQFtf7AilMotLO+oGpE4WFhCiminZm8ZU2aulXSDWla50TaD0pj704FnWlXts6lRm0uHdDg== dependencies: - "@0no-co/graphql.web" "^1.0.1" + "@0no-co/graphql.web" "^1.0.5" wonka "^6.3.2" "@urql/exchange-retry@0.3.0": @@ -3115,11 +3111,9 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: type-fest "^0.21.3" ansi-escapes@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" - integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== - dependencies: - type-fest "^3.0.0" + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz#76c54ce9b081dad39acec4b5d53377913825fb0f" + integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig== ansi-fragments@^0.2.1: version "0.2.1" @@ -3218,14 +3212,15 @@ array-buffer-byte-length@^1.0.1: is-array-buffer "^3.0.4" array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^2.1.0: @@ -3234,14 +3229,15 @@ array-union@^2.1.0: integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.findlast@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36" - integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.2" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1: @@ -3321,13 +3317,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3393,7 +3382,7 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.8: +babel-plugin-polyfill-corejs2@^0.4.10: version "0.4.10" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== @@ -3402,20 +3391,20 @@ babel-plugin-polyfill-corejs2@^0.4.8: "@babel/helper-define-polyfill-provider" "^0.6.1" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" - integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== +babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - core-js-compat "^3.34.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" -babel-plugin-polyfill-regenerator@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" - integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" + integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" babel-plugin-react-native-web@~0.18.10: version "0.18.12" @@ -3525,15 +3514,15 @@ better-opn@~3.0.2: dependencies: open "^8.0.4" -big-integer@1.6.x: +big-integer@1.6.x, big-integer@^1.6.16: version "1.6.52" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^4.1.0: version "4.1.0" @@ -3597,7 +3586,21 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.22.2, browserslist@^4.22.3: +broadcast-channel@^3.4.1: + version "3.7.0" + resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" + integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== + dependencies: + "@babel/runtime" "^7.7.2" + detect-node "^2.1.0" + js-sha3 "0.8.0" + microseconds "0.2.0" + nano-time "1.0.0" + oblivious-set "1.0.0" + rimraf "3.0.2" + unload "2.2.0" + +browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -3735,9 +3738,9 @@ camelize@^1.0.0: integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== caniuse-lite@^1.0.30001587: - version "1.0.30001597" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" - integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== + version "1.0.30001610" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz#2f44ed6e21d359e914271ae35b68903632628ccf" + integrity sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA== chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" @@ -4068,12 +4071,12 @@ cookie@^0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.31.0, core-js-compat@^3.34.0: - version "3.36.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" - integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== +core-js-compat@^3.31.0, core-js-compat@^3.36.1: + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" + integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== dependencies: - browserslist "^4.22.3" + browserslist "^4.23.0" core-util-is@~1.0.0: version "1.0.3" @@ -4113,6 +4116,14 @@ create-jest@^29.7.0: jest-util "^29.7.0" prompts "^2.0.1" +create-react-class@^15.6.0: + version "15.7.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" + integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + cross-fetch@^3.1.5: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" @@ -4274,6 +4285,33 @@ data-urls@^3.0.2: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + dayjs@^1.8.15: version "1.11.10" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" @@ -4316,9 +4354,9 @@ decode-uri-component@^0.2.0, decode-uri-component@^0.2.2: integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== deep-extend@^0.6.0: version "0.6.0" @@ -4426,6 +4464,11 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-node@^2.0.4, detect-node@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -4507,15 +4550,17 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dotenv-expand@~10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" - integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== +dotenv-expand@~11.0.6: + version "11.0.6" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.6.tgz#f2c840fd924d7c77a94eff98f153331d876882d3" + integrity sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g== + dependencies: + dotenv "^16.4.4" -dotenv@~16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== +dotenv@^16.4.4, dotenv@~16.4.5: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== eastasianwidth@^0.2.0: version "0.2.0" @@ -4528,9 +4573,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.668: - version "1.4.703" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.703.tgz#786ab0c8cfe548b9da03890f923e69b1ae522741" - integrity sha512-094ZZC4nHXPKl/OwPinSMtLN9+hoFkdfQGKnvXbY+3WEAYtVDpz9UhJIViiY6Zb8agvqxiaJzNG9M+pRZWvSZw== + version "1.4.737" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.737.tgz#3a774a58e04980741f65d440f5fdf57af18b6dde" + integrity sha512-QvLTxaLHKdy5YxvixAw/FfHq2eWLUL9KvsPjp0aHK1gI5d3EDuDgITkvj0nFO2c6zUY3ZqVAJQiBYyQP9tQpfw== emittery@^0.13.1: version "0.13.1" @@ -4570,9 +4615,9 @@ env-editor@^0.4.1: integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA== envinfo@^7.10.0: - version "7.11.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" - integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== + version "7.12.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.12.0.tgz#b56723b39c2053d67ea5714f026d05d4f5cc7acd" + integrity sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg== eol@^0.9.1: version "0.9.1" @@ -4601,17 +4646,21 @@ errorhandler@^1.5.1: accepts "~1.3.7" escape-html "~1.0.3" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: - version "1.22.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" - integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" available-typed-arrays "^1.0.7" call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" es-define-property "^1.0.0" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" @@ -4622,10 +4671,11 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.1" + hasown "^2.0.2" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" + is-data-view "^1.0.1" is-negative-zero "^2.0.3" is-regex "^1.1.4" is-shared-array-buffer "^1.0.3" @@ -4636,17 +4686,17 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: object-keys "^1.1.1" object.assign "^4.1.5" regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" typed-array-buffer "^1.0.2" typed-array-byte-length "^1.0.1" typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.5" + typed-array-length "^1.0.6" unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" + which-typed-array "^1.1.15" es-define-property@^1.0.0: version "1.0.0" @@ -4655,33 +4705,39 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-iterator-helpers@^1.0.17: - version "1.0.17" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" - integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== + version "1.0.18" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" + integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== dependencies: - asynciterator.prototype "^1.0.0" call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.4" + es-abstract "^1.23.0" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" function-bind "^1.1.2" get-intrinsic "^1.2.4" globalthis "^1.0.3" has-property-descriptors "^1.0.2" - has-proto "^1.0.1" + has-proto "^1.0.3" has-symbols "^1.0.3" internal-slot "^1.0.7" iterator.prototype "^1.1.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" -es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3: +es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -4803,9 +4859,9 @@ eslint-plugin-react-native@^4.0.0: eslint-plugin-react-native-globals "^0.1.1" eslint-plugin-react@^7.30.1: - version "7.34.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz#ab71484d54fc409c37025c5eca00eb4177a5e88c" - integrity sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ== + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== dependencies: array-includes "^3.1.7" array.prototype.findlast "^1.2.4" @@ -5088,6 +5144,11 @@ expo-font@~11.10.2, expo-font@~11.10.3: dependencies: fontfaceobserver "^2.1.0" +expo-haptics@~12.8.1: + version "12.8.1" + resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-12.8.1.tgz#42b996763be33d661bd33bbc3b3958c3f2734b9d" + integrity sha512-ntLsHkfle8K8w9MW8pZEw92ZN3sguaGUSSIxv30fPKNeQFu7Cq/h47Qv3tONv2MO3wU48N9FbKnant6XlfptpA== + expo-json-utils@~0.12.0: version "0.12.3" resolved "https://registry.yarnpkg.com/expo-json-utils/-/expo-json-utils-0.12.3.tgz#cabb704a344d6d75f225cf4032c64479e442a2a9" @@ -5126,10 +5187,10 @@ expo-modules-autolinking@1.10.3: find-up "^5.0.0" fs-extra "^9.1.0" -expo-modules-core@1.11.12: - version "1.11.12" - resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.11.12.tgz#d5c7b3ed7ab57d4fb6885a0d8e10287dcf1ffe5f" - integrity sha512-/e8g4kis0pFLer7C0PLyx98AfmztIM6gU9jLkYnB1pU9JAfQf904XEi3bmszO7uoteBQwSL6FLp1m3TePKhDaA== +expo-modules-core@1.11.13: + version "1.11.13" + resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.11.13.tgz#a8e63ad844e966dce78dea40b50839af6c3bc518" + integrity sha512-2H5qrGUvmLzmJNPDOnovH1Pfk5H/S/V0BifBmOQyDc9aUh9LaDwkqnChZGIXv8ZHDW8JRlUW0QqyWxTggkbw1A== dependencies: invariant "^2.2.4" @@ -5187,9 +5248,9 @@ expo-web-browser@~12.8.0, expo-web-browser@~12.8.2: url "^0.11.0" expo@^50.0.14: - version "50.0.14" - resolved "https://registry.yarnpkg.com/expo/-/expo-50.0.14.tgz#ddcae86aa0ba8d1be3da9ad1bdda23fa539dc97d" - integrity sha512-yLPdxCMVAbmeEIpzzyAuJ79wvr6ToDDtQmuLDMAgWtjqP8x3CGddXxUe07PpKEQgzwJabdHvCLP5Bv94wMFIjQ== + version "50.0.15" + resolved "https://registry.yarnpkg.com/expo/-/expo-50.0.15.tgz#18c5c3ee0125fd42fe828b6791410eed68f7e74a" + integrity sha512-tsyRmMHjA8lPlM7AsqH1smSH8hzmn1+x/vsP+xgbKYJTGtYccdY/wsm6P84VJWeK5peWSVqrWNos+YuPqXKLSQ== dependencies: "@babel/runtime" "^7.20.0" "@expo/cli" "0.17.8" @@ -5203,7 +5264,7 @@ expo@^50.0.14: expo-font "~11.10.3" expo-keep-awake "~12.8.2" expo-modules-autolinking "1.10.3" - expo-modules-core "1.11.12" + expo-modules-core "1.11.13" fbemitter "^3.0.0" whatwg-url-without-unicode "8.0.0-3" @@ -5222,7 +5283,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0: +fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -5249,9 +5310,9 @@ fast-loops@^1.1.3: integrity sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g== fast-xml-parser@^4.0.12, fast-xml-parser@^4.2.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz#e2f2a2ae8377e9c3dc321b151e58f420ca7e5ccc" - integrity sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ== + version "4.3.6" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz#190f9d99097f0c8f2d3a0e681a10404afca052ff" + integrity sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw== dependencies: strnum "^1.0.5" @@ -5390,9 +5451,9 @@ flow-enums-runtime@^0.0.6: integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: - version "0.230.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.230.0.tgz#f0e54bdac58a20553bb81ef26bdc8a616360f1cd" - integrity sha512-ZAfKaarESYYcP/RoLdM91vX0u/1RR7jI5TJaFLnxwRlC2mp0o+Rw7ipIY7J6qpIpQYtAobWb/J6S0XPeu0gO8g== + version "0.233.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.233.0.tgz#b983e65812d5ecae79f08ae3ed8ad2e131a9b966" + integrity sha512-E/mv51GYJfLuRX6fZnw4M52gBxYa8pkHUOgNEZOcQK2RTXS8YXeU5rlalkTcY99UpwbeNVCSUFKaavpOksi/pQ== flow-parser@^0.206.0: version "0.206.0" @@ -5602,15 +5663,15 @@ glob@7.1.6: path-is-absolute "^1.0.0" glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + version "10.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" + jackspeak "^2.3.6" minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + minipass "^7.0.4" + path-scurry "^1.10.2" glob@^6.0.1: version "6.0.4" @@ -5734,7 +5795,7 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -hasown@^2.0.0, hasown@^2.0.1: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -5746,10 +5807,10 @@ hermes-estree@0.15.0: resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.15.0.tgz#e32f6210ab18c7b705bdcb375f7700f2db15d6ba" integrity sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ== -hermes-estree@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.19.1.tgz#d5924f5fac2bf0532547ae9f506d6db8f3c96392" - integrity sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g== +hermes-estree@0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.20.1.tgz#0b9a544cf883a779a8e1444b915fa365bef7f72d" + integrity sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg== hermes-parser@0.15.0: version "0.15.0" @@ -5758,12 +5819,12 @@ hermes-parser@0.15.0: dependencies: hermes-estree "0.15.0" -hermes-parser@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.19.1.tgz#1044348097165b7c93dc198a80b04ed5130d6b1a" - integrity sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A== +hermes-parser@0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.20.1.tgz#ad10597b99f718b91e283f81cbe636c50c3cff92" + integrity sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA== dependencies: - hermes-estree "0.19.1" + hermes-estree "0.20.1" hermes-profile-transformer@^0.0.6: version "0.0.6" @@ -5772,6 +5833,13 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + hosted-git-info@^3.0.2: version "3.0.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" @@ -5918,6 +5986,11 @@ inline-style-prefixer@^6.0.1: css-in-js-utils "^3.1.0" fast-loops "^1.1.3" +install@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/install/-/install-0.13.0.tgz#6af6e9da9dd0987de2ab420f78e60d9c17260776" + integrity sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA== + internal-ip@4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -5926,7 +5999,7 @@ internal-ip@4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -internal-slot@^1.0.5, internal-slot@^1.0.7: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -6024,6 +6097,13 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -6334,7 +6414,7 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -jackspeak@^2.3.5: +jackspeak@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== @@ -6765,15 +6845,15 @@ jimp-compact@0.16.1: resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3" integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww== -jiti@^1.21.0: +jiti@^1.18.2: version "1.21.0" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== joi@^17.2.1: - version "17.12.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.2.tgz#283a664dabb80c7e52943c557aab82faea09f521" - integrity sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw== + version "17.12.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.3.tgz#944646979cd3b460178547b12ba37aca8482f63d" + integrity sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g== dependencies: "@hapi/hoek" "^9.3.0" "@hapi/topo" "^5.1.0" @@ -6786,6 +6866,11 @@ join-component@^1.1.0: resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ== +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -7133,7 +7218,7 @@ logkitty@^0.7.1: dayjs "^1.8.15" yargs "^15.1.0" -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -7147,6 +7232,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -7161,11 +7251,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -7193,6 +7278,14 @@ marky@^1.2.2: resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" integrity sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q== +match-sorter@^6.0.2: + version "6.3.4" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.4.tgz#afa779d8e922c81971fbcb4781c7003ace781be7" + integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg== + dependencies: + "@babel/runtime" "^7.23.8" + remove-accents "0.5.0" + md5-file@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f" @@ -7263,53 +7356,53 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-transformer@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.80.6.tgz#49df74af71ecc9871636cf469726debcb5a1c858" - integrity sha512-ssuoVC4OzqaOt3LpwfUbDfBlFGRu9v1Yf2JJnKPz0ROYHNjSBws4aUesqQQ/Ea8DbiH7TK4j4cJmm+XjdHmgqA== +metro-babel-transformer@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.80.8.tgz#2951eeab76630b3c59f3874d04f4f12a6e73b2bd" + integrity sha512-TTzNwRZb2xxyv4J/+yqgtDAP2qVqH3sahsnFu6Xv4SkLqzrivtlnyUbaeTdJ9JjtADJUEjCbgbFgUVafrXdR9Q== dependencies: "@babel/core" "^7.20.0" - hermes-parser "0.19.1" + hermes-parser "0.20.1" nullthrows "^1.1.1" -metro-cache-key@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.80.6.tgz#48fe84477f6408478a33c363a8f5eaceea5cf853" - integrity sha512-DFmjQacC8m/S3HpELklLMWkPGP/fZPX3BSgjd0xQvwIvWyFwk8Nn/lfp/uWdEVDtDSIr64/anXU5uWohGwlWXw== +metro-cache-key@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.80.8.tgz#d57af9c25f9fe7e755644594d602ef89124ee06b" + integrity sha512-qWKzxrLsRQK5m3oH8ePecqCc+7PEhR03cJE6Z6AxAj0idi99dHOSitTmY0dclXVB9vP2tQIAE8uTd8xkYGk8fA== -metro-cache@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.80.6.tgz#05fdd83482f4132243b27713716c289532bd41c3" - integrity sha512-NP81pHSPkzs+iNlpVkJqijrpcd6lfuDAunYH9/Rn8oLNz0yLfkl8lt+xOdUU4IkFt3oVcTBEFCnzAzv4B8YhyA== +metro-cache@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.80.8.tgz#bc7d38611e4f31686a99045d4f2956c0bff4dd3b" + integrity sha512-5svz+89wSyLo7BxdiPDlwDTgcB9kwhNMfNhiBZPNQQs1vLFXxOkILwQiV5F2EwYT9DEr6OPZ0hnJkZfRQ8lDYQ== dependencies: - metro-core "0.80.6" + metro-core "0.80.8" rimraf "^3.0.2" -metro-config@0.80.6, metro-config@^0.80.3: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.80.6.tgz#b404e2f24b22c9c683abcf8da3efa8c87e382ad7" - integrity sha512-vHYYvJpRTWYbmvqlR7i04xQpZCHJ6yfZ/xIcPdz2ssbdJGGJbiT1Aar9wr8RAhsccSxdJgfE5B1DB8Mo+DnhIg== +metro-config@0.80.8, metro-config@^0.80.3: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.80.8.tgz#1961feed6334601951ea72600901dafade56a973" + integrity sha512-VGQJpfJawtwRzGzGXVUoohpIkB0iPom4DmSbAppKfumdhtLA8uVeEPp2GM61kL9hRvdbMhdWA7T+hZFDlo4mJA== dependencies: connect "^3.6.5" cosmiconfig "^5.0.5" jest-validate "^29.6.3" - metro "0.80.6" - metro-cache "0.80.6" - metro-core "0.80.6" - metro-runtime "0.80.6" + metro "0.80.8" + metro-cache "0.80.8" + metro-core "0.80.8" + metro-runtime "0.80.8" -metro-core@0.80.6, metro-core@^0.80.3: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.80.6.tgz#b13fa98417e70203d2533c5d0f5c4d541f3d9fbe" - integrity sha512-fn4rryTUAwzFJWj7VIPDH4CcW/q7MV4oGobqR6NsuxZoIGYrVpK7pBasumu5YbCqifuErMs5s23BhmrDNeZURw== +metro-core@0.80.8, metro-core@^0.80.3: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.80.8.tgz#85cf9745e767a33fe96bc5f166b71e213a482978" + integrity sha512-g6lud55TXeISRTleW6SHuPFZHtYrpwNqbyFIVd9j9Ofrb5IReiHp9Zl8xkAfZQp8v6ZVgyXD7c130QTsCz+vBw== dependencies: lodash.throttle "^4.1.1" - metro-resolver "0.80.6" + metro-resolver "0.80.8" -metro-file-map@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.80.6.tgz#9d96e54bd3bde6747b6860702a098a333599bba2" - integrity sha512-S3CUqvpXpc+q3q+hCEWvFKhVqgq0VmXdZQDF6u7ue86E2elq1XLnfLOt9JSpwyhpMQRyysjSCnd/Yh6GZMNHoQ== +metro-file-map@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.80.8.tgz#216e54db4dc8496815bd38bb806d469c5f5b66fd" + integrity sha512-eQXMFM9ogTfDs2POq7DT2dnG7rayZcoEgRbHPXvhUWkVwiKkro2ngcBE++ck/7A36Cj5Ljo79SOkYwHaWUDYDw== dependencies: anymatch "^3.0.3" debug "^2.2.0" @@ -7324,55 +7417,55 @@ metro-file-map@0.80.6: optionalDependencies: fsevents "^2.3.2" -metro-minify-terser@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.80.6.tgz#27193867ec177c5a9b636725ff1c94c65ce701cc" - integrity sha512-83eZaH2+B+jP92KuodPqXknzwmiboKAuZY4doRfTEEXAG57pNVNN6cqSRJlwDnmaTBKRffxoncBXbYqHQgulgg== +metro-minify-terser@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.80.8.tgz#166413d2286900e7fd764aa30497a1596bc18c00" + integrity sha512-y8sUFjVvdeUIINDuW1sejnIjkZfEF+7SmQo0EIpYbWmwh+kq/WMj74yVaBWuqNjirmUp1YNfi3alT67wlbBWBQ== dependencies: terser "^5.15.0" -metro-resolver@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.80.6.tgz#b648b8c661bc4cf091efd11affa010dd11f58bec" - integrity sha512-R7trfglG4zY4X9XyM9cvuffAhQ9W1reWoahr1jdEWa6rOI8PyM0qXjcsb8l+fsOQhdSiVlkKcYAmkyrs1S/zrA== +metro-resolver@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.80.8.tgz#bcc8f8d7f874a9c5fee9ebbde8541d6dc88783df" + integrity sha512-JdtoJkP27GGoZ2HJlEsxs+zO7jnDUCRrmwXJozTlIuzLHMRrxgIRRby9fTCbMhaxq+iA9c+wzm3iFb4NhPmLbQ== -metro-runtime@0.80.6, metro-runtime@^0.80.3: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.80.6.tgz#efd566a02e63e6f2bd08b5e2a8fe57333f1a2c4e" - integrity sha512-21GQVd0pp2nACoK0C2PL8mBsEhIFUFFntYrWRlYNHtPQoqDzddrPEIgkyaABGXGued+dZoBlFQl+LASlmmfkvw== +metro-runtime@0.80.8, metro-runtime@^0.80.3: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.80.8.tgz#8f265369c05d9a3f05f9915842fac5d4e93f44bd" + integrity sha512-2oScjfv6Yb79PelU1+p8SVrCMW9ZjgEiipxq7jMRn8mbbtWzyv3g8Mkwr+KwOoDFI/61hYPUbY8cUnu278+x1g== dependencies: "@babel/runtime" "^7.0.0" -metro-source-map@0.80.6, metro-source-map@^0.80.3: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.80.6.tgz#f129a36bb5b74e3ae0d4cbbcdc62904fa0161fb1" - integrity sha512-lqDuSLctWy9Qccu4Zl0YB1PzItpsqcKGb1nK0aDY+lzJ26X65OCib2VzHlj+xj7e4PiIKOfsvDCczCBz4cnxdg== +metro-source-map@0.80.8, metro-source-map@^0.80.3: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.80.8.tgz#fe92c2b82739c34cf46372a2be07d4e9cac8eb09" + integrity sha512-+OVISBkPNxjD4eEKhblRpBf463nTMk3KMEeYS8Z4xM/z3qujGJGSsWUGRtH27+c6zElaSGtZFiDMshEb8mMKQg== dependencies: "@babel/traverse" "^7.20.0" "@babel/types" "^7.20.0" invariant "^2.2.4" - metro-symbolicate "0.80.6" + metro-symbolicate "0.80.8" nullthrows "^1.1.1" - ob1 "0.80.6" + ob1 "0.80.8" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.80.6.tgz#8690af051f33c98c0e8efcd779aebbfdea9fabef" - integrity sha512-SGwKeBi+lK7NmM5+EcW6DyRRa9HmGSvH0LJtlT4XoRMbpxzsLYs0qUEA+olD96pOIP+ta7I8S30nQr2ttqgO8A== +metro-symbolicate@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.80.8.tgz#881afc90453450208bf519b22e54962fc909d432" + integrity sha512-nwhYySk79jQhwjL9QmOUo4wS+/0Au9joEryDWw7uj4kz2yvw1uBjwmlql3BprQCBzRdB3fcqOP8kO8Es+vE31g== dependencies: invariant "^2.2.4" - metro-source-map "0.80.6" + metro-source-map "0.80.8" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.80.6.tgz#f9039384692fc8cd51a67d1cd7c35964e7d374e8" - integrity sha512-e04tdTC5Fy1vOQrTTXb5biao0t7nR/h+b1IaBTlM5UaHaAJZr658uVOoZhkRxKjbhF2mIwJ/8DdorD2CA15BCg== +metro-transform-plugins@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.80.8.tgz#2ed3162cec7fa7549279a6031e6d910198332a77" + integrity sha512-sSu8VPL9Od7w98MftCOkQ1UDeySWbsIAS5I54rW22BVpPnI3fQ42srvqMLaJUQPjLehUanq8St6OMBCBgH/UWw== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.0" @@ -7380,28 +7473,28 @@ metro-transform-plugins@0.80.6: "@babel/traverse" "^7.20.0" nullthrows "^1.1.1" -metro-transform-worker@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.80.6.tgz#fc09822ce360eaa929b14408e4af97a2fa8feba6" - integrity sha512-jV+VgCLiCj5jQadW/h09qJaqDreL6XcBRY52STCoz2xWn6WWLLMB5nXzQtvFNPmnIOps+Xu8+d5hiPcBNOhYmA== +metro-transform-worker@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.80.8.tgz#df3bc21928e1c99b077cd1e2feec9f13d6c351c6" + integrity sha512-+4FG3TQk3BTbNqGkFb2uCaxYTfsbuFOCKMMURbwu0ehCP8ZJuTUramkaNZoATS49NSAkRgUltgmBa4YaKZ5mqw== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.0" "@babel/parser" "^7.20.0" "@babel/types" "^7.20.0" - metro "0.80.6" - metro-babel-transformer "0.80.6" - metro-cache "0.80.6" - metro-cache-key "0.80.6" - metro-minify-terser "0.80.6" - metro-source-map "0.80.6" - metro-transform-plugins "0.80.6" + metro "0.80.8" + metro-babel-transformer "0.80.8" + metro-cache "0.80.8" + metro-cache-key "0.80.8" + metro-minify-terser "0.80.8" + metro-source-map "0.80.8" + metro-transform-plugins "0.80.8" nullthrows "^1.1.1" -metro@0.80.6, metro@^0.80.3: - version "0.80.6" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.80.6.tgz#11cf77700b8be767f6663c1d6f6ed287dd686535" - integrity sha512-f6Nhnht9TxVRP6zdBq9J2jNdeDBxRmJFnjxhQS1GeCpokBvI6fTXq+wHTLz5jZA+75fwbkPSzBxBJzQa6xi0AQ== +metro@0.80.8, metro@^0.80.3: + version "0.80.8" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.80.8.tgz#42faa80ea8f1c43bea022b55baa3162e90878868" + integrity sha512-in7S0W11mg+RNmcXw+2d9S3zBGmCARDxIwoXJAmLUQOQoYsRP3cpGzyJtc7WOw8+FXfpgXvceD0u+PZIHXEL7g== dependencies: "@babel/code-frame" "^7.0.0" "@babel/core" "^7.20.0" @@ -7418,24 +7511,24 @@ metro@0.80.6, metro@^0.80.3: denodeify "^1.2.1" error-stack-parser "^2.0.6" graceful-fs "^4.2.4" - hermes-parser "0.19.1" + hermes-parser "0.20.1" image-size "^1.0.2" invariant "^2.2.4" jest-worker "^29.6.3" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.80.6" - metro-cache "0.80.6" - metro-cache-key "0.80.6" - metro-config "0.80.6" - metro-core "0.80.6" - metro-file-map "0.80.6" - metro-resolver "0.80.6" - metro-runtime "0.80.6" - metro-source-map "0.80.6" - metro-symbolicate "0.80.6" - metro-transform-plugins "0.80.6" - metro-transform-worker "0.80.6" + metro-babel-transformer "0.80.8" + metro-cache "0.80.8" + metro-cache-key "0.80.8" + metro-config "0.80.8" + metro-core "0.80.8" + metro-file-map "0.80.8" + metro-resolver "0.80.8" + metro-runtime "0.80.8" + metro-source-map "0.80.8" + metro-symbolicate "0.80.8" + metro-transform-plugins "0.80.8" + metro-transform-worker "0.80.8" mime-types "^2.1.27" node-fetch "^2.2.0" nullthrows "^1.1.1" @@ -7455,6 +7548,11 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +microseconds@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" + integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== + mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -7495,9 +7593,9 @@ mimic-fn@^2.1.0: brace-expansion "^1.1.7" minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== dependencies: brace-expansion "^2.0.1" @@ -7539,7 +7637,7 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== @@ -7602,7 +7700,14 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^3.1.23, nanoid@^3.3.7: +nano-time@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" + integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA== + dependencies: + big-integer "^1.6.16" + +nanoid@^3.1.23, nanoid@^3.3.1, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -7768,10 +7873,10 @@ nwsapi@^2.2.2: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -ob1@0.80.6: - version "0.80.6" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.80.6.tgz#61d7881f458333ed2a73b90cea4aa62f8ca9e045" - integrity sha512-nlLGZPMQ/kbmkdIb5yvVzep1jKUII2x6ehNsHpgy71jpnJMW7V+KsB3AjYI2Ajb7UqMAMNjlssg6FUodrEMYzg== +ob1@0.80.8: + version "0.80.8" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.80.8.tgz#08be1b8398d004719074ad702c975a5c7e1b29f2" + integrity sha512-QHJQk/lXMmAW8I7AIM3in1MSlwe1umR72Chhi8B7Xnq6mzjhBKkA6Fy/zAhQnGkA4S912EPCEvTij5yh+EQTAA== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" @@ -7804,39 +7909,46 @@ object.assign@^4.1.4, object.assign@^4.1.5: object-keys "^1.1.1" object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.hasown@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +oblivious-set@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" + integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== on-finished@2.4.1: version "2.4.1" @@ -8098,12 +8210,12 @@ path-parse@^1.0.5, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-type@^4.0.0: @@ -8250,13 +8362,13 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.4.12, postcss@^8.4.23, postcss@~8.4.32: - version "8.4.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" - source-map-js "^1.0.2" + source-map-js "^1.2.0" prelude-ls@^1.2.1: version "1.2.1" @@ -8341,7 +8453,7 @@ prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.5.10, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8379,9 +8491,9 @@ punycode@^2.1.0, punycode@^2.1.1: integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== qrcode-terminal@0.11.0: version "0.11.0" @@ -8389,9 +8501,9 @@ qrcode-terminal@0.11.0: integrity sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ== qs@^6.11.2: - version "6.12.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77" - integrity sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg== + version "6.12.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" + integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== dependencies: side-channel "^1.0.6" @@ -8484,16 +8596,16 @@ react-helmet-async@^1.3.0: shallowequal "^1.1.0" react-hook-form@^7.51.2: - version "7.51.2" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.51.2.tgz#79f7f72ee217c5114ff831012d1a7ec344096e7f" - integrity sha512-y++lwaWjtzDt/XNnyGDQy6goHskFualmDlf+jzEZvjvz6KWDf7EboL7pUvRCzPTJd0EOPpdekYaQLEvvG6m6HA== + version "7.51.3" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.51.3.tgz#7486dd2d52280b6b28048c099a98d2545931cab3" + integrity sha512-cvJ/wbHdhYx8aviSWh28w9ImjmVsb5Y05n1+FW786vEZQJV5STNM0pW6ujS+oiBecb0ARBxJFyAnXj9+GHXACQ== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.1.0, react-is@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^16.13.0, react-is@^16.13.1: +react-is@^16.13.0, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -8503,6 +8615,11 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-native-confirmation-code-field@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/react-native-confirmation-code-field/-/react-native-confirmation-code-field-7.4.0.tgz#58cc2d5adad59882d1805bf164cd6099d432d21e" + integrity sha512-Kw7rD0RXi6vZnt0Y67nkSW2wYmZFdnxJ23yxkKm3jqwvSxAvaA1NP3h3MHSPmJd25l0WK/+fjXOeCliDqWZ9rw== + react-native-cookies@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/react-native-cookies/-/react-native-cookies-3.3.0.tgz#527f65eb2d8a7a000107706bb11beb57f511e701" @@ -8517,11 +8634,38 @@ react-native-element-dropdown@^2.10.4: dependencies: lodash "^4.17.21" +react-native-gesture-handler@^2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.16.0.tgz#45a00b5988e74ebc58f130c8d1443319c8e678db" + integrity sha512-1hFkx7RIfeJSyTQQ0Nkv4icFVZ5+XjQkd47OgZMBFzoB7ecL+nFSz8KLi3OCWOhq+nbHpSPlSG5VF3CQNCJpWA== + dependencies: + "@egjs/hammerjs" "^2.0.17" + hoist-non-react-statics "^3.3.0" + invariant "^2.2.4" + lodash "^4.17.21" + prop-types "^15.7.2" + react-native-loading-spinner-overlay@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/react-native-loading-spinner-overlay/-/react-native-loading-spinner-overlay-3.0.1.tgz#092481b8cce157d3af5ef942f845ad981f96bd36" integrity sha512-4GdR54HQnKg2HPSSisVizfTLuyhSh4splY9eb8mKiYF1Ihjn/5EmdNo5bN3S7uKPFRC3WLzIZIouX6G6fXfnjw== +react-native-maps@1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/react-native-maps/-/react-native-maps-1.14.0.tgz#1e5cac8e88d80002c512dd4763a205493a1ae58d" + integrity sha512-ai7h4UdRLGPFCguz1fI8n4sKLEh35nZXHAH4nSWyAeHGrN8K9GjICu9Xd4Q5Ok4h+WwrM6Xz5pGbF3Qm1tO6iQ== + dependencies: + "@types/geojson" "^7946.0.13" + +react-native-menu@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/react-native-menu/-/react-native-menu-0.23.0.tgz#3c023239aed95d419275df50c199982ad7eb062b" + integrity sha512-sSNqvyTH7HT/8n2MPn14ysg5FEgM4yvV5dYXT515WQGMSFm1K35Rvi4G2Ku+EW9pSyDgRvFSCgJnWHWi0gtmSQ== + dependencies: + create-react-class "^15.6.0" + prop-types "^15.5.10" + react-timer-mixin "^0.13.3" + react-native-open-maps@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/react-native-open-maps/-/react-native-open-maps-0.4.3.tgz#767c6621dcf558241afe78a62c5f7924031f270e" @@ -8543,7 +8687,7 @@ react-native-reanimated@^3.8.1: convert-source-map "^2.0.0" invariant "^2.2.4" -react-native-safe-area-context@4.9.0: +react-native-safe-area-context@^4.9.0: version "4.9.0" resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.9.0.tgz#21a570ca3594cb4259ba65f93befaa60d91bcbd0" integrity sha512-/OJD9Pb8IURyvn+1tWTszWPJqsbZ4hyHBU9P0xhOmk7h5owSuqL0zkfagU0pg7Vh0G2NKQkaPpUKUMMCUMDh/w== @@ -8632,6 +8776,15 @@ react-native@0.73.6: ws "^6.2.2" yargs "^17.6.2" +react-query@^3.39.3: + version "3.39.3" + resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.3.tgz#4cea7127c6c26bdea2de5fb63e51044330b03f35" + integrity sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g== + dependencies: + "@babel/runtime" "^7.5.5" + broadcast-channel "^3.4.1" + match-sorter "^6.0.2" + react-refresh@0.14.0, react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" @@ -8654,6 +8807,11 @@ react-test-renderer@18.2.0: react-shallow-renderer "^16.15.0" scheduler "^0.23.0" +react-timer-mixin@^0.13.3: + version "0.13.4" + resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" + integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== + react@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -8713,15 +8871,15 @@ recast@^0.21.0: tslib "^2.0.1" reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -8754,7 +8912,7 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -8783,6 +8941,11 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== + remove-trailing-slash@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" @@ -8890,6 +9053,13 @@ reusify@^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, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rimraf@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -8897,13 +9067,6 @@ rimraf@^2.6.2: dependencies: glob "^7.1.3" -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rimraf@~2.4.0: version "2.4.5" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" @@ -8925,7 +9088,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.1.0: +safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== @@ -9085,7 +9248,7 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.0, set-function-name@^2.0.1: +set-function-name@^2.0.1, set-function-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -9226,16 +9389,11 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-map-js@^1.0.1: +source-map-js@^1.0.1, source-map-js@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -9409,46 +9567,50 @@ string-width@^5.0.1, string-width@^5.1.2: strip-ansi "^7.0.1" string.prototype.matchall@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -9638,20 +9800,20 @@ tailwind-merge@^2.2.2: dependencies: "@babel/runtime" "^7.24.0" -tailwindcss@3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.3.tgz#be48f5283df77dfced705451319a5dffb8621519" - integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A== +tailwindcss@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3" + integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" chokidar "^3.5.3" didyoumean "^1.2.2" dlv "^1.1.3" - fast-glob "^3.3.0" + fast-glob "^3.2.12" glob-parent "^6.0.2" is-glob "^4.0.3" - jiti "^1.21.0" + jiti "^1.18.2" lilconfig "^2.1.0" micromatch "^4.0.5" normalize-path "^3.0.0" @@ -9663,6 +9825,7 @@ tailwindcss@3.4.3: postcss-load-config "^4.0.1" postcss-nested "^6.0.1" postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" resolve "^1.22.2" sucrase "^3.32.0" @@ -9724,9 +9887,9 @@ terminal-link@^2.1.1: supports-hyperlinks "^2.0.0" terser@^5.15.0: - version "5.29.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.29.1.tgz#44e58045b70c09792ba14bfb7b4e14ca8755b9fa" - integrity sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ== + version "5.30.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.3.tgz#f1bb68ded42408c316b548e3ec2526d7dd03f4d2" + integrity sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -9831,9 +9994,13 @@ tr46@~0.0.3: integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== traverse@~0.6.6: - version "0.6.8" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.8.tgz#5e5e0c41878b57e4b73ad2f3d1e36a715ea4ab15" - integrity sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA== + version "0.6.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.9.tgz#76cfdbacf06382d460b76f8b735a44a6209d8b81" + integrity sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg== + dependencies: + gopd "^1.0.1" + typedarray.prototype.slice "^1.0.3" + which-typed-array "^1.1.15" ts-interface-checker@^0.1.9: version "0.1.13" @@ -9894,11 +10061,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^3.0.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" @@ -9931,10 +10093,10 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" - integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: call-bind "^1.0.7" for-each "^0.3.3" @@ -9943,10 +10105,22 @@ typed-array-length@^1.0.5: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@^5.4.4: - version "5.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" - integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== +typedarray.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz#bce2f685d3279f543239e4d595e0d021731d2d1a" + integrity sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-errors "^1.3.0" + typed-array-buffer "^1.0.2" + typed-array-byte-offset "^1.0.2" + +typescript@^5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== ua-parser-js@^1.0.35: version "1.0.37" @@ -10039,6 +10213,14 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +unload@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" + integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== + dependencies: + "@babel/runtime" "^7.6.2" + detect-node "^2.0.4" + unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -10293,7 +10475,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.14, which-typed-array@^1.1.2, which-typed-array@^1.1.9: +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== diff --git a/frontend/sac-web/package.json b/frontend/sac-web/package.json index 8772217c3..ac72a0d41 100644 --- a/frontend/sac-web/package.json +++ b/frontend/sac-web/package.json @@ -11,7 +11,7 @@ "format": "prettier --write ." }, "dependencies": { - "next": "14.1.4", + "next": "14.2.1", "react": "^18", "react-dom": "^18", "semver": "7.6.0" @@ -22,7 +22,7 @@ "@types/react-dom": "^18", "autoprefixer": "^10.4.19", "eslint": "^8", - "eslint-config-next": "14.1.4", + "eslint-config-next": "14.2.1", "jest": "^29.2.1", "postcss": "^8", "prettier": "^3.2.4", diff --git a/frontend/sac-web/yarn.lock b/frontend/sac-web/yarn.lock index 01e195661..4a54eeeaa 100644 --- a/frontend/sac-web/yarn.lock +++ b/frontend/sac-web/yarn.lock @@ -617,62 +617,62 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@next/env@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.4.tgz#432e80651733fbd67230bf262aee28be65252674" - integrity sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ== +"@next/env@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.1.tgz#18b4fb5fd76bdda65369ad4ea5f33199ae708d2f" + integrity sha512-qsHJle3GU3CmVx7pUoXcghX4sRN+vINkbLdH611T8ZlsP//grzqVW87BSUgOZeSAD4q7ZdZicdwNe/20U2janA== -"@next/eslint-plugin-next@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz#d7372b5ffede0e466af8af2ff534386418827fc8" - integrity sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA== +"@next/eslint-plugin-next@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.1.tgz#909952d05dd22bb3f6db2a308ac148be2d05c775" + integrity sha512-Fp+mthEBjkn8r9qd6o4JgxKp0IDEzW0VYHD8ZC05xS5/lFNwHKuOdr2kVhWG7BQCO9L6eeepshM1Wbs2T+LgSg== dependencies: glob "10.3.10" -"@next/swc-darwin-arm64@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz#a3bca0dc4393ac4cf3169bbf24df63441de66bb7" - integrity sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg== - -"@next/swc-darwin-x64@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz#ba3683d4e2d30099f3f2864dd7349a4d9f440140" - integrity sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ== - -"@next/swc-linux-arm64-gnu@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz#3519969293f16379954b7e196deb0c1eecbb2f8b" - integrity sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA== - -"@next/swc-linux-arm64-musl@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz#4bb3196bd402b3f84cf5373ff1021f547264d62f" - integrity sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g== - -"@next/swc-linux-x64-gnu@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz#1b3372c98c83dcdab946cdb4ee06e068b8139ba3" - integrity sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw== - -"@next/swc-linux-x64-musl@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz#8459088bdc872648ff78f121db596f2533df5808" - integrity sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg== - -"@next/swc-win32-arm64-msvc@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz#84280a08c00cc3be24ddd3a12f4617b108e6dea6" - integrity sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag== - -"@next/swc-win32-ia32-msvc@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz#23ff7f4bd0a27177428669ef6fa5c3923c738031" - integrity sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw== - -"@next/swc-win32-x64-msvc@14.1.4": - version "14.1.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz#bccf5beccfde66d6c66fa4e2509118c796385eda" - integrity sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w== +"@next/swc-darwin-arm64@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.1.tgz#44ca580ccac1396fa45e2bcc6584238098491e71" + integrity sha512-kGjnjcIJehEcd3rT/3NAATJQndAEELk0J9GmGMXHSC75TMnvpOhONcjNHbjtcWE5HUQnIHy5JVkatrnYm1QhVw== + +"@next/swc-darwin-x64@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.1.tgz#1747091f40fd3b0d8e072ba62203ec998619525f" + integrity sha512-dAdWndgdQi7BK2WSXrx4lae7mYcOYjbHJUhvOUnJjMNYrmYhxbbvJ2xElZpxNxdfA6zkqagIB9He2tQk+l16ew== + +"@next/swc-linux-arm64-gnu@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.1.tgz#ede705718c316e65e3dd9ab31962824b8befb0cb" + integrity sha512-2ZctfnyFOGvTkoD6L+DtQtO3BfFz4CapoHnyLTXkOxbZkVRgg3TQBUjTD/xKrO1QWeydeo8AWfZRg8539qNKrg== + +"@next/swc-linux-arm64-musl@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.1.tgz#ce50a5d94a7ba1f8e34a941f4ca076d8beebc79c" + integrity sha512-jazZXctiaanemy4r+TPIpFP36t1mMwWCKMsmrTRVChRqE6putyAxZA4PDujx0SnfvZHosjdkx9xIq9BzBB5tWg== + +"@next/swc-linux-x64-gnu@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.1.tgz#ac3e8fa4d028fe7a9d9b7c33db3ab65679ae5fe2" + integrity sha512-VjCHWCjsAzQAAo8lkBOLEIkBZFdfW+Z18qcQ056kL4KpUYc8o59JhLDCBlhg+hINQRgzQ2UPGma2AURGOH0+Qg== + +"@next/swc-linux-x64-musl@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.1.tgz#2beb7bee80dfb54a36d81392f21c599014018177" + integrity sha512-7HZKYKvAp4nAHiHIbY04finRqjeYvkITOGOurP1aLMexIFG/1+oCnqhGogBdc4lao/lkMW1c+AkwWSzSlLasqw== + +"@next/swc-win32-arm64-msvc@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.1.tgz#b25df35a6ed99eb73bfed07822dd28a37aaab9f9" + integrity sha512-YGHklaJ/Cj/F0Xd8jxgj2p8po4JTCi6H7Z3Yics3xJhm9CPIqtl8erlpK1CLv+HInDqEWfXilqatF8YsLxxA2Q== + +"@next/swc-win32-ia32-msvc@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.1.tgz#2cc67b93f0a71a8f3c1dd735676f4c9ddd4240ff" + integrity sha512-o+ISKOlvU/L43ZhtAAfCjwIfcwuZstiHVXq/BDsZwGqQE0h/81td95MPHliWCnFoikzWcYqh+hz54ZB2FIT8RA== + +"@next/swc-win32-x64-msvc@14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.1.tgz#e5f4003930de4a150a8c2e7cf5c133cd99a686bd" + integrity sha512-GmRoTiLcvCLifujlisknv4zu9/C4i9r0ktsA8E51EMqJL4bD4CpO7lDYr7SrUxCR0tS4RVcrqKmCak24T0ohaw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -724,11 +724,17 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@swc/helpers@0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" - integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.5.tgz#12689df71bfc9b21c4f4ca00ae55f2f16c8b77c0" + integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A== dependencies: + "@swc/counter" "^0.1.3" tslib "^2.4.0" "@types/babel__core@^7.1.14": @@ -796,9 +802,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/node@*", "@types/node@^20": - version "20.12.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.5.tgz#74c4f31ab17955d0b5808cdc8fd2839526ad00b3" - integrity sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw== + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== dependencies: undici-types "~5.26.4" @@ -815,9 +821,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18": - version "18.2.74" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.74.tgz#2d52eb80e4e7c4ea8812c89181d6d590b53f958c" - integrity sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw== + version "18.2.78" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.78.tgz#94aec453d0ccca909998a2b4b2fd78af15a7d2fe" + integrity sha512-qOwdPnnitQY4xKlKayt42q5W5UQrSHjgoXNVEtxeqdITJ99k4VXJOP3vt8Rkm9HmgJpH50UNU+rlqfkfWOqp0A== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -839,37 +845,37 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" + integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== +"@typescript-eslint/scope-manager@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" + integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/types@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" + integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== +"@typescript-eslint/typescript-estree@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" + integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -877,12 +883,12 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== +"@typescript-eslint/visitor-keys@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" + integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== dependencies: - "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/types" "7.2.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -1788,14 +1794,14 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@14.1.4: - version "14.1.4" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.4.tgz#22f2ba4c0993e991249d863656a64c204bae542c" - integrity sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g== +eslint-config-next@14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.2.1.tgz#b19b53ca3d10379a98bc9bf497dbea651dfcd070" + integrity sha512-BgD0kPCWMlqoItRf3xe9fG0MqwObKfVch+f2ccwDpZiCJA8ghkz2wrASH+bI6nLZzGcOJOpMm1v1Q1euhfpt4Q== dependencies: - "@next/eslint-plugin-next" "14.1.4" + "@next/eslint-plugin-next" "14.2.1" "@rushstack/eslint-patch" "^1.3.3" - "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" eslint-import-resolver-node "^0.3.6" eslint-import-resolver-typescript "^3.5.2" eslint-plugin-import "^2.28.1" @@ -3299,28 +3305,28 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next@14.1.4: - version "14.1.4" - resolved "https://registry.yarnpkg.com/next/-/next-14.1.4.tgz#203310f7310578563fd5c961f0db4729ce7a502d" - integrity sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ== +next@14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/next/-/next-14.2.1.tgz#081509478156407e4c181ad4791fea0a43c6347d" + integrity sha512-SF3TJnKdH43PMkCcErLPv+x/DY1YCklslk3ZmwaVoyUfDgHKexuKlf9sEfBQ69w+ue8jQ3msLb+hSj1T19hGag== dependencies: - "@next/env" "14.1.4" - "@swc/helpers" "0.5.2" + "@next/env" "14.2.1" + "@swc/helpers" "0.5.5" busboy "1.6.0" caniuse-lite "^1.0.30001579" graceful-fs "^4.2.11" postcss "8.4.31" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-darwin-arm64" "14.1.4" - "@next/swc-darwin-x64" "14.1.4" - "@next/swc-linux-arm64-gnu" "14.1.4" - "@next/swc-linux-arm64-musl" "14.1.4" - "@next/swc-linux-x64-gnu" "14.1.4" - "@next/swc-linux-x64-musl" "14.1.4" - "@next/swc-win32-arm64-msvc" "14.1.4" - "@next/swc-win32-ia32-msvc" "14.1.4" - "@next/swc-win32-x64-msvc" "14.1.4" + "@next/swc-darwin-arm64" "14.2.1" + "@next/swc-darwin-x64" "14.2.1" + "@next/swc-linux-arm64-gnu" "14.2.1" + "@next/swc-linux-arm64-musl" "14.2.1" + "@next/swc-linux-x64-gnu" "14.2.1" + "@next/swc-linux-x64-musl" "14.2.1" + "@next/swc-win32-arm64-msvc" "14.2.1" + "@next/swc-win32-ia32-msvc" "14.2.1" + "@next/swc-win32-x64-msvc" "14.2.1" node-int64@^0.4.0: version "0.4.0" @@ -4272,9 +4278,9 @@ typed-array-length@^1.0.5: possible-typed-array-names "^1.0.0" typescript@^5: - version "5.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" - integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== unbox-primitive@^1.0.2: version "1.0.2" diff --git a/install.ps1 b/install.ps1 index d7a8051eb..153e91c17 100644 --- a/install.ps1 +++ b/install.ps1 @@ -2,19 +2,19 @@ $ScriptPath = (Get-Item -Path $MyInvocation.MyCommand.Path).DirectoryName # Build the Go CLI tool -go build -o "sac-cli" "cli/main.go" +go build -o "sac" "cli/main.go" -# Check if sac-cli is already installed -if (Test-Path -Path "$Env:USERPROFILE\AppData\Local\Programs\sac-cli\sac-cli.exe") { +# Check if sac is already installed +if (Test-Path -Path "$Env:USERPROFILE\AppData\Local\Programs\sac\sac.exe") { exit 1 } -# Copy the sac-cli executable to a directory in the user's PATH -$InstallPath = "$Env:USERPROFILE\AppData\Local\Programs\sac-cli" +# Copy the sac executable to a directory in the user's PATH +$InstallPath = "$Env:USERPROFILE\AppData\Local\Programs\sac" if (-not (Test-Path -Path $InstallPath)) { New-Item -ItemType Directory -Path $InstallPath | Out-Null } -Copy-Item -Path "sac-cli" -Destination "$InstallPath\sac-cli.exe" -Force +Copy-Item -Path "sac" -Destination "$InstallPath\sac.exe" -Force # Add the installation path to the user's PATH $PathEnvVar = [System.Environment]::GetEnvironmentVariable("PATH", [System.EnvironmentVariableTarget]::User) @@ -23,4 +23,4 @@ if (-not ($PathEnvVar -like "*$InstallPath*")) { } # Inform the user -Write-Host "Installation complete. You can now run 'sac-cli' from anywhere." +Write-Host "Installation complete. You can now run 'sac' from anywhere." diff --git a/install.sh b/install.sh index 383916404..f797ee6a9 100755 --- a/install.sh +++ b/install.sh @@ -7,19 +7,19 @@ set -o pipefail SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Build the Go CLI tool -go build -o "sac-cli" "cli/main.go" +go build -o "sac" "cli/main.go" # Identify the user's shell SHELL_NAME=$(basename "$SHELL") # Check if the command is already installed to avoid adding it to path multiple times -COMMAND_NAME="sac-cli" +COMMAND_NAME="sac" if command -v "$COMMAND_NAME" >/dev/null 2>&1; then exit 1 fi -# Add sac-cli to the user's PATH +# Add sac to the user's PATH if [[ $SHELL_NAME == "zsh" ]]; then echo "export PATH=\"$SCRIPT_PATH:\$PATH\"" >>~/.zshrc source ~/.zshrc @@ -32,4 +32,4 @@ else fi # Inform the user -echo "Installation complete. You can now run 'sac-cli' from anywhere." +echo "Installation complete. You can now run 'sac' from anywhere." diff --git a/scraper/.gitignore b/mock_data/.gitignore similarity index 100% rename from scraper/.gitignore rename to mock_data/.gitignore diff --git a/scraper/clubs/Cargo.lock b/mock_data/Cargo.lock similarity index 100% rename from scraper/clubs/Cargo.lock rename to mock_data/Cargo.lock diff --git a/scraper/clubs/Cargo.toml b/mock_data/Cargo.toml similarity index 100% rename from scraper/clubs/Cargo.toml rename to mock_data/Cargo.toml diff --git a/scraper/clubs/README.md b/mock_data/README.md similarity index 100% rename from scraper/clubs/README.md rename to mock_data/README.md diff --git a/scraper/clubs/src/cli.rs b/mock_data/src/cli.rs similarity index 100% rename from scraper/clubs/src/cli.rs rename to mock_data/src/cli.rs diff --git a/scraper/clubs/src/domain/category.rs b/mock_data/src/domain/category.rs similarity index 100% rename from scraper/clubs/src/domain/category.rs rename to mock_data/src/domain/category.rs diff --git a/scraper/clubs/src/domain/club.rs b/mock_data/src/domain/club.rs similarity index 100% rename from scraper/clubs/src/domain/club.rs rename to mock_data/src/domain/club.rs diff --git a/scraper/clubs/src/domain/mod.rs b/mock_data/src/domain/mod.rs similarity index 100% rename from scraper/clubs/src/domain/mod.rs rename to mock_data/src/domain/mod.rs diff --git a/scraper/clubs/src/domain/tag.rs b/mock_data/src/domain/tag.rs similarity index 100% rename from scraper/clubs/src/domain/tag.rs rename to mock_data/src/domain/tag.rs diff --git a/scraper/clubs/src/dumper/category.rs b/mock_data/src/dumper/category.rs similarity index 77% rename from scraper/clubs/src/dumper/category.rs rename to mock_data/src/dumper/category.rs index ed4f1c45e..4957791ea 100644 --- a/scraper/clubs/src/dumper/category.rs +++ b/mock_data/src/dumper/category.rs @@ -2,7 +2,7 @@ use std::{error::Error, fs::File, io::Write}; use crate::domain::Category; -pub fn dump(categories: &Vec<Category>, file: &mut File) -> Result<(), Box<dyn Error>> { +pub fn dump(categories: &[Category], file: &mut File) -> Result<(), Box<dyn Error>> { for category in categories { writeln!( file, diff --git a/scraper/clubs/src/dumper/club.rs b/mock_data/src/dumper/club.rs similarity index 100% rename from scraper/clubs/src/dumper/club.rs rename to mock_data/src/dumper/club.rs diff --git a/mock_data/src/dumper/dump.rs b/mock_data/src/dumper/dump.rs new file mode 100644 index 000000000..d57d53662 --- /dev/null +++ b/mock_data/src/dumper/dump.rs @@ -0,0 +1,38 @@ +use chrono::Local; +use std::{error::Error, fs::File, io::Write}; + +use crate::domain::{club::Club, Category, Tag}; + +fn autogen_commenter<F>(file: &mut File, func: F) -> Result<(), Box<dyn Error>> +where + F: FnOnce(&mut File) -> Result<(), Box<dyn Error>>, +{ + writeln!(file, "-- AUTOGENERATED MOCK DATA, DO NOT MODIFY")?; + writeln!( + file, + "-- GENERATED AT {}", + Local::now().format("%Y-%m-%d %H:%M:%S") + )?; + func(file)?; + writeln!(file, "-- END AUTOGENERATED MOCK DATA")?; + Ok(()) +} + +pub fn dump_all( + categories: &[Category], + tags: &[&Tag], + clubs: Vec<Club>, + club_parent: uuid::Uuid, + file: &mut File, +) -> Result<(), Box<dyn Error>> { + autogen_commenter(file, |file| { + writeln!(file, "BEGIN;")?; + crate::dumper::category::dump(categories, file)?; + crate::dumper::tag::dump(tags, file)?; + crate::dumper::club::dump(clubs, file, club_parent)?; + writeln!(file, "COMMIT;")?; + Ok(()) + })?; + + Ok(()) +} diff --git a/scraper/clubs/src/dumper/mod.rs b/mock_data/src/dumper/mod.rs similarity index 100% rename from scraper/clubs/src/dumper/mod.rs rename to mock_data/src/dumper/mod.rs diff --git a/scraper/clubs/src/dumper/tag.rs b/mock_data/src/dumper/tag.rs similarity index 77% rename from scraper/clubs/src/dumper/tag.rs rename to mock_data/src/dumper/tag.rs index 7393a073f..e6d431e48 100644 --- a/scraper/clubs/src/dumper/tag.rs +++ b/mock_data/src/dumper/tag.rs @@ -2,7 +2,7 @@ use std::{error::Error, fs::File, io::Write}; use crate::domain::tag::Tag; -pub fn dump(tags: &Vec<&'static Tag>, file: &mut File) -> Result<(), Box<dyn Error>> { +pub fn dump(tags: &[&Tag], file: &mut File) -> Result<(), Box<dyn Error>> { for tag in tags { writeln!( file, diff --git a/scraper/clubs/src/lib.rs b/mock_data/src/lib.rs similarity index 100% rename from scraper/clubs/src/lib.rs rename to mock_data/src/lib.rs diff --git a/scraper/clubs/src/main.rs b/mock_data/src/main.rs similarity index 100% rename from scraper/clubs/src/main.rs rename to mock_data/src/main.rs diff --git a/scraper/clubs/src/scraper/mod.rs b/mock_data/src/scraper/mod.rs similarity index 100% rename from scraper/clubs/src/scraper/mod.rs rename to mock_data/src/scraper/mod.rs diff --git a/scraper/clubs/src/scraper/scraped_club.rs b/mock_data/src/scraper/scraped_club.rs similarity index 100% rename from scraper/clubs/src/scraper/scraped_club.rs rename to mock_data/src/scraper/scraped_club.rs diff --git a/scraper/clubs/src/dumper/dump.rs b/scraper/clubs/src/dumper/dump.rs deleted file mode 100644 index 43a709855..000000000 --- a/scraper/clubs/src/dumper/dump.rs +++ /dev/null @@ -1,38 +0,0 @@ -use std::{error::Error, fs::File, io::Write}; - -use chrono::Local; - -use crate::domain::{club::Club, Category, Tag}; - -fn autogen_commenter(file: &mut File) -> Result<(), Box<dyn Error>> { - writeln!(file, "-- AUTOGENERATED MOCK DATA, DO NOT MODIFY")?; - writeln!( - file, - "-- GENERATED AT {}", - Local::now().format("%Y-%m-%d %H:%M:%S") - )?; - - Ok(()) -} - -pub fn dump_all( - categories: &Vec<Category>, - tags: &Vec<&'static Tag>, - clubs: Vec<Club>, - club_parent: uuid::Uuid, - file: &mut File, -) -> Result<(), Box<dyn Error>> { - autogen_commenter(file)?; - - writeln!(file, "BEGIN;")?; - - crate::dumper::category::dump(categories, file)?; - - crate::dumper::tag::dump(tags, file)?; - - crate::dumper::club::dump(clubs, file, club_parent)?; - - writeln!(file, "COMMIT;")?; - - Ok(()) -}