diff --git a/.github/workflows/backend_codeql.yml b/.github/workflows/backend_codeql.yml
index 9122e9de1..c00ab88bf 100644
--- a/.github/workflows/backend_codeql.yml
+++ b/.github/workflows/backend_codeql.yml
@@ -33,7 +33,7 @@ jobs:
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
- languages: "go"
+ languages: go
queries: security-and-quality
- name: Build
run: |
@@ -41,4 +41,4 @@ jobs:
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
- category: "/language:go"
+ category: backend
diff --git a/.github/workflows/cli_codeql.yml b/.github/workflows/cli_codeql.yml
index 8f84f0385..a8c9851a8 100644
--- a/.github/workflows/cli_codeql.yml
+++ b/.github/workflows/cli_codeql.yml
@@ -33,7 +33,7 @@ jobs:
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
- languages: "go"
+ languages: go
queries: security-and-quality
- name: Build
run: |
@@ -41,4 +41,4 @@ jobs:
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
- category: "/language:go"
+ category: cli
diff --git a/.github/workflows/mobile_codeql.yml b/.github/workflows/mobile_codeql.yml
index 4e5c0584a..59dbfb0fe 100644
--- a/.github/workflows/mobile_codeql.yml
+++ b/.github/workflows/mobile_codeql.yml
@@ -29,7 +29,7 @@ jobs:
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
- languages: "javascript-typescript"
+ languages: javascript-typescript
queries: security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v3
@@ -38,4 +38,4 @@ jobs:
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
- category: "/language:javascript-typescript"
+ category: mobile
diff --git a/.github/workflows/web_codeql.yml b/.github/workflows/web_codeql.yml
index 9cf3ec557..d4228a544 100644
--- a/.github/workflows/web_codeql.yml
+++ b/.github/workflows/web_codeql.yml
@@ -29,7 +29,7 @@ jobs:
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
- languages: "javascript-typescript"
+ languages: javascript-typescript
queries: security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v3
@@ -38,4 +38,4 @@ jobs:
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
- category: "/language:javascript-typescript"
+ category: web
diff --git a/README.md b/README.md
index 5858eff93..2f836ea3b 100644
--- a/README.md
+++ b/README.md
@@ -35,15 +35,16 @@
+
+
+
+
-
-
-
@@ -61,6 +62,6 @@
diff --git a/backend/go.mod b/backend/go.mod
index 30966aeab..77f8cfcb4 100644
--- a/backend/go.mod
+++ b/backend/go.mod
@@ -3,7 +3,7 @@ module github.com/GenerateNU/sac/backend
go 1.22.0
require (
- github.com/garrettladley/mattress v0.3.2
+ github.com/garrettladley/mattress v0.4.0
github.com/go-playground/validator/v10 v10.19.0
github.com/goccy/go-json v0.10.2
github.com/gofiber/fiber/v2 v2.52.2
@@ -16,9 +16,9 @@ require (
github.com/mitchellh/mapstructure v1.5.0
github.com/spf13/viper v1.18.2
github.com/swaggo/swag v1.16.3
- golang.org/x/crypto v0.20.0
+ golang.org/x/crypto v0.21.0
golang.org/x/text v0.14.0
- gorm.io/driver/postgres v1.5.6
+ gorm.io/driver/postgres v1.5.7
gorm.io/gorm v1.25.7
)
@@ -75,7 +75,7 @@ require (
go.uber.org/multierr v1.9.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/net v0.21.0 // indirect
- golang.org/x/sys v0.17.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
golang.org/x/tools v0.18.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/backend/go.sum b/backend/go.sum
index f2d12cb9a..58fd50cdc 100644
--- a/backend/go.sum
+++ b/backend/go.sum
@@ -16,8 +16,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
-github.com/garrettladley/mattress v0.3.2 h1:JsWsEwjXzlJXX7F/Zzmq7Xby1VAwzTJGGvf7DXPj4Jk=
-github.com/garrettladley/mattress v0.3.2/go.mod h1:OWKIRc9wC3gtD3Ng/nUuNEiR1TJvRYLmn/KZYw9nl5Q=
+github.com/garrettladley/mattress v0.4.0 h1:ZB3iqyc5q6bqIryNfsh2FMcbMdnV1XEryvqivouceQE=
+github.com/garrettladley/mattress v0.4.0/go.mod h1:OWKIRc9wC3gtD3Ng/nUuNEiR1TJvRYLmn/KZYw9nl5Q=
github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
@@ -148,8 +148,8 @@ go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg=
-golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
@@ -175,8 +175,8 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
-golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
@@ -201,7 +201,7 @@ gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/driver/postgres v1.5.6 h1:ydr9xEd5YAM0vxVDY0X139dyzNz10spDiDlC7+ibLeU=
-gorm.io/driver/postgres v1.5.6/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA=
+gorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM=
+gorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA=
gorm.io/gorm v1.25.7 h1:VsD6acwRjz2zFxGO50gPO6AkNs7KKnvfzUjHQhZDz/A=
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
diff --git a/backend/src/controllers/category.go b/backend/src/controllers/category.go
index d01bcbb63..de81d3e6c 100644
--- a/backend/src/controllers/category.go
+++ b/backend/src/controllers/category.go
@@ -31,6 +31,7 @@ func NewCategoryController(categoryService services.CategoryServiceInterface) *C
// @Failure 400 {string} errors.Error
// @Failure 401 {string} errors.Error
// @Failure 404 {string} errors.Error
+// @Failure 409 {string} errors.Error
// @Failure 500 {string} errors.Error
// @Router /categories/ [post]
func (cat *CategoryController) CreateCategory(c *fiber.Ctx) error {
diff --git a/backend/src/controllers/user.go b/backend/src/controllers/user.go
index d8bc8443a..68a514994 100644
--- a/backend/src/controllers/user.go
+++ b/backend/src/controllers/user.go
@@ -31,6 +31,7 @@ func NewUserController(userService services.UserServiceInterface) *UserControlle
// @Failure 400 {object} errors.Error
// @Failure 401 {object} errors.Error
// @Failure 404 {object} errors.Error
+// @Failure 409 {object} errors.Error
// @Failure 500 {object} errors.Error
// @Router /users/ [post]
func (u *UserController) CreateUser(c *fiber.Ctx) error {
diff --git a/backend/src/controllers/user_follower.go b/backend/src/controllers/user_follower.go
index 8fe537160..0a7862382 100644
--- a/backend/src/controllers/user_follower.go
+++ b/backend/src/controllers/user_follower.go
@@ -2,6 +2,7 @@ package controllers
import (
"github.com/GenerateNU/sac/backend/src/services"
+ "github.com/GenerateNU/sac/backend/src/utilities"
"github.com/gofiber/fiber/v2"
)
@@ -33,7 +34,7 @@ func (uf *UserFollowerController) CreateFollowing(c *fiber.Ctx) error {
if err != nil {
return err.FiberError(c)
}
- return c.SendStatus(fiber.StatusCreated)
+ return utilities.FiberMessage(c, fiber.StatusCreated, "Successfully followed club")
}
// DeleteFollowing godoc
diff --git a/backend/src/controllers/user_member.go b/backend/src/controllers/user_member.go
index 1833cd9a9..bf8610a38 100644
--- a/backend/src/controllers/user_member.go
+++ b/backend/src/controllers/user_member.go
@@ -2,6 +2,7 @@ package controllers
import (
"github.com/GenerateNU/sac/backend/src/services"
+ "github.com/GenerateNU/sac/backend/src/utilities"
"github.com/gofiber/fiber/v2"
)
@@ -34,7 +35,7 @@ func (um *UserMemberController) CreateMembership(c *fiber.Ctx) error {
return err.FiberError(c)
}
- return c.SendStatus(fiber.StatusCreated)
+ return utilities.FiberMessage(c, fiber.StatusCreated, "Successfully joined club")
}
// DeleteMembership godoc
diff --git a/backend/src/database/db.go b/backend/src/database/db.go
index 4466df11f..88dae1663 100644
--- a/backend/src/database/db.go
+++ b/backend/src/database/db.go
@@ -85,7 +85,6 @@ func MigrateDB(settings config.Settings, db *gorm.DB) error {
return err
}
- // Check if the database already has a super user
var superUser models.User
if err := db.Where("role = ?", models.Super).First(&superUser).Error; err != nil {
if err := createSuperUser(settings, db); err != nil {
@@ -112,26 +111,30 @@ func createSuperUser(settings config.Settings, db *gorm.DB) error {
var user models.User
if err := db.Where("nuid = ?", superUser.NUID).First(&user).Error; err != nil {
- tx := db.Begin()
+ tx := db.Begin().Session(&gorm.Session{SkipHooks: true})
if err := tx.Error; err != nil {
return err
}
- if err := tx.Create(&superUser).Error; err != nil {
+ superClub := SuperClub()
+ if err := tx.Create(&superClub).Error; err != nil {
tx.Rollback()
return err
}
- SuperUserUUID = superUser.ID
-
- superClub := SuperClub()
+ if err := tx.Model(&superClub).Update("num_members", gorm.Expr("num_members + 1")).Error; err != nil {
+ tx.Rollback()
+ return err
+ }
- if err := tx.Create(&superClub).Error; err != nil {
+ if err := tx.Create(&superUser).Error; err != nil {
tx.Rollback()
return err
}
+ SuperUserUUID = superUser.ID
+
membership := models.Membership{
ClubID: superClub.ID,
UserID: superUser.ID,
@@ -143,7 +146,18 @@ func createSuperUser(settings config.Settings, db *gorm.DB) error {
return err
}
+ follower := models.Follower{
+ ClubID: superClub.ID,
+ UserID: superUser.ID,
+ }
+
+ if err := tx.Create(&follower).Error; err != nil {
+ tx.Rollback()
+ return err
+ }
+
return tx.Commit().Error
}
+
return nil
}
diff --git a/backend/src/errors/club.go b/backend/src/errors/club.go
index df555f189..826c08e4a 100644
--- a/backend/src/errors/club.go
+++ b/backend/src/errors/club.go
@@ -63,4 +63,12 @@ var (
StatusCode: fiber.StatusInternalServerError,
Message: "failed to get club events",
}
+ FailedToJoinClub = Error{
+ StatusCode: fiber.StatusInternalServerError,
+ Message: "failed to join club",
+ }
+ AlreadyMemberOfClub = Error{
+ StatusCode: fiber.StatusBadRequest,
+ Message: "already member of club",
+ }
)
diff --git a/backend/src/errors/user.go b/backend/src/errors/user.go
index 04a52854a..b4b8dd624 100644
--- a/backend/src/errors/user.go
+++ b/backend/src/errors/user.go
@@ -63,4 +63,8 @@ var (
StatusCode: fiber.StatusNotFound,
Message: "user not following club",
}
+ FailedToFollowClub = Error{
+ StatusCode: fiber.StatusInternalServerError,
+ Message: "failed to follow club",
+ }
)
diff --git a/backend/src/models/club.go b/backend/src/models/club.go
index 0fd62ea2a..1d25ad6ed 100644
--- a/backend/src/models/club.go
+++ b/backend/src/models/club.go
@@ -30,7 +30,7 @@ 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"`
+ Name string `gorm:"type:varchar(255);unique" json:"name" validate:"required,max=255"`
Preview string `gorm:"type:varchar(255)" json:"preview" validate:"required,max=255"`
Description string `gorm:"type:varchar(255)" json:"description" validate:"required,http_url,mongo_url,max=255"` // MongoDB URL
NumMembers int `gorm:"type:int" json:"num_members" validate:"required,min=1"`
@@ -114,16 +114,6 @@ func (cqp *ClubQueryParams) IntoWhere() string {
return "WHERE " + strings.Join(conditions, " AND ")
}
-func (c *Club) AfterCreate(tx *gorm.DB) (err error) {
- tx.Model(&c).Update("num_members", c.NumMembers+1)
- return
-}
-
-func (c *Club) AfterDelete(tx *gorm.DB) (err error) {
- tx.Model(&c).Update("num_members", c.NumMembers-1)
- return
-}
-
func (c *Club) SearchId() string {
return c.ID.String()
}
diff --git a/backend/src/models/event.go b/backend/src/models/event.go
index 94ca89138..dd1c7846b 100644
--- a/backend/src/models/event.go
+++ b/backend/src/models/event.go
@@ -54,7 +54,7 @@ type Series struct {
// TODO: add not null to required fields on all gorm models
type EventSeries struct {
- EventID uuid.UUID `gorm:"not null; type:uuid; primary_key;" json:"event_id" validate:"uuid4"`
+ EventID uuid.UUID `gorm:"not null; type:uuid; primaryKey;" 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"`
Series Series `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
diff --git a/backend/src/models/follower.go b/backend/src/models/follower.go
new file mode 100644
index 000000000..2fe61d680
--- /dev/null
+++ b/backend/src/models/follower.go
@@ -0,0 +1,17 @@
+package models
+
+import (
+ "github.com/google/uuid"
+)
+
+func (Follower) TableName() string {
+ return "user_club_followers"
+}
+
+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"`
+
+ 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 5ffc69d34..f225acf72 100644
--- a/backend/src/models/membership.go
+++ b/backend/src/models/membership.go
@@ -1,6 +1,8 @@
package models
-import "github.com/google/uuid"
+import (
+ "github.com/google/uuid"
+)
type MembershipType string
@@ -9,19 +11,13 @@ const (
MembershipTypeAdmin MembershipType = "admin"
)
-type Tabler interface {
- TableName() string
-}
-
func (Membership) TableName() string {
return "user_club_members"
}
type Membership struct {
- Model
-
- UserID uuid.UUID `gorm:"type:uuid;not null" json:"user_id" validate:"required,uuid4"`
- ClubID uuid.UUID `gorm:"type:uuid;not null" json:"club_id" validate:"required,uuid4"`
+ 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"`
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/root.go b/backend/src/models/root.go
index a1babc13a..cf9a23f5e 100644
--- a/backend/src/models/root.go
+++ b/backend/src/models/root.go
@@ -6,8 +6,12 @@ import (
"github.com/google/uuid"
)
+type Tabler interface {
+ TableName() string
+}
+
type Model struct {
- ID uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()" json:"id" example:"123e4567-e89b-12d3-a456-426614174000"`
+ 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"`
}
diff --git a/backend/src/models/user.go b/backend/src/models/user.go
index 593054bf5..11a3e1825 100644
--- a/backend/src/models/user.go
+++ b/backend/src/models/user.go
@@ -2,6 +2,7 @@ package models
import (
"github.com/google/uuid"
+ "gorm.io/gorm"
)
type UserRole string
@@ -89,3 +90,37 @@ type UpdatePasswordRequestBody struct {
type CreateUserTagsBody struct {
Tags []uuid.UUID `json:"tags" validate:"required"`
}
+
+func (u *User) AfterCreate(tx *gorm.DB) (err error) {
+ sac := &Club{}
+ if err := tx.Where("name = ?", "SAC").First(sac).Error; err != nil {
+ return err
+ }
+
+ if err := tx.Model(u).Association("Member").Append(sac); err != nil {
+ return err
+ }
+
+ if err := tx.Model(u).Association("Follower").Append(sac); err != nil {
+ return err
+ }
+
+ if err := tx.Model(&Club{}).Where("id = ?", sac.ID).Update("num_members", gorm.Expr("num_members + 1")).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (u *User) AfterDelete(tx *gorm.DB) (err error) {
+ sac := &Club{}
+ if err := tx.Where("name = ?", "SAC").First(sac).Error; err != nil {
+ return err
+ }
+
+ if err := tx.Model(&Club{}).Where("id = ?", sac.ID).Update("num_members", gorm.Expr("num_members - 1")).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/backend/src/services/auth.go b/backend/src/services/auth.go
index 95abf8f82..40bad0042 100644
--- a/backend/src/services/auth.go
+++ b/backend/src/services/auth.go
@@ -92,7 +92,7 @@ func (a *AuthService) UpdatePassword(id string, passwordBody models.UpdatePasswo
return err
}
- correct, passwordErr := auth.ComparePasswordAndHash(passwordBody.OldPassword, passwordHash)
+ correct, passwordErr := auth.ComparePasswordAndHash(passwordBody.OldPassword, *passwordHash)
if passwordErr != nil || !correct {
return &errors.FailedToValidateUser
}
diff --git a/backend/src/services/category.go b/backend/src/services/category.go
index ead4df2c0..03c966bf1 100644
--- a/backend/src/services/category.go
+++ b/backend/src/services/category.go
@@ -57,9 +57,7 @@ func (c *CategoryService) GetCategories(limit string, page string) ([]models.Cat
return nil, &errors.FailedToValidatePage
}
- offset := (*pageAsInt - 1) * *limitAsInt
-
- return transactions.GetCategories(c.DB, *limitAsInt, offset)
+ return transactions.GetCategories(c.DB, *limitAsInt, *pageAsInt)
}
func (c *CategoryService) GetCategory(id string) (*models.Category, *errors.Error) {
diff --git a/backend/src/services/category_tag.go b/backend/src/services/category_tag.go
index a16286687..87887415b 100644
--- a/backend/src/services/category_tag.go
+++ b/backend/src/services/category_tag.go
@@ -39,9 +39,7 @@ func (t *CategoryTagService) GetTagsByCategory(categoryID string, limit string,
return nil, &errors.FailedToValidatePage
}
- offset := (*pageAsInt - 1) * *limitAsInt
-
- return transactions.GetTagsByCategory(t.DB, *categoryIDAsUUID, *limitAsInt, offset)
+ return transactions.GetTagsByCategory(t.DB, *categoryIDAsUUID, *limitAsInt, *pageAsInt)
}
func (t *CategoryTagService) GetTagByCategory(categoryID string, tagID string) (*models.Tag, *errors.Error) {
diff --git a/backend/src/services/club_event.go b/backend/src/services/club_event.go
index c95eadc2a..ed72ea408 100644
--- a/backend/src/services/club_event.go
+++ b/backend/src/services/club_event.go
@@ -36,7 +36,5 @@ func (c *ClubEventService) GetClubEvents(clubID string, limit string, page strin
return nil, &errors.FailedToValidatePage
}
- offset := (*pageAsInt - 1) * *limitAsInt
-
- return transactions.GetClubEvents(c.DB, *idAsUUID, *limitAsInt, offset)
+ return transactions.GetClubEvents(c.DB, *idAsUUID, *limitAsInt, *pageAsInt)
}
diff --git a/backend/src/services/contact.go b/backend/src/services/contact.go
index 1d04ea695..37b67273e 100644
--- a/backend/src/services/contact.go
+++ b/backend/src/services/contact.go
@@ -35,9 +35,7 @@ func (c *ContactService) GetContacts(limit string, page string) ([]models.Contac
return nil, &errors.FailedToValidatePage
}
- offset := (*pageAsInt - 1) * *limitAsInt
-
- return transactions.GetContacts(c.DB, *limitAsInt, offset)
+ return transactions.GetContacts(c.DB, *limitAsInt, *pageAsInt)
}
func (c *ContactService) GetContact(contactID string) (*models.Contact, *errors.Error) {
diff --git a/backend/src/services/event.go b/backend/src/services/event.go
index bf12adee1..b6b0a2f9d 100644
--- a/backend/src/services/event.go
+++ b/backend/src/services/event.go
@@ -43,9 +43,7 @@ func (e *EventService) GetEvents(limit string, page string) ([]models.Event, *er
return nil, &errors.FailedToValidatePage
}
- offset := (*pageAsInt - 1) * *limitAsInt
-
- return transactions.GetEvents(e.DB, *limitAsInt, offset)
+ return transactions.GetEvents(e.DB, *limitAsInt, *pageAsInt)
}
// TODO: add logic for creating the []event here
diff --git a/backend/src/services/tag.go b/backend/src/services/tag.go
index 80f1be385..5b546aed8 100644
--- a/backend/src/services/tag.go
+++ b/backend/src/services/tag.go
@@ -50,9 +50,7 @@ func (t *TagService) GetTags(limit string, page string) ([]models.Tag, *errors.E
return nil, &errors.FailedToValidatePage
}
- offset := (*pageAsInt - 1) * *limitAsInt
-
- return transactions.GetTags(t.DB, *limitAsInt, offset)
+ return transactions.GetTags(t.DB, *limitAsInt, *pageAsInt)
}
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 df818a7b1..b463e3430 100644
--- a/backend/src/services/user.go
+++ b/backend/src/services/user.go
@@ -62,9 +62,7 @@ func (u *UserService) GetUsers(limit string, page string) ([]models.User, *error
return nil, &errors.FailedToValidatePage
}
- offset := (*pageAsInt - 1) * *limitAsInt
-
- return transactions.GetUsers(u.DB, *limitAsInt, offset)
+ return transactions.GetUsers(u.DB, *limitAsInt, *pageAsInt)
}
func (u *UserService) GetUser(id string) (*models.User, *errors.Error) {
diff --git a/backend/src/transactions/category.go b/backend/src/transactions/category.go
index 8d5be8392..c38f06b00 100644
--- a/backend/src/transactions/category.go
+++ b/backend/src/transactions/category.go
@@ -23,9 +23,11 @@ func CreateCategory(db *gorm.DB, category models.Category) (*models.Category, *e
return &category, nil
}
-func GetCategories(db *gorm.DB, limit int, offset int) ([]models.Category, *errors.Error) {
+func GetCategories(db *gorm.DB, limit int, page int) ([]models.Category, *errors.Error) {
var categories []models.Category
+ offset := (page - 1) * limit
+
if err := db.Limit(limit).Offset(offset).Find(&categories).Error; err != nil {
return nil, &errors.FailedToGetCategories
}
diff --git a/backend/src/transactions/category_tag.go b/backend/src/transactions/category_tag.go
index f827fb557..591f99895 100644
--- a/backend/src/transactions/category_tag.go
+++ b/backend/src/transactions/category_tag.go
@@ -11,7 +11,7 @@ import (
"gorm.io/gorm"
)
-func GetTagsByCategory(db *gorm.DB, categoryID uuid.UUID, limit int, offset int) ([]models.Tag, *errors.Error) {
+func GetTagsByCategory(db *gorm.DB, categoryID uuid.UUID, limit int, page int) ([]models.Tag, *errors.Error) {
var category models.Category
if err := db.Where("id = ?", categoryID).First(&category).Error; err != nil {
@@ -22,6 +22,9 @@ func GetTagsByCategory(db *gorm.DB, categoryID uuid.UUID, limit int, offset int)
}
var tags []models.Tag
+
+ offset := (page - 1) * limit
+
if err := db.Where("category_id = ?", categoryID).Limit(limit).Offset(offset).Find(&tags).Error; err != nil {
return nil, &errors.FailedToGetTags
}
diff --git a/backend/src/transactions/club.go b/backend/src/transactions/club.go
index 2fa0f0708..baf0fb11b 100644
--- a/backend/src/transactions/club.go
+++ b/backend/src/transactions/club.go
@@ -54,20 +54,33 @@ func GetClubs(db *gorm.DB, queryParams *models.ClubQueryParams) ([]models.Club,
return clubs, nil
}
-func CreateClub(db *gorm.DB, userId uuid.UUID, club models.Club) (*models.Club, *errors.Error) {
- user, err := GetUser(db, userId)
+func CreateClub(db *gorm.DB, userID uuid.UUID, club models.Club) (*models.Club, *errors.Error) {
+ user, err := GetUser(db, userID)
if err != nil {
return nil, err
}
tx := db.Begin()
+ club.NumMembers = 1
+
if err := tx.Create(&club).Error; err != nil {
tx.Rollback()
return nil, &errors.FailedToCreateClub
}
- if err := tx.Model(&club).Association("Admin").Append(user); err != nil {
+ membership := models.Membership{
+ ClubID: club.ID,
+ UserID: user.ID,
+ MembershipType: models.MembershipTypeAdmin,
+ }
+
+ if err := tx.Create(&membership).Error; err != nil {
+ tx.Rollback()
+ return nil, &errors.FailedToCreateClub
+ }
+
+ if err := tx.Model(&user).Association("Follower").Append(&club); err != nil {
tx.Rollback()
return nil, &errors.FailedToCreateClub
}
diff --git a/backend/src/transactions/club_event.go b/backend/src/transactions/club_event.go
index 1aded2542..81616e114 100644
--- a/backend/src/transactions/club_event.go
+++ b/backend/src/transactions/club_event.go
@@ -7,16 +7,14 @@ import (
"gorm.io/gorm"
)
-func GetClubEvents(db *gorm.DB, clubID uuid.UUID, limit int, offset int) ([]models.Event, *errors.Error) {
- club, err := GetClub(db, clubID)
- if err != nil {
- return nil, err
- }
+func GetClubEvents(db *gorm.DB, clubID uuid.UUID, limit int, page int) ([]models.Event, *errors.Error) {
var events []models.Event
- if err := db.Model(&club).Limit(limit).Offset(offset).Association("Event").Find(&events); err != nil {
- return nil, &errors.FailedToGetClubEvents
+ offset := (page - 1) * limit
+
+ if err := db.Where("club_id = ?", clubID).Limit(limit).Offset(offset).Find(&events).Error; err != nil {
+ return nil, &errors.FailedToGetEvents
}
return events, nil
diff --git a/backend/src/transactions/club_follower.go b/backend/src/transactions/club_follower.go
index 2d59e7363..63a5cc366 100644
--- a/backend/src/transactions/club_follower.go
+++ b/backend/src/transactions/club_follower.go
@@ -15,7 +15,9 @@ func GetClubFollowers(db *gorm.DB, clubID uuid.UUID, limit int, page int) ([]mod
var users []models.User
- if err := db.Model(&club).Association("Follower").Find(&users); err != nil {
+ offset := (page - 1) * limit
+
+ if err := db.Limit(limit).Offset(offset).Model(&club).Association("Follower").Find(&users); err != nil {
return nil, &errors.FailedToGetClubFollowers
}
diff --git a/backend/src/transactions/club_member.go b/backend/src/transactions/club_member.go
index 6c1a87766..46538e7c3 100644
--- a/backend/src/transactions/club_member.go
+++ b/backend/src/transactions/club_member.go
@@ -16,7 +16,9 @@ func GetClubMembers(db *gorm.DB, clubID uuid.UUID, limit int, page int) ([]model
var users []models.User
- if err := db.Model(&club).Association("Member").Find(&users); err != nil {
+ offset := (page - 1) * limit
+
+ if err := db.Limit(limit).Offset(offset).Model(&club).Association("Member").Find(&users); err != nil {
return nil, &errors.FailedToGetClubMembers
}
diff --git a/backend/src/transactions/club_tag.go b/backend/src/transactions/club_tag.go
index 36ff31951..82423bc11 100644
--- a/backend/src/transactions/club_tag.go
+++ b/backend/src/transactions/club_tag.go
@@ -35,13 +35,13 @@ func GetClubTags(db *gorm.DB, id uuid.UUID) ([]models.Tag, *errors.Error) {
return tags, nil
}
-func DeleteClubTag(db *gorm.DB, id uuid.UUID, tagId uuid.UUID) *errors.Error {
+func DeleteClubTag(db *gorm.DB, id uuid.UUID, tagID uuid.UUID) *errors.Error {
club, err := GetClub(db, id)
if err != nil {
return err
}
- tag, err := GetTag(db, tagId)
+ tag, err := GetTag(db, tagID)
if err != nil {
return err
}
diff --git a/backend/src/transactions/contacts.go b/backend/src/transactions/contacts.go
index a47405fae..f068dfa77 100644
--- a/backend/src/transactions/contacts.go
+++ b/backend/src/transactions/contacts.go
@@ -9,8 +9,11 @@ import (
"gorm.io/gorm"
)
-func GetContacts(db *gorm.DB, limit int, offset int) ([]models.Contact, *errors.Error) {
+func GetContacts(db *gorm.DB, limit int, page int) ([]models.Contact, *errors.Error) {
var contacts []models.Contact
+
+ offset := (page - 1) * limit
+
result := db.Limit(limit).Offset(offset).Find(&contacts)
if result.Error != nil {
return nil, &errors.FailedToGetContacts
diff --git a/backend/src/transactions/event.go b/backend/src/transactions/event.go
index df73f8d62..cb4e3a149 100644
--- a/backend/src/transactions/event.go
+++ b/backend/src/transactions/event.go
@@ -10,9 +10,11 @@ import (
"gorm.io/gorm"
)
-func GetEvents(db *gorm.DB, limit int, offset int) ([]models.Event, *errors.Error) {
+func GetEvents(db *gorm.DB, limit int, page int) ([]models.Event, *errors.Error) {
var events []models.Event
+ offset := (page - 1) * limit
+
if db.Limit(limit).Offset(offset).Find(&events).Error != nil {
return nil, &errors.FailedToGetEvents
}
diff --git a/backend/src/transactions/tag.go b/backend/src/transactions/tag.go
index 057b937d4..282d06e76 100644
--- a/backend/src/transactions/tag.go
+++ b/backend/src/transactions/tag.go
@@ -48,9 +48,11 @@ func GetTag(db *gorm.DB, tagID uuid.UUID) (*models.Tag, *errors.Error) {
return &tag, nil
}
-func GetTags(db *gorm.DB, limit int, offset int) ([]models.Tag, *errors.Error) {
+func GetTags(db *gorm.DB, limit int, page int) ([]models.Tag, *errors.Error) {
var tags []models.Tag
+ offset := (page - 1) * limit
+
if err := db.Limit(limit).Offset(offset).Find(&tags).Error; err != nil {
return nil, &errors.FailedToGetTags
}
diff --git a/backend/src/transactions/user.go b/backend/src/transactions/user.go
index dae4ecd26..cc54670f1 100644
--- a/backend/src/transactions/user.go
+++ b/backend/src/transactions/user.go
@@ -32,9 +32,11 @@ func GetUserByEmail(db *gorm.DB, email string) (*models.User, *errors.Error) {
return &user, nil
}
-func GetUsers(db *gorm.DB, limit int, offset int) ([]models.User, *errors.Error) {
+func GetUsers(db *gorm.DB, limit int, page int) ([]models.User, *errors.Error) {
var users []models.User
+ offset := (page - 1) * limit
+
if err := db.Omit("password_hash").Limit(limit).Offset(offset).Find(&users).Error; err != nil {
return nil, &errors.FailedToGetUsers
}
@@ -62,17 +64,17 @@ func GetUser(db *gorm.DB, id uuid.UUID, preloads ...OptionalQuery) (*models.User
return &user, nil
}
-func GetUserPasswordHash(db *gorm.DB, id uuid.UUID) (string, *errors.Error) {
+func GetUserPasswordHash(db *gorm.DB, id uuid.UUID) (*string, *errors.Error) {
var user models.User
if err := db.Select("password_hash").First(&user, id).Error; err != nil {
if stdliberrors.Is(err, gorm.ErrRecordNotFound) {
- return "", &errors.UserNotFound
+ return nil, &errors.UserNotFound
} else {
- return "", &errors.FailedToGetUser
+ return nil, &errors.FailedToGetUser
}
}
- return user.PasswordHash, nil
+ return &user.PasswordHash, nil
}
func UpdateUser(db *gorm.DB, id uuid.UUID, user models.User) (*models.User, *errors.Error) {
@@ -107,8 +109,7 @@ func UpdatePassword(db *gorm.DB, id uuid.UUID, passwordHash string) *errors.Erro
}
func DeleteUser(db *gorm.DB, id uuid.UUID) *errors.Error {
- result := db.Delete(&models.User{}, id)
- if result.RowsAffected == 0 {
+ if result := db.Delete(&models.User{}, id); result.RowsAffected == 0 {
if result.Error == nil {
return &errors.UserNotFound
} else {
diff --git a/backend/src/transactions/user_follower.go b/backend/src/transactions/user_follower.go
index 77dde3c69..a67ff2fd8 100644
--- a/backend/src/transactions/user_follower.go
+++ b/backend/src/transactions/user_follower.go
@@ -1,64 +1,52 @@
package transactions
import (
- "slices"
-
"github.com/GenerateNU/sac/backend/src/errors"
"github.com/GenerateNU/sac/backend/src/models"
"github.com/google/uuid"
"gorm.io/gorm"
)
-func CreateFollowing(db *gorm.DB, userId uuid.UUID, clubId uuid.UUID) *errors.Error {
- user, err := GetUser(db, userId)
+func CreateFollowing(db *gorm.DB, userID uuid.UUID, clubID uuid.UUID) *errors.Error {
+ user, err := GetUser(db, userID)
if err != nil {
return err
}
- club, err := GetClub(db, clubId)
+ club, err := GetClub(db, clubID)
if err != nil {
return err
}
if err := db.Model(&user).Association("Follower").Append(club); err != nil {
- return &errors.FailedToUpdateUser
+ return &errors.FailedToFollowClub
}
return nil
}
-func DeleteFollowing(db *gorm.DB, userId uuid.UUID, clubId uuid.UUID) *errors.Error {
- user, err := GetUser(db, userId, PreloadFollwer())
+func DeleteFollowing(db *gorm.DB, userID uuid.UUID, clubID uuid.UUID) *errors.Error {
+ user, err := GetUser(db, userID)
if err != nil {
return err
}
- club, err := GetClub(db, clubId, PreloadFollwer())
+ club, err := GetClub(db, clubID)
if err != nil {
return err
}
- userFollowingClubIDs := make([]uuid.UUID, len(user.Follower))
-
- for i, club := range user.Follower {
- userFollowingClubIDs[i] = club.ID
- }
-
- if !slices.Contains(userFollowingClubIDs, club.ID) {
- return &errors.UserNotFollowingClub
- }
-
if err := db.Model(&user).Association("Follower").Delete(club); err != nil {
- return &errors.FailedToUpdateUser
+ return &errors.UserNotFollowingClub
}
return nil
}
-func GetClubFollowing(db *gorm.DB, userId uuid.UUID) ([]models.Club, *errors.Error) {
+func GetClubFollowing(db *gorm.DB, userID uuid.UUID) ([]models.Club, *errors.Error) {
var clubs []models.Club
- user, err := GetUser(db, userId)
+ user, err := GetUser(db, userID)
if err != nil {
return nil, err
}
diff --git a/backend/src/transactions/user_member.go b/backend/src/transactions/user_member.go
index 6b079862c..a9da7b63d 100644
--- a/backend/src/transactions/user_member.go
+++ b/backend/src/transactions/user_member.go
@@ -1,64 +1,95 @@
package transactions
import (
- "slices"
-
"github.com/GenerateNU/sac/backend/src/errors"
"github.com/GenerateNU/sac/backend/src/models"
"github.com/google/uuid"
"gorm.io/gorm"
)
-func CreateMember(db *gorm.DB, userId uuid.UUID, clubId uuid.UUID) *errors.Error {
- user, err := GetUser(db, userId)
+func CreateMember(db *gorm.DB, userID uuid.UUID, clubID uuid.UUID) *errors.Error {
+ user, err := GetUser(db, userID)
if err != nil {
return err
}
- club, err := GetClub(db, clubId)
+ club, err := GetClub(db, clubID)
if err != nil {
return err
}
- if err := db.Model(&user).Association("Member").Append(club); err != nil {
+ tx := db.Begin()
+
+ var count int64
+ if err := tx.Model(&models.Membership{}).Where("user_id = ? AND club_id = ?", userID, clubID).Count(&count).Error; err != nil {
+ return &errors.FailedToGetUserMemberships
+ }
+
+ if count > 0 {
+ return nil
+ }
+
+ if err := tx.Model(&user).Association("Member").Append(club); err != nil {
+ tx.Rollback()
+ return &errors.FailedToUpdateUser
+ }
+
+ if err := CreateFollowing(tx, userID, clubID); err != nil {
+ tx.Rollback()
+ return err
+ }
+
+ if err := tx.Model(&club).Update("num_members", gorm.Expr("num_members + 1")).Error; err != nil {
+ tx.Rollback()
+ return &errors.FailedToUpdateUser
+ }
+
+ if err := tx.Commit().Error; err != nil {
return &errors.FailedToUpdateUser
}
return nil
}
-func DeleteMember(db *gorm.DB, userId uuid.UUID, clubId uuid.UUID) *errors.Error {
- user, err := GetUser(db, userId, PreloadMember())
+func DeleteMember(db *gorm.DB, userID uuid.UUID, clubID uuid.UUID) *errors.Error {
+ user, err := GetUser(db, userID)
if err != nil {
return err
}
- club, err := GetClub(db, clubId, PreloadMember())
+ club, err := GetClub(db, clubID)
if err != nil {
return err
}
- userMemberClubIDs := make([]uuid.UUID, len(user.Member))
+ tx := db.Begin()
- for i, club := range user.Member {
- userMemberClubIDs[i] = club.ID
+ if err := tx.Model(&user).Association("Member").Delete(club); err != nil {
+ tx.Rollback()
+ return &errors.FailedToUpdateUser
}
- if !slices.Contains(userMemberClubIDs, club.ID) {
- return &errors.UserNotMemberOfClub
+ if err := DeleteFollowing(tx, userID, clubID); err != nil {
+ tx.Rollback()
+ return err
+ }
+
+ if err := tx.Model(&club).Update("num_members", gorm.Expr("num_members - 1")).Error; err != nil {
+ tx.Rollback()
+ return &errors.FailedToUpdateUser
}
- if err := db.Model(&user).Association("Member").Delete(club); err != nil {
+ if err := tx.Commit().Error; err != nil {
return &errors.FailedToUpdateUser
}
return nil
}
-func GetClubMembership(db *gorm.DB, userId uuid.UUID) ([]models.Club, *errors.Error) {
+func GetClubMembership(db *gorm.DB, userID uuid.UUID) ([]models.Club, *errors.Error) {
var clubs []models.Club
- user, err := GetUser(db, userId)
+ user, err := GetUser(db, userID)
if err != nil {
return nil, err
}
diff --git a/backend/tests/api/__debug_bin940129140 b/backend/tests/api/__debug_bin940129140
new file mode 100755
index 000000000..49043423b
Binary files /dev/null and b/backend/tests/api/__debug_bin940129140 differ
diff --git a/backend/tests/api/club_test.go b/backend/tests/api/club_test.go
index 6f6059770..bddd6d22a 100644
--- a/backend/tests/api/club_test.go
+++ b/backend/tests/api/club_test.go
@@ -57,15 +57,15 @@ func AssertClubBodyRespDB(eaa h.ExistingAppAssert, resp *http.Response, body *ma
eaa.Assert.Equal(dbClub.ApplicationLink, respClub.ApplicationLink)
eaa.Assert.Equal(dbClub.Logo, respClub.Logo)
- var dbAdmins []models.User
+ var dbAdmins []models.Membership
- err = eaa.App.Conn.Model(&dbClub).Association("Admin").Find(&dbAdmins)
+ err = eaa.App.Conn.Where("club_id = ? AND membership_type = ?", dbClub.ID, models.MembershipTypeAdmin).Find(&dbAdmins).Error
eaa.Assert.NilError(err)
eaa.Assert.Equal(1, len(dbAdmins))
- eaa.Assert.Equal(*(*body)["user_id"].(*uuid.UUID), dbAdmins[0].ID)
+ eaa.Assert.Equal(*(*body)["user_id"].(*uuid.UUID), dbAdmins[0].UserID)
eaa.Assert.Equal((*body)["name"].(string), dbClub.Name)
eaa.Assert.Equal((*body)["preview"].(string), dbClub.Preview)
eaa.Assert.Equal((*body)["description"].(string), dbClub.Description)
@@ -361,15 +361,15 @@ func TestUpdateClubFailsOnInvalidBody(t *testing.T) {
dbClub := dbClubs[0]
- var dbAdmins []models.User
+ var dbAdmins []models.Membership
- err = eaa.App.Conn.Model(&dbClub).Association("Admin").Find(&dbAdmins)
+ err = eaa.App.Conn.Where("club_id = ? AND membership_type = ?", dbClub.ID, models.MembershipTypeAdmin).Find(&dbAdmins).Error
eaa.Assert.NilError(err)
eaa.Assert.Equal(1, len(dbAdmins))
- eaa.Assert.Equal(*(*body)["user_id"].(*uuid.UUID), dbAdmins[0].ID)
+ eaa.Assert.Equal(*(*body)["user_id"].(*uuid.UUID), dbAdmins[0].UserID)
eaa.Assert.Equal((*body)["name"].(string), dbClub.Name)
eaa.Assert.Equal((*body)["preview"].(string), dbClub.Preview)
eaa.Assert.Equal((*body)["description"].(string), dbClub.Description)
diff --git a/backend/tests/api/helpers/requests.go b/backend/tests/api/helpers/requests.go
index 78b501015..c426f9f24 100644
--- a/backend/tests/api/helpers/requests.go
+++ b/backend/tests/api/helpers/requests.go
@@ -106,6 +106,10 @@ func (existingAppAssert ExistingAppAssert) TestOnStatus(request TestRequest, sta
func (request *TestRequest) testOn(existingAppAssert ExistingAppAssert, status int, key string, value string) (ExistingAppAssert, *http.Response) {
appAssert, resp := request.test(existingAppAssert)
+ if resp.StatusCode == 204 {
+ return appAssert, resp
+ }
+
var respBody map[string]interface{}
err := json.NewDecoder(resp.Body).Decode(&respBody)
diff --git a/backend/tests/api/user_follower_test.go b/backend/tests/api/user_follower_test.go
index 61c2da3c1..637be82fc 100644
--- a/backend/tests/api/user_follower_test.go
+++ b/backend/tests/api/user_follower_test.go
@@ -9,7 +9,6 @@ import (
"github.com/GenerateNU/sac/backend/src/errors"
"github.com/GenerateNU/sac/backend/src/models"
- "github.com/GenerateNU/sac/backend/src/transactions"
h "github.com/GenerateNU/sac/backend/tests/api/helpers"
"github.com/gofiber/fiber/v2"
"github.com/google/uuid"
@@ -34,9 +33,9 @@ func TestCreateFollowingWorks(t *testing.T) {
eaa.Assert.NilError(err)
- eaa.Assert.Equal(1, len(user.Follower))
+ eaa.Assert.Equal(2, len(user.Follower))
- eaa.Assert.Equal(clubUUID, user.Follower[0].ID)
+ eaa.Assert.Equal(clubUUID, user.Follower[1].ID)
var club models.Club
@@ -128,7 +127,7 @@ func TestDeleteFollowingWorks(t *testing.T) {
eaa.Assert.NilError(err)
- eaa.Assert.Equal(0, len(user.Follower))
+ eaa.Assert.Equal(1, len(user.Follower))
var club models.Club
@@ -142,46 +141,47 @@ func TestDeleteFollowingWorks(t *testing.T) {
).Close()
}
-func TestDeleteFollwerNotFollower(t *testing.T) {
- appAssert, _, clubUUID := CreateSampleClub(h.InitTest(t))
+// TODO: test can't work because you become a follower when you create a club
+// func TestDeleteFollwerNotFollower(t *testing.T) {
+// appAssert, _, clubUUID := CreateSampleClub(h.InitTest(t))
- userClubsFollowerBefore, err := transactions.GetClubFollowing(appAssert.App.Conn, appAssert.App.TestUser.UUID)
+// userClubsFollowerBefore, err := transactions.GetClubFollowing(appAssert.App.Conn, appAssert.App.TestUser.UUID)
- appAssert.Assert.Assert(err == nil)
+// appAssert.Assert.Assert(err == nil)
- clubUsersFollowerBefore, err := transactions.GetClubFollowers(appAssert.App.Conn, clubUUID, 10, 0)
+// clubUsersFollowerBefore, err := transactions.GetClubFollowers(appAssert.App.Conn, clubUUID, 10, 0)
- appAssert.Assert.Assert(err == nil)
+// appAssert.Assert.Assert(err == nil)
- appAssert.TestOnErrorAndTester(
- h.TestRequest{
- Method: fiber.MethodDelete,
- Path: fmt.Sprintf("/api/v1/users/:userID/follower/%s", clubUUID),
- Role: &models.Super,
- TestUserIDReplaces: h.StringToPointer(":userID"),
- },
- h.ErrorWithTester{
- Error: errors.UserNotFollowingClub,
- Tester: func(eaa h.ExistingAppAssert, resp *http.Response) {
- var user models.User
+// appAssert.TestOnErrorAndTester(
+// h.TestRequest{
+// Method: fiber.MethodDelete,
+// Path: fmt.Sprintf("/api/v1/users/:userID/follower/%s", clubUUID),
+// Role: &models.Super,
+// TestUserIDReplaces: h.StringToPointer(":userID"),
+// },
+// h.ErrorWithTester{
+// Error: errors.UserNotFollowingClub,
+// Tester: func(eaa h.ExistingAppAssert, resp *http.Response) {
+// var user models.User
- err := eaa.App.Conn.Where("id = ?", eaa.App.TestUser.UUID).Preload("Follower").First(&user)
+// err := eaa.App.Conn.Where("id = ?", eaa.App.TestUser.UUID).Preload("Follower").First(&user)
- eaa.Assert.NilError(err)
+// eaa.Assert.NilError(err)
- eaa.Assert.Equal(userClubsFollowerBefore, user.Follower)
+// eaa.Assert.Equal(userClubsFollowerBefore, user.Follower)
- var club models.Club
+// var club models.Club
- err = eaa.App.Conn.Where("id = ?", clubUUID).Preload("Follower").First(&club)
+// err = eaa.App.Conn.Where("id = ?", clubUUID).Preload("Follower").First(&club)
- eaa.Assert.NilError(err)
+// eaa.Assert.NilError(err)
- eaa.Assert.Equal(clubUsersFollowerBefore, club.Follower)
- },
- },
- ).Close()
-}
+// eaa.Assert.Equal(clubUsersFollowerBefore, club.Follower)
+// },
+// },
+// ).Close()
+// }
func TestDeleteFollowingFailsClubIdNotExists(t *testing.T) {
appAssert, _, _ := CreateSampleClub(h.InitTest(t))
@@ -259,7 +259,7 @@ func TestGetFollowingWorks(t *testing.T) {
eaa.Assert.NilError(err)
- eaa.Assert.Equal(1, len(clubs))
+ eaa.Assert.Equal(2, len(clubs))
var dbClubs []models.Club
@@ -267,7 +267,7 @@ func TestGetFollowingWorks(t *testing.T) {
eaa.Assert.NilError(err)
- eaa.Assert.Equal(1, len(clubs))
+ eaa.Assert.Equal(2, len(clubs))
},
},
).Close()
diff --git a/backend/tests/api/user_member_test.go b/backend/tests/api/user_member_test.go
index 9f41b9e52..9ef2f828f 100644
--- a/backend/tests/api/user_member_test.go
+++ b/backend/tests/api/user_member_test.go
@@ -9,7 +9,6 @@ import (
"github.com/GenerateNU/sac/backend/src/errors"
"github.com/GenerateNU/sac/backend/src/models"
- "github.com/GenerateNU/sac/backend/src/transactions"
h "github.com/GenerateNU/sac/backend/tests/api/helpers"
"github.com/gofiber/fiber/v2"
"github.com/google/uuid"
@@ -142,46 +141,47 @@ func TestDeleteMembershipWorks(t *testing.T) {
).Close()
}
-func TestDeleteMembershipNotMembership(t *testing.T) {
- appAssert, _, clubUUID := CreateSampleClub(h.InitTest(t))
+// TODO: test can't work because you become a member when you create a club
+// func TestDeleteMembershipNotMembership(t *testing.T) {
+// appAssert, _, clubUUID := CreateSampleClub(h.InitTest(t))
- userClubsMemberBefore, err := transactions.GetClubMembership(appAssert.App.Conn, appAssert.App.TestUser.UUID)
+// userClubsMemberBefore, err := transactions.GetClubMembership(appAssert.App.Conn, appAssert.App.TestUser.UUID)
- appAssert.Assert.Assert(err == nil)
+// appAssert.Assert.Assert(err == nil)
- clubUsersMemberBefore, err := transactions.GetClubMembers(appAssert.App.Conn, clubUUID, 10, 0)
+// clubUsersMemberBefore, err := transactions.GetClubMembers(appAssert.App.Conn, clubUUID, 10, 0)
- appAssert.Assert.Assert(err == nil)
+// appAssert.Assert.Assert(err == nil)
- appAssert.TestOnErrorAndTester(
- h.TestRequest{
- Method: fiber.MethodDelete,
- Path: fmt.Sprintf("/api/v1/users/:userID/member/%s", clubUUID),
- Role: &models.Super,
- TestUserIDReplaces: h.StringToPointer(":userID"),
- },
- h.ErrorWithTester{
- Error: errors.UserNotMemberOfClub,
- Tester: func(eaa h.ExistingAppAssert, resp *http.Response) {
- var user models.User
+// appAssert.TestOnErrorAndTester(
+// h.TestRequest{
+// Method: fiber.MethodDelete,
+// Path: fmt.Sprintf("/api/v1/users/:userID/member/%s", clubUUID),
+// Role: &models.Super,
+// TestUserIDReplaces: h.StringToPointer(":userID"),
+// },
+// h.ErrorWithTester{
+// Error: errors.UserNotMemberOfClub,
+// Tester: func(eaa h.ExistingAppAssert, resp *http.Response) {
+// var user models.User
- err := eaa.App.Conn.Where("id = ?", eaa.App.TestUser.UUID).Preload("Member").First(&user)
+// err := eaa.App.Conn.Where("id = ?", eaa.App.TestUser.UUID).Preload("Member").First(&user)
- eaa.Assert.NilError(err)
+// eaa.Assert.NilError(err)
- eaa.Assert.Equal(userClubsMemberBefore, user.Member)
+// eaa.Assert.Equal(userClubsMemberBefore, user.Member)
- var club models.Club
+// var club models.Club
- err = eaa.App.Conn.Where("id = ?", clubUUID).Preload("Member").First(&club)
+// err = eaa.App.Conn.Where("id = ?", clubUUID).Preload("Member").First(&club)
- eaa.Assert.NilError(err)
+// eaa.Assert.NilError(err)
- eaa.Assert.Equal(clubUsersMemberBefore, club.Member)
- },
- },
- ).Close()
-}
+// eaa.Assert.Equal(clubUsersMemberBefore, club.Member)
+// },
+// },
+// ).Close()
+// }
func TestDeleteMembershipFailsClubIdNotExists(t *testing.T) {
appAssert, _, _ := CreateSampleClub(h.InitTest(t))
diff --git a/backend/tests/api/user_test.go b/backend/tests/api/user_test.go
index 20e1d0ebe..8d1e42eca 100644
--- a/backend/tests/api/user_test.go
+++ b/backend/tests/api/user_test.go
@@ -46,7 +46,7 @@ func TestGetUsersWorksForSuper(t *testing.T) {
eaa.Assert.Equal(models.College("KCCS"), respUser.College)
eaa.Assert.Equal(models.Year(1), respUser.Year)
- dbUsers, err := transactions.GetUsers(eaa.App.Conn, 1, 0)
+ dbUsers, err := transactions.GetUsers(eaa.App.Conn, 1, 1)
eaa.Assert.NilError(&err)
diff --git a/cli/commands/backend.go b/cli/commands/backend.go
index f058e3946..38b736617 100644
--- a/cli/commands/backend.go
+++ b/cli/commands/backend.go
@@ -36,7 +36,7 @@ func BackendCommand() *cli.Command {
func RunBackend() error {
cmd := exec.Command("go", "run", "main.go")
- cmd.Dir = BACKEND_DIR
+ cmd.Dir = BACKEND_SRC_DIR
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
diff --git a/cli/commands/config.go b/cli/commands/config.go
index 906bd3a9d..e33a7f4ab 100644
--- a/cli/commands/config.go
+++ b/cli/commands/config.go
@@ -8,9 +8,10 @@ import (
)
var (
- ROOT_DIR, _ = utils.GetRootDir()
- FRONTEND_DIR = filepath.Join(ROOT_DIR, "/frontend")
- BACKEND_DIR = filepath.Join(ROOT_DIR, "/backend/src")
- CONFIG, _ = config.GetConfiguration(filepath.Join(ROOT_DIR, "/config"), false)
- MIGRATION_FILE = filepath.Join(BACKEND_DIR, "/migrations/data.sql")
+ ROOT_DIR, _ = utils.GetRootDir()
+ 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)
+ MIGRATION_FILE = filepath.Join(BACKEND_SRC_DIR, "/migrations/data.sql")
)
diff --git a/cli/commands/insert.go b/cli/commands/insert.go
index 9b8a55754..afbf4dec8 100644
--- a/cli/commands/insert.go
+++ b/cli/commands/insert.go
@@ -53,7 +53,7 @@ func InsertDB() error {
migrateCmd := exec.Command("go", "run", "main.go", "--only-migrate")
- migrateCmd.Dir = BACKEND_DIR
+ migrateCmd.Dir = BACKEND_SRC_DIR
if err := migrateCmd.Run(); err != nil {
return fmt.Errorf("error running migration: %w", err)
diff --git a/cli/commands/migrate.go b/cli/commands/migrate.go
index 672b8be4d..12076ec44 100644
--- a/cli/commands/migrate.go
+++ b/cli/commands/migrate.go
@@ -33,7 +33,7 @@ func Migrate() error {
fmt.Println("Migrating database")
goCmd := exec.Command("go", "run", "main.go", "--only-migrate")
- goCmd.Dir = BACKEND_DIR
+ goCmd.Dir = BACKEND_SRC_DIR
output, err := goCmd.CombinedOutput()
if err != nil {
diff --git a/cli/commands/reset.go b/cli/commands/reset.go
index 4e9cf4324..2ca80e1f7 100644
--- a/cli/commands/reset.go
+++ b/cli/commands/reset.go
@@ -52,7 +52,7 @@ func ResetData() error {
}
cmd := exec.Command("sleep", "1")
- cmd.Dir = BACKEND_DIR
+ cmd.Dir = BACKEND_SRC_DIR
err = cmd.Run()
if err != nil {
@@ -65,7 +65,7 @@ func ResetData() error {
}
cmd = exec.Command("sleep", "1")
- cmd.Dir = BACKEND_DIR
+ cmd.Dir = BACKEND_SRC_DIR
err = cmd.Run()
if err != nil {
@@ -91,7 +91,7 @@ func ResetMigration() error {
}
cmd := exec.Command("sleep", "1")
- cmd.Dir = BACKEND_DIR
+ cmd.Dir = BACKEND_SRC_DIR
err = cmd.Run()
if err != nil {
diff --git a/cli/commands/swagger.go b/cli/commands/swagger.go
index f830e9029..b65c40126 100644
--- a/cli/commands/swagger.go
+++ b/cli/commands/swagger.go
@@ -15,7 +15,7 @@ func SwaggerCommand() *cli.Command {
Usage: "Runs `swag init` to update Swagger documentation for the backend API",
Action: func(c *cli.Context) error {
cmd := exec.Command("swag", "init")
- cmd.Dir = BACKEND_DIR
+ cmd.Dir = BACKEND_SRC_DIR
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
@@ -31,7 +31,7 @@ func SwaggerCommand() *cli.Command {
func Swagger() error {
cmd := exec.Command("swag", "init")
- cmd.Dir = BACKEND_DIR
+ cmd.Dir = BACKEND_SRC_DIR
out, err := cmd.CombinedOutput()
if err != nil {
diff --git a/cli/commands/test.go b/cli/commands/test.go
index b84617e94..a91e4d7a3 100644
--- a/cli/commands/test.go
+++ b/cli/commands/test.go
@@ -95,7 +95,7 @@ func Test(folder string, runFrontend bool, runBackend bool) error {
func BackendTest() error {
cmd := exec.Command("go", "test", "./...")
- cmd.Dir = BACKEND_DIR
+ cmd.Dir = BACKEND_SRC_DIR
out, err := cmd.CombinedOutput()
if err != nil {
diff --git a/cli/go.mod b/cli/go.mod
index f36f981fe..ebd7d7c2f 100644
--- a/cli/go.mod
+++ b/cli/go.mod
@@ -13,7 +13,7 @@ require (
github.com/awnumar/memguard v0.22.4 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/garrettladley/mattress v0.2.2 // indirect
+ github.com/garrettladley/mattress v0.4.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -30,7 +30,7 @@ require (
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.9.0 // indirect
- golang.org/x/crypto v0.19.0 // indirect
+ golang.org/x/crypto v0.20.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/sys v0.17.0 // indirect
golang.org/x/text v0.14.0 // indirect
diff --git a/cli/go.sum b/cli/go.sum
index 4a8b4d52c..0a70729a2 100644
--- a/cli/go.sum
+++ b/cli/go.sum
@@ -14,8 +14,8 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/garrettladley/mattress v0.2.2 h1:kL/AvDmas6DaAweHwdsm3IosY9zJIGj2uO+byxzhyrU=
-github.com/garrettladley/mattress v0.2.2/go.mod h1:OWKIRc9wC3gtD3Ng/nUuNEiR1TJvRYLmn/KZYw9nl5Q=
+github.com/garrettladley/mattress v0.4.0 h1:ZB3iqyc5q6bqIryNfsh2FMcbMdnV1XEryvqivouceQE=
+github.com/garrettladley/mattress v0.4.0/go.mod h1:OWKIRc9wC3gtD3Ng/nUuNEiR1TJvRYLmn/KZYw9nl5Q=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
diff --git a/frontend/sac-mobile/app/(app)/index.tsx b/frontend/sac-mobile/app/(app)/index.tsx
index 75e348171..346839305 100644
--- a/frontend/sac-mobile/app/(app)/index.tsx
+++ b/frontend/sac-mobile/app/(app)/index.tsx
@@ -1,13 +1,16 @@
import React from 'react';
-import { Button, Text, View } from 'react-native';
+import { Text, View } from 'react-native';
+import { Button } from '@/components/button';
import { useAuthStore } from '@/hooks/use-auth';
const Home = () => {
const { logout } = useAuthStore();
return (
-
+
Home
);
diff --git a/frontend/sac-mobile/app/(auth)/login.tsx b/frontend/sac-mobile/app/(auth)/login.tsx
index 31d4df057..e8eb6502f 100644
--- a/frontend/sac-mobile/app/(auth)/login.tsx
+++ b/frontend/sac-mobile/app/(auth)/login.tsx
@@ -1,11 +1,12 @@
import React from 'react';
import { Controller, useForm } from 'react-hook-form';
-import { Alert, Button, Text, TextInput, View } from 'react-native';
+import { Alert, Text, TextInput, View } from 'react-native';
import { router } from 'expo-router';
import { ZodError, z } from 'zod';
+import { Button } from '@/components/button';
import { useAuthStore } from '@/hooks/use-auth';
import { loginByEmail } from '@/services/auth';
@@ -92,13 +93,22 @@ const Login = () => {
{errors.password && {errors.password.message}}
-
+
);
diff --git a/frontend/sac-mobile/app/(auth)/register.tsx b/frontend/sac-mobile/app/(auth)/register.tsx
index d25da4037..b3fe38208 100644
--- a/frontend/sac-mobile/app/(auth)/register.tsx
+++ b/frontend/sac-mobile/app/(auth)/register.tsx
@@ -1,11 +1,13 @@
import React from 'react';
import { Controller, useForm } from 'react-hook-form';
-import { Alert, Button, Text, TextInput, View } from 'react-native';
+import { Alert, Text, TextInput, View } from 'react-native';
import { router } from 'expo-router';
import { ZodError, z } from 'zod';
+import { Button } from '@/components/button';
+
type RegisterFormData = {
firstName: string;
lastName: string;
@@ -126,12 +128,21 @@ const Register = () => {
{errors.password && {errors.password.message}}
-
+
);
diff --git a/frontend/sac-mobile/app/globals.css b/frontend/sac-mobile/app/globals.css
index b5c61c956..bd6213e1d 100644
--- a/frontend/sac-mobile/app/globals.css
+++ b/frontend/sac-mobile/app/globals.css
@@ -1,3 +1,3 @@
@tailwind base;
@tailwind components;
-@tailwind utilities;
+@tailwind utilities;
\ No newline at end of file
diff --git a/frontend/sac-mobile/components/button.tsx b/frontend/sac-mobile/components/button.tsx
new file mode 100644
index 000000000..ef94ccb73
--- /dev/null
+++ b/frontend/sac-mobile/components/button.tsx
@@ -0,0 +1,57 @@
+import { Text, TouchableOpacity, TouchableOpacityProps } from 'react-native';
+
+import { VariantProps, cva } from 'class-variance-authority';
+
+import { cn } from '@/lib/utils';
+
+const buttonVariants = {
+ variant: {
+ default: ['bg-blue-500', 'text-white'],
+ destructive: ['bg-red-500', 'text-white font-bold'],
+ secondary: ['bg-gray-500', 'text-white italic'],
+ outline: ['border border-gray-500 text-gray-500 font-bold']
+ },
+ size: {
+ default: 'h-10 px-4 py-2',
+ sm: 'h-9 rounded-md px-3',
+ lg: 'h-11 rounded-md px-8',
+ icon: 'h-10 w-10'
+ }
+};
+
+const buttonStyles = cva(
+ ['rounded-md', 'flex', 'items-center', 'justify-center'],
+ {
+ variants: buttonVariants,
+ defaultVariants: {
+ variant: 'default',
+ size: 'default'
+ }
+ }
+);
+
+export interface ButtonProps
+ extends TouchableOpacityProps,
+ VariantProps {}
+
+const Button = ({ children, variant, size, ...props }: ButtonProps) => {
+ return (
+
+
+ {children}
+
+
+ );
+};
+
+Button.displayName = 'Button';
+
+export { Button, buttonVariants };
diff --git a/frontend/sac-mobile/utils/const.ts b/frontend/sac-mobile/lib/const.ts
similarity index 100%
rename from frontend/sac-mobile/utils/const.ts
rename to frontend/sac-mobile/lib/const.ts
diff --git a/frontend/sac-mobile/lib/utils.ts b/frontend/sac-mobile/lib/utils.ts
new file mode 100644
index 000000000..34f614dbc
--- /dev/null
+++ b/frontend/sac-mobile/lib/utils.ts
@@ -0,0 +1,11 @@
+import clsx, { ClassValue } from 'clsx';
+import { twMerge } from 'tailwind-merge';
+
+/**
+ * Nativewind CSS classnames generator
+ * @param inputs - a list of classnames
+ * @returns a string of Nativewind CSS classnames
+ */
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/frontend/sac-mobile/package.json b/frontend/sac-mobile/package.json
index 1385727a3..76479dafb 100644
--- a/frontend/sac-mobile/package.json
+++ b/frontend/sac-mobile/package.json
@@ -16,16 +16,17 @@
},
"dependencies": {
"@expo/vector-icons": "^14.0.0",
- "@react-navigation/native": "^6.0.2",
- "@tanstack/react-query": "^5.24.8",
+ "@react-navigation/native": "^6.1.15",
+ "@tanstack/react-query": "^5.25.0",
"axios": "^1.6.7",
+ "class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"eslint": "^8.56.0",
"expo": "~50.0.5",
"expo-dev-client": "~3.3.9",
"expo-font": "~11.10.2",
"expo-linking": "~6.2.2",
- "expo-router": "~3.4.6",
+ "expo-router": "~3.4.8",
"expo-secure-store": "~12.8.1",
"expo-splash-screen": "~0.26.4",
"expo-status-bar": "~1.11.1",
@@ -34,28 +35,30 @@
"nativewind": "^2.0.11",
"react": "18.2.0",
"react-dom": "18.2.0",
- "react-hook-form": "^7.50.0",
- "react-native": "0.73.5",
+ "react-hook-form": "^7.51.0",
+ "react-native": "0.73.6",
"react-native-cookies": "^3.3.0",
+ "react-native-reanimated": "^3.8.0",
"react-native-safe-area-context": "4.9.0",
"react-native-screens": "~3.29.0",
"react-native-web": "~0.19.6",
+ "tailwind-merge": "^2.2.1",
"zod": "^3.22.4",
"zustand": "^4.5.2"
},
"devDependencies": {
- "@babel/core": "^7.23.9",
+ "@babel/core": "^7.24.0",
"@react-native-community/eslint-config": "^3.2.0",
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
- "@types/react": "~18.2.14",
+ "@types/react": "~18.2.64",
"eslint": "^8.56.0",
"eslint-plugin-prettier": "^5.1.3",
"jest": "^29.2.1",
- "jest-expo": "~50.0.1",
+ "jest-expo": "~50.0.3",
"prettier": "^3.2.4",
"react-test-renderer": "18.2.0",
"tailwindcss": "3.3.2",
- "typescript": "^5.2.0"
+ "typescript": "^5.4.2"
},
"private": true
}
diff --git a/frontend/sac-mobile/services/auth.ts b/frontend/sac-mobile/services/auth.ts
index 00539ba27..9288786b3 100644
--- a/frontend/sac-mobile/services/auth.ts
+++ b/frontend/sac-mobile/services/auth.ts
@@ -1,7 +1,7 @@
import axios from 'axios';
+import { API_BASE_URL } from '@/lib/const';
import { College, Tokens, User, Year } from '@/types/user';
-import { API_BASE_URL } from '@/utils/const';
/**
* Logins the user with the given email and password.
diff --git a/frontend/sac-mobile/yarn.lock b/frontend/sac-mobile/yarn.lock
index 0ecedd8de..5b1876935 100644
--- a/frontend/sac-mobile/yarn.lock
+++ b/frontend/sac-mobile/yarn.lock
@@ -45,21 +45,21 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
-"@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.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1"
- integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==
+"@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.23.9", "@babel/core@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b"
+ integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.6"
"@babel/helper-compilation-targets" "^7.23.6"
"@babel/helper-module-transforms" "^7.23.3"
- "@babel/helpers" "^7.23.9"
- "@babel/parser" "^7.23.9"
- "@babel/template" "^7.23.9"
- "@babel/traverse" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/helpers" "^7.24.0"
+ "@babel/parser" "^7.24.0"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@@ -101,6 +101,13 @@
dependencies:
"@babel/types" "^7.22.5"
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956"
+ integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==
+ 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":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
@@ -127,7 +134,7 @@
"@babel/helper-split-export-declaration" "^7.22.6"
semver "^6.3.1"
-"@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5":
+"@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.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1"
integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==
@@ -211,6 +218,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
+"@babel/helper-plugin-utils@^7.24.0":
+ 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.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0"
@@ -274,14 +286,14 @@
"@babel/template" "^7.22.15"
"@babel/types" "^7.22.19"
-"@babel/helpers@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d"
- integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==
+"@babel/helpers@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b"
+ integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==
dependencies:
- "@babel/template" "^7.23.9"
- "@babel/traverse" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4":
version "7.23.4"
@@ -292,10 +304,34 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b"
- integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==
+"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
+ integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
+
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/plugin-transform-optional-chaining" "^7.23.3"
+
+"@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==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-proposal-async-generator-functions@^7.0.0":
version "7.20.7"
@@ -376,6 +412,11 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.20.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
+"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
+ version "7.21.0-placeholder-for-preset-env.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
+ integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
+
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
@@ -390,13 +431,20 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.8.3":
+"@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.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"
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+ integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
"@babel/plugin-syntax-decorators@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca"
@@ -404,7 +452,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-syntax-dynamic-import@^7.8.0":
+"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3":
version "7.8.3"
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==
@@ -432,7 +480,21 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-syntax-import-meta@^7.8.3":
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3":
version "7.10.4"
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==
@@ -453,7 +515,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+"@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.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
@@ -502,7 +564,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-top-level-await@^7.8.3":
+"@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.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
@@ -516,14 +578,32 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-arrow-functions@^7.0.0":
+"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
+ integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==
+ dependencies:
+ "@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.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b"
integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-async-to-generator@^7.20.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==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa"
integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==
@@ -532,21 +612,38 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@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.0.0", "@babel/plugin-transform-block-scoped-functions@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77"
integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-block-scoping@^7.0.0":
+"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.23.4":
version "7.23.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5"
integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-classes@^7.0.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==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92"
integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==
@@ -560,7 +657,7 @@
"@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.0.0", "@babel/plugin-transform-computed-properties@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474"
integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==
@@ -568,14 +665,45 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/template" "^7.22.15"
-"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.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.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311"
integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-export-namespace-from@^7.22.11":
+"@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==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191"
integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==
@@ -591,7 +719,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-flow" "^7.23.3"
-"@babel/plugin-transform-for-of@^7.0.0":
+"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e"
integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==
@@ -599,7 +727,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
-"@babel/plugin-transform-function-name@^7.0.0":
+"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc"
integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==
@@ -608,20 +736,44 @@
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-literals@^7.0.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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4"
integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-member-expression-literals@^7.0.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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc"
integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
+"@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==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
"@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.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4"
@@ -631,7 +783,25 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-simple-access" "^7.22.5"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0":
+"@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==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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.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==
@@ -639,6 +809,29 @@
"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
"@babel/plugin-transform-object-rest-spread@^7.12.13":
version "7.23.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83"
@@ -650,7 +843,18 @@
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
"@babel/plugin-transform-parameters" "^7.23.3"
-"@babel/plugin-transform-object-super@^7.0.0":
+"@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==
+ 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-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd"
integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==
@@ -658,6 +862,23 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-replace-supers" "^7.22.20"
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af"
@@ -665,7 +886,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-private-methods@^7.22.5":
+"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4"
integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==
@@ -673,7 +894,7 @@
"@babel/helper-create-class-features-plugin" "^7.22.15"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-private-property-in-object@^7.22.11":
+"@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.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5"
integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==
@@ -683,7 +904,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-"@babel/plugin-transform-property-literals@^7.0.0":
+"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875"
integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==
@@ -737,6 +958,21 @@
"@babel/helper-annotate-as-pure" "^7.22.5"
"@babel/helper-plugin-utils" "^7.22.5"
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ 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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
"@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"
@@ -749,14 +985,14 @@
babel-plugin-polyfill-regenerator "^0.5.5"
semver "^6.3.1"
-"@babel/plugin-transform-shorthand-properties@^7.0.0":
+"@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.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210"
integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-spread@^7.0.0":
+"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c"
integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==
@@ -764,20 +1000,27 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
-"@babel/plugin-transform-sticky-regex@^7.0.0":
+"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04"
integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-template-literals@^7.0.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.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07"
integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
"@babel/plugin-transform-typescript@^7.23.3", "@babel/plugin-transform-typescript@^7.5.0":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c"
@@ -788,7 +1031,22 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-typescript" "^7.23.3"
-"@babel/plugin-transform-unicode-regex@^7.0.0":
+"@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==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@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==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.23.3":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc"
integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==
@@ -796,10 +1054,99 @@
"@babel/helper-create-regexp-features-plugin" "^7.22.15"
"@babel/helper-plugin-utils" "^7.22.5"
+"@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==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
"@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==
+ dependencies:
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@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-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-meta" "^7.10.4"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+ "@babel/plugin-syntax-top-level-await" "^7.14.5"
+ "@babel/plugin-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-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/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"
+ core-js-compat "^3.31.0"
+ semver "^6.3.1"
"@babel/preset-flow@^7.13.13":
version "7.23.3"
@@ -810,6 +1157,15 @@
"@babel/helper-validator-option" "^7.22.15"
"@babel/plugin-transform-flow-strip-types" "^7.23.3"
+"@babel/preset-modules@0.1.6-no-external-plugins":
+ version "0.1.6-no-external-plugins"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a"
+ integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
"@babel/preset-react@^7.22.15":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709"
@@ -822,7 +1178,7 @@
"@babel/plugin-transform-react-jsx-development" "^7.22.5"
"@babel/plugin-transform-react-pure-annotations" "^7.23.3"
-"@babel/preset-typescript@^7.13.0":
+"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7":
version "7.23.3"
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913"
integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==
@@ -856,14 +1212,21 @@
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/template@^7.0.0", "@babel/template@^7.22.15", "@babel/template@^7.23.9", "@babel/template@^7.3.3":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
- integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==
+"@babel/runtime@^7.23.7", "@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==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
+"@babel/template@^7.0.0", "@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
+ integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
dependencies:
"@babel/code-frame" "^7.23.5"
- "@babel/parser" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
"@babel/traverse@7.23.2":
version "7.23.2"
@@ -881,10 +1244,10 @@
debug "^4.1.0"
globals "^11.1.0"
-"@babel/traverse@^7.20.0", "@babel/traverse@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950"
- integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==
+"@babel/traverse@^7.20.0", "@babel/traverse@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e"
+ integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==
dependencies:
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.6"
@@ -892,8 +1255,8 @@
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
debug "^4.3.1"
globals "^11.1.0"
@@ -914,10 +1277,10 @@
"@babel/helper-validator-identifier" "^7.18.6"
to-fast-properties "^2.0.0"
-"@babel/types@^7.0.0", "@babel/types@^7.17.0", "@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.3.3":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002"
- integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==
+"@babel/types@^7.0.0", "@babel/types@^7.17.0", "@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
dependencies:
"@babel/helper-string-parser" "^7.23.4"
"@babel/helper-validator-identifier" "^7.22.20"
@@ -970,17 +1333,17 @@
mv "~2"
safe-json-stringify "~1"
-"@expo/cli@0.17.6":
- version "0.17.6"
- resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.17.6.tgz#dac94f99f297601b1996daa283f91f236916309a"
- integrity sha512-vpwQOyhkqQ5Ao96AGaFntRf6dX7h7/e9T7oKZ5KfJiaLRgfmNa/yHFu5cpXG76T2R7Q6aiU4ik0KU3P7nFMzEw==
+"@expo/cli@0.17.7":
+ version "0.17.7"
+ resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.17.7.tgz#4133ad97285ed90f31be31e35e55725051f36109"
+ integrity sha512-sOssVCFCVXSdZr2/KdqPeT2Qwxmty3rZeO9g5RbzZexHz93VUyONuqGwO1VlYKibn7FLYEGUovqU9Xi8zVB6JQ==
dependencies:
"@babel/runtime" "^7.20.0"
"@expo/code-signing-certificates" "0.0.5"
"@expo/config" "~8.5.0"
"@expo/config-plugins" "~7.8.0"
"@expo/devcert" "^1.0.0"
- "@expo/env" "~0.2.0"
+ "@expo/env" "~0.2.2"
"@expo/image-utils" "^0.4.0"
"@expo/json-file" "^8.2.37"
"@expo/metro-config" "~0.17.0"
@@ -1135,6 +1498,17 @@
dotenv-expand "~10.0.0"
getenv "^1.0.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==
+ dependencies:
+ chalk "^4.0.0"
+ debug "^4.3.4"
+ dotenv "~16.0.3"
+ dotenv-expand "~10.0.0"
+ getenv "^1.0.0"
+
"@expo/fingerprint@^0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.6.0.tgz#77366934673d4ecea37284109b4dd67f9e6a7487"
@@ -1173,7 +1547,33 @@
json5 "^2.2.2"
write-file-atomic "^2.3.0"
-"@expo/metro-config@0.17.5", "@expo/metro-config@~0.17.0":
+"@expo/metro-config@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.17.6.tgz#f1f4ef056aa357c1dba3841de465f5d319f17216"
+ integrity sha512-WaC1C+sLX/Wa7irwUigLhng3ckmXIEQefZczB8DfYmleV6uhfWWo2kz/HijFBpV7FKs2cW6u8J/aBQpFkxlcqg==
+ dependencies:
+ "@babel/core" "^7.20.0"
+ "@babel/generator" "^7.20.5"
+ "@babel/parser" "^7.20.0"
+ "@babel/types" "^7.20.0"
+ "@expo/config" "~8.5.0"
+ "@expo/env" "~0.2.2"
+ "@expo/json-file" "~8.3.0"
+ "@expo/spawn-async" "^1.7.2"
+ babel-preset-fbjs "^3.4.0"
+ chalk "^4.1.0"
+ debug "^4.3.2"
+ find-yarn-workspace-root "~2.0.0"
+ fs-extra "^9.1.0"
+ getenv "^1.0.0"
+ glob "^7.2.3"
+ jsc-safe-url "^0.2.4"
+ lightningcss "~1.19.0"
+ postcss "~8.4.32"
+ resolve-from "^5.0.0"
+ sucrase "3.34.0"
+
+"@expo/metro-config@~0.17.0":
version "0.17.5"
resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.17.5.tgz#cd135147f0cb938ec33b40751688827a74203e4b"
integrity sha512-2YUebeIwr6gFxcIRSVAjWK5D8YSaXBzQoRRl3muJWsH8AC8a+T60xbA3cGhsEICD2zKS5zwnL2yobgs41Ur7nQ==
@@ -2039,10 +2439,10 @@
color "^4.2.3"
warn-once "^0.1.0"
-"@react-navigation/core@^6.4.11":
- version "6.4.11"
- resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.4.11.tgz#481274aff0684757545bf6eb874260af7e8b27d1"
- integrity sha512-kOCyOc1L0lAl53DbyNl3OkUJwSFKSaVCsV8leJawUXMXJ1FTT3nbS3xMOqbZuchxIbl8T62sZ7YnlWG/21rcMw==
+"@react-navigation/core@^6.4.14":
+ version "6.4.14"
+ resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.4.14.tgz#da9aba6403c4c0ded8ab62a9698f3b386ef20928"
+ integrity sha512-9DemQVmztRspTH4CRexLNfbJSOhiv6DHumH8enqiXUTgUEYfQUu2qCsEuc/ui08kuYLtoRTdH9P1ovE2xTScbg==
dependencies:
"@react-navigation/routers" "^6.1.9"
escape-string-regexp "^4.0.0"
@@ -2064,12 +2464,12 @@
"@react-navigation/elements" "^1.3.24"
warn-once "^0.1.0"
-"@react-navigation/native@^6.0.2", "@react-navigation/native@~6.1.6":
- version "6.1.12"
- resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.12.tgz#5b5b84861ca50678e2a402249695f250e8cea761"
- integrity sha512-t6y7sDCr0HlMf+5TuVjLjyi0ySs0eNGfreDKcWOMEi5wooNFM4LhcUCdEVylpwCPfjQMW/lNVomNromqZFM6HQ==
+"@react-navigation/native@^6.1.15", "@react-navigation/native@~6.1.6":
+ version "6.1.15"
+ resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.15.tgz#ab8bd37e1bdc29eed244e2c07a3a16805b1b42a1"
+ integrity sha512-NOZH+uCZk3l+Uiy5/RKMyl+JI+OVBrrQ2SAK2Br8o2MsElPqe96TtvzeKzOAoiHfoHnwCyjdD7D66ODNYPSwDw==
dependencies:
- "@react-navigation/core" "^6.4.11"
+ "@react-navigation/core" "^6.4.14"
escape-string-regexp "^4.0.0"
fast-deep-equal "^3.1.3"
nanoid "^3.1.23"
@@ -2200,17 +2600,17 @@
dependencies:
"@sinonjs/commons" "^3.0.0"
-"@tanstack/query-core@5.24.8":
- version "5.24.8"
- resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.24.8.tgz#b407546a726ecd4d60b8682dec2ca84ac9eab81e"
- integrity sha512-yH7KnfXMf10p1U5GffTQzFi2Miiw6WJZImGYGdV7eqa5ZbKO8qVx9lOA9SfhIaJXomrMp1Yz5w/CBhVM3yWeTA==
+"@tanstack/query-core@5.26.3":
+ version "5.26.3"
+ resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.26.3.tgz#0e1075de03904165d892e2b801b49f21d6a88b66"
+ integrity sha512-kKv7VHIleC7cwpMS3M63mWUFFbdiRo7JZMVUyZ4z/79RZoAi7/vGTVkCrnNqyKl+zwBRkumYL+eiYtyShGZd0A==
-"@tanstack/react-query@^5.24.8":
- version "5.24.8"
- resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.24.8.tgz#9de1423a710bcdfce90df82acaf494659edb6221"
- integrity sha512-jB3JS9SzDmBySk9VVOTPt/0ixWEb3K3dy9IExlVl/1NouY3N7HzAqG/1d4m6E9eFfKJoLvA/hBksaLu0lw627A==
+"@tanstack/react-query@^5.26.3":
+ version "5.26.3"
+ resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.26.3.tgz#263bc60ee0b80a95773a0b9872030ccf07edb2a0"
+ integrity sha512-fP/kEu8aVLb6ln0ySazaeyivVkSQ9EnFfA5kQ7yIQNklx5JCW7otHVY6GVjZtd/3wK6QU99yvdSH0rN0LV2vmA==
dependencies:
- "@tanstack/query-core" "5.24.8"
+ "@tanstack/query-core" "5.26.3"
"@tootallnate/once@2":
version "2.0.0"
@@ -2319,10 +2719,10 @@
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563"
integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==
-"@types/react@~18.2.14":
- version "18.2.58"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.58.tgz#22082d12898d11806f4a1aefb5583116a047493d"
- integrity sha512-TaGvMNhxvG2Q0K0aYxiKfNDS5m5ZsoIBBbtfUorxdH4NGSXIlYvZxLJI+9Dd3KjeB3780bciLyAb7ylO8pLhPw==
+"@types/react@~18.2.64":
+ version "18.2.64"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.64.tgz#3700fbb6b2fa60a6868ec1323ae4cbd446a2197d"
+ integrity sha512-MlmPvHgjj2p3vZaxbQgFUQFvD8QiZwACfGqEdDSWou5yISWxDQ4/74nCAwsUiX7UFLKZz3BbVSPj+YxeoGGCfg==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -3310,6 +3710,13 @@ cjs-module-lexer@^1.0.0:
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
+class-variance-authority@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.0.tgz#1c3134d634d80271b1837452b06d821915954522"
+ integrity sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==
+ dependencies:
+ clsx "2.0.0"
+
clean-stack@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
@@ -3371,6 +3778,11 @@ clone@^2.1.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
+clsx@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b"
+ integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==
+
clsx@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb"
@@ -3530,7 +3942,7 @@ 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.34.0:
+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==
@@ -4417,11 +4829,16 @@ expo-dev-menu@4.5.6:
expo-dev-menu-interface "1.7.2"
semver "^7.5.3"
-expo-file-system@~16.0.0, expo-file-system@~16.0.7:
+expo-file-system@~16.0.0:
version "16.0.7"
resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-16.0.7.tgz#0b3bd920a602b1c474d57a6b51202986113e1ef8"
integrity sha512-BELr1Agj6WK0PKVMcD0rqC3fP5unKfp2KW8/sNhtTHgdzQ/F0Pylq9pTk9u7KEu0ZbEdTpk5EMarLMPwffi3og==
+expo-file-system@~16.0.8:
+ version "16.0.8"
+ resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-16.0.8.tgz#13c79a8e06e42a8e76e9297df6920597a011d989"
+ integrity sha512-yDbVT0TUKd7ewQjaY5THum2VRFx2n/biskGhkUmLh3ai21xjIVtaeIzHXyv9ir537eVgt4ReqDNWi7jcXjdUcA==
+
expo-font@~11.10.2, expo-font@~11.10.3:
version "11.10.3"
resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-11.10.3.tgz#a3115ebda8e09bd7cb8052619a4bbe606f0c17f4"
@@ -4467,17 +4884,17 @@ expo-modules-autolinking@1.10.3:
find-up "^5.0.0"
fs-extra "^9.1.0"
-expo-modules-core@1.11.9:
- version "1.11.9"
- resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.11.9.tgz#4b95070390fe7e3418aa84580244bcf0540357ca"
- integrity sha512-GTUb81vcPaF+5MtlBI1u9IjrZbGdF1ZUwz3u8Gc+rOLBblkZ7pYsj2mU/tu+k0khTckI9vcH4ZBksXWvE1ncjQ==
+expo-modules-core@1.11.10:
+ version "1.11.10"
+ resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.11.10.tgz#bef4d753e316f97259b34d9eff01e491fcc8ec19"
+ integrity sha512-L1DSxV3AUnEvR8+G1JHbMPjpwqALv0AF71oREhDJ/ehI2TDX6LkE+up5BUK1/++UjmVu1lviefbUfLut2F5wNQ==
dependencies:
invariant "^2.2.4"
-expo-router@~3.4.6:
- version "3.4.7"
- resolved "https://registry.yarnpkg.com/expo-router/-/expo-router-3.4.7.tgz#04c1eb50f089da5f3d42c2c56f42e90d3c29d62c"
- integrity sha512-B1VLols+ErUqWtRHi9j/sQhxxwlsM7AJN+jEkvrPIfvhG7qpb1Usq13893ORcHvz/UhSHeEc9nKh7qx9hS6urw==
+expo-router@~3.4.8:
+ version "3.4.8"
+ resolved "https://registry.yarnpkg.com/expo-router/-/expo-router-3.4.8.tgz#c7e55f500467985950760d325f75d06f8dfc17e7"
+ integrity sha512-fOOAWHH4LSPjPFtIZbApxdTNU8xSS8qKvhZ7PfWNMfx9510J1R1Ce/nwENPzcRLHRuVofDsSAEBfi4kV03fJwg==
dependencies:
"@expo/metro-runtime" "3.1.3"
"@expo/server" "^0.3.0"
@@ -4527,24 +4944,24 @@ expo-web-browser@~12.8.2:
compare-urls "^2.0.0"
url "^0.11.0"
-expo@~50.0.8:
- version "50.0.8"
- resolved "https://registry.yarnpkg.com/expo/-/expo-50.0.8.tgz#2a5c5699be8da9dfb8fd9c6cae7daae28149cc43"
- integrity sha512-8yXsoMbFRjWyEDNuFRtH0vTFvEjFnnwP+LceS6xmXGp+IW1hKdN1X6Bj1EUocFtepH0ruHDPCof1KvPoWfUWkw==
+expo@~50.0.5:
+ version "50.0.11"
+ resolved "https://registry.yarnpkg.com/expo/-/expo-50.0.11.tgz#0b0aa11bfca9e5d63acc76fae31e469050b45644"
+ integrity sha512-XEq8By1l8FQo2SEzhXfQEoKBd0nZ9j6HKsDzj1dUrRVYd02SMH/xUCERxuRaWUL2u1bWdfaFlg/Dmc/2JlVkKQ==
dependencies:
"@babel/runtime" "^7.20.0"
- "@expo/cli" "0.17.6"
+ "@expo/cli" "0.17.7"
"@expo/config" "8.5.4"
"@expo/config-plugins" "7.8.4"
- "@expo/metro-config" "0.17.5"
+ "@expo/metro-config" "0.17.6"
"@expo/vector-icons" "^14.0.0"
babel-preset-expo "~10.0.1"
expo-asset "~9.0.2"
- expo-file-system "~16.0.7"
+ expo-file-system "~16.0.8"
expo-font "~11.10.3"
expo-keep-awake "~12.8.2"
expo-modules-autolinking "1.10.3"
- expo-modules-core "1.11.9"
+ expo-modules-core "1.11.10"
fbemitter "^3.0.0"
whatwg-url-without-unicode "8.0.0-3"
@@ -5823,10 +6240,10 @@ jest-environment-node@^29.6.3, jest-environment-node@^29.7.0:
jest-mock "^29.7.0"
jest-util "^29.7.0"
-jest-expo@~50.0.1:
- version "50.0.2"
- resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-50.0.2.tgz#cbf5b4c2dd40bac646d6b08f2c575a0e1e0d9bd9"
- integrity sha512-g9Vq4Cpndp6M+bWGNJfyxw+iiZm7o1XpaOEHgtyC1evdy4B9IsEWql1Y2xBH7uD79FwSKhaIz+xCQHZNhnSlAg==
+jest-expo@~50.0.3:
+ version "50.0.3"
+ resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-50.0.3.tgz#3e538b510f441f64e325ff5a2bb16aab3c77398a"
+ integrity sha512-n0czPKvs9n+B9I1oL8w3lYMH5bH4GzhLIXXPSx2MQkkVvxsk+28ROXt2GZRTudJhsIB6LCXxIMh9vcR3zotZsA==
dependencies:
"@expo/config" "~8.5.0"
"@expo/json-file" "^8.2.37"
@@ -7782,10 +8199,10 @@ react-helmet-async@^1.3.0:
react-fast-compare "^3.2.0"
shallowequal "^1.1.0"
-react-hook-form@^7.50.0:
- version "7.50.1"
- resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.50.1.tgz#f6aeb17a863327e5a0252de8b35b4fc8990377ed"
- integrity sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==
+react-hook-form@^7.51.0:
+ version "7.51.0"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.51.0.tgz#757ae71b37c26e00590bd3788508287dcc5ecdaf"
+ integrity sha512-BggOy5j58RdhdMzzRUHGOYhSz1oeylFAv6jUSG86OvCIvlAvS7KvnRY7yoAf2pfEiPN7BesnR0xx73nEk3qIiw==
"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"
@@ -7809,6 +8226,20 @@ react-native-cookies@^3.3.0:
dependencies:
invariant "^2.1.0"
+react-native-reanimated@^3.8.0:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.8.0.tgz#e7724ceae8fdf87e9523d9d54efb3e4652f608cb"
+ integrity sha512-xoG4+nf+lSmzv37mjTUIT0gYNEIr2Mb8WXgmqR8deCJk8CC6lXT0HRpshTPVAF00LvdzrD2W/rCpiBdHN5FW2w==
+ dependencies:
+ "@babel/plugin-transform-arrow-functions" "^7.0.0-0"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0"
+ "@babel/plugin-transform-optional-chaining" "^7.0.0-0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0-0"
+ "@babel/plugin-transform-template-literals" "^7.0.0-0"
+ "@babel/preset-typescript" "^7.16.7"
+ convert-source-map "^2.0.0"
+ invariant "^2.2.4"
+
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"
@@ -7836,10 +8267,10 @@ react-native-web@~0.19.6:
postcss-value-parser "^4.2.0"
styleq "^0.1.3"
-react-native@0.73.5:
- version "0.73.5"
- resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.5.tgz#724fd1ae8ec8fee1dcf619c82bdd1695d3cff463"
- integrity sha512-iHgDArmF4CrhL0qTj+Rn+CBN5pZWUL9lUGl8ub+V9Hwu/vnzQQh8rTMVSwVd2sV6N76KjpE5a4TfIAHkpIHhKg==
+react-native@0.73.6:
+ version "0.73.6"
+ resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.6.tgz#ed4c675e205a34bd62c4ce8b9bd1ca5c85126d5b"
+ integrity sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA==
dependencies:
"@jest/create-cache-key-function" "^29.6.3"
"@react-native-community/cli" "12.3.6"
@@ -7995,6 +8426,13 @@ regenerator-runtime@^0.14.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+regenerator-transform@^0.15.2:
+ version "0.15.2"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4"
+ integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+
regexp.prototype.flags@^1.5.0, 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"
@@ -8841,6 +9279,13 @@ synckit@^0.8.6:
"@pkgr/core" "^0.1.0"
tslib "^2.6.2"
+tailwind-merge@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.2.1.tgz#3f10f296a2dba1d88769de8244fafd95c3324aeb"
+ integrity sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==
+ dependencies:
+ "@babel/runtime" "^7.23.7"
+
tailwindcss@3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3"
@@ -9147,10 +9592,10 @@ typed-array-length@^1.0.4:
is-typed-array "^1.1.13"
possible-typed-array-names "^1.0.0"
-typescript@^5.2.0:
- version "5.3.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
- integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
+typescript@^5.4.2:
+ version "5.4.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372"
+ integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==
ua-parser-js@^1.0.35:
version "1.0.37"
diff --git a/frontend/sac-web/package-lock.json b/frontend/sac-web/package-lock.json
index 609daec2e..7d6c8c267 100644
--- a/frontend/sac-web/package-lock.json
+++ b/frontend/sac-web/package-lock.json
@@ -8,7 +8,7 @@
"name": "sac-web",
"version": "0.1.0",
"dependencies": {
- "next": "14.1.1",
+ "next": "14.1.3",
"react": "^18",
"react-dom": "^18",
"semver": "7.6.0"
@@ -19,7 +19,7 @@
"@types/react-dom": "^18",
"autoprefixer": "^10.4.18",
"eslint": "^8",
- "eslint-config-next": "14.1.1",
+ "eslint-config-next": "14.1.3",
"postcss": "^8",
"tailwindcss": "^3.3.0",
"typescript": "^5"
@@ -240,14 +240,14 @@
}
},
"node_modules/@next/env": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.1.tgz",
- "integrity": "sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA=="
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.3.tgz",
+ "integrity": "sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ=="
},
"node_modules/@next/eslint-plugin-next": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.1.tgz",
- "integrity": "sha512-NP1WoGFnFLpqqCWgGFjnn/sTwUExdPyjeFKRdQP1X/bL/tjAQ/TXDmYqw6vzGaP5NaZ2u6xzg+N/0nd7fOPOGQ==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz",
+ "integrity": "sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==",
"dev": true,
"dependencies": {
"glob": "10.3.10"
@@ -300,9 +300,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.1.tgz",
- "integrity": "sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.3.tgz",
+ "integrity": "sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==",
"cpu": [
"arm64"
],
@@ -315,9 +315,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.1.tgz",
- "integrity": "sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.3.tgz",
+ "integrity": "sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==",
"cpu": [
"x64"
],
@@ -330,9 +330,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.1.tgz",
- "integrity": "sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.3.tgz",
+ "integrity": "sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==",
"cpu": [
"arm64"
],
@@ -345,9 +345,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.1.tgz",
- "integrity": "sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.3.tgz",
+ "integrity": "sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==",
"cpu": [
"arm64"
],
@@ -360,9 +360,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.1.tgz",
- "integrity": "sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.3.tgz",
+ "integrity": "sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==",
"cpu": [
"x64"
],
@@ -375,9 +375,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.1.tgz",
- "integrity": "sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.3.tgz",
+ "integrity": "sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==",
"cpu": [
"x64"
],
@@ -390,9 +390,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.1.tgz",
- "integrity": "sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.3.tgz",
+ "integrity": "sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==",
"cpu": [
"arm64"
],
@@ -405,9 +405,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.1.tgz",
- "integrity": "sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.3.tgz",
+ "integrity": "sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==",
"cpu": [
"ia32"
],
@@ -420,9 +420,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.1.tgz",
- "integrity": "sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.3.tgz",
+ "integrity": "sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==",
"cpu": [
"x64"
],
@@ -500,9 +500,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.11.24",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
- "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "version": "20.11.25",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
+ "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -515,9 +515,9 @@
"dev": true
},
"node_modules/@types/react": {
- "version": "18.2.61",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.61.tgz",
- "integrity": "sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==",
+ "version": "18.2.64",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.64.tgz",
+ "integrity": "sha512-MlmPvHgjj2p3vZaxbQgFUQFvD8QiZwACfGqEdDSWou5yISWxDQ4/74nCAwsUiX7UFLKZz3BbVSPj+YxeoGGCfg==",
"dev": true,
"dependencies": {
"@types/prop-types": "*",
@@ -526,9 +526,9 @@
}
},
"node_modules/@types/react-dom": {
- "version": "18.2.19",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz",
- "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==",
+ "version": "18.2.21",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.21.tgz",
+ "integrity": "sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==",
"dev": true,
"dependencies": {
"@types/react": "*"
@@ -1585,12 +1585,12 @@
}
},
"node_modules/eslint-config-next": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.1.tgz",
- "integrity": "sha512-OLyw2oHzwE0M0EODGYMbjksDQKSshQWBzYY+Nkoxoe3+Q5G0lpb9EkekyDk7Foz9BMfotbYShJrgYoBEAVqU4Q==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.3.tgz",
+ "integrity": "sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==",
"dev": true,
"dependencies": {
- "@next/eslint-plugin-next": "14.1.1",
+ "@next/eslint-plugin-next": "14.1.3",
"@rushstack/eslint-patch": "^1.3.3",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
"eslint-import-resolver-node": "^0.3.6",
@@ -3081,11 +3081,11 @@
"dev": true
},
"node_modules/next": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/next/-/next-14.1.1.tgz",
- "integrity": "sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==",
+ "version": "14.1.3",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.1.3.tgz",
+ "integrity": "sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==",
"dependencies": {
- "@next/env": "14.1.1",
+ "@next/env": "14.1.3",
"@swc/helpers": "0.5.2",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
@@ -3100,15 +3100,15 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.1.1",
- "@next/swc-darwin-x64": "14.1.1",
- "@next/swc-linux-arm64-gnu": "14.1.1",
- "@next/swc-linux-arm64-musl": "14.1.1",
- "@next/swc-linux-x64-gnu": "14.1.1",
- "@next/swc-linux-x64-musl": "14.1.1",
- "@next/swc-win32-arm64-msvc": "14.1.1",
- "@next/swc-win32-ia32-msvc": "14.1.1",
- "@next/swc-win32-x64-msvc": "14.1.1"
+ "@next/swc-darwin-arm64": "14.1.3",
+ "@next/swc-darwin-x64": "14.1.3",
+ "@next/swc-linux-arm64-gnu": "14.1.3",
+ "@next/swc-linux-arm64-musl": "14.1.3",
+ "@next/swc-linux-x64-gnu": "14.1.3",
+ "@next/swc-linux-x64-musl": "14.1.3",
+ "@next/swc-win32-arm64-msvc": "14.1.3",
+ "@next/swc-win32-ia32-msvc": "14.1.3",
+ "@next/swc-win32-x64-msvc": "14.1.3"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -4503,9 +4503,9 @@
}
},
"node_modules/typescript": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
- "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz",
+ "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
diff --git a/frontend/sac-web/package.json b/frontend/sac-web/package.json
index 306e75c00..42de0ed1e 100644
--- a/frontend/sac-web/package.json
+++ b/frontend/sac-web/package.json
@@ -9,7 +9,7 @@
"lint": "next lint"
},
"dependencies": {
- "next": "14.1.1",
+ "next": "14.1.3",
"react": "^18",
"react-dom": "^18",
"semver": "7.6.0"
@@ -20,7 +20,7 @@
"@types/react-dom": "^18",
"autoprefixer": "^10.4.18",
"eslint": "^8",
- "eslint-config-next": "14.1.1",
+ "eslint-config-next": "14.1.3",
"postcss": "^8",
"tailwindcss": "^3.3.0",
"typescript": "^5"
diff --git a/frontend/sac-web/yarn.lock b/frontend/sac-web/yarn.lock
index 45e679032..4e6160309 100644
--- a/frontend/sac-web/yarn.lock
+++ b/frontend/sac-web/yarn.lock
@@ -114,62 +114,62 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
-"@next/env@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.1.tgz#80150a8440eb0022a73ba353c6088d419b908bac"
- integrity sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA==
+"@next/env@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.3.tgz#73007b64d487bbb95ed83145195f734fc1182d10"
+ integrity sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ==
-"@next/eslint-plugin-next@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.1.tgz#123b8ca9d52fd54c343a787d4e0aa0737c4c7d97"
- integrity sha512-NP1WoGFnFLpqqCWgGFjnn/sTwUExdPyjeFKRdQP1X/bL/tjAQ/TXDmYqw6vzGaP5NaZ2u6xzg+N/0nd7fOPOGQ==
+"@next/eslint-plugin-next@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz#31ffb36dbd5d04537aff83eb69ec23007d081608"
+ integrity sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==
dependencies:
glob "10.3.10"
-"@next/swc-darwin-arm64@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.1.tgz#b74ba7c14af7d05fa2848bdeb8ee87716c939b64"
- integrity sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==
-
-"@next/swc-darwin-x64@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.1.tgz#82c3e67775e40094c66e76845d1a36cc29c9e78b"
- integrity sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==
-
-"@next/swc-linux-arm64-gnu@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.1.tgz#4f4134457b90adc5c3d167d07dfb713c632c0caa"
- integrity sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==
-
-"@next/swc-linux-arm64-musl@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.1.tgz#594bedafaeba4a56db23a48ffed2cef7cd09c31a"
- integrity sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==
-
-"@next/swc-linux-x64-gnu@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.1.tgz#cb4e75f1ff2b9bcadf2a50684605928ddfc58528"
- integrity sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==
-
-"@next/swc-linux-x64-musl@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.1.tgz#15f26800df941b94d06327f674819ab64b272e25"
- integrity sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==
-
-"@next/swc-win32-arm64-msvc@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.1.tgz#060c134fa7fa843666e3e8574972b2b723773dd9"
- integrity sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==
-
-"@next/swc-win32-ia32-msvc@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.1.tgz#5c06889352b1f77e3807834a0d0afd7e2d2d1da2"
- integrity sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==
-
-"@next/swc-win32-x64-msvc@14.1.1":
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.1.tgz#d38c63a8f9b7f36c1470872797d3735b4a9c5c52"
- integrity sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==
+"@next/swc-darwin-arm64@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.3.tgz#b4c218fdb49275972d91e9a9a0ccadba243b6739"
+ integrity sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==
+
+"@next/swc-darwin-x64@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.3.tgz#aa0d4357179d68daaa6f400708b76666708ffec9"
+ integrity sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==
+
+"@next/swc-linux-arm64-gnu@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.3.tgz#1ba8df39c04368ede185f268c3a817a8f4290e4c"
+ integrity sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==
+
+"@next/swc-linux-arm64-musl@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.3.tgz#2fa8fe435862eb186aca6d6068c8aef2126ab11e"
+ integrity sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==
+
+"@next/swc-linux-x64-gnu@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.3.tgz#57a687b44337af219e07a79ecc8c63a3c1b2d020"
+ integrity sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==
+
+"@next/swc-linux-x64-musl@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.3.tgz#8c057f8f7fb9679915df25eda6ab0ea1b7af85ff"
+ integrity sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==
+
+"@next/swc-win32-arm64-msvc@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.3.tgz#5367333e701f722009592013502aa8e735bee782"
+ integrity sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==
+
+"@next/swc-win32-ia32-msvc@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.3.tgz#dc455021fee85e037f6fb4134e85895dce5a0495"
+ integrity sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==
+
+"@next/swc-win32-x64-msvc@14.1.3":
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.3.tgz#4a8d4384901f0c48ece9dbb60cb9aea107d39e7c"
+ integrity sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -215,9 +215,9 @@
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
"@types/node@^20":
- version "20.11.24"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
- integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
+ version "20.11.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f"
+ integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==
dependencies:
undici-types "~5.26.4"
@@ -227,16 +227,16 @@
integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==
"@types/react-dom@^18":
- version "18.2.19"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58"
- integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==
+ version "18.2.21"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.21.tgz#b8c81715cebdebb2994378616a8d54ace54f043a"
+ integrity sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==
dependencies:
"@types/react" "*"
"@types/react@*", "@types/react@^18":
- version "18.2.61"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.61.tgz#5607308495037436779939ec0348a5816c08799d"
- integrity sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==
+ version "18.2.64"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.64.tgz#3700fbb6b2fa60a6868ec1323ae4cbd446a2197d"
+ integrity sha512-MlmPvHgjj2p3vZaxbQgFUQFvD8QiZwACfGqEdDSWou5yISWxDQ4/74nCAwsUiX7UFLKZz3BbVSPj+YxeoGGCfg==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -838,12 +838,12 @@ 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.1:
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.1.tgz#5c8d5afcede9aac36e5515f0fa88432e63ebc9c1"
- integrity sha512-OLyw2oHzwE0M0EODGYMbjksDQKSshQWBzYY+Nkoxoe3+Q5G0lpb9EkekyDk7Foz9BMfotbYShJrgYoBEAVqU4Q==
+eslint-config-next@14.1.3:
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.3.tgz#f5c75c088c5df35da2a02129cbf5dec9defb3f13"
+ integrity sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==
dependencies:
- "@next/eslint-plugin-next" "14.1.1"
+ "@next/eslint-plugin-next" "14.1.3"
"@rushstack/eslint-patch" "^1.3.3"
"@typescript-eslint/parser" "^5.4.2 || ^6.0.0"
eslint-import-resolver-node "^0.3.6"
@@ -1743,12 +1743,12 @@ 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.1:
- version "14.1.1"
- resolved "https://registry.yarnpkg.com/next/-/next-14.1.1.tgz#92bd603996c050422a738e90362dff758459a171"
- integrity sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==
+next@14.1.3:
+ version "14.1.3"
+ resolved "https://registry.yarnpkg.com/next/-/next-14.1.3.tgz#465bb21a1a6e703e776ca53ea71d05642867fdb5"
+ integrity sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==
dependencies:
- "@next/env" "14.1.1"
+ "@next/env" "14.1.3"
"@swc/helpers" "0.5.2"
busboy "1.6.0"
caniuse-lite "^1.0.30001579"
@@ -1756,15 +1756,15 @@ next@14.1.1:
postcss "8.4.31"
styled-jsx "5.1.1"
optionalDependencies:
- "@next/swc-darwin-arm64" "14.1.1"
- "@next/swc-darwin-x64" "14.1.1"
- "@next/swc-linux-arm64-gnu" "14.1.1"
- "@next/swc-linux-arm64-musl" "14.1.1"
- "@next/swc-linux-x64-gnu" "14.1.1"
- "@next/swc-linux-x64-musl" "14.1.1"
- "@next/swc-win32-arm64-msvc" "14.1.1"
- "@next/swc-win32-ia32-msvc" "14.1.1"
- "@next/swc-win32-x64-msvc" "14.1.1"
+ "@next/swc-darwin-arm64" "14.1.3"
+ "@next/swc-darwin-x64" "14.1.3"
+ "@next/swc-linux-arm64-gnu" "14.1.3"
+ "@next/swc-linux-arm64-musl" "14.1.3"
+ "@next/swc-linux-x64-gnu" "14.1.3"
+ "@next/swc-linux-x64-musl" "14.1.3"
+ "@next/swc-win32-arm64-msvc" "14.1.3"
+ "@next/swc-win32-ia32-msvc" "14.1.3"
+ "@next/swc-win32-x64-msvc" "14.1.3"
node-releases@^2.0.14:
version "2.0.14"
@@ -2495,9 +2495,9 @@ typed-array-length@^1.0.4:
is-typed-array "^1.1.9"
typescript@^5:
- version "5.3.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
- integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
+ version "5.4.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372"
+ integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==
unbox-primitive@^1.0.2:
version "1.0.2"
diff --git a/go.work.sum b/go.work.sum
index 27788fe1c..8b35a19a5 100644
--- a/go.work.sum
+++ b/go.work.sum
@@ -114,6 +114,7 @@ go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=
go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
@@ -136,6 +137,7 @@ golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
+golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
diff --git a/scraper/clubs/Cargo.lock b/scraper/clubs/Cargo.lock
index 1e857ee9d..2a4897fd6 100644
--- a/scraper/clubs/Cargo.lock
+++ b/scraper/clubs/Cargo.lock
@@ -577,9 +577,9 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.10"
+version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
+checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
dependencies = [
"libc",
"wasi",