diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..b325ae9 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,32 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + + - package-ecosystem: "cargo" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + + - package-ecosystem: "gomod" + directory: "/backend/gateway" + schedule: + interval: "weekly" + + - package-ecosystem: "gomod" + directory: "/kubernetes/operators/application" + schedule: + interval: "weekly" + + - package-ecosystem: "npm" + directory: "/frontend" + schedule: + interval: "weekly" + + - package-ecosystem: "terraform" + directory: "/cloud" + schedule: + interval: "weekly" diff --git a/backend/gateway/authentication_middleware.go b/backend/gateway/authentication_middleware.go index de92eb8..1a70174 100644 --- a/backend/gateway/authentication_middleware.go +++ b/backend/gateway/authentication_middleware.go @@ -21,22 +21,22 @@ func authenticationMiddleware(next http.Handler) http.Handler { jwt, err := utils.ExtractJwtFromAuthorizationHeader(authorizationHeader) if err != nil { - http.Error(w, err.Error( ), http.StatusBadRequest) + http.Error(w, err.Error(), http.StatusBadRequest) return } // TODO: Add a timeout. - response, err := usersMicroserviceConnector.VerifyJwt(context.Background( ), - &grpc_generated.VerifyJwtRequest{ Jwt: jwt }) + response, err := usersMicroserviceConnector.VerifyJwt(context.Background(), + &grpc_generated.VerifyJwtRequest{Jwt: jwt}) if err != nil { http.Error(w, "server error occurred", http.StatusInternalServerError) return } // Add the user-id in context. - ctx := context.WithValue(r.Context( ), utils.USER_ID_CONTEXT_KEY, response.UserId) + ctx := context.WithValue(r.Context(), utils.USER_ID_CONTEXT_KEY, response.UserId) r = r.WithContext(ctx) next.ServeHTTP(w, r) }) -} \ No newline at end of file +} diff --git a/backend/gateway/connectors/connector.go b/backend/gateway/connectors/connector.go index 7cdd198..63f1d93 100644 --- a/backend/gateway/connectors/connector.go +++ b/backend/gateway/connectors/connector.go @@ -8,18 +8,19 @@ import ( ) type Connector interface { - Healthcheck( ) error + Healthcheck() error - Disconnect( ) + Disconnect() } func createGrpcConnection(serviceName, address string) *grpc.ClientConn { connection, err := grpc.Dial(address, - grpc.WithTransportCredentials(insecure.NewCredentials( )), - grpc.WithStatsHandler(otelgrpc.NewClientHandler( )), + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithStatsHandler(otelgrpc.NewClientHandler()), ) if err != nil { - log.Fatalf("Couldn't connect to %s at %s : %v", serviceName, address, err)} + log.Fatalf("Couldn't connect to %s at %s : %v", serviceName, address, err) + } return connection -} \ No newline at end of file +} diff --git a/backend/gateway/connectors/feeds_microservice.go b/backend/gateway/connectors/feeds_microservice.go index c46156d..50503e6 100644 --- a/backend/gateway/connectors/feeds_microservice.go +++ b/backend/gateway/connectors/feeds_microservice.go @@ -22,36 +22,39 @@ type FeedsMicroserviceConnector struct { grpcConnection *grpc.ClientConn } -func NewFeedsMicroserviceConnector( ) *FeedsMicroserviceConnector { - u := &FeedsMicroserviceConnector { +func NewFeedsMicroserviceConnector() *FeedsMicroserviceConnector { + u := &FeedsMicroserviceConnector{ serviceName: "feeds microservice", - address: utils.Envs.FEEDS_MICROSERVICE_URL, + address: utils.Envs.FEEDS_MICROSERVICE_URL, } - u.grpcConnection= createGrpcConnection(u.serviceName, u.address) - u.FeedsServiceClient= grpc_generated.NewFeedsServiceClient(u.grpcConnection) + u.grpcConnection = createGrpcConnection(u.serviceName, u.address) + u.FeedsServiceClient = grpc_generated.NewFeedsServiceClient(u.grpcConnection) - if err := u.Healthcheck( ); err != nil { - log.Fatalf("Couldn't connect to feeds microservice : %v", err)} + if err := u.Healthcheck(); err != nil { + log.Fatalf("Couldn't connect to feeds microservice : %v", err) + } log.Debugf("Connected to %s", u.serviceName) return u } -func(u *FeedsMicroserviceConnector) Healthcheck( ) error { - ctx, cancel := context.WithTimeout(context.Background( ), 5 * time.Second) - defer cancel( ) +func (u *FeedsMicroserviceConnector) Healthcheck() error { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() - if _, err := u.Ping(ctx, &emptypb.Empty{ }); err != nil { - return fmt.Errorf("error pinging %s: %v", u.serviceName, err)} + if _, err := u.Ping(ctx, &emptypb.Empty{}); err != nil { + return fmt.Errorf("error pinging %s: %v", u.serviceName, err) + } return nil } -func(u *FeedsMicroserviceConnector) Disconnect( ) { - if err := u.grpcConnection.Close( ); err != nil { - log.Errorf("Error closing connection to %s : %v", u.serviceName, err)} +func (u *FeedsMicroserviceConnector) Disconnect() { + if err := u.grpcConnection.Close(); err != nil { + log.Errorf("Error closing connection to %s : %v", u.serviceName, err) + } log.Debugf("Closed connection to %s", u.serviceName) -} \ No newline at end of file +} diff --git a/backend/gateway/connectors/followships_microservice_connector.go b/backend/gateway/connectors/followships_microservice_connector.go index 22b234e..96592c5 100644 --- a/backend/gateway/connectors/followships_microservice_connector.go +++ b/backend/gateway/connectors/followships_microservice_connector.go @@ -22,36 +22,39 @@ type FollowshipsMicroserviceConnector struct { grpcConnection *grpc.ClientConn } -func NewFollowshipsMicroserviceConnector( ) *FollowshipsMicroserviceConnector { - u := &FollowshipsMicroserviceConnector { +func NewFollowshipsMicroserviceConnector() *FollowshipsMicroserviceConnector { + u := &FollowshipsMicroserviceConnector{ serviceName: "followships microservice", - address: utils.Envs.FOLLOWSHIPS_MICROSERVICE_URL, + address: utils.Envs.FOLLOWSHIPS_MICROSERVICE_URL, } - u.grpcConnection= createGrpcConnection(u.serviceName, u.address) - u.FollowshipsServiceClient= grpc_generated.NewFollowshipsServiceClient(u.grpcConnection) + u.grpcConnection = createGrpcConnection(u.serviceName, u.address) + u.FollowshipsServiceClient = grpc_generated.NewFollowshipsServiceClient(u.grpcConnection) - if err := u.Healthcheck( ); err != nil { - log.Fatalf("Couldn't connect to followships microservice : %v", err)} + if err := u.Healthcheck(); err != nil { + log.Fatalf("Couldn't connect to followships microservice : %v", err) + } log.Debugf("Connected to %s", u.serviceName) return u } -func(u *FollowshipsMicroserviceConnector) Healthcheck( ) error { - ctx, cancel := context.WithTimeout(context.Background( ), 5 * time.Second) - defer cancel( ) +func (u *FollowshipsMicroserviceConnector) Healthcheck() error { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() - if _, err := u.Ping(ctx, &emptypb.Empty{ }); err != nil { - return fmt.Errorf("error pinging %s: %v", u.serviceName, err)} + if _, err := u.Ping(ctx, &emptypb.Empty{}); err != nil { + return fmt.Errorf("error pinging %s: %v", u.serviceName, err) + } return nil } -func(u *FollowshipsMicroserviceConnector) Disconnect( ) { - if err := u.grpcConnection.Close( ); err != nil { - log.Errorf("Error closing connection to %s : %v", u.serviceName, err)} +func (u *FollowshipsMicroserviceConnector) Disconnect() { + if err := u.grpcConnection.Close(); err != nil { + log.Errorf("Error closing connection to %s : %v", u.serviceName, err) + } log.Debugf("Closed connection to %s", u.serviceName) -} \ No newline at end of file +} diff --git a/backend/gateway/connectors/posts_microservice_connector.go b/backend/gateway/connectors/posts_microservice_connector.go index 69b694a..43a1bb8 100644 --- a/backend/gateway/connectors/posts_microservice_connector.go +++ b/backend/gateway/connectors/posts_microservice_connector.go @@ -22,36 +22,39 @@ type PostsMicroserviceConnector struct { grpcConnection *grpc.ClientConn } -func NewPostsMicroserviceConnector( ) *PostsMicroserviceConnector { - u := &PostsMicroserviceConnector { +func NewPostsMicroserviceConnector() *PostsMicroserviceConnector { + u := &PostsMicroserviceConnector{ serviceName: "posts microservice", - address: utils.Envs.POSTS_MICROSERVICE_URL, + address: utils.Envs.POSTS_MICROSERVICE_URL, } - u.grpcConnection= createGrpcConnection(u.serviceName, u.address) - u.PostsServiceClient= grpc_generated.NewPostsServiceClient(u.grpcConnection) + u.grpcConnection = createGrpcConnection(u.serviceName, u.address) + u.PostsServiceClient = grpc_generated.NewPostsServiceClient(u.grpcConnection) - if err := u.Healthcheck( ); err != nil { - log.Fatalf("Couldn't connect to posts microservice : %v", err)} + if err := u.Healthcheck(); err != nil { + log.Fatalf("Couldn't connect to posts microservice : %v", err) + } log.Debugf("Connected to %s", u.serviceName) return u } -func(u *PostsMicroserviceConnector) Healthcheck( ) error { - ctx, cancel := context.WithTimeout(context.Background( ), 5 * time.Second) - defer cancel( ) +func (u *PostsMicroserviceConnector) Healthcheck() error { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() - if _, err := u.Ping(ctx, &emptypb.Empty{ }); err != nil { - return fmt.Errorf("error pinging %s: %v", u.serviceName, err)} + if _, err := u.Ping(ctx, &emptypb.Empty{}); err != nil { + return fmt.Errorf("error pinging %s: %v", u.serviceName, err) + } return nil } -func(u *PostsMicroserviceConnector) Disconnect( ) { - if err := u.grpcConnection.Close( ); err != nil { - log.Errorf("Error closing connection to %s : %v", u.serviceName, err)} +func (u *PostsMicroserviceConnector) Disconnect() { + if err := u.grpcConnection.Close(); err != nil { + log.Errorf("Error closing connection to %s : %v", u.serviceName, err) + } log.Debugf("Closed connection to %s", u.serviceName) -} \ No newline at end of file +} diff --git a/backend/gateway/connectors/profiles_microservice_connector.go b/backend/gateway/connectors/profiles_microservice_connector.go index e807ca8..c305102 100644 --- a/backend/gateway/connectors/profiles_microservice_connector.go +++ b/backend/gateway/connectors/profiles_microservice_connector.go @@ -22,36 +22,39 @@ type ProfilesMicroserviceConnector struct { grpcConnection *grpc.ClientConn } -func NewProfilesMicroserviceConnector( ) *ProfilesMicroserviceConnector { - u := &ProfilesMicroserviceConnector { +func NewProfilesMicroserviceConnector() *ProfilesMicroserviceConnector { + u := &ProfilesMicroserviceConnector{ serviceName: "profiles microservice", - address: utils.Envs.PROFILES_MICROSERVICE_URL, + address: utils.Envs.PROFILES_MICROSERVICE_URL, } - u.grpcConnection= createGrpcConnection(u.serviceName, u.address) - u.ProfilesServiceClient= grpc_generated.NewProfilesServiceClient(u.grpcConnection) + u.grpcConnection = createGrpcConnection(u.serviceName, u.address) + u.ProfilesServiceClient = grpc_generated.NewProfilesServiceClient(u.grpcConnection) - if err := u.Healthcheck( ); err != nil { - log.Fatalf("Couldn't connect to profiles microservice : %v", err)} + if err := u.Healthcheck(); err != nil { + log.Fatalf("Couldn't connect to profiles microservice : %v", err) + } log.Debugf("Connected to %s", u.serviceName) return u } -func(u *ProfilesMicroserviceConnector) Healthcheck( ) error { - ctx, cancel := context.WithTimeout(context.Background( ), 5 * time.Second) - defer cancel( ) +func (u *ProfilesMicroserviceConnector) Healthcheck() error { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() - if _, err := u.Ping(ctx, &emptypb.Empty{ }); err != nil { - return fmt.Errorf("error pinging %s: %v", u.serviceName, err)} + if _, err := u.Ping(ctx, &emptypb.Empty{}); err != nil { + return fmt.Errorf("error pinging %s: %v", u.serviceName, err) + } return nil } -func(u *ProfilesMicroserviceConnector) Disconnect( ) { - if err := u.grpcConnection.Close( ); err != nil { - log.Errorf("Error closing connection to %s : %v", u.serviceName, err)} +func (u *ProfilesMicroserviceConnector) Disconnect() { + if err := u.grpcConnection.Close(); err != nil { + log.Errorf("Error closing connection to %s : %v", u.serviceName, err) + } log.Debugf("Closed connection to %s", u.serviceName) -} \ No newline at end of file +} diff --git a/backend/gateway/connectors/users_microservice_connector.go b/backend/gateway/connectors/users_microservice_connector.go index 14bf9bb..ee9ab03 100644 --- a/backend/gateway/connectors/users_microservice_connector.go +++ b/backend/gateway/connectors/users_microservice_connector.go @@ -22,36 +22,39 @@ type UsersMicroserviceConnector struct { grpcConnection *grpc.ClientConn } -func NewUsersMicroserviceConnector( ) *UsersMicroserviceConnector { - u := &UsersMicroserviceConnector { +func NewUsersMicroserviceConnector() *UsersMicroserviceConnector { + u := &UsersMicroserviceConnector{ serviceName: "users microservice", - address: utils.Envs.USERS_MICROSERVICE_URL, + address: utils.Envs.USERS_MICROSERVICE_URL, } - u.grpcConnection= createGrpcConnection(u.serviceName, u.address) - u.UsersServiceClient= grpc_generated.NewUsersServiceClient(u.grpcConnection) + u.grpcConnection = createGrpcConnection(u.serviceName, u.address) + u.UsersServiceClient = grpc_generated.NewUsersServiceClient(u.grpcConnection) - if err := u.Healthcheck( ); err != nil { - log.Fatalf("Couldn't connect to users microservice : %v", err)} + if err := u.Healthcheck(); err != nil { + log.Fatalf("Couldn't connect to users microservice : %v", err) + } log.Debugf("Connected to %s", u.serviceName) return u } -func(u *UsersMicroserviceConnector) Healthcheck( ) error { - ctx, cancel := context.WithTimeout(context.Background( ), 5 * time.Second) - defer cancel( ) +func (u *UsersMicroserviceConnector) Healthcheck() error { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() - if _, err := u.Ping(ctx, &emptypb.Empty{ }); err != nil { - return fmt.Errorf("error pinging %s: %v", u.serviceName, err)} + if _, err := u.Ping(ctx, &emptypb.Empty{}); err != nil { + return fmt.Errorf("error pinging %s: %v", u.serviceName, err) + } return nil } -func(u *UsersMicroserviceConnector) Disconnect( ) { - if err := u.grpcConnection.Close( ); err != nil { - log.Errorf("Error closing connection to %s : %v", u.serviceName, err)} +func (u *UsersMicroserviceConnector) Disconnect() { + if err := u.grpcConnection.Close(); err != nil { + log.Errorf("Error closing connection to %s : %v", u.serviceName, err) + } log.Debugf("Closed connection to %s", u.serviceName) -} \ No newline at end of file +} diff --git a/backend/gateway/generated/graphql/resolver.go b/backend/gateway/generated/graphql/resolver.go index cc40052..63e2bbf 100644 --- a/backend/gateway/generated/graphql/resolver.go +++ b/backend/gateway/generated/graphql/resolver.go @@ -11,11 +11,11 @@ import ( // It serves as dependency injection for your app, add any dependencies you require here. type Resolver struct { - UsersMicroservice *connectors.UsersMicroserviceConnector - ProfilesMicroservice *connectors.ProfilesMicroserviceConnector + UsersMicroservice *connectors.UsersMicroserviceConnector + ProfilesMicroservice *connectors.ProfilesMicroserviceConnector FollowshipsMicroservice *connectors.FollowshipsMicroserviceConnector - PostsMicroservice *connectors.PostsMicroserviceConnector - FeedsMicroservice *connectors.FeedsMicroserviceConnector + PostsMicroservice *connectors.PostsMicroserviceConnector + FeedsMicroservice *connectors.FeedsMicroserviceConnector Tracer trace.Tracer -} \ No newline at end of file +} diff --git a/backend/gateway/generated/graphql/utils.go b/backend/gateway/generated/graphql/utils.go index 7fcd236..3b8a0ed 100644 --- a/backend/gateway/generated/graphql/utils.go +++ b/backend/gateway/generated/graphql/utils.go @@ -6,10 +6,10 @@ func ProfilePreviewsToGraphQL(grpcVersion []*grpc_generated.ProfilePreview) []*P result := make([]*ProfilePreview, len(grpcVersion)) for index, item := range grpcVersion { - result[index]= &ProfilePreview{ + result[index] = &ProfilePreview{ ID: int(item.Id), - Name: item.Name, + Name: item.Name, Username: item.Username, ProfilePictureURI: nil, @@ -23,14 +23,14 @@ func PostsToGraphQL(grpcVersion []*grpc_generated.Post) []*Post { result := make([]*Post, len(grpcVersion)) for index, item := range grpcVersion { - result[index]= &Post{ - ID: int(item.Id), + result[index] = &Post{ + ID: int(item.Id), OwnerID: int(item.OwnerId), Description: item.Description, - CreatedAt: item.CreatedAt, + CreatedAt: item.CreatedAt, } } return result -} \ No newline at end of file +} diff --git a/backend/gateway/init_tracer.go b/backend/gateway/init_tracer.go index 17fe8ed..0280e37 100644 --- a/backend/gateway/init_tracer.go +++ b/backend/gateway/init_tracer.go @@ -15,14 +15,15 @@ import ( ) // startTracer initializes and returns a trace.TracerProvider for OpenTelemetry. -func startTracer( ) *trace.TracerProvider { - traceExporter, err := otlptracegrpc.New(context.Background( ), +func startTracer() *trace.TracerProvider { + traceExporter, err := otlptracegrpc.New(context.Background(), otlptracegrpc.WithEndpoint(utils.Envs.JAEGER_COLLECTOR_URL), otlptracegrpc.WithCompressor("gzip"), - otlptracegrpc.WithInsecure( ), + otlptracegrpc.WithInsecure(), ) if err != nil { - log.Fatalf("Error creating trace exporter : %v", err)} + log.Fatalf("Error creating trace exporter : %v", err) + } tracerProvider := trace.NewTracerProvider( trace.WithBatcher(traceExporter), @@ -40,15 +41,15 @@ func startTracer( ) *trace.TracerProvider { // Trace context is a standardized format for representing trace and span information. It // includes trace-id, span-id, trace state etc. - propagation.TraceContext{ }, + propagation.TraceContext{}, // Baggage is a mechanism for carrying key-value pairs along with the trace context. These // key-value pairs are known as baggage items. Baggage allows you to attach custom data to a // request, and this data will be propagated along with the trace context. - propagation.Baggage{ }, + propagation.Baggage{}, )) log.Debug("Created OpenTelemetry tracer provider") return tracerProvider -} \ No newline at end of file +} diff --git a/backend/gateway/main.go b/backend/gateway/main.go index dfb2f5a..88aa6c7 100644 --- a/backend/gateway/main.go +++ b/backend/gateway/main.go @@ -23,13 +23,13 @@ import ( ) var ( - usersMicroserviceConnector *connectors.UsersMicroserviceConnector - profilesMicroserviceConnector *connectors.ProfilesMicroserviceConnector + usersMicroserviceConnector *connectors.UsersMicroserviceConnector + profilesMicroserviceConnector *connectors.ProfilesMicroserviceConnector followshipsMicroserviceConnector *connectors.FollowshipsMicroserviceConnector - postsMicroserviceConnector *connectors.PostsMicroserviceConnector - feedsMicroserviceConnector *connectors.FeedsMicroserviceConnector + postsMicroserviceConnector *connectors.PostsMicroserviceConnector + feedsMicroserviceConnector *connectors.FeedsMicroserviceConnector - _connectors= []connectors.Connector{ + _connectors = []connectors.Connector{ usersMicroserviceConnector, profilesMicroserviceConnector, followshipsMicroserviceConnector, @@ -42,62 +42,63 @@ var ( tracerProvider *trace.TracerProvider ) -func main( ) { +func main() { log.SetReportCaller(true) - utils.LoadEnvs( ) + utils.LoadEnvs() - waitGroup, waitGroupContext := errgroup.WithContext(context.Background( )) + waitGroup, waitGroupContext := errgroup.WithContext(context.Background()) // Listen for system interruption signals to do gracefull shutdown. - waitGroup.Go(func( ) error { + waitGroup.Go(func() error { shutdownSignalChan := make(chan os.Signal, 1) signal.Notify(shutdownSignalChan, os.Interrupt, syscall.SIGTERM) defer signal.Stop(shutdownSignalChan) - var err error= nil + var err error = nil select { - case <- waitGroupContext.Done( ): - err= waitGroupContext.Err( ) + case <-waitGroupContext.Done(): + err = waitGroupContext.Err() - case <- shutdownSignalChan: - log.Warn("Received program interruption signal") + case <-shutdownSignalChan: + log.Warn("Received program interruption signal") } - cleanup( ) + cleanup() return err }) var err error - shutdownMetricsServer, err= autometrics.Init(autometrics.WithService("gateway")) + shutdownMetricsServer, err = autometrics.Init(autometrics.WithService("gateway")) if err != nil { - log.Fatalf("ERROR : Initializing autometrics : %v", err)} + log.Fatalf("ERROR : Initializing autometrics : %v", err) + } - tracerProvider = startTracer( ) + tracerProvider = startTracer() - usersMicroserviceConnector= connectors.NewUsersMicroserviceConnector( ) - profilesMicroserviceConnector= connectors.NewProfilesMicroserviceConnector( ) - followshipsMicroserviceConnector= connectors.NewFollowshipsMicroserviceConnector( ) - postsMicroserviceConnector= connectors.NewPostsMicroserviceConnector( ) - feedsMicroserviceConnector= connectors.NewFeedsMicroserviceConnector( ) + usersMicroserviceConnector = connectors.NewUsersMicroserviceConnector() + profilesMicroserviceConnector = connectors.NewProfilesMicroserviceConnector() + followshipsMicroserviceConnector = connectors.NewFollowshipsMicroserviceConnector() + postsMicroserviceConnector = connectors.NewPostsMicroserviceConnector() + feedsMicroserviceConnector = connectors.NewFeedsMicroserviceConnector() - waitGroup.Go(func( ) error { - router := chi.NewRouter( ) + waitGroup.Go(func() error { + router := chi.NewRouter() router.Use(authenticationMiddleware) - router.Handle("/metrics", promhttp.Handler( )) + router.Handle("/metrics", promhttp.Handler()) graphqlServer := handler.NewDefaultServer( - graphql_generated.NewExecutableSchema(graphql_generated.Config { - Resolvers: &graphql_generated.Resolver { + graphql_generated.NewExecutableSchema(graphql_generated.Config{ + Resolvers: &graphql_generated.Resolver{ - UsersMicroservice: usersMicroserviceConnector, - ProfilesMicroservice: profilesMicroserviceConnector, + UsersMicroservice: usersMicroserviceConnector, + ProfilesMicroservice: profilesMicroserviceConnector, FollowshipsMicroservice: followshipsMicroserviceConnector, - PostsMicroservice: postsMicroserviceConnector, - FeedsMicroservice: feedsMicroserviceConnector, + PostsMicroservice: postsMicroserviceConnector, + FeedsMicroservice: feedsMicroserviceConnector, Tracer: tracerProvider.Tracer("gateway"), }, @@ -113,15 +114,18 @@ func main( ) { return http.ListenAndServe(listeningAddress, router) }) - if err := waitGroup.Wait( ); err != nil { - log.Errorf("Application error occurred : %v", err)} + if err := waitGroup.Wait(); err != nil { + log.Errorf("Application error occurred : %v", err) + } } -func cleanup( ) { +func cleanup() { // Disconnect microservices. for _, connector := range _connectors { if connector != nil { - connector.Disconnect( )}} + connector.Disconnect() + } + } // Shutdown metrics server. if shutdownMetricsServer != nil { @@ -131,9 +135,9 @@ func cleanup( ) { // Shutdown tracer provider. if tracerProvider != nil { - if err := tracerProvider.Shutdown(context.Background( )); err != nil { + if err := tracerProvider.Shutdown(context.Background()); err != nil { log.Errorf("ERROR : Shutting down tracer provider : %v", err) log.Debug("Tracer provider shut down") } } -} \ No newline at end of file +} diff --git a/backend/gateway/tools.go b/backend/gateway/tools.go index 35fd7b3..fcdeac4 100644 --- a/backend/gateway/tools.go +++ b/backend/gateway/tools.go @@ -5,4 +5,4 @@ package tools import ( _ "github.com/99designs/gqlgen" -) \ No newline at end of file +) diff --git a/backend/gateway/utils/ctx_keys.go b/backend/gateway/utils/ctx_keys.go index 94a6a82..0061d81 100644 --- a/backend/gateway/utils/ctx_keys.go +++ b/backend/gateway/utils/ctx_keys.go @@ -4,4 +4,4 @@ type CtxKey struct { Name string } -var USER_ID_CONTEXT_KEY= &CtxKey{ "USER_ID" } \ No newline at end of file +var USER_ID_CONTEXT_KEY = &CtxKey{"USER_ID"} diff --git a/backend/gateway/utils/envs.go b/backend/gateway/utils/envs.go index e926acc..734bbbf 100644 --- a/backend/gateway/utils/envs.go +++ b/backend/gateway/utils/envs.go @@ -10,20 +10,21 @@ import ( type EnvsSchema struct { GRAPHQL_SERVER_PORT string `env:"GRAPHQL_SERVER_PORT,notEmpty"` - USERS_MICROSERVICE_URL string `env:"USERS_MICROSERVICE_URL,notEmpty"` - PROFILES_MICROSERVICE_URL string `env:"PROFILES_MICROSERVICE_URL,notEmpty"` + USERS_MICROSERVICE_URL string `env:"USERS_MICROSERVICE_URL,notEmpty"` + PROFILES_MICROSERVICE_URL string `env:"PROFILES_MICROSERVICE_URL,notEmpty"` FOLLOWSHIPS_MICROSERVICE_URL string `env:"FOLLOWSHIPS_MICROSERVICE_URL,notEmpty"` - POSTS_MICROSERVICE_URL string `env:"POSTS_MICROSERVICE_URL,notEmpty"` - FEEDS_MICROSERVICE_URL string `env:"FEEDS_MICROSERVICE_URL,notEmpty"` + POSTS_MICROSERVICE_URL string `env:"POSTS_MICROSERVICE_URL,notEmpty"` + FEEDS_MICROSERVICE_URL string `env:"FEEDS_MICROSERVICE_URL,notEmpty"` JAEGER_COLLECTOR_URL string `env:"JAEGER_COLLECTOR_URL,notEmpty"` } var Envs EnvsSchema -func LoadEnvs( ) { +func LoadEnvs() { godotenv.Load(".env") if err := env.Parse(&Envs); err != nil { - panic(fmt.Sprintf("Retrieving envs: %v", err))} -} \ No newline at end of file + panic(fmt.Sprintf("Retrieving envs: %v", err)) + } +} diff --git a/backend/gateway/utils/errors.go b/backend/gateway/utils/errors.go index 439fbd4..60ca035 100644 --- a/backend/gateway/utils/errors.go +++ b/backend/gateway/utils/errors.go @@ -3,7 +3,7 @@ package utils import "errors" var ( - ErrUnauthenticated= errors.New("user is unauthenticated") + ErrUnauthenticated = errors.New("user is unauthenticated") - ErrUnexpected= errors.New("server error occurred") -) \ No newline at end of file + ErrUnexpected = errors.New("server error occurred") +) diff --git a/backend/gateway/utils/utils.go b/backend/gateway/utils/utils.go index c7bf859..685b083 100644 --- a/backend/gateway/utils/utils.go +++ b/backend/gateway/utils/utils.go @@ -8,7 +8,8 @@ import ( func ExtractJwtFromAuthorizationHeader(authorizationHeader string) (string, error) { parts := strings.Split(authorizationHeader, "Bearer ") if len(parts) != 2 || parts[0] != "" { - return "", errors.New("authorization header is invalid")} + return "", errors.New("authorization header is invalid") + } return parts[1], nil -} \ No newline at end of file +} diff --git a/backend/lib.rs b/backend/lib.rs index f0d1efc..b99cc68 100644 --- a/backend/lib.rs +++ b/backend/lib.rs @@ -3,276 +3,312 @@ pub mod sql; pub mod utils { - use anyhow::anyhow; - use deadpool_postgres::{ManagerConfig, Pool, RecyclingMethod}; - use tonic::{Status, Code}; - use tracing::error; + use anyhow::anyhow; + use deadpool_postgres::{ManagerConfig, Pool, RecyclingMethod}; use std::{env, time::Duration}; use tokio_postgres::NoTls; + use tonic::{Code, Status}; + use tracing::error; - pub fn getEnv(name: &str) -> String { - env::var(name).expect(&format!("ERROR: Getting env {}", name))} + pub fn getEnv(name: &str) -> String { + env::var(name).expect(&format!("ERROR: Getting env {}", name)) + } - pub const SERVER_ERROR: &'static str= "Server error occurred"; + pub const SERVER_ERROR: &'static str = "Server error occurred"; // toServerError captures any error, logs it to the standard output and then returns SERVER_ERROR - // as an anyhow error. + // as an anyhow error. pub fn toServerError(error: impl std::error::Error) -> anyhow::Error { error!("Unexpected server error occurred : {}", error); anyhow!(SERVER_ERROR) } - // mapToGrpcError takes an anyhow error, analyses the actual underlying error and returns an - // appropriate gRPC status code. - pub fn mapToGrpcError(error: anyhow::Error) -> Status { - let errorAsString= error.to_string( ); - - let grpcErrorCode= { - if errorAsString.eq(SERVER_ERROR) { Code::Internal } - else { Code::InvalidArgument } - }; - - Status::new(grpcErrorCode, errorAsString) - } - - // createPgConnectionPool creates a PostgreSQL database connection pool. - pub fn createPgConnectionPool( ) -> Pool { - deadpool_postgres::Config { - host: Some(getEnv("POSTGRES_HOST")), - port: Some( - getEnv("POSTGRES_PORT").parse( ) - .expect("ERROR: parsing env POSTGRES_PORT to u16 type"), - ), - dbname: Some("instagram_clone".to_string( )), - user: Some(getEnv("POSTGRES_USER")), - password: Some(getEnv("POSTGRES_PASSWORD")), - - connect_timeout: Some(Duration::from_secs(5)), - - pool: Some(deadpool_postgres::PoolConfig { - max_size: getEnv("POSTGRES_CONNECTION_POOL_SIZE").parse( ) - .expect("ERROR: parsing env POSTGRES_CONNECTION_POOL_SIZE to u16"), - ..Default::default( ) - }), - manager: Some(ManagerConfig { recycling_method: RecyclingMethod::Fast }), - - ..Default::default( ) - } - .create_pool(Some(deadpool_postgres::Runtime::Tokio1), NoTls) - .expect("ERROR: Creating Postgres database connection pool") - } - - pub mod observability { - use autometrics::prometheus_exporter; - use opentelemetry::{KeyValue, propagation::Extractor, global::get_text_map_propagator}; - use opentelemetry_otlp::{new_pipeline, new_exporter, WithExportConfig}; - use opentelemetry_sdk::{ - trace::{Sampler, RandomIdGenerator, Tracer}, Resource, runtime, - propagation::TraceContextPropagator - }; - use tokio::spawn; - use tracing::{Span, warn, subscriber::set_global_default, debug, level_filters::LevelFilter, debug_span}; - use tracing_opentelemetry::{OpenTelemetryLayer, OpenTelemetrySpanExt}; - use warp::Filter; - use super::getEnv; - use tracing_subscriber::{Registry, layer::SubscriberExt, EnvFilter, Layer}; - use axum::{body::Body, http::{Request, HeaderMap}}; - use tracing_subscriber::fmt; - - pub fn setupObservability(serviceName: &'static str) { - let envFilter= EnvFilter::builder( ) - .with_default_directive(LevelFilter::INFO.into( )) - .from_env( ).unwrap( ); - - set_global_default( - Registry::default( ) - .with(startTracer(serviceName)) - .with(fmt::layer( ).with_filter(envFilter)) - ) - .expect("ERROR : Setting up global default tracing registry"); - - startMetricsServer( ); - } - - // startMetricsServer starts an HTTP server in a separate thread, which exposes application - // metrics to Prometheus. - pub fn startMetricsServer( ) { - prometheus_exporter::init( ); - - let routes= warp::get( ) - .and(warp::path("metrics")) - .map(| | prometheus_exporter::encode_http_response( )); - - let address= ([0, 0, 0, 0], getEnv("METRICS_SERVER_PORT").parse( ).unwrap( )); - let metricsServer= warp::serve(routes) - .run(address); - - debug!("Starting metrics server"); - spawn(metricsServer); - } - - // startTracer creates an OpenTelemetry tracing pipeline and sets the global tracer. - pub fn startTracer(serviceName: &'static str) -> OpenTelemetryLayer { - opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new( )); - - let tracer= - new_pipeline( ) - .tracing( ) - .with_exporter( - new_exporter( ) - .tonic( ) - .with_protocol(opentelemetry_otlp::Protocol::Grpc) - .with_endpoint(getEnv("JAEGER_COLLECTOR_URL")) - // .with_compression(opentelemetry_otlp::Compression::Gzip) - ) - .with_trace_config( - opentelemetry_sdk::trace::config( ) - .with_sampler(Sampler::AlwaysOn) - .with_id_generator(RandomIdGenerator::default( )) - .with_resource(Resource::new(vec![ - KeyValue::new("service.name", serviceName) - ])) - ) - .install_batch(runtime::Tokio) - .expect("ERROR: Creating OpenTelemetry tracing pipeline"); - - tracing_opentelemetry::layer( ).with_tracer(tracer) - } - - pub fn makeSpan(request: &Request) -> Span { - let headers= request.headers( ); - debug_span!("Incoming Request", ?headers, trace_id = tracing::field::Empty) - } - - pub fn linkParentTrace(request: Request) -> Request { - let parentCtx= get_text_map_propagator(|propagator| { - propagator.extract(&MetadataMapExtractor(request.headers( ))) - }); - Span::current( ).set_parent(parentCtx); - - request - } - - pub struct MetadataMapExtractor<'a>(&'a HeaderMap); - - impl<'a> Extractor for MetadataMapExtractor<'a> { - fn get(&self, key: &str) -> Option<&str> { - self.0.get(key).and_then(|v| { - let s = v.to_str( ); - - if let Err(ref error) = s { - warn!(%error, ?v, "Cannot convert header value to ASCII")}; - - s.ok( ) - }) - } - - fn keys(&self) -> Vec<&str> { - self.0.keys( ).map(|k| k.as_str( )).collect( ) - } - } - } - - pub mod kafka { - use anyhow::{Result, anyhow}; - use kafka::consumer::{Consumer, FetchOffset, GroupOffsetStorage}; - use tracing::info; - use super::debezium::DbEvent; - use serde::Deserialize; - - pub fn createKafkaConsumer(hosts: Vec, topic: String, group: String) -> Consumer { - let consumer= - Consumer::from_hosts(hosts) - .with_topic(topic.clone( )) - .with_group(group) - .with_fallback_offset(FetchOffset::Earliest) - .with_offset_storage(Some(GroupOffsetStorage::Kafka)) - .create( ) - .expect(&format!("ERROR: Creating Kafka consumer for {} topic", topic)); - - info!("Created Kafka consumer for {} topic", topic); - - consumer - } - - // extractEventFromMessage takes a message received from the Kafka topic and extracts the db - // event from it. The extracted event is returned. - pub fn extractEventFromMessage Deserialize<'a>>( - - messageAsBytes: &[u8], - kafkaTopic: &str - - ) -> Result> { - let messageAsString= String::from_utf8(messageAsBytes.to_vec( )) - .map_err(|error| anyhow!("ERROR : parsing message received from '{}' Kafka topic to 'String' type: {}", kafkaTopic, error))?; - - serde_json::from_str(&messageAsString) - .map_err(|error| anyhow!("ERROR : de-serializing message received from '{}' Kafka topic: {}", kafkaTopic, error)) - } - } - - pub mod debezium { - use std::fmt::{self, Debug}; - use serde::{Deserialize, Deserializer}; - - #[derive(Debug)] - pub enum DbOperation { - Create, - Read, - Update, - Delete - } - - impl<'de> Deserialize<'de> for DbOperation { - fn deserialize(deserializer: D) -> Result - where D: Deserializer<'de> - { - struct DbOperationVisitor; - - impl<'de> serde::de::Visitor<'de> for DbOperationVisitor { - type Value = DbOperation; - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a string representing a database operation")} - - fn visit_str(self, value: &str) -> Result - where E: serde::de::Error { - - match value { - "c" => Ok(DbOperation::Create), - "r" => Ok(DbOperation::Read), - "u" => Ok(DbOperation::Update), - "d" => Ok(DbOperation::Delete), - - _ => Err(E::custom(format!("ERROR : Invalid value for 'op': {}", value))), - } - } - } - - deserializer.deserialize_str(DbOperationVisitor) - } - } - - #[derive(Debug, Deserialize)] - #[serde(bound = "for<'a> T: Deserialize<'a>")] // The bound indicates that for any lifetime 'a, - // the type T must implement the Deserialize - // trait for that lifetime. This is a way to - // express that the type T is deserializable for - // any valid lifetime. - pub struct DbEvent - // The use of for<'a> in the bound means that the trait implementation is expected to work for - // any lifetime. - where for<'a> T: Deserialize<'a> { - - pub payload: DbEventPayload - } - - #[derive(Debug, Deserialize)] - pub struct DbEventPayload { - pub op: DbOperation, - - pub before: Option, - pub after: Option - } - } -} \ No newline at end of file + // mapToGrpcError takes an anyhow error, analyses the actual underlying error and returns an + // appropriate gRPC status code. + pub fn mapToGrpcError(error: anyhow::Error) -> Status { + let errorAsString = error.to_string(); + + let grpcErrorCode = { + if errorAsString.eq(SERVER_ERROR) { + Code::Internal + } else { + Code::InvalidArgument + } + }; + + Status::new(grpcErrorCode, errorAsString) + } + + // createPgConnectionPool creates a PostgreSQL database connection pool. + pub fn createPgConnectionPool() -> Pool { + deadpool_postgres::Config { + host: Some(getEnv("POSTGRES_HOST")), + port: Some( + getEnv("POSTGRES_PORT") + .parse() + .expect("ERROR: parsing env POSTGRES_PORT to u16 type"), + ), + dbname: Some("instagram_clone".to_string()), + user: Some(getEnv("POSTGRES_USER")), + password: Some(getEnv("POSTGRES_PASSWORD")), + + connect_timeout: Some(Duration::from_secs(5)), + + pool: Some(deadpool_postgres::PoolConfig { + max_size: getEnv("POSTGRES_CONNECTION_POOL_SIZE") + .parse() + .expect("ERROR: parsing env POSTGRES_CONNECTION_POOL_SIZE to u16"), + ..Default::default() + }), + manager: Some(ManagerConfig { + recycling_method: RecyclingMethod::Fast, + }), + + ..Default::default() + } + .create_pool(Some(deadpool_postgres::Runtime::Tokio1), NoTls) + .expect("ERROR: Creating Postgres database connection pool") + } + + pub mod observability { + use super::getEnv; + use autometrics::prometheus_exporter; + use axum::{ + body::Body, + http::{HeaderMap, Request}, + }; + use opentelemetry::{global::get_text_map_propagator, propagation::Extractor, KeyValue}; + use opentelemetry_otlp::{new_exporter, new_pipeline, WithExportConfig}; + use opentelemetry_sdk::{ + propagation::TraceContextPropagator, + runtime, + trace::{RandomIdGenerator, Sampler, Tracer}, + Resource, + }; + use tokio::spawn; + use tracing::{ + debug, debug_span, level_filters::LevelFilter, subscriber::set_global_default, warn, Span, + }; + use tracing_opentelemetry::{OpenTelemetryLayer, OpenTelemetrySpanExt}; + use tracing_subscriber::fmt; + use tracing_subscriber::{layer::SubscriberExt, EnvFilter, Layer, Registry}; + use warp::Filter; + + pub fn setupObservability(serviceName: &'static str) { + let envFilter = EnvFilter::builder() + .with_default_directive(LevelFilter::INFO.into()) + .from_env() + .unwrap(); + + set_global_default( + Registry::default() + .with(startTracer(serviceName)) + .with(fmt::layer().with_filter(envFilter)), + ) + .expect("ERROR : Setting up global default tracing registry"); + + startMetricsServer(); + } + + // startMetricsServer starts an HTTP server in a separate thread, which exposes application + // metrics to Prometheus. + pub fn startMetricsServer() { + prometheus_exporter::init(); + + let routes = warp::get() + .and(warp::path("metrics")) + .map(|| prometheus_exporter::encode_http_response()); + + let address = ([0, 0, 0, 0], getEnv("METRICS_SERVER_PORT").parse().unwrap()); + let metricsServer = warp::serve(routes).run(address); + + debug!("Starting metrics server"); + spawn(metricsServer); + } + + // startTracer creates an OpenTelemetry tracing pipeline and sets the global tracer. + pub fn startTracer(serviceName: &'static str) -> OpenTelemetryLayer { + opentelemetry::global::set_text_map_propagator(TraceContextPropagator::new()); + + let tracer = new_pipeline() + .tracing() + .with_exporter( + new_exporter() + .tonic() + .with_protocol(opentelemetry_otlp::Protocol::Grpc) + .with_endpoint(getEnv("JAEGER_COLLECTOR_URL")), // .with_compression(opentelemetry_otlp::Compression::Gzip) + ) + .with_trace_config( + opentelemetry_sdk::trace::config() + .with_sampler(Sampler::AlwaysOn) + .with_id_generator(RandomIdGenerator::default()) + .with_resource(Resource::new(vec![KeyValue::new( + "service.name", + serviceName, + )])), + ) + .install_batch(runtime::Tokio) + .expect("ERROR: Creating OpenTelemetry tracing pipeline"); + + tracing_opentelemetry::layer().with_tracer(tracer) + } + + pub fn makeSpan(request: &Request) -> Span { + let headers = request.headers(); + debug_span!( + "Incoming Request", + ?headers, + trace_id = tracing::field::Empty + ) + } + + pub fn linkParentTrace(request: Request) -> Request { + let parentCtx = get_text_map_propagator(|propagator| { + propagator.extract(&MetadataMapExtractor(request.headers())) + }); + Span::current().set_parent(parentCtx); + + request + } + + pub struct MetadataMapExtractor<'a>(&'a HeaderMap); + + impl<'a> Extractor for MetadataMapExtractor<'a> { + fn get(&self, key: &str) -> Option<&str> { + self.0.get(key).and_then(|v| { + let s = v.to_str(); + + if let Err(ref error) = s { + warn!(%error, ?v, "Cannot convert header value to ASCII") + }; + + s.ok() + }) + } + + fn keys(&self) -> Vec<&str> { + self.0.keys().map(|k| k.as_str()).collect() + } + } + } + + pub mod kafka { + use super::debezium::DbEvent; + use anyhow::{anyhow, Result}; + use kafka::consumer::{Consumer, FetchOffset, GroupOffsetStorage}; + use serde::Deserialize; + use tracing::info; + + pub fn createKafkaConsumer(hosts: Vec, topic: String, group: String) -> Consumer { + let consumer = Consumer::from_hosts(hosts) + .with_topic(topic.clone()) + .with_group(group) + .with_fallback_offset(FetchOffset::Earliest) + .with_offset_storage(Some(GroupOffsetStorage::Kafka)) + .create() + .expect(&format!( + "ERROR: Creating Kafka consumer for {} topic", + topic + )); + + info!("Created Kafka consumer for {} topic", topic); + + consumer + } + + // extractEventFromMessage takes a message received from the Kafka topic and extracts the db + // event from it. The extracted event is returned. + pub fn extractEventFromMessage Deserialize<'a>>( + messageAsBytes: &[u8], + kafkaTopic: &str, + ) -> Result> { + let messageAsString = String::from_utf8(messageAsBytes.to_vec()).map_err(|error| { + anyhow!( + "ERROR : parsing message received from '{}' Kafka topic to 'String' type: {}", + kafkaTopic, + error + ) + })?; + + serde_json::from_str(&messageAsString).map_err(|error| { + anyhow!( + "ERROR : de-serializing message received from '{}' Kafka topic: {}", + kafkaTopic, + error + ) + }) + } + } + + pub mod debezium { + use serde::{Deserialize, Deserializer}; + use std::fmt::{self, Debug}; + + #[derive(Debug)] + pub enum DbOperation { + Create, + Read, + Update, + Delete, + } + + impl<'de> Deserialize<'de> for DbOperation { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct DbOperationVisitor; + + impl<'de> serde::de::Visitor<'de> for DbOperationVisitor { + type Value = DbOperation; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a string representing a database operation") + } + + fn visit_str(self, value: &str) -> Result + where + E: serde::de::Error, + { + match value { + "c" => Ok(DbOperation::Create), + "r" => Ok(DbOperation::Read), + "u" => Ok(DbOperation::Update), + "d" => Ok(DbOperation::Delete), + + _ => Err(E::custom(format!( + "ERROR : Invalid value for 'op': {}", + value + ))), + } + } + } + + deserializer.deserialize_str(DbOperationVisitor) + } + } + + #[derive(Debug, Deserialize)] + #[serde(bound = "for<'a> T: Deserialize<'a>")] // The bound indicates that for any lifetime 'a, + // the type T must implement the Deserialize + // trait for that lifetime. This is a way to + // express that the type T is deserializable for + // any valid lifetime. + pub struct DbEvent + // The use of for<'a> in the bound means that the trait implementation is expected to work for + // any lifetime. + where + for<'a> T: Deserialize<'a>, + { + pub payload: DbEventPayload, + } + + #[derive(Debug, Deserialize)] + pub struct DbEventPayload { + pub op: DbOperation, + + pub before: Option, + pub after: Option, + } + } +} diff --git a/backend/microservices/feeds/adapters/grpc.rs b/backend/microservices/feeds/adapters/grpc.rs index 6c1ab1c..8d47fa0 100644 --- a/backend/microservices/feeds/adapters/grpc.rs +++ b/backend/microservices/feeds/adapters/grpc.rs @@ -1,47 +1,56 @@ -use crate::{proto::{feeds_service_server::*, *}, THREAD_CANCELLATION_TOKEN, CONFIG, domain::usecases::Usecases}; -use autometrics::{objectives::Objective, autometrics}; -use shared::utils::{mapToGrpcError, observability::{makeSpan, linkParentTrace}}; +use crate::{ + domain::usecases::Usecases, + proto::{feeds_service_server::*, *}, + CONFIG, THREAD_CANCELLATION_TOKEN, +}; +use autometrics::{autometrics, objectives::Objective}; +use shared::utils::{ + mapToGrpcError, + observability::{linkParentTrace, makeSpan}, +}; use tokio::spawn; -use tonic::{codec::CompressionEncoding, transport::Server, Request, Response, Status, async_trait}; +use tonic::{ + async_trait, codec::CompressionEncoding, transport::Server, Request, Response, Status, +}; use tower::ServiceBuilder; use tower_http::trace::TraceLayer; -use tracing::{instrument, debug}; +use tracing::{debug, instrument}; -const MAX_REQUEST_SIZE: usize= 512; // 512 Bytes +const MAX_REQUEST_SIZE: usize = 512; // 512 Bytes -pub struct GrpcAdapter { } +pub struct GrpcAdapter {} impl GrpcAdapter { pub async fn startServer(usecases: &'static Usecases) { - let address= format!("[::]:{}", CONFIG.GRPC_SERVER_PORT); - let address= address.parse( ) - .expect(&format!("ERROR: Parsing binding address of the gRPC server : {}", address)); + let address = format!("[::]:{}", CONFIG.GRPC_SERVER_PORT); + let address = address.parse().expect(&format!( + "ERROR: Parsing binding address of the gRPC server : {}", + address + )); - let feedsService= - FeedsServiceServer::new(FeedsServiceImpl { usecases }) - .max_decoding_message_size(MAX_REQUEST_SIZE) - .send_compressed(CompressionEncoding::Gzip) - .accept_compressed(CompressionEncoding::Gzip); + let feedsService = FeedsServiceServer::new(FeedsServiceImpl { usecases }) + .max_decoding_message_size(MAX_REQUEST_SIZE) + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); - let reflectionService= - tonic_reflection::server::Builder::configure( ) - .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) - .build( ) - .expect("ERROR: Building gRPC reflection service") - .max_decoding_message_size(MAX_REQUEST_SIZE); + let reflectionService = tonic_reflection::server::Builder::configure() + .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) + .build() + .expect("ERROR: Building gRPC reflection service") + .max_decoding_message_size(MAX_REQUEST_SIZE); debug!("Starting gRPC server"); spawn(async move { - Server::builder( ) - .layer( - ServiceBuilder::new( ) - .layer(TraceLayer::new_for_grpc( ).make_span_with(makeSpan)) - .map_request(linkParentTrace) - ) + Server::builder() + .layer( + ServiceBuilder::new() + .layer(TraceLayer::new_for_grpc().make_span_with(makeSpan)) + .map_request(linkParentTrace), + ) .add_service(feedsService) .add_service(reflectionService) - .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone( ).cancelled( )) + .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone().cancelled()) .await .expect("ERROR: Starting gRPC server"); }); @@ -49,23 +58,29 @@ impl GrpcAdapter { } struct FeedsServiceImpl { - usecases: &'static Usecases + usecases: &'static Usecases, } -const API_SLO: Objective= Objective::new("feeds-microservice"); +const API_SLO: Objective = Objective::new("feeds-microservice"); #[autometrics(objective = API_SLO)] #[async_trait] impl FeedsService for FeedsServiceImpl { - async fn ping(&self, _: Request<( )>) -> Result, Status> { - Ok(Response::new(( )))} + async fn ping(&self, _: Request<()>) -> Result, Status> { + Ok(Response::new(())) + } - #[instrument(skip(self), level= "info")] - async fn get_feed(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); + #[instrument(skip(self), level = "info")] + async fn get_feed( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); - self.usecases.getFeed(request) - .map(|value| Response::new(GetFeedResponse { post_ids: value })) - .map_err(mapToGrpcError) + self + .usecases + .getFeed(request) + .map(|value| Response::new(GetFeedResponse { post_ids: value })) + .map_err(mapToGrpcError) } -} \ No newline at end of file +} diff --git a/backend/microservices/feeds/adapters/kafka.rs b/backend/microservices/feeds/adapters/kafka.rs index d183062..a8d7894 100644 --- a/backend/microservices/feeds/adapters/kafka.rs +++ b/backend/microservices/feeds/adapters/kafka.rs @@ -1,77 +1,100 @@ -use std::time::Duration; -use anyhow::{anyhow, Result, Ok}; +use crate::{ + domain::{ports::PostCreatedEvent, usecases::Usecases}, + CONFIG, THREAD_CANCELLATION_TOKEN, +}; +use anyhow::{anyhow, Ok, Result}; use kafka::consumer::Consumer; -use shared::utils::{debezium::DbOperation, kafka::{createKafkaConsumer, extractEventFromMessage}}; +use shared::utils::{ + debezium::DbOperation, + kafka::{createKafkaConsumer, extractEventFromMessage}, +}; +use std::time::Duration; use tokio::{select, time::sleep}; -use crate::{CONFIG, domain::{usecases::Usecases, ports::PostCreatedEvent}, THREAD_CANCELLATION_TOKEN}; use tracing::error; -const KAFKA_TOPIC: &'static str= "db-events.public.posts"; +const KAFKA_TOPIC: &'static str = "db-events.public.posts"; pub struct KafkaAdapter { - consumer: Consumer + consumer: Consumer, } impl KafkaAdapter { - pub fn new( ) -> Self { - let consumer= createKafkaConsumer( - CONFIG.KAFKA_HOSTS.split(',').map(String::from).collect( ), - KAFKA_TOPIC.to_string( ), - "default".to_string( ) - ); - - Self { consumer } - } - - pub async fn consume(&mut self, usecases: &Usecases) { - loop { - let result= select! { - _= THREAD_CANCELLATION_TOKEN.cancelled( ) => return, - - result= self._consume(usecases) => result - }; - - if let Err(error)= result { - error!("{}", error)} - - sleep(Duration::from_secs(1)).await; - } - } - - async fn _consume(&mut self, usecases: &Usecases) -> Result<( )> { - let messageSets= self.consumer.poll( ) - .map_err(|error| anyhow!("Error consuming messages from '{}' kafka topic: {}", KAFKA_TOPIC, error))?; - - if messageSets.is_empty( ) { - return Ok(( ))} - - for messageSet in messageSets.iter( ) { - let partition= messageSet.partition( ); - - for message in messageSet.messages( ) { - let payload= extractEventFromMessage::(message.value, KAFKA_TOPIC)?.payload; - - let consumeMessage: bool; - - match payload.op { - DbOperation::Create => - // TODO: For each message, spin up a new thread (or take a thread from a thread-pool) - // and do the processing in that separate thread parallaly. - // - // TODO: If any error occurs, then send it to a central log management system. - consumeMessage= usecases.pushPostToFeeds(payload.after.unwrap( )).await.is_ok( ), - - _ => consumeMessage= true - } - - if consumeMessage { - self.consumer.consume_message(KAFKA_TOPIC, partition, message.offset) - .map_err(|error| anyhow!("Error trying to consume Kafka message : {}", error))?; - } - } - } - - self.consumer.commit_consumed( ) - .map_err(|error| anyhow!("Error trying to commit consumed Kafka messages : {}", error)) - } -} \ No newline at end of file + pub fn new() -> Self { + let consumer = createKafkaConsumer( + CONFIG.KAFKA_HOSTS.split(',').map(String::from).collect(), + KAFKA_TOPIC.to_string(), + "default".to_string(), + ); + + Self { consumer } + } + + pub async fn consume(&mut self, usecases: &Usecases) { + loop { + let result = select! { + _= THREAD_CANCELLATION_TOKEN.cancelled( ) => return, + + result= self._consume(usecases) => result + }; + + if let Err(error) = result { + error!("{}", error) + } + + sleep(Duration::from_secs(1)).await; + } + } + + async fn _consume(&mut self, usecases: &Usecases) -> Result<()> { + let messageSets = self.consumer.poll().map_err(|error| { + anyhow!( + "Error consuming messages from '{}' kafka topic: {}", + KAFKA_TOPIC, + error + ) + })?; + + if messageSets.is_empty() { + return Ok(()); + } + + for messageSet in messageSets.iter() { + let partition = messageSet.partition(); + + for message in messageSet.messages() { + let payload = + extractEventFromMessage::(message.value, KAFKA_TOPIC)?.payload; + + let consumeMessage: bool; + + match payload.op { + DbOperation::Create => + // TODO: For each message, spin up a new thread (or take a thread from a thread-pool) + // and do the processing in that separate thread parallaly. + // + // TODO: If any error occurs, then send it to a central log management system. + { + consumeMessage = usecases + .pushPostToFeeds(payload.after.unwrap()) + .await + .is_ok() + } + + _ => consumeMessage = true, + } + + if consumeMessage { + self + .consumer + .consume_message(KAFKA_TOPIC, partition, message.offset) + .map_err(|error| anyhow!("Error trying to consume Kafka message : {}", error))?; + } + } + } + + self + .consumer + .commit_consumed() + .map_err(|error| anyhow!("Error trying to commit consumed Kafka messages : {}", error)) + } +} diff --git a/backend/microservices/feeds/adapters/mod.rs b/backend/microservices/feeds/adapters/mod.rs index 070dc55..b9e6379 100644 --- a/backend/microservices/feeds/adapters/mod.rs +++ b/backend/microservices/feeds/adapters/mod.rs @@ -8,4 +8,4 @@ mod redis; pub use self::redis::*; mod postgres; -pub use self::postgres::*; \ No newline at end of file +pub use self::postgres::*; diff --git a/backend/microservices/feeds/adapters/postgres.rs b/backend/microservices/feeds/adapters/postgres.rs index e167541..d7eb01a 100644 --- a/backend/microservices/feeds/adapters/postgres.rs +++ b/backend/microservices/feeds/adapters/postgres.rs @@ -1,52 +1,57 @@ +use crate::domain::ports::FollowshipsRepository; use anyhow::Result; use async_trait::async_trait; -use deadpool_postgres::{Pool, Object}; +use deadpool_postgres::{Object, Pool}; use shared::{ - utils::{createPgConnectionPool, toServerError}, - sql::queries::feeds_microservice::getAllFollowers + sql::queries::feeds_microservice::getAllFollowers, + utils::{createPgConnectionPool, toServerError}, }; -use tracing::{instrument, debug}; -use crate::domain::ports::FollowshipsRepository; +use tracing::{debug, instrument}; pub struct PostgresAdapter { - connectionPool: Pool + connectionPool: Pool, } impl PostgresAdapter { - pub async fn new( ) -> Self { - let postgresAdapter= Self { connectionPool: createPgConnectionPool( )}; - - // Get a client from the connection pool to verify that the database is reachable. - let _= postgresAdapter.connectionPool.get( ) - .await.expect("ERROR: Connecting to the Postgres database"); - debug!("Connected to Postgres database"); - - postgresAdapter - } - - // getClient fetches and returns a database client from the underlying connection pool. - async fn getClient(&self) -> Result { - let client= self.connectionPool.get( ).await.map_err(toServerError)?; - Ok(client) - } + pub async fn new() -> Self { + let postgresAdapter = Self { + connectionPool: createPgConnectionPool(), + }; + + // Get a client from the connection pool to verify that the database is reachable. + let _ = postgresAdapter + .connectionPool + .get() + .await + .expect("ERROR: Connecting to the Postgres database"); + debug!("Connected to Postgres database"); + + postgresAdapter + } + + // getClient fetches and returns a database client from the underlying connection pool. + async fn getClient(&self) -> Result { + let client = self.connectionPool.get().await.map_err(toServerError)?; + Ok(client) + } } #[async_trait] impl FollowshipsRepository for PostgresAdapter { - // cleanup closes the underlying Postgres database connection pool. - fn cleanup(&self) { - self.connectionPool.close( ); - debug!("PostgreSQL database connection pool destroyed"); - } - - #[instrument(skip(self), level= "debug")] - async fn getAllFollowers(&self, userId: i32) -> Result> { - let client= self.getClient( ).await?; - - getAllFollowers( ) - .bind(&client, &userId) - .all( ) - .await - .map_err(toServerError) - } -} \ No newline at end of file + // cleanup closes the underlying Postgres database connection pool. + fn cleanup(&self) { + self.connectionPool.close(); + debug!("PostgreSQL database connection pool destroyed"); + } + + #[instrument(skip(self), level = "debug")] + async fn getAllFollowers(&self, userId: i32) -> Result> { + let client = self.getClient().await?; + + getAllFollowers() + .bind(&client, &userId) + .all() + .await + .map_err(toServerError) + } +} diff --git a/backend/microservices/feeds/adapters/redis.rs b/backend/microservices/feeds/adapters/redis.rs index 86290c8..348fc27 100644 --- a/backend/microservices/feeds/adapters/redis.rs +++ b/backend/microservices/feeds/adapters/redis.rs @@ -1,52 +1,54 @@ +use crate::{domain::ports::FeedsRepository, proto::GetFeedRequest}; use anyhow::Result; -use r2d2_redis::{RedisConnectionManager, r2d2::Pool, redis::{pipe, Commands}}; +use r2d2_redis::{ + r2d2::Pool, + redis::{pipe, Commands}, + RedisConnectionManager, +}; use shared::utils::{getEnv, toServerError}; -use crate::{domain::ports::FeedsRepository, proto::GetFeedRequest}; -use tracing::{instrument, debug}; +use tracing::{debug, instrument}; pub struct RedisAdapter { - pool: Pool + pool: Pool, } impl RedisAdapter { - pub async fn new( ) -> Self { - let connectionManager= RedisConnectionManager::new(getEnv("REDIS_URL")) - .expect("ERROR : Invalid Redis url"); - let pool= Pool::builder( ) - .build(connectionManager) - .expect("ERROR : Creating Redis connection pool"); + pub async fn new() -> Self { + let connectionManager = + RedisConnectionManager::new(getEnv("REDIS_URL")).expect("ERROR : Invalid Redis url"); + let pool = Pool::builder() + .build(connectionManager) + .expect("ERROR : Creating Redis connection pool"); - debug!("Created Redis connection pool"); + debug!("Created Redis connection pool"); - Self { pool } - } + Self { pool } + } } impl FeedsRepository for RedisAdapter { - #[instrument(skip(self), level= "debug")] - fn pushPostToFeeds(&self, userIds: Vec, postId: i32) -> Result<( )> { - let mut connection= self.pool.get( ) - .map_err(toServerError)?; - let mut pipe= pipe( ); - - for userId in userIds { - pipe.lpush(userId, postId) - .ltrim(userId, 0, 1000); - } - - pipe.query(&mut *connection) - .map_err(toServerError) - } - - #[instrument(skip(self), level= "debug")] - fn getFeed(&self, args: GetFeedRequest) -> Result> { - let mut connection= self.pool.get( ) - .map_err(toServerError)?; - - connection.lrange( - args.user_id, - args.offset as isize, (args.offset + args.page_size) as isize - ) - .map_err(toServerError) - } -} \ No newline at end of file + #[instrument(skip(self), level = "debug")] + fn pushPostToFeeds(&self, userIds: Vec, postId: i32) -> Result<()> { + let mut connection = self.pool.get().map_err(toServerError)?; + let mut pipe = pipe(); + + for userId in userIds { + pipe.lpush(userId, postId).ltrim(userId, 0, 1000); + } + + pipe.query(&mut *connection).map_err(toServerError) + } + + #[instrument(skip(self), level = "debug")] + fn getFeed(&self, args: GetFeedRequest) -> Result> { + let mut connection = self.pool.get().map_err(toServerError)?; + + connection + .lrange( + args.user_id, + args.offset as isize, + (args.offset + args.page_size) as isize, + ) + .map_err(toServerError) + } +} diff --git a/backend/microservices/feeds/domain/mod.rs b/backend/microservices/feeds/domain/mod.rs index c94a01a..e41f520 100644 --- a/backend/microservices/feeds/domain/mod.rs +++ b/backend/microservices/feeds/domain/mod.rs @@ -1,2 +1,2 @@ pub mod ports; -pub mod usecases; \ No newline at end of file +pub mod usecases; diff --git a/backend/microservices/feeds/domain/ports.rs b/backend/microservices/feeds/domain/ports.rs index 49e4ee2..c753e9c 100644 --- a/backend/microservices/feeds/domain/ports.rs +++ b/backend/microservices/feeds/domain/ports.rs @@ -1,25 +1,25 @@ +use crate::proto::GetFeedRequest; use anyhow::Result; use async_trait::async_trait; use serde::Deserialize; -use crate::proto::GetFeedRequest; #[derive(Debug, Deserialize)] pub struct PostCreatedEvent { - pub id: i32, + pub id: i32, - #[serde(rename= "owner_id")] - pub ownerId: i32 + #[serde(rename = "owner_id")] + pub ownerId: i32, } pub trait FeedsRepository: Send + Sync { - fn pushPostToFeeds(&self, userIds: Vec, postId: i32) -> Result<( )>; + fn pushPostToFeeds(&self, userIds: Vec, postId: i32) -> Result<()>; - fn getFeed(&self, args: GetFeedRequest) -> Result>; + fn getFeed(&self, args: GetFeedRequest) -> Result>; } #[async_trait] pub trait FollowshipsRepository: Send + Sync { - async fn getAllFollowers(&self, userId: i32) -> Result>; + async fn getAllFollowers(&self, userId: i32) -> Result>; - fn cleanup(&self); -} \ No newline at end of file + fn cleanup(&self); +} diff --git a/backend/microservices/feeds/domain/usecases.rs b/backend/microservices/feeds/domain/usecases.rs index d767094..6dc7ec3 100644 --- a/backend/microservices/feeds/domain/usecases.rs +++ b/backend/microservices/feeds/domain/usecases.rs @@ -1,22 +1,27 @@ +use crate::proto::GetFeedRequest; use anyhow::Result; use derive_more::Constructor; -use crate::proto::GetFeedRequest; -use super::ports::{FollowshipsRepository, FeedsRepository, PostCreatedEvent}; +use super::ports::{FeedsRepository, FollowshipsRepository, PostCreatedEvent}; #[derive(Constructor)] pub struct Usecases { - followshipsRepository: &'static dyn FollowshipsRepository, - feedsRepository: &'static dyn FeedsRepository + followshipsRepository: &'static dyn FollowshipsRepository, + feedsRepository: &'static dyn FeedsRepository, } impl Usecases { - pub async fn pushPostToFeeds(&self, postCreatedEvent: PostCreatedEvent) -> Result<( )> { - let followerIds= self.followshipsRepository.getAllFollowers(postCreatedEvent.ownerId).await?; - self.feedsRepository.pushPostToFeeds(followerIds, postCreatedEvent.id) - } + pub async fn pushPostToFeeds(&self, postCreatedEvent: PostCreatedEvent) -> Result<()> { + let followerIds = self + .followshipsRepository + .getAllFollowers(postCreatedEvent.ownerId) + .await?; + self + .feedsRepository + .pushPostToFeeds(followerIds, postCreatedEvent.id) + } - pub fn getFeed(&self, args: GetFeedRequest) -> Result> { - self.feedsRepository.getFeed(args) - } -} \ No newline at end of file + pub fn getFeed(&self, args: GetFeedRequest) -> Result> { + self.feedsRepository.getFeed(args) + } +} diff --git a/backend/microservices/feeds/main.rs b/backend/microservices/feeds/main.rs index b29b425..b762b98 100644 --- a/backend/microservices/feeds/main.rs +++ b/backend/microservices/feeds/main.rs @@ -1,68 +1,68 @@ #![allow(non_snake_case)] -mod domain; mod adapters; +mod domain; mod proto { // Including code generated from the .proto files. tonic::include_proto!("feeds_microservice"); - pub const FILE_DESCRIPTOR_SET: &[u8]= + pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("feeds_microservice.descriptor"); } -use std::process::exit; -use adapters::{RedisAdapter, GrpcAdapter, PostgresAdapter}; +use crate::domain::ports::FollowshipsRepository; +use adapters::{GrpcAdapter, PostgresAdapter, RedisAdapter}; use domain::usecases::Usecases; use lazy_static::lazy_static; use shared::utils::{getEnv, observability::setupObservability}; +use std::process::exit; use tokio::{signal, spawn}; use tokio_util::sync::CancellationToken; -use tracing::{warn, error}; -use crate::domain::ports::FollowshipsRepository; +use tracing::{error, warn}; struct Config { GRPC_SERVER_PORT: String, - KAFKA_HOSTS: String + KAFKA_HOSTS: String, } lazy_static! { - static ref CONFIG: Config= Config { + static ref CONFIG: Config = Config { GRPC_SERVER_PORT: getEnv("GRPC_SERVER_PORT"), - KAFKA_HOSTS: getEnv("KAFKA_HOSTS") + KAFKA_HOSTS: getEnv("KAFKA_HOSTS") }; - - static ref THREAD_CANCELLATION_TOKEN: CancellationToken= CancellationToken::new( ); + static ref THREAD_CANCELLATION_TOKEN: CancellationToken = CancellationToken::new(); } #[tokio::main] -async fn main( ) { - let _= dotenv::from_filename("./backend/microservices/feeds/.env"); +async fn main() { + let _ = dotenv::from_filename("./backend/microservices/feeds/.env"); - setupObservability("feeds-microservice"); + setupObservability("feeds-microservice"); - let postgresAdapter= - Box::leak::<'static>(Box::new(PostgresAdapter::new( ).await)) as &'static PostgresAdapter; + let postgresAdapter = + Box::leak::<'static>(Box::new(PostgresAdapter::new().await)) as &'static PostgresAdapter; - let redisAdapter= - Box::leak::<'static>(Box::new(RedisAdapter::new( ).await)) as &'static RedisAdapter; + let redisAdapter = + Box::leak::<'static>(Box::new(RedisAdapter::new().await)) as &'static RedisAdapter; - let usecases= Box::leak::<'static>(Box::new(Usecases::new(postgresAdapter, redisAdapter))); + let usecases = Box::leak::<'static>(Box::new(Usecases::new(postgresAdapter, redisAdapter))); - spawn(async { - let mut kafkaAdapter= adapters::KafkaAdapter::new( ); - kafkaAdapter.consume(usecases).await; - }); + spawn(async { + let mut kafkaAdapter = adapters::KafkaAdapter::new(); + kafkaAdapter.consume(usecases).await; + }); - GrpcAdapter::startServer(usecases).await; + GrpcAdapter::startServer(usecases).await; - /* Gracefully shutdown on receiving program shutdown signal. */ { - let error= signal::ctrl_c( ).await.err( ); + /* Gracefully shutdown on receiving program shutdown signal. */ + { + let error = signal::ctrl_c().await.err(); warn!("Received program shutdown signal"); - let _= &THREAD_CANCELLATION_TOKEN.cancel( ); // Do cleanup tasks in currently active Tokio + let _ = &THREAD_CANCELLATION_TOKEN.cancel(); // Do cleanup tasks in currently active Tokio // threads. - postgresAdapter.cleanup( ); + postgresAdapter.cleanup(); match error { None => exit(0), @@ -73,4 +73,4 @@ async fn main( ) { } } } -} \ No newline at end of file +} diff --git a/backend/microservices/followships/adapters/grpc.rs b/backend/microservices/followships/adapters/grpc.rs index abe6ef1..d629dbf 100644 --- a/backend/microservices/followships/adapters/grpc.rs +++ b/backend/microservices/followships/adapters/grpc.rs @@ -5,49 +5,52 @@ use crate::{ }; use async_trait::async_trait; use autometrics::{autometrics, objectives::Objective}; -use shared::utils::{mapToGrpcError, observability::{makeSpan, linkParentTrace}}; +use shared::utils::{ + mapToGrpcError, + observability::{linkParentTrace, makeSpan}, +}; use tokio::spawn; use tonic::{codec::CompressionEncoding, transport::Server, Request, Response, Status}; use tower::ServiceBuilder; use tower_http::trace::TraceLayer; -use tracing::{instrument, debug}; +use tracing::{debug, instrument}; -const MAX_REQUEST_SIZE: usize= 512; //bytes +const MAX_REQUEST_SIZE: usize = 512; //bytes -pub struct GrpcAdapter { } +pub struct GrpcAdapter {} impl GrpcAdapter { // startServer starts a gRPC server. pub async fn startServer(usecases: Box) { - let address= format!("[::]:{}", &*CONFIG.GRPC_SERVER_PORT); - let address= address.parse( ) - .expect(&format!("ERROR: Parsing binding address of the gRPC server : {}", address)); - - let followshipsService= - FollowshipsServiceServer::new(FollowshipsServiceImpl { usecases }) - .max_decoding_message_size(MAX_REQUEST_SIZE) - .send_compressed(CompressionEncoding::Gzip) - .accept_compressed(CompressionEncoding::Gzip); - - let reflectionService= - tonic_reflection::server::Builder::configure( ) - .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) - .build( ) - .expect("ERROR: Building gRPC reflection service") - .max_decoding_message_size(MAX_REQUEST_SIZE); + let address = format!("[::]:{}", &*CONFIG.GRPC_SERVER_PORT); + let address = address.parse().expect(&format!( + "ERROR: Parsing binding address of the gRPC server : {}", + address + )); + + let followshipsService = FollowshipsServiceServer::new(FollowshipsServiceImpl { usecases }) + .max_decoding_message_size(MAX_REQUEST_SIZE) + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + + let reflectionService = tonic_reflection::server::Builder::configure() + .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) + .build() + .expect("ERROR: Building gRPC reflection service") + .max_decoding_message_size(MAX_REQUEST_SIZE); debug!("Starting gRPC server"); spawn(async move { - Server::builder( ) - .layer( - ServiceBuilder::new( ) - .layer(TraceLayer::new_for_grpc( ).make_span_with(makeSpan)) - .map_request(linkParentTrace) - ) + Server::builder() + .layer( + ServiceBuilder::new() + .layer(TraceLayer::new_for_grpc().make_span_with(makeSpan)) + .map_request(linkParentTrace), + ) .add_service(followshipsService) .add_service(reflectionService) - .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone( ).cancelled( )) + .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone().cancelled()) .await .expect("ERROR: Starting gRPC server"); }); @@ -55,65 +58,103 @@ impl GrpcAdapter { } struct FollowshipsServiceImpl { - usecases: Box + usecases: Box, } -const API_SLO: Objective= Objective::new("followships-microservice"); +const API_SLO: Objective = Objective::new("followships-microservice"); #[autometrics(objective = API_SLO)] #[async_trait] impl FollowshipsService for FollowshipsServiceImpl { - async fn ping(&self, _: Request<( )>) -> Result, Status> { - Ok(Response::new(( )))} - - #[instrument(skip(self), level= "info")] - async fn follow(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - - self.usecases.follow(&request).await - .map(|_| Response::new(( ))) - .map_err(mapToGrpcError) - } - - #[instrument(skip(self), level= "info")] - async fn unfollow(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - - self.usecases.unfollow(&request).await - .map(|_| Response::new(( ))) - .map_err(mapToGrpcError) - } - - #[instrument(skip(self), level= "info")] - async fn does_followship_exist(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - - self.usecases.doesFollowshipExist(&request).await - .map(|value| Response::new(DoesFollowshipExistResponse { exists: value })) - .map_err(mapToGrpcError) - } - - #[instrument(skip(self), level= "info")] - async fn get_followers(&self, request: Request) -> Result, Status> { let request= request.into_inner( ); - - self.usecases.getFollowers(&request).await - .map(|value| Response::new(value)) - .map_err(mapToGrpcError) - } - - #[instrument(skip(self), level= "info")] - async fn get_followings(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - self.usecases.getFollowings(&request).await - .map(|value| Response::new(value)) - .map_err(mapToGrpcError) - } - - #[instrument(skip(self), level= "info")] - async fn get_followship_counts(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - self.usecases.getFollowshipCounts(request.user_id).await - .map(|value| Response::new(value)) - .map_err(mapToGrpcError) - } -} \ No newline at end of file + async fn ping(&self, _: Request<()>) -> Result, Status> { + Ok(Response::new(())) + } + + #[instrument(skip(self), level = "info")] + async fn follow( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .follow(&request) + .await + .map(|_| Response::new(())) + .map_err(mapToGrpcError) + } + + #[instrument(skip(self), level = "info")] + async fn unfollow( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .unfollow(&request) + .await + .map(|_| Response::new(())) + .map_err(mapToGrpcError) + } + + #[instrument(skip(self), level = "info")] + async fn does_followship_exist( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .doesFollowshipExist(&request) + .await + .map(|value| Response::new(DoesFollowshipExistResponse { exists: value })) + .map_err(mapToGrpcError) + } + + #[instrument(skip(self), level = "info")] + async fn get_followers( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .getFollowers(&request) + .await + .map(|value| Response::new(value)) + .map_err(mapToGrpcError) + } + + #[instrument(skip(self), level = "info")] + async fn get_followings( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + self + .usecases + .getFollowings(&request) + .await + .map(|value| Response::new(value)) + .map_err(mapToGrpcError) + } + + #[instrument(skip(self), level = "info")] + async fn get_followship_counts( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + self + .usecases + .getFollowshipCounts(request.user_id) + .await + .map(|value| Response::new(value)) + .map_err(mapToGrpcError) + } +} diff --git a/backend/microservices/followships/adapters/mod.rs b/backend/microservices/followships/adapters/mod.rs index ab9a162..4eaccb8 100644 --- a/backend/microservices/followships/adapters/mod.rs +++ b/backend/microservices/followships/adapters/mod.rs @@ -2,4 +2,4 @@ mod postgres; pub use self::postgres::*; mod grpc; -pub use self::grpc::*; \ No newline at end of file +pub use self::grpc::*; diff --git a/backend/microservices/followships/adapters/postgres.rs b/backend/microservices/followships/adapters/postgres.rs index c5027ca..f719eb2 100644 --- a/backend/microservices/followships/adapters/postgres.rs +++ b/backend/microservices/followships/adapters/postgres.rs @@ -1,134 +1,136 @@ -use anyhow::{Result, anyhow}; +use crate::{ + domain::ports::FollowshipsRepository, + proto::{ + DoesFollowshipExistRequest, FollowshipOperationRequest, GetFollowersRequest, + GetFollowingsRequest, GetFollowshipCountsResponse, + }, +}; +use anyhow::{anyhow, Result}; use async_trait::async_trait; -use deadpool_postgres::{Pool, Object}; +use deadpool_postgres::{Object, Pool}; use shared::{ - utils::{createPgConnectionPool, toServerError, SERVER_ERROR}, - sql::queries::followships_microservice::{ - create, delete, getFollowshipCounts, getFollowings, getFollowers, exists - } -}; -use crate::{ - domain::ports::FollowshipsRepository, - proto::{ - GetFollowshipCountsResponse, FollowshipOperationRequest, GetFollowersRequest, - GetFollowingsRequest, DoesFollowshipExistRequest - } + sql::queries::followships_microservice::{ + create, delete, exists, getFollowers, getFollowings, getFollowshipCounts, + }, + utils::{createPgConnectionPool, toServerError, SERVER_ERROR}, }; -use tracing::{instrument, debug, error}; +use tracing::{debug, error, instrument}; pub struct PostgresAdapter { - connectionPool: Pool + connectionPool: Pool, } impl PostgresAdapter { - pub async fn new( ) -> Self { - let postgresAdapter= Self { - connectionPool: createPgConnectionPool( ) - }; - - // Get a client from the connection pool to verify that the database is reachable. - let _= postgresAdapter.connectionPool.get( ) - .await.expect("ERROR: Connecting to the Postgres database"); - debug!("Connected to Postgres database"); - - postgresAdapter + pub async fn new() -> Self { + let postgresAdapter = Self { + connectionPool: createPgConnectionPool(), + }; + + // Get a client from the connection pool to verify that the database is reachable. + let _ = postgresAdapter + .connectionPool + .get() + .await + .expect("ERROR: Connecting to the Postgres database"); + debug!("Connected to Postgres database"); + + postgresAdapter } - // getClient fetches and returns a database client from the underlying connection pool. - async fn getClient(&self) -> Result { - let client= self.connectionPool.get( ).await.map_err(toServerError)?; - Ok(client) - } + // getClient fetches and returns a database client from the underlying connection pool. + async fn getClient(&self) -> Result { + let client = self.connectionPool.get().await.map_err(toServerError)?; + Ok(client) + } } #[async_trait] impl FollowshipsRepository for PostgresAdapter { - // cleanup closes the underlying Postgres database connection pool. - fn cleanup(&self) { - self.connectionPool.close( ); - debug!("PostgreSQL database connection pool destroyed"); - } - - #[instrument(skip(self), level= "debug")] - async fn create(&self, args: &FollowshipOperationRequest) -> Result<( )> { - let client= self.getClient( ).await?; - - create( ) - .bind(&client, &args.follower_id, &args.followee_id) - .await - .map(|_| ( )) - .map_err(toServerError) - } - - #[instrument(skip(self), level= "debug")] - async fn delete(&self, args: &FollowshipOperationRequest) -> Result<( )> { - let client= self.getClient( ).await?; - - delete( ) - .bind(&client, &args.follower_id, &args.followee_id) - .await - .map(|_| ( )) - .map_err(toServerError) - } - - #[instrument(skip(self), level= "debug")] - async fn exists(&self, args: &DoesFollowshipExistRequest) -> Result { - let client= self.getClient( ).await?; - - let result= exists( ) - .bind(&client, &args.follower_id, &args.followee_id) - .one( ) - .await; - - match result { - Ok(_) => Ok(true), - - Err(error) => { - if error.to_string( ) == "query returned an unexpected number of rows" { - return anyhow::Ok(false)} - - error!("{}", error); - Err(anyhow!(SERVER_ERROR)) - } - } - } - - #[instrument(skip(self), level= "debug")] - async fn getFollowers(&self, args: &GetFollowersRequest) -> Result> { - let client= self.getClient( ).await?; - - getFollowers( ) - .bind(&client, &args.user_id, &args.page_size, &args.offset) - .all( ) - .await - .map_err(toServerError) - } - - #[instrument(skip(self), level= "debug")] - async fn getFollowings(&self, args: &GetFollowingsRequest) -> Result> { - let client= self.getClient( ).await?; - - getFollowings( ) - .bind(&client, &args.user_id, &args.page_size, &args.offset) - .all( ) - .await - .map_err(toServerError) - } - - #[instrument(skip(self), level= "debug")] - async fn getFollowshipCounts(&self, userId: i32) -> Result { - let client= self.getClient( ).await?; - - getFollowshipCounts( ) - .bind(&client, &userId) - .one( ) - .await - .map(|value| { - GetFollowshipCountsResponse { - follower_count: value.follower_count, - following_count: value.following_count - } - }) - .map_err(toServerError) - } -} \ No newline at end of file + // cleanup closes the underlying Postgres database connection pool. + fn cleanup(&self) { + self.connectionPool.close(); + debug!("PostgreSQL database connection pool destroyed"); + } + + #[instrument(skip(self), level = "debug")] + async fn create(&self, args: &FollowshipOperationRequest) -> Result<()> { + let client = self.getClient().await?; + + create() + .bind(&client, &args.follower_id, &args.followee_id) + .await + .map(|_| ()) + .map_err(toServerError) + } + + #[instrument(skip(self), level = "debug")] + async fn delete(&self, args: &FollowshipOperationRequest) -> Result<()> { + let client = self.getClient().await?; + + delete() + .bind(&client, &args.follower_id, &args.followee_id) + .await + .map(|_| ()) + .map_err(toServerError) + } + + #[instrument(skip(self), level = "debug")] + async fn exists(&self, args: &DoesFollowshipExistRequest) -> Result { + let client = self.getClient().await?; + + let result = exists() + .bind(&client, &args.follower_id, &args.followee_id) + .one() + .await; + + match result { + Ok(_) => Ok(true), + + Err(error) => { + if error.to_string() == "query returned an unexpected number of rows" { + return anyhow::Ok(false); + } + + error!("{}", error); + Err(anyhow!(SERVER_ERROR)) + } + } + } + + #[instrument(skip(self), level = "debug")] + async fn getFollowers(&self, args: &GetFollowersRequest) -> Result> { + let client = self.getClient().await?; + + getFollowers() + .bind(&client, &args.user_id, &args.page_size, &args.offset) + .all() + .await + .map_err(toServerError) + } + + #[instrument(skip(self), level = "debug")] + async fn getFollowings(&self, args: &GetFollowingsRequest) -> Result> { + let client = self.getClient().await?; + + getFollowings() + .bind(&client, &args.user_id, &args.page_size, &args.offset) + .all() + .await + .map_err(toServerError) + } + + #[instrument(skip(self), level = "debug")] + async fn getFollowshipCounts(&self, userId: i32) -> Result { + let client = self.getClient().await?; + + getFollowshipCounts() + .bind(&client, &userId) + .one() + .await + .map(|value| GetFollowshipCountsResponse { + follower_count: value.follower_count, + following_count: value.following_count, + }) + .map_err(toServerError) + } +} diff --git a/backend/microservices/followships/domain/mod.rs b/backend/microservices/followships/domain/mod.rs index c94a01a..e41f520 100644 --- a/backend/microservices/followships/domain/mod.rs +++ b/backend/microservices/followships/domain/mod.rs @@ -1,2 +1,2 @@ pub mod ports; -pub mod usecases; \ No newline at end of file +pub mod usecases; diff --git a/backend/microservices/followships/domain/ports.rs b/backend/microservices/followships/domain/ports.rs index 52f64e1..8037642 100644 --- a/backend/microservices/followships/domain/ports.rs +++ b/backend/microservices/followships/domain/ports.rs @@ -1,21 +1,20 @@ -use anyhow::Result; -use async_trait::async_trait; use crate::proto::{ - GetFollowshipCountsResponse, GetFollowingsRequest, GetFollowersRequest, - FollowshipOperationRequest, DoesFollowshipExistRequest + DoesFollowshipExistRequest, FollowshipOperationRequest, GetFollowersRequest, + GetFollowingsRequest, GetFollowshipCountsResponse, }; +use anyhow::Result; +use async_trait::async_trait; #[async_trait] pub trait FollowshipsRepository: Send + Sync { + async fn create(&self, args: &FollowshipOperationRequest) -> Result<()>; + async fn delete(&self, args: &FollowshipOperationRequest) -> Result<()>; - async fn create(&self, args: &FollowshipOperationRequest) -> Result<( )>; - async fn delete(&self, args: &FollowshipOperationRequest) -> Result<( )>; - - async fn exists(&self, args: &DoesFollowshipExistRequest) -> Result; + async fn exists(&self, args: &DoesFollowshipExistRequest) -> Result; - async fn getFollowers(&self, args: &GetFollowersRequest) -> Result>; - async fn getFollowings(&self, args: &GetFollowingsRequest) -> Result>; - async fn getFollowshipCounts(&self, userId: i32) -> Result; + async fn getFollowers(&self, args: &GetFollowersRequest) -> Result>; + async fn getFollowings(&self, args: &GetFollowingsRequest) -> Result>; + async fn getFollowshipCounts(&self, userId: i32) -> Result; - fn cleanup(&self); -} \ No newline at end of file + fn cleanup(&self); +} diff --git a/backend/microservices/followships/domain/usecases.rs b/backend/microservices/followships/domain/usecases.rs index fc1e5be..4bad28c 100644 --- a/backend/microservices/followships/domain/usecases.rs +++ b/backend/microservices/followships/domain/usecases.rs @@ -1,39 +1,47 @@ +use super::ports::FollowshipsRepository; +use crate::proto::*; use anyhow::Result; use derive_more::Constructor; -use crate::proto::*; -use super::ports::FollowshipsRepository; #[derive(Constructor)] pub struct Usecases { - followshipsRepository: &'static dyn FollowshipsRepository + followshipsRepository: &'static dyn FollowshipsRepository, } impl Usecases { - pub async fn follow(&self, args: &FollowshipOperationRequest) -> Result<( )> { - self.followshipsRepository.create(args).await - } + pub async fn follow(&self, args: &FollowshipOperationRequest) -> Result<()> { + self.followshipsRepository.create(args).await + } - pub async fn unfollow(&self, args: &FollowshipOperationRequest) -> Result<( )> { - self.followshipsRepository.delete(args).await - } + pub async fn unfollow(&self, args: &FollowshipOperationRequest) -> Result<()> { + self.followshipsRepository.delete(args).await + } - pub async fn doesFollowshipExist(&self, args: &DoesFollowshipExistRequest) -> Result { - self.followshipsRepository.exists(args).await - } + pub async fn doesFollowshipExist(&self, args: &DoesFollowshipExistRequest) -> Result { + self.followshipsRepository.exists(args).await + } - pub async fn getFollowers(&self, args: &GetFollowersRequest) -> Result { - self.followshipsRepository. - getFollowers(args).await - .map(|followers| GetFollowersResponse { follower_ids: followers }) - } + pub async fn getFollowers(&self, args: &GetFollowersRequest) -> Result { + self + .followshipsRepository + .getFollowers(args) + .await + .map(|followers| GetFollowersResponse { + follower_ids: followers, + }) + } - pub async fn getFollowings(&self, args: &GetFollowingsRequest) -> Result { - self.followshipsRepository - .getFollowings(args).await - .map(|followings| GetFollowingsResponse { followee_ids: followings }) - } + pub async fn getFollowings(&self, args: &GetFollowingsRequest) -> Result { + self + .followshipsRepository + .getFollowings(args) + .await + .map(|followings| GetFollowingsResponse { + followee_ids: followings, + }) + } - pub async fn getFollowshipCounts(&self, userId: i32) -> Result { - self.followshipsRepository.getFollowshipCounts(userId).await - } -} \ No newline at end of file + pub async fn getFollowshipCounts(&self, userId: i32) -> Result { + self.followshipsRepository.getFollowshipCounts(userId).await + } +} diff --git a/backend/microservices/followships/main.rs b/backend/microservices/followships/main.rs index 612b3e2..d19b102 100644 --- a/backend/microservices/followships/main.rs +++ b/backend/microservices/followships/main.rs @@ -1,58 +1,58 @@ #![allow(non_snake_case)] -mod domain; mod adapters; +mod domain; mod proto { // Including code generated from the .proto files. tonic::include_proto!("followships_microservice"); - pub const FILE_DESCRIPTOR_SET: &[u8]= + pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("followships_microservice.descriptor"); } -use std::process::exit; -use adapters::{PostgresAdapter, GrpcAdapter}; +use crate::domain::ports::FollowshipsRepository; +use adapters::{GrpcAdapter, PostgresAdapter}; use domain::usecases::Usecases; use lazy_static::lazy_static; use shared::utils::{getEnv, observability::setupObservability}; +use std::process::exit; use tokio::signal; use tokio_util::sync::CancellationToken; -use tracing::{warn, error}; -use crate::domain::ports::FollowshipsRepository; +use tracing::{error, warn}; pub struct Config { GRPC_SERVER_PORT: String, } lazy_static! { - pub static ref CONFIG: Config= Config { + pub static ref CONFIG: Config = Config { GRPC_SERVER_PORT: getEnv("GRPC_SERVER_PORT") }; - - pub static ref THREAD_CANCELLATION_TOKEN: CancellationToken= CancellationToken::new( ); + pub static ref THREAD_CANCELLATION_TOKEN: CancellationToken = CancellationToken::new(); } #[tokio::main] -async fn main( ) { - let _= dotenv::from_filename("./backend/microservices/followships/.env"); +async fn main() { + let _ = dotenv::from_filename("./backend/microservices/followships/.env"); - setupObservability("followships-microservice"); + setupObservability("followships-microservice"); - let postgresAdapter= - Box::leak::<'static>(Box::new(PostgresAdapter::new( ).await)) as &'static PostgresAdapter; + let postgresAdapter = + Box::leak::<'static>(Box::new(PostgresAdapter::new().await)) as &'static PostgresAdapter; - let usecases= Box::new(Usecases::new(postgresAdapter)); + let usecases = Box::new(Usecases::new(postgresAdapter)); - GrpcAdapter::startServer(usecases).await; + GrpcAdapter::startServer(usecases).await; - /* Gracefully shutdown on receiving program shutdown signal. */ { - let error= signal::ctrl_c( ).await.err( ); + /* Gracefully shutdown on receiving program shutdown signal. */ + { + let error = signal::ctrl_c().await.err(); warn!("Received program shutdown signal"); - let _= &THREAD_CANCELLATION_TOKEN.cancel( ); // Do cleanup tasks in currently active Tokio + let _ = &THREAD_CANCELLATION_TOKEN.cancel(); // Do cleanup tasks in currently active Tokio // threads. - postgresAdapter.cleanup( ); + postgresAdapter.cleanup(); match error { None => exit(0), @@ -63,4 +63,4 @@ async fn main( ) { } } } -} \ No newline at end of file +} diff --git a/backend/microservices/posts/adapters/grpc.rs b/backend/microservices/posts/adapters/grpc.rs index be68c9c..bca1688 100644 --- a/backend/microservices/posts/adapters/grpc.rs +++ b/backend/microservices/posts/adapters/grpc.rs @@ -1,97 +1,117 @@ use crate::{ - domain::usecases::Usecases, proto::{posts_service_server::*, *}, - CONFIG, THREAD_CANCELLATION_TOKEN, + domain::usecases::Usecases, + proto::{posts_service_server::*, *}, + CONFIG, THREAD_CANCELLATION_TOKEN, }; use async_trait::async_trait; -use autometrics::{objectives::Objective, autometrics}; -use shared::utils::{mapToGrpcError, observability::{makeSpan, linkParentTrace}}; +use autometrics::{autometrics, objectives::Objective}; +use shared::utils::{ + mapToGrpcError, + observability::{linkParentTrace, makeSpan}, +}; use tokio::spawn; use tonic::{codec::CompressionEncoding, transport::Server, Request, Response, Status}; use tower::ServiceBuilder; use tower_http::trace::TraceLayer; -use tracing::{instrument, debug}; +use tracing::{debug, instrument}; -const MAX_REQUEST_SIZE: usize= 512; //bytes +const MAX_REQUEST_SIZE: usize = 512; //bytes -pub struct GrpcAdapter { } +pub struct GrpcAdapter {} impl GrpcAdapter { - // startServer starts a gRPC server. - pub async fn startServer(usecases: Box) { - let address= format!("[::]:{}", &*CONFIG.GRPC_SERVER_PORT); - let address= address.parse( ) - .expect(&format!("ERROR: Parsing binding address of the gRPC server : {}", address)); - - let postsService= - PostsServiceServer::new(PostsServiceImpl { usecases }) - .max_decoding_message_size(MAX_REQUEST_SIZE) - .send_compressed(CompressionEncoding::Gzip) - .accept_compressed(CompressionEncoding::Gzip); - - let reflectionService= - tonic_reflection::server::Builder::configure( ) - .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) - .build( ) - .expect("ERROR: Building gRPC reflection service") - .max_decoding_message_size(MAX_REQUEST_SIZE); - - debug!("Starting gRPC server"); - - spawn(async move { - Server::builder( ) - .layer( - ServiceBuilder::new( ) - .layer(TraceLayer::new_for_grpc( ).make_span_with(makeSpan)) - .map_request(linkParentTrace) - ) - .add_service(postsService) - .add_service(reflectionService) - .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone( ).cancelled( )) - .await - .expect("ERROR: Starting gRPC server"); - }); - } + // startServer starts a gRPC server. + pub async fn startServer(usecases: Box) { + let address = format!("[::]:{}", &*CONFIG.GRPC_SERVER_PORT); + let address = address.parse().expect(&format!( + "ERROR: Parsing binding address of the gRPC server : {}", + address + )); + + let postsService = PostsServiceServer::new(PostsServiceImpl { usecases }) + .max_decoding_message_size(MAX_REQUEST_SIZE) + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + + let reflectionService = tonic_reflection::server::Builder::configure() + .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) + .build() + .expect("ERROR: Building gRPC reflection service") + .max_decoding_message_size(MAX_REQUEST_SIZE); + + debug!("Starting gRPC server"); + + spawn(async move { + Server::builder() + .layer( + ServiceBuilder::new() + .layer(TraceLayer::new_for_grpc().make_span_with(makeSpan)) + .map_request(linkParentTrace), + ) + .add_service(postsService) + .add_service(reflectionService) + .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone().cancelled()) + .await + .expect("ERROR: Starting gRPC server"); + }); + } } struct PostsServiceImpl { - usecases: Box + usecases: Box, } -const API_SLO: Objective= Objective::new("posts-microservice"); +const API_SLO: Objective = Objective::new("posts-microservice"); #[autometrics(objective = API_SLO)] #[async_trait] impl PostsService for PostsServiceImpl { - async fn ping(&self, _: Request<( )>) -> Result, Status> { - Ok(Response::new(( )))} - - #[instrument(skip(self), level= "info")] - async fn create_post(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - - self.usecases.createPost(request) - .await - .map(|postId| Response::new(CreatePostResponse { post_id: postId })) - .map_err(mapToGrpcError) - } - - #[instrument(skip(self), level= "info")] - async fn get_posts_of_user(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - - self.usecases.getPostsOfUser(request) - .await - .map(|posts| Response::new(GetPostsResponse { posts })) - .map_err(mapToGrpcError) - } - - #[instrument(skip(self), level= "info")] - async fn get_posts(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - - self.usecases.getPosts(request.post_ids) - .await - .map(|posts| Response::new(GetPostsResponse { posts })) - .map_err(mapToGrpcError) - } -} \ No newline at end of file + async fn ping(&self, _: Request<()>) -> Result, Status> { + Ok(Response::new(())) + } + + #[instrument(skip(self), level = "info")] + async fn create_post( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .createPost(request) + .await + .map(|postId| Response::new(CreatePostResponse { post_id: postId })) + .map_err(mapToGrpcError) + } + + #[instrument(skip(self), level = "info")] + async fn get_posts_of_user( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .getPostsOfUser(request) + .await + .map(|posts| Response::new(GetPostsResponse { posts })) + .map_err(mapToGrpcError) + } + + #[instrument(skip(self), level = "info")] + async fn get_posts( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .getPosts(request.post_ids) + .await + .map(|posts| Response::new(GetPostsResponse { posts })) + .map_err(mapToGrpcError) + } +} diff --git a/backend/microservices/posts/adapters/mod.rs b/backend/microservices/posts/adapters/mod.rs index 88b8077..434edcb 100644 --- a/backend/microservices/posts/adapters/mod.rs +++ b/backend/microservices/posts/adapters/mod.rs @@ -2,4 +2,4 @@ mod postgres; pub use self::postgres::*; pub mod grpc; -pub use self::grpc::*; \ No newline at end of file +pub use self::grpc::*; diff --git a/backend/microservices/posts/adapters/postgres.rs b/backend/microservices/posts/adapters/postgres.rs index 9c9af13..0523fa1 100644 --- a/backend/microservices/posts/adapters/postgres.rs +++ b/backend/microservices/posts/adapters/postgres.rs @@ -1,102 +1,108 @@ -use anyhow::{Result, Ok}; +use crate::{ + domain::ports::PostsRepository, + proto::{CreatePostRequest, GetPostsOfUserRequest, Post}, +}; +use anyhow::{Ok, Result}; use async_trait::async_trait; -use deadpool_postgres::{Pool, Object}; +use deadpool_postgres::{Object, Pool}; use shared::{ - utils::{createPgConnectionPool, toServerError}, - sql::queries::posts_microservice::{create, getPostsOfUser, getPosts} + sql::queries::posts_microservice::{create, getPosts, getPostsOfUser}, + utils::{createPgConnectionPool, toServerError}, }; -use crate::{domain::ports::PostsRepository, proto::{CreatePostRequest, Post, GetPostsOfUserRequest}}; -use tracing::{instrument, debug, info}; +use tracing::{debug, info, instrument}; pub struct PostgresAdapter { - connectionPool: Pool + connectionPool: Pool, } impl PostgresAdapter { - pub async fn new( ) -> Self { - let postgresAdapter= Self { - connectionPool: createPgConnectionPool( ) - }; + pub async fn new() -> Self { + let postgresAdapter = Self { + connectionPool: createPgConnectionPool(), + }; - // Get a client from the connection pool to verify that the database is reachable. - let _= postgresAdapter.connectionPool.get( ) - .await.expect("ERROR: Connecting to the Postgres database"); - debug!("Connected to Postgres database"); + // Get a client from the connection pool to verify that the database is reachable. + let _ = postgresAdapter + .connectionPool + .get() + .await + .expect("ERROR: Connecting to the Postgres database"); + debug!("Connected to Postgres database"); - postgresAdapter - } + postgresAdapter + } - // getClient fetches and returns a database client from the underlying connection pool. - async fn getClient(&self) -> Result { - let client= self.connectionPool.get( ).await.map_err(toServerError)?; - Ok(client) - } + // getClient fetches and returns a database client from the underlying connection pool. + async fn getClient(&self) -> Result { + let client = self.connectionPool.get().await.map_err(toServerError)?; + Ok(client) + } } #[async_trait] impl PostsRepository for PostgresAdapter { - // cleanup closes the underlying Postgres database connection pool. - fn cleanup(&self) { - self.connectionPool.close( ); - debug!("PostgreSQL database connection pool destroyed"); - } + // cleanup closes the underlying Postgres database connection pool. + fn cleanup(&self) { + self.connectionPool.close(); + debug!("PostgreSQL database connection pool destroyed"); + } - #[instrument(skip(self), level= "debug")] - async fn create(&self, args: &CreatePostRequest) -> Result { - let client= self.getClient( ).await?; + #[instrument(skip(self), level = "debug")] + async fn create(&self, args: &CreatePostRequest) -> Result { + let client = self.getClient().await?; - create( ) - .bind(&client, &args.owner_id, &args.description) - .one( ) - .await - .map(|id| { - info!("New post created with id {} and details : {:?}", id, args); - id - }) + create() + .bind(&client, &args.owner_id, &args.description) + .one() + .await + .map(|id| { + info!("New post created with id {} and details : {:?}", id, args); + id + }) .map_err(toServerError) - } + } - #[instrument(skip(self), level= "debug")] - async fn getPostsOfUser(&self, args: &GetPostsOfUserRequest) -> Result> { - let client= self.getClient( ).await?; + #[instrument(skip(self), level = "debug")] + async fn getPostsOfUser(&self, args: &GetPostsOfUserRequest) -> Result> { + let client = self.getClient().await?; - Ok( - getPostsOfUser( ) - .bind(&client, &args.owner_id, &args.page_size, &args.offset) - .all( ) - .await.map_err(toServerError)? - .iter( ).map(|value| { - Post { - id: value.id, - owner_id: args.owner_id, + Ok( + getPostsOfUser() + .bind(&client, &args.owner_id, &args.page_size, &args.offset) + .all() + .await + .map_err(toServerError)? + .iter() + .map(|value| Post { + id: value.id, + owner_id: args.owner_id, - description: value.description.to_owned( ), - created_at: value.created_at.to_string( ) - } - }) - .collect( ) - ) - } + description: value.description.to_owned(), + created_at: value.created_at.to_string(), + }) + .collect(), + ) + } - #[instrument(skip(self), level= "debug")] - async fn getPosts(&self, postIds: Vec) -> Result> { - let client= self.getClient( ).await?; + #[instrument(skip(self), level = "debug")] + async fn getPosts(&self, postIds: Vec) -> Result> { + let client = self.getClient().await?; - Ok( - getPosts( ) - .bind(&client, &postIds) - .all( ) - .await.map_err(toServerError)? - .iter( ).map(|value| { - Post { - id: value.id, - owner_id: value.owner_id, + Ok( + getPosts() + .bind(&client, &postIds) + .all() + .await + .map_err(toServerError)? + .iter() + .map(|value| Post { + id: value.id, + owner_id: value.owner_id, - description: value.description.to_owned( ), - created_at: value.created_at.to_string( ) - } - }) - .collect( ) - ) - } -} \ No newline at end of file + description: value.description.to_owned(), + created_at: value.created_at.to_string(), + }) + .collect(), + ) + } +} diff --git a/backend/microservices/posts/domain/mod.rs b/backend/microservices/posts/domain/mod.rs index 43bcd0a..e41f520 100644 --- a/backend/microservices/posts/domain/mod.rs +++ b/backend/microservices/posts/domain/mod.rs @@ -1,2 +1,2 @@ +pub mod ports; pub mod usecases; -pub mod ports; \ No newline at end of file diff --git a/backend/microservices/posts/domain/ports.rs b/backend/microservices/posts/domain/ports.rs index 654f90b..f4652c6 100644 --- a/backend/microservices/posts/domain/ports.rs +++ b/backend/microservices/posts/domain/ports.rs @@ -1,14 +1,13 @@ +use crate::proto::{CreatePostRequest, GetPostsOfUserRequest, Post}; use anyhow::Result; use async_trait::async_trait; -use crate::proto::{CreatePostRequest, GetPostsOfUserRequest, Post}; #[async_trait] pub trait PostsRepository: Sync + Send { + async fn create(&self, args: &CreatePostRequest) -> Result; - async fn create(&self, args: &CreatePostRequest) -> Result; - - async fn getPostsOfUser(&self, args: &GetPostsOfUserRequest) -> Result>; - async fn getPosts(&self, postIds: Vec) -> Result>; + async fn getPostsOfUser(&self, args: &GetPostsOfUserRequest) -> Result>; + async fn getPosts(&self, postIds: Vec) -> Result>; - fn cleanup(&self); -} \ No newline at end of file + fn cleanup(&self); +} diff --git a/backend/microservices/posts/domain/usecases.rs b/backend/microservices/posts/domain/usecases.rs index 86f4cd1..2afec0a 100644 --- a/backend/microservices/posts/domain/usecases.rs +++ b/backend/microservices/posts/domain/usecases.rs @@ -1,23 +1,23 @@ -use crate::proto::{CreatePostRequest, Post, GetPostsOfUserRequest}; use super::ports::PostsRepository; +use crate::proto::{CreatePostRequest, GetPostsOfUserRequest, Post}; use anyhow::Result; use derive_more::Constructor; #[derive(Constructor)] pub struct Usecases { - postsRepository: &'static dyn PostsRepository + postsRepository: &'static dyn PostsRepository, } impl Usecases { - pub async fn createPost(&self, args: CreatePostRequest) -> Result { - self.postsRepository.create(&args).await - } + pub async fn createPost(&self, args: CreatePostRequest) -> Result { + self.postsRepository.create(&args).await + } - pub async fn getPostsOfUser(&self, args: GetPostsOfUserRequest) -> Result> { - self.postsRepository.getPostsOfUser(&args).await - } + pub async fn getPostsOfUser(&self, args: GetPostsOfUserRequest) -> Result> { + self.postsRepository.getPostsOfUser(&args).await + } - pub async fn getPosts(&self, postIds: Vec) -> Result> { - self.postsRepository.getPosts(postIds).await - } -} \ No newline at end of file + pub async fn getPosts(&self, postIds: Vec) -> Result> { + self.postsRepository.getPosts(postIds).await + } +} diff --git a/backend/microservices/posts/main.rs b/backend/microservices/posts/main.rs index 86559b8..2b901f4 100644 --- a/backend/microservices/posts/main.rs +++ b/backend/microservices/posts/main.rs @@ -1,25 +1,25 @@ #![allow(non_snake_case)] -mod domain; mod adapters; +mod domain; mod proto { // Including code generated from the .proto files. tonic::include_proto!("posts_microservice"); - pub const FILE_DESCRIPTOR_SET: &[u8]= + pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("posts_microservice.descriptor"); } -use std::process::exit; -use adapters::{PostgresAdapter, GrpcAdapter}; +use crate::domain::ports::PostsRepository; +use adapters::{GrpcAdapter, PostgresAdapter}; use domain::usecases::Usecases; use lazy_static::lazy_static; use shared::utils::{getEnv, observability::setupObservability}; +use std::process::exit; use tokio::signal; use tokio_util::sync::CancellationToken; -use tracing::{warn, error}; -use crate::domain::ports::PostsRepository; +use tracing::{error, warn}; pub struct Config { GRPC_SERVER_PORT: String, @@ -39,25 +39,26 @@ lazy_static! { } #[tokio::main] -async fn main( ) { - let _= dotenv::from_filename("./backend/microservices/posts/.env"); +async fn main() { + let _ = dotenv::from_filename("./backend/microservices/posts/.env"); - setupObservability("posts-microservice"); + setupObservability("posts-microservice"); - let postgresAdapter= - Box::leak::<'static>(Box::new(PostgresAdapter::new( ).await)) as &'static PostgresAdapter; + let postgresAdapter = + Box::leak::<'static>(Box::new(PostgresAdapter::new().await)) as &'static PostgresAdapter; - let usecases= Box::new(Usecases::new(postgresAdapter)); + let usecases = Box::new(Usecases::new(postgresAdapter)); GrpcAdapter::startServer(usecases).await; - /* Gracefully shutdown on receiving program shutdown signal. */ { - let error= signal::ctrl_c( ).await.err( ); + /* Gracefully shutdown on receiving program shutdown signal. */ + { + let error = signal::ctrl_c().await.err(); warn!("Received program shutdown signal"); - let _= &THREAD_CANCELLATION_TOKEN.cancel( ); // Do cleanup tasks in currently active Tokio + let _ = &THREAD_CANCELLATION_TOKEN.cancel(); // Do cleanup tasks in currently active Tokio // threads. - postgresAdapter.cleanup( ); + postgresAdapter.cleanup(); match error { None => exit(0), @@ -68,4 +69,4 @@ async fn main( ) { } } } -} \ No newline at end of file +} diff --git a/backend/microservices/profiles/adapters/elasticsearch.rs b/backend/microservices/profiles/adapters/elasticsearch.rs index 856a945..5e733f8 100644 --- a/backend/microservices/profiles/adapters/elasticsearch.rs +++ b/backend/microservices/profiles/adapters/elasticsearch.rs @@ -1,134 +1,153 @@ -use std::{str::{from_utf8, FromStr}, fmt::Debug}; +use crate::{domain::ports::UserCreatedEvent, proto::ProfilePreview, CONFIG}; use anyhow::Result; use elasticsearch::{ - Elasticsearch, - http::{Url, transport::{TransportBuilder, SingleNodeConnectionPool}, response::Response}, - auth::Credentials + auth::Credentials, + http::{ + response::Response, + transport::{SingleNodeConnectionPool, TransportBuilder}, + Url, + }, + Elasticsearch, }; +use serde::{Deserialize, Serialize}; use serde_json::json; use shared::utils::{getEnv, toServerError}; -use crate::{CONFIG, domain::ports::UserCreatedEvent, proto::ProfilePreview}; -use serde::{Serialize, Deserialize}; -use tracing::{instrument, debug, error, info}; +use std::{ + fmt::Debug, + str::{from_utf8, FromStr}, +}; +use tracing::{debug, error, info, instrument}; -const ELASTICSEARCH_PROFILES_INDEX: &str= "profiles"; +const ELASTICSEARCH_PROFILES_INDEX: &str = "profiles"; #[derive(Serialize)] struct ProfilesIndexBody<'profilesIndexBody> { - name: &'profilesIndexBody str, - username: &'profilesIndexBody str + name: &'profilesIndexBody str, + username: &'profilesIndexBody str, } pub struct ElasticsearchAdapter { - client: Elasticsearch + client: Elasticsearch, } impl ElasticsearchAdapter { - pub async fn new( ) -> Self { - let url= Url::from_str(&CONFIG.ELASTICSEARCH_URL) - .expect("ERROR: Invalid Elasticsearch URL"); - let credentials= Credentials::Basic(getEnv("ELASTICSEARCH_USERNAME"), getEnv("ELASTICSEARCH_PASSWORD")); - - let transport= TransportBuilder::new(SingleNodeConnectionPool::new(url)) - .auth(credentials) - .disable_proxy( ) - .build( ).expect("ERROR: Creating HTTP transport for ElasticsearchAdapter"); - let client= Elasticsearch::new(transport); - - client.ping( ).send( ).await - .expect("ERROR: Connecting to Elasticsearch"); - - debug!("Connected to Elasticsearch"); - - Self { client } - } - - #[instrument(skip(self), level= "debug")] - pub async fn indexProfile(&self, args: UserCreatedEvent) -> Result<( )> { - let id= &args.id.to_string( ); - - self.client - .index(elasticsearch::IndexParts::IndexId(ELASTICSEARCH_PROFILES_INDEX, id)) - .body( - json!({ - "name": &args.name, - "username": &args.username - }) - ) - .send( ).await - .map(|_| info!("Profile indexed in Elasticsearch : {:?}", args)) - .map_err(toServerError) - } - - #[instrument(skip(self), level= "debug")] - pub async fn searchProfiles(&self, query: &str) -> Result> { - let response= - self.client - .search(elasticsearch::SearchParts::Index(&[ ELASTICSEARCH_PROFILES_INDEX ])) - .body( - json!({ - "query": { - "multi_match": { - "query": query, - "type": "phrase_prefix", - "fields": ["name", "username"] - } - } - }) - ) - .send( ).await - .map_err(toServerError)?; - - deserializeQueryProfilesResponse(response).await - .map_err(|error| { - error!("Unexpected server error occurred : {}", error); - error - }) - } + pub async fn new() -> Self { + let url = Url::from_str(&CONFIG.ELASTICSEARCH_URL).expect("ERROR: Invalid Elasticsearch URL"); + let credentials = Credentials::Basic( + getEnv("ELASTICSEARCH_USERNAME"), + getEnv("ELASTICSEARCH_PASSWORD"), + ); + + let transport = TransportBuilder::new(SingleNodeConnectionPool::new(url)) + .auth(credentials) + .disable_proxy() + .build() + .expect("ERROR: Creating HTTP transport for ElasticsearchAdapter"); + let client = Elasticsearch::new(transport); + + client + .ping() + .send() + .await + .expect("ERROR: Connecting to Elasticsearch"); + + debug!("Connected to Elasticsearch"); + + Self { client } + } + + #[instrument(skip(self), level = "debug")] + pub async fn indexProfile(&self, args: UserCreatedEvent) -> Result<()> { + let id = &args.id.to_string(); + + self + .client + .index(elasticsearch::IndexParts::IndexId( + ELASTICSEARCH_PROFILES_INDEX, + id, + )) + .body(json!({ + "name": &args.name, + "username": &args.username + })) + .send() + .await + .map(|_| info!("Profile indexed in Elasticsearch : {:?}", args)) + .map_err(toServerError) + } + + #[instrument(skip(self), level = "debug")] + pub async fn searchProfiles(&self, query: &str) -> Result> { + let response = self + .client + .search(elasticsearch::SearchParts::Index(&[ + ELASTICSEARCH_PROFILES_INDEX, + ])) + .body(json!({ + "query": { + "multi_match": { + "query": query, + "type": "phrase_prefix", + "fields": ["name", "username"] + } + } + })) + .send() + .await + .map_err(toServerError)?; + + deserializeQueryProfilesResponse(response) + .await + .map_err(|error| { + error!("Unexpected server error occurred : {}", error); + error + }) + } } // deserializeQueryProfilesResponse takes in the response returned from Elasticsearch for the query // done in ElasticsearchAdapter.searchProfiles and tries to deserialize it to Vec. async fn deserializeQueryProfilesResponse(response: Response) -> Result> { - - #[derive(Deserialize)] - struct Response { - hits: Hits - } - - #[derive(Deserialize)] - struct Hits { - hits: Vec - } - - #[derive(Deserialize)] - struct Hit { - _id: String, - _source: Source - } - - #[derive(Deserialize, Debug)] - struct Source { - name: String, - username: String - } - - let response= response.bytes( ).await?.to_vec( ); - let response= from_utf8(&response)?; - - let response: Response= serde_json::from_str(response).unwrap( ); - - let profiles= - response.hits.hits.iter( ) - .map(|hit| { - let id: i32= hit._id.parse( ).unwrap( ); - - ProfilePreview { - id: id, - name: hit._source.name.clone( ), - username: hit._source.username.clone( ) - } - }) - .collect( ); - Ok(profiles) -} \ No newline at end of file + #[derive(Deserialize)] + struct Response { + hits: Hits, + } + + #[derive(Deserialize)] + struct Hits { + hits: Vec, + } + + #[derive(Deserialize)] + struct Hit { + _id: String, + _source: Source, + } + + #[derive(Deserialize, Debug)] + struct Source { + name: String, + username: String, + } + + let response = response.bytes().await?.to_vec(); + let response = from_utf8(&response)?; + + let response: Response = serde_json::from_str(response).unwrap(); + + let profiles = response + .hits + .hits + .iter() + .map(|hit| { + let id: i32 = hit._id.parse().unwrap(); + + ProfilePreview { + id: id, + name: hit._source.name.clone(), + username: hit._source.username.clone(), + } + }) + .collect(); + Ok(profiles) +} diff --git a/backend/microservices/profiles/adapters/grpc.rs b/backend/microservices/profiles/adapters/grpc.rs index 5af6ccf..7b13feb 100644 --- a/backend/microservices/profiles/adapters/grpc.rs +++ b/backend/microservices/profiles/adapters/grpc.rs @@ -1,53 +1,59 @@ use crate::{ - domain::usecases::Usecases, - CONFIG, THREAD_CANCELLATION_TOKEN, - proto::{*, profiles_service_server::{ProfilesServiceServer, ProfilesService}} + domain::usecases::Usecases, + proto::{ + profiles_service_server::{ProfilesService, ProfilesServiceServer}, + *, + }, + CONFIG, THREAD_CANCELLATION_TOKEN, }; use async_trait::async_trait; use autometrics::{autometrics, objectives::Objective}; -use shared::utils::{mapToGrpcError, observability::{linkParentTrace, makeSpan}}; +use shared::utils::{ + mapToGrpcError, + observability::{linkParentTrace, makeSpan}, +}; use tokio::spawn; -use tonic::{transport::Server, codec::CompressionEncoding, Request, Response, Status}; +use tonic::{codec::CompressionEncoding, transport::Server, Request, Response, Status}; use tower::ServiceBuilder; use tower_http::trace::TraceLayer; -use tracing::{instrument, debug}; +use tracing::{debug, instrument}; -const MAX_REQUEST_SIZE: usize= 512; //bytes +const MAX_REQUEST_SIZE: usize = 512; //bytes -pub struct GrpcAdapter { } +pub struct GrpcAdapter {} impl GrpcAdapter { // startServer starts a gRPC server. pub async fn startServer(usecases: &'static Usecases) { - let address= format!("[::]:{}", &*CONFIG.GRPC_SERVER_PORT); - let address= address.parse( ) - .expect(&format!("ERROR: Parsing binding address of the gRPC server : {}", address)); + let address = format!("[::]:{}", &*CONFIG.GRPC_SERVER_PORT); + let address = address.parse().expect(&format!( + "ERROR: Parsing binding address of the gRPC server : {}", + address + )); - let profilesService= - ProfilesServiceServer::new(ProfilesServiceImpl { usecases }) - .max_decoding_message_size(MAX_REQUEST_SIZE) - .send_compressed(CompressionEncoding::Gzip) - .accept_compressed(CompressionEncoding::Gzip); + let profilesService = ProfilesServiceServer::new(ProfilesServiceImpl { usecases }) + .max_decoding_message_size(MAX_REQUEST_SIZE) + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); - let reflectionService= - tonic_reflection::server::Builder::configure( ) - .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) - .build( ) - .expect("ERROR: Building gRPC reflection service") - .max_decoding_message_size(MAX_REQUEST_SIZE); + let reflectionService = tonic_reflection::server::Builder::configure() + .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) + .build() + .expect("ERROR: Building gRPC reflection service") + .max_decoding_message_size(MAX_REQUEST_SIZE); debug!("Starting gRPC server"); spawn(async move { - Server::builder( ) - .layer( - ServiceBuilder::new( ) - .layer(TraceLayer::new_for_grpc( ).make_span_with(makeSpan)) - .map_request(linkParentTrace) - ) - .add_service(profilesService) + Server::builder() + .layer( + ServiceBuilder::new() + .layer(TraceLayer::new_for_grpc().make_span_with(makeSpan)) + .map_request(linkParentTrace), + ) + .add_service(profilesService) .add_service(reflectionService) - .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone( ).cancelled( )) + .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone().cancelled()) .await .expect("ERROR: Starting gRPC server"); }); @@ -55,32 +61,53 @@ impl GrpcAdapter { } struct ProfilesServiceImpl { - usecases: &'static Usecases + usecases: &'static Usecases, } -const API_SLO: Objective= Objective::new("profiles-microservice"); +const API_SLO: Objective = Objective::new("profiles-microservice"); #[autometrics(objective = API_SLO)] #[async_trait] impl ProfilesService for ProfilesServiceImpl { - async fn ping(&self, _: Request<( )>) -> Result, Status> { - Ok(Response::new(( )))} + async fn ping(&self, _: Request<()>) -> Result, Status> { + Ok(Response::new(())) + } - #[instrument(skip(self), level= "info")] - async fn search_profiles(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); + #[instrument(skip(self), level = "info")] + async fn search_profiles( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); - self.usecases.searchProfiles(&request.query).await - .map(|profilePreviews| Response::new(SearchProfilesResponse { profile_previews: profilePreviews })) - .map_err(mapToGrpcError) - } + self + .usecases + .searchProfiles(&request.query) + .await + .map(|profilePreviews| { + Response::new(SearchProfilesResponse { + profile_previews: profilePreviews, + }) + }) + .map_err(mapToGrpcError) + } - #[instrument(skip(self), level= "info")] - async fn get_profile_previews(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); + #[instrument(skip(self), level = "info")] + async fn get_profile_previews( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); - self.usecases.getProfilePreviews(request.ids).await - .map(|profilePreviews| Response::new(GetProfilePreviewsResponse { profile_previews: profilePreviews })) - .map_err(mapToGrpcError) - } -} \ No newline at end of file + self + .usecases + .getProfilePreviews(request.ids) + .await + .map(|profilePreviews| { + Response::new(GetProfilePreviewsResponse { + profile_previews: profilePreviews, + }) + }) + .map_err(mapToGrpcError) + } +} diff --git a/backend/microservices/profiles/adapters/kafka.rs b/backend/microservices/profiles/adapters/kafka.rs index b760526..c7f4c21 100644 --- a/backend/microservices/profiles/adapters/kafka.rs +++ b/backend/microservices/profiles/adapters/kafka.rs @@ -1,79 +1,102 @@ -use std::time::Duration; -use anyhow::{anyhow, Result, Ok}; +use crate::{ + domain::{ports::UserCreatedEvent, usecases::Usecases}, + CONFIG, THREAD_CANCELLATION_TOKEN, +}; +use anyhow::{anyhow, Ok, Result}; use kafka::consumer::Consumer; -use shared::utils::{debezium::DbOperation, kafka::{createKafkaConsumer, extractEventFromMessage}}; +use shared::utils::{ + debezium::DbOperation, + kafka::{createKafkaConsumer, extractEventFromMessage}, +}; +use std::time::Duration; use tokio::{select, time::sleep}; -use crate::{CONFIG, domain::{usecases::Usecases, ports::UserCreatedEvent}, THREAD_CANCELLATION_TOKEN}; use tracing::error; -const KAFKA_TOPIC: &'static str= "db-events.public.users"; +const KAFKA_TOPIC: &'static str = "db-events.public.users"; // Whenever a user is created / updated / deleted in the users database, that database event is // picked up by Debezium and forwarded to the 'db-events.public.users' topic in Apache Kafka. The // role of KafkaAdapter is to consume those events and invoke the usecases layer for processing it. pub struct KafkaAdapter { - consumer: Consumer + consumer: Consumer, } impl KafkaAdapter { - pub fn new( ) -> Self { - let consumer= createKafkaConsumer( - CONFIG.KAFKA_HOSTS.split(',').map(String::from).collect( ), - KAFKA_TOPIC.to_string( ), - "default".to_string( ) - ); - - Self { consumer } - } - - pub async fn consume(&mut self, usecases: &Usecases) { - loop { - let result= select! { - _= THREAD_CANCELLATION_TOKEN.cancelled( ) => return, - - result= self._consume(usecases) => result - }; - - if let Err(error)= result { error!("{}", error)} - - sleep(Duration::from_secs(1)).await; - } - } - - async fn _consume(&mut self, usecases: &Usecases) -> Result<( )> { - let messageSets= self.consumer.poll( ) - .map_err(|error| anyhow!("ERROR : Consuming messages from '{}' kafka topic: {}", KAFKA_TOPIC, error))?; - - if messageSets.is_empty( ) { - return Ok(( ))} - - for messageSet in messageSets.iter( ) { - let partition= messageSet.partition( ); - - for message in messageSet.messages( ) { - let payload= extractEventFromMessage::(message.value, KAFKA_TOPIC)?.payload; - - let consumeMessage: bool; - - match payload.op { - DbOperation::Create => - // TODO: If any error occurs, then send it to a central log management system. - consumeMessage= usecases.createProfile(payload.after.unwrap( )).await.is_ok( ), - - DbOperation::Update => todo!( ), - DbOperation::Delete => todo!( ), - - _ => consumeMessage= true - } - - if consumeMessage { - self.consumer.consume_message(KAFKA_TOPIC, partition, message.offset) - .map_err(|error| anyhow!("ERROR : Trying to consume Kafka message : {}", error))?; - } - } - } - - self.consumer.commit_consumed( ) - .map_err(|error| anyhow!("ERROR : Trying to commit consumed Kafka messages : {}", error)) - } -} \ No newline at end of file + pub fn new() -> Self { + let consumer = createKafkaConsumer( + CONFIG.KAFKA_HOSTS.split(',').map(String::from).collect(), + KAFKA_TOPIC.to_string(), + "default".to_string(), + ); + + Self { consumer } + } + + pub async fn consume(&mut self, usecases: &Usecases) { + loop { + let result = select! { + _= THREAD_CANCELLATION_TOKEN.cancelled( ) => return, + + result= self._consume(usecases) => result + }; + + if let Err(error) = result { + error!("{}", error) + } + + sleep(Duration::from_secs(1)).await; + } + } + + async fn _consume(&mut self, usecases: &Usecases) -> Result<()> { + let messageSets = self.consumer.poll().map_err(|error| { + anyhow!( + "ERROR : Consuming messages from '{}' kafka topic: {}", + KAFKA_TOPIC, + error + ) + })?; + + if messageSets.is_empty() { + return Ok(()); + } + + for messageSet in messageSets.iter() { + let partition = messageSet.partition(); + + for message in messageSet.messages() { + let payload = + extractEventFromMessage::(message.value, KAFKA_TOPIC)?.payload; + + let consumeMessage: bool; + + match payload.op { + DbOperation::Create => + // TODO: If any error occurs, then send it to a central log management system. + { + consumeMessage = usecases.createProfile(payload.after.unwrap()).await.is_ok() + } + + DbOperation::Update => todo!(), + DbOperation::Delete => todo!(), + + _ => consumeMessage = true, + } + + if consumeMessage { + self + .consumer + .consume_message(KAFKA_TOPIC, partition, message.offset) + .map_err(|error| anyhow!("ERROR : Trying to consume Kafka message : {}", error))?; + } + } + } + + self.consumer.commit_consumed().map_err(|error| { + anyhow!( + "ERROR : Trying to commit consumed Kafka messages : {}", + error + ) + }) + } +} diff --git a/backend/microservices/profiles/adapters/mod.rs b/backend/microservices/profiles/adapters/mod.rs index d1d170f..b134c3a 100644 --- a/backend/microservices/profiles/adapters/mod.rs +++ b/backend/microservices/profiles/adapters/mod.rs @@ -8,4 +8,4 @@ mod elasticsearch; pub use self::elasticsearch::*; mod grpc; -pub use self::grpc::*; \ No newline at end of file +pub use self::grpc::*; diff --git a/backend/microservices/profiles/adapters/postgres.rs b/backend/microservices/profiles/adapters/postgres.rs index 4b94110..490d765 100644 --- a/backend/microservices/profiles/adapters/postgres.rs +++ b/backend/microservices/profiles/adapters/postgres.rs @@ -1,92 +1,105 @@ -use anyhow::{Result, anyhow}; +use crate::{ + domain::ports::{ProfilesRepository, UserCreatedEvent}, + proto::ProfilePreview, +}; +use anyhow::{anyhow, Result}; use async_trait::async_trait; use cornucopia_async::Params; use deadpool_postgres::{Object, Pool}; use shared::{ - utils::{createPgConnectionPool, toServerError}, - sql::queries::profiles_microservice::{CreateParams, create, getProfilePreviews} + sql::queries::profiles_microservice::{create, getProfilePreviews, CreateParams}, + utils::{createPgConnectionPool, toServerError}, }; -use crate::{domain::ports::{ProfilesRepository, UserCreatedEvent}, proto::ProfilePreview}; -use tracing::{instrument, debug, error, info}; +use tracing::{debug, error, info, instrument}; pub struct PostgresAdapter { - connectionPool: Pool + connectionPool: Pool, } impl PostgresAdapter { - pub async fn new( ) -> Self { - let postgresAdapter= Self { - connectionPool: createPgConnectionPool( ) - }; + pub async fn new() -> Self { + let postgresAdapter = Self { + connectionPool: createPgConnectionPool(), + }; - // Get a client from the connection pool to verify that the database is reachable. - let _= postgresAdapter.connectionPool.get( ) - .await.expect("ERROR: Connecting to the Postgres database"); - debug!("Connected to Postgres database"); + // Get a client from the connection pool to verify that the database is reachable. + let _ = postgresAdapter + .connectionPool + .get() + .await + .expect("ERROR: Connecting to the Postgres database"); + debug!("Connected to Postgres database"); - postgresAdapter + postgresAdapter } - // getClient fetches and returns a database client from the underlying connection pool. - async fn getClient(&self) -> Result { - let client= self.connectionPool.get( ).await.map_err(toServerError)?; - Ok(client) - } + // getClient fetches and returns a database client from the underlying connection pool. + async fn getClient(&self) -> Result { + let client = self.connectionPool.get().await.map_err(toServerError)?; + Ok(client) + } } #[async_trait] impl ProfilesRepository for PostgresAdapter { - // cleanup closes the underlying Postgres database connection pool. - fn cleanup(&self) { - self.connectionPool.close( ); - debug!("PostgreSQL database connection pool destroyed"); - } + // cleanup closes the underlying Postgres database connection pool. + fn cleanup(&self) { + self.connectionPool.close(); + debug!("PostgreSQL database connection pool destroyed"); + } - #[instrument(skip(self), level= "debug")] - async fn create(&self, args: &UserCreatedEvent) -> Result<( )> { - let client= self.getClient( ).await?; + #[instrument(skip(self), level = "debug")] + async fn create(&self, args: &UserCreatedEvent) -> Result<()> { + let client = self.getClient().await?; - let createParams= &CreateParams { - id: args.id as i32, - name: args.name.clone( ), - username: args.username.clone( ) + let createParams = &CreateParams { + id: args.id as i32, + name: args.name.clone(), + username: args.username.clone(), }; - let result= create( ).params(&client, createParams).await; + let result = create().params(&client, createParams).await; match result { - Ok(id) => { - info!("New profile created with id {} and details : {:?}", id, args); - Ok(( )) - }, + Ok(id) => { + info!( + "New profile created with id {} and details : {:?}", + id, args + ); + Ok(()) + } - Err(error) => { - let error= error.to_string( ); + Err(error) => { + let error = error.to_string(); - if error == "duplicate key value violates unique constraint \"profiles_pkey\"" { - return Ok(( ))} + if error == "duplicate key value violates unique constraint \"profiles_pkey\"" { + return Ok(()); + } - error!(error); - Err(anyhow!(error)) - } - } - } + error!(error); + Err(anyhow!(error)) + } + } + } - #[instrument(skip(self), level= "debug")] - async fn getProfilePreviews(&self, ids: Vec) -> Result> { - let client= self.getClient( ).await?; + #[instrument(skip(self), level = "debug")] + async fn getProfilePreviews(&self, ids: Vec) -> Result> { + let client = self.getClient().await?; - Ok( - getProfilePreviews( ).bind(&client, &ids).all( ) - .await.map_err(toServerError)? - .iter( ).enumerate( ).map(|(index, value)| { - ProfilePreview { - id: ids[index], + Ok( + getProfilePreviews() + .bind(&client, &ids) + .all() + .await + .map_err(toServerError)? + .iter() + .enumerate() + .map(|(index, value)| ProfilePreview { + id: ids[index], - name: value.name.to_owned( ), - username: value.username.to_owned( ) - } - }) - .collect( ) - ) - } -} \ No newline at end of file + name: value.name.to_owned(), + username: value.username.to_owned(), + }) + .collect(), + ) + } +} diff --git a/backend/microservices/profiles/domain/mod.rs b/backend/microservices/profiles/domain/mod.rs index c94a01a..e41f520 100644 --- a/backend/microservices/profiles/domain/mod.rs +++ b/backend/microservices/profiles/domain/mod.rs @@ -1,2 +1,2 @@ pub mod ports; -pub mod usecases; \ No newline at end of file +pub mod usecases; diff --git a/backend/microservices/profiles/domain/ports.rs b/backend/microservices/profiles/domain/ports.rs index 37ff372..1a339e0 100644 --- a/backend/microservices/profiles/domain/ports.rs +++ b/backend/microservices/profiles/domain/ports.rs @@ -1,20 +1,20 @@ +use crate::proto::ProfilePreview; use anyhow::Result; use async_trait::async_trait; use serde::Deserialize; -use crate::proto::ProfilePreview; #[derive(Debug, Deserialize)] pub struct UserCreatedEvent { - pub id: usize, - pub name: String, - pub username: String + pub id: usize, + pub name: String, + pub username: String, } #[async_trait] pub trait ProfilesRepository: Send + Sync { - async fn create(&self, args: &UserCreatedEvent) -> Result<( )>; + async fn create(&self, args: &UserCreatedEvent) -> Result<()>; - async fn getProfilePreviews(&self, ids: Vec) -> Result>; + async fn getProfilePreviews(&self, ids: Vec) -> Result>; - fn cleanup(&self); -} \ No newline at end of file + fn cleanup(&self); +} diff --git a/backend/microservices/profiles/domain/usecases.rs b/backend/microservices/profiles/domain/usecases.rs index 5e839e0..80c8c8d 100644 --- a/backend/microservices/profiles/domain/usecases.rs +++ b/backend/microservices/profiles/domain/usecases.rs @@ -1,28 +1,28 @@ -use anyhow::{Result, Ok}; use crate::{adapters::ElasticsearchAdapter, proto::ProfilePreview}; +use anyhow::{Ok, Result}; -use super::ports::{UserCreatedEvent, ProfilesRepository}; +use super::ports::{ProfilesRepository, UserCreatedEvent}; use derive_more::Constructor; #[derive(Constructor)] pub struct Usecases { - profilesRepository: &'static dyn ProfilesRepository, - elasticsearchAdapter: ElasticsearchAdapter + profilesRepository: &'static dyn ProfilesRepository, + elasticsearchAdapter: ElasticsearchAdapter, } impl Usecases { - pub async fn createProfile(&self, args: UserCreatedEvent) -> Result<( )> { - self.profilesRepository.create(&args).await?; - self.elasticsearchAdapter.indexProfile(args).await?; + pub async fn createProfile(&self, args: UserCreatedEvent) -> Result<()> { + self.profilesRepository.create(&args).await?; + self.elasticsearchAdapter.indexProfile(args).await?; - Ok(( )) - } + Ok(()) + } - pub async fn searchProfiles(&self, query: &str) -> Result> { - self.elasticsearchAdapter.searchProfiles(query).await - } + pub async fn searchProfiles(&self, query: &str) -> Result> { + self.elasticsearchAdapter.searchProfiles(query).await + } - pub async fn getProfilePreviews(&self, ids: Vec) -> Result> { - self.profilesRepository.getProfilePreviews(ids).await - } -} \ No newline at end of file + pub async fn getProfilePreviews(&self, ids: Vec) -> Result> { + self.profilesRepository.getProfilePreviews(ids).await + } +} diff --git a/backend/microservices/profiles/main.rs b/backend/microservices/profiles/main.rs index 879c3e1..44d087b 100644 --- a/backend/microservices/profiles/main.rs +++ b/backend/microservices/profiles/main.rs @@ -1,69 +1,72 @@ #![allow(non_snake_case)] -mod domain; mod adapters; +mod domain; mod proto { // Including code generated from the .proto files. tonic::include_proto!("profiles_microservice"); - pub const FILE_DESCRIPTOR_SET: &[u8]= + pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("profiles_microservice.descriptor"); } -use std::process::exit; -use adapters::{PostgresAdapter, GrpcAdapter, ElasticsearchAdapter}; +use crate::domain::ports::ProfilesRepository; +use adapters::{ElasticsearchAdapter, GrpcAdapter, PostgresAdapter}; use domain::usecases::Usecases; use lazy_static::lazy_static; use shared::utils::{getEnv, observability::setupObservability}; +use std::process::exit; use tokio::{signal, spawn}; use tokio_util::sync::CancellationToken; -use tracing::{warn, error}; -use crate::domain::ports::ProfilesRepository; +use tracing::{error, warn}; struct Config { - ELASTICSEARCH_URL: String, + ELASTICSEARCH_URL: String, GRPC_SERVER_PORT: String, - KAFKA_HOSTS: String + KAFKA_HOSTS: String, } lazy_static! { - static ref CONFIG: Config= Config { - ELASTICSEARCH_URL: getEnv("ELASTICSEARCH_URL"), + static ref CONFIG: Config = Config { + ELASTICSEARCH_URL: getEnv("ELASTICSEARCH_URL"), GRPC_SERVER_PORT: getEnv("GRPC_SERVER_PORT"), - KAFKA_HOSTS: getEnv("KAFKA_HOSTS") + KAFKA_HOSTS: getEnv("KAFKA_HOSTS") }; - - static ref THREAD_CANCELLATION_TOKEN: CancellationToken= CancellationToken::new( ); + static ref THREAD_CANCELLATION_TOKEN: CancellationToken = CancellationToken::new(); } #[tokio::main] -async fn main( ) { - let _= dotenv::from_filename("./backend/microservices/profiles/.env"); +async fn main() { + let _ = dotenv::from_filename("./backend/microservices/profiles/.env"); - setupObservability("profiles-microservice"); + setupObservability("profiles-microservice"); - let postgresAdapter= - Box::leak::<'static>(Box::new(PostgresAdapter::new( ).await)) as &'static PostgresAdapter; + let postgresAdapter = + Box::leak::<'static>(Box::new(PostgresAdapter::new().await)) as &'static PostgresAdapter; - let elasticsearchAdapter= ElasticsearchAdapter::new( ).await; + let elasticsearchAdapter = ElasticsearchAdapter::new().await; - let usecases= Box::leak::<'static>(Box::new(Usecases::new(postgresAdapter, elasticsearchAdapter))); + let usecases = Box::leak::<'static>(Box::new(Usecases::new( + postgresAdapter, + elasticsearchAdapter, + ))); - GrpcAdapter::startServer(usecases).await; + GrpcAdapter::startServer(usecases).await; - spawn(async { - let mut kafkaAdapter= adapters::KafkaAdapter::new( ); - kafkaAdapter.consume(usecases).await; - }); + spawn(async { + let mut kafkaAdapter = adapters::KafkaAdapter::new(); + kafkaAdapter.consume(usecases).await; + }); - /* Gracefully shutdown on receiving program shutdown signal. */ { - let error= signal::ctrl_c( ).await.err( ); + /* Gracefully shutdown on receiving program shutdown signal. */ + { + let error = signal::ctrl_c().await.err(); warn!("Received program shutdown signal"); - let _= &THREAD_CANCELLATION_TOKEN.cancel( ); // Do cleanup tasks in currently active Tokio + let _ = &THREAD_CANCELLATION_TOKEN.cancel(); // Do cleanup tasks in currently active Tokio // threads. - postgresAdapter.cleanup( ); + postgresAdapter.cleanup(); match error { None => exit(0), @@ -74,4 +77,4 @@ async fn main( ) { } } } -} \ No newline at end of file +} diff --git a/backend/microservices/users/adapters/grpc.rs b/backend/microservices/users/adapters/grpc.rs index df66b35..4a109db 100644 --- a/backend/microservices/users/adapters/grpc.rs +++ b/backend/microservices/users/adapters/grpc.rs @@ -1,47 +1,56 @@ -use crate::{proto::{users_service_server::*, *}, THREAD_CANCELLATION_TOKEN, CONFIG, domain::usecases::Usecases}; +use crate::{ + domain::usecases::Usecases, + proto::{users_service_server::*, *}, + CONFIG, THREAD_CANCELLATION_TOKEN, +}; use autometrics::{autometrics, objectives::Objective}; -use shared::utils::{mapToGrpcError, observability::{makeSpan, linkParentTrace}}; +use shared::utils::{ + mapToGrpcError, + observability::{linkParentTrace, makeSpan}, +}; use tokio::spawn; -use tonic::{codec::CompressionEncoding, transport::Server, Request, Response, Status, async_trait}; +use tonic::{ + async_trait, codec::CompressionEncoding, transport::Server, Request, Response, Status, +}; use tower::ServiceBuilder; -use tracing::{instrument, debug}; use tower_http::trace::TraceLayer; +use tracing::{debug, instrument}; -const MAX_REQUEST_SIZE: usize= 512; // 512 Bytes +const MAX_REQUEST_SIZE: usize = 512; // 512 Bytes -pub struct GrpcAdapter { } +pub struct GrpcAdapter {} impl GrpcAdapter { pub async fn startServer(usecases: Box) { - let address= format!("[::]:{}", CONFIG.GRPC_SERVER_PORT); - let address= address.parse( ) - .expect(&format!("ERROR : Parsing binding address of the gRPC server : {}", address)); - - let usersService= - UsersServiceServer::new(UsersServiceImpl { usecases }) - .max_decoding_message_size(MAX_REQUEST_SIZE) - .send_compressed(CompressionEncoding::Gzip) - .accept_compressed(CompressionEncoding::Gzip); - - let reflectionService= - tonic_reflection::server::Builder::configure( ) - .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) - .build( ) - .expect("ERROR : Building gRPC reflection service") - .max_decoding_message_size(MAX_REQUEST_SIZE); + let address = format!("[::]:{}", CONFIG.GRPC_SERVER_PORT); + let address = address.parse().expect(&format!( + "ERROR : Parsing binding address of the gRPC server : {}", + address + )); + + let usersService = UsersServiceServer::new(UsersServiceImpl { usecases }) + .max_decoding_message_size(MAX_REQUEST_SIZE) + .send_compressed(CompressionEncoding::Gzip) + .accept_compressed(CompressionEncoding::Gzip); + + let reflectionService = tonic_reflection::server::Builder::configure() + .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) + .build() + .expect("ERROR : Building gRPC reflection service") + .max_decoding_message_size(MAX_REQUEST_SIZE); debug!("Starting gRPC server"); spawn(async move { - Server::builder( ) - .layer( - ServiceBuilder::new( ) - .layer(TraceLayer::new_for_grpc( ).make_span_with(makeSpan)) - .map_request(linkParentTrace) - ) + Server::builder() + .layer( + ServiceBuilder::new() + .layer(TraceLayer::new_for_grpc().make_span_with(makeSpan)) + .map_request(linkParentTrace), + ) .add_service(usersService) .add_service(reflectionService) - .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone( ).cancelled( )) + .serve_with_shutdown(address, THREAD_CANCELLATION_TOKEN.clone().cancelled()) .await .expect("ERROR : occurred in gRPC server"); }); @@ -49,44 +58,63 @@ impl GrpcAdapter { } struct UsersServiceImpl { - usecases: Box + usecases: Box, } // Service Level Objectives (SLOs) are a way to define and measure the reliability and performance // of a service. // Autometrics raises an alert whenever any of the SLO objectives fail. -const API_SLO: Objective= Objective::new("users-microservice"); +const API_SLO: Objective = Objective::new("users-microservice"); #[autometrics(objective = API_SLO)] #[async_trait] impl UsersService for UsersServiceImpl { - async fn ping(&self, _: Request<( )>) -> Result, Status> { - Ok(Response::new(( )))} - - #[instrument(skip(self), level= "info")] - async fn signup(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - - self.usecases.signup(&request).await - .map(|value| Response::new(AuthenticationResponse { jwt: value.jwt })) - .map_err(mapToGrpcError) + async fn ping(&self, _: Request<()>) -> Result, Status> { + Ok(Response::new(())) } - #[instrument(skip(self), level= "info")] - async fn signin(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); - - self.usecases.signin(&request).await - .map(|value| Response::new(AuthenticationResponse { jwt: value.jwt })) - .map_err(mapToGrpcError) + #[instrument(skip(self), level = "info")] + async fn signup( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .signup(&request) + .await + .map(|value| Response::new(AuthenticationResponse { jwt: value.jwt })) + .map_err(mapToGrpcError) } - #[instrument(skip(self), level= "info")] - async fn verify_jwt(&self, request: Request) -> Result, Status> { - let request= request.into_inner( ); + #[instrument(skip(self), level = "info")] + async fn signin( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .signin(&request) + .await + .map(|value| Response::new(AuthenticationResponse { jwt: value.jwt })) + .map_err(mapToGrpcError) + } - self.usecases.verifyJwt(&request.jwt).await - .map(|value| Response::new(VerifyJwtResponse { user_id: value })) - .map_err(mapToGrpcError) + #[instrument(skip(self), level = "info")] + async fn verify_jwt( + &self, + request: Request, + ) -> Result, Status> { + let request = request.into_inner(); + + self + .usecases + .verifyJwt(&request.jwt) + .await + .map(|value| Response::new(VerifyJwtResponse { user_id: value })) + .map_err(mapToGrpcError) } -} \ No newline at end of file +} diff --git a/backend/microservices/users/adapters/mod.rs b/backend/microservices/users/adapters/mod.rs index 44ba286..822e411 100644 --- a/backend/microservices/users/adapters/mod.rs +++ b/backend/microservices/users/adapters/mod.rs @@ -2,4 +2,4 @@ mod grpc; pub use self::grpc::*; mod postgres; -pub use self::postgres::*; \ No newline at end of file +pub use self::postgres::*; diff --git a/backend/microservices/users/adapters/postgres.rs b/backend/microservices/users/adapters/postgres.rs index 7d9a530..8493219 100644 --- a/backend/microservices/users/adapters/postgres.rs +++ b/backend/microservices/users/adapters/postgres.rs @@ -2,150 +2,162 @@ use crate::domain::ports::{CreateArgs, FindByOutput, UsersRepository}; use anyhow::{anyhow, Result}; use async_trait::async_trait; use cornucopia_async::Params; -use deadpool_postgres::{Pool, Object}; -use shared::sql::queries::users_microservice::{create, findByEmail, findByUsername, CreateParams, findById}; -use shared::utils::{createPgConnectionPool, SERVER_ERROR, toServerError}; -use tracing::{instrument, debug, error, info}; +use deadpool_postgres::{Object, Pool}; +use shared::sql::queries::users_microservice::{ + create, findByEmail, findById, findByUsername, CreateParams, +}; +use shared::utils::{createPgConnectionPool, toServerError, SERVER_ERROR}; +use tracing::{debug, error, info, instrument}; -const EMAIL_ALREADY_REGISTERED_ERROR: &str= "Email is already registered"; -const USERNAME_UNAVAILABLE_ERROR: &str= "Username is unavailable"; -const USER_NOT_FOUND_ERROR: &str= "User not found"; +const EMAIL_ALREADY_REGISTERED_ERROR: &str = "Email is already registered"; +const USERNAME_UNAVAILABLE_ERROR: &str = "Username is unavailable"; +const USER_NOT_FOUND_ERROR: &str = "User not found"; pub struct PostgresAdapter { - connectionPool: Pool + connectionPool: Pool, } impl PostgresAdapter { - pub async fn new( ) -> Self { - let postgresAdapter= Self { connectionPool: createPgConnectionPool( )}; - - // Get a client from the connection pool to verify that the database is reachable. - let _= postgresAdapter.connectionPool.get( ) - .await.expect("ERROR : Connecting to the Postgres database"); - debug!("Connected to Postgres database"); - - postgresAdapter + pub async fn new() -> Self { + let postgresAdapter = Self { + connectionPool: createPgConnectionPool(), + }; + + // Get a client from the connection pool to verify that the database is reachable. + let _ = postgresAdapter + .connectionPool + .get() + .await + .expect("ERROR : Connecting to the Postgres database"); + debug!("Connected to Postgres database"); + + postgresAdapter } - // getClient fetches and returns a database client from the underlying connection pool. - async fn getClient(&self) -> Result { - let client= self.connectionPool.get( ).await.map_err(toServerError)?; - Ok(client) - } + // getClient fetches and returns a database client from the underlying connection pool. + async fn getClient(&self) -> Result { + let client = self.connectionPool.get().await.map_err(toServerError)?; + Ok(client) + } } #[async_trait] impl UsersRepository for PostgresAdapter { - // cleanup closes the underlying Postgres database connection pool. - fn cleanup(&self) { - self.connectionPool.close( ); - debug!("PostgreSQL database connection pool destroyed"); - } + // cleanup closes the underlying Postgres database connection pool. + fn cleanup(&self) { + self.connectionPool.close(); + debug!("PostgreSQL database connection pool destroyed"); + } - #[instrument(skip(self), level= "debug")] + #[instrument(skip(self), level = "debug")] async fn create<'create>(&self, args: CreateArgs<'create>) -> Result { - let client= self.getClient( ).await?; - - let result= - create( ) - .params(&client, &CreateParams { - name: args.name, - email: args.email, - username: args.username, - password: args.hashedPassword, - }) - .one( ).await; + let client = self.getClient().await?; + + let result = create() + .params( + &client, + &CreateParams { + name: args.name, + email: args.email, + username: args.username, + password: args.hashedPassword, + }, + ) + .one() + .await; result - .map(|id| { - info!("New user created with id {} and details : {:?}", id, args); - id.to_string( ) - }) - .map_err(|error| { - let error= error.to_string( ); - - let errorMessage: &str= { - if !error.contains("duplicate key value violates unique constraint") { - error!("Unexpected server error occurred : {}", error); - SERVER_ERROR - } - - // CASE: Duplicate email - else if error.contains("users_email_key") { EMAIL_ALREADY_REGISTERED_ERROR } - - // CASE: Duplicate username - else { USERNAME_UNAVAILABLE_ERROR } - }; - anyhow!(errorMessage) - }) + .map(|id| { + info!("New user created with id {} and details : {:?}", id, args); + id.to_string() + }) + .map_err(|error| { + let error = error.to_string(); + + let errorMessage: &str = { + if !error.contains("duplicate key value violates unique constraint") { + error!("Unexpected server error occurred : {}", error); + SERVER_ERROR + } + // CASE: Duplicate email + else if error.contains("users_email_key") { + EMAIL_ALREADY_REGISTERED_ERROR + } + // CASE: Duplicate username + else { + USERNAME_UNAVAILABLE_ERROR + } + }; + anyhow!(errorMessage) + }) } - #[instrument(skip(self), level= "debug")] + #[instrument(skip(self), level = "debug")] async fn findByEmail(&self, email: &str) -> Result { - let client= self.getClient( ).await?; + let client = self.getClient().await?; - let result= findByEmail( ).bind(&client, &email).one( ).await; + let result = findByEmail().bind(&client, &email).one().await; result .map(|value| FindByOutput { - id: value.id.to_string( ), - hashedPassword: value.password.to_string( ), + id: value.id.to_string(), + hashedPassword: value.password.to_string(), }) .map_err(|error| { anyhow!({ - if error.to_string( ) == "query returned an unexpected number of rows" { USER_NOT_FOUND_ERROR } - - else { - error!("Unexpected server error occurred : {}", error); - SERVER_ERROR - } + if error.to_string() == "query returned an unexpected number of rows" { + USER_NOT_FOUND_ERROR + } else { + error!("Unexpected server error occurred : {}", error); + SERVER_ERROR + } }) }) } - #[instrument(skip(self), level= "debug")] + #[instrument(skip(self), level = "debug")] async fn findByUsername(&self, username: &str) -> Result { - let client= self.getClient( ).await?; + let client = self.getClient().await?; - let result= findByUsername( ).bind(&client, &username).one( ).await; + let result = findByUsername().bind(&client, &username).one().await; result .map(|value| FindByOutput { - id: value.id.to_string( ), - hashedPassword: value.password.to_string( ), + id: value.id.to_string(), + hashedPassword: value.password.to_string(), }) .map_err(|error| { anyhow!({ - if error.to_string( ) == "query returned an unexpected number of rows" { USER_NOT_FOUND_ERROR } - - else { - error!("Unexpected server error occurred : {}", error); - SERVER_ERROR - } + if error.to_string() == "query returned an unexpected number of rows" { + USER_NOT_FOUND_ERROR + } else { + error!("Unexpected server error occurred : {}", error); + SERVER_ERROR + } }) }) } - #[instrument(skip(self), level= "debug")] - async fn findById(&self, id: i32) -> Result { - let client= self.getClient( ).await?; + #[instrument(skip(self), level = "debug")] + async fn findById(&self, id: i32) -> Result { + let client = self.getClient().await?; - let result= findById( ).bind(&client, &id).one( ).await; + let result = findById().bind(&client, &id).one().await; result .map(|value| FindByOutput { - id: value.id.to_string( ), - hashedPassword: value.password.to_string( ), + id: value.id.to_string(), + hashedPassword: value.password.to_string(), }) .map_err(|error| { anyhow!({ - if error.to_string( ) == "query returned an unexpected number of rows" { USER_NOT_FOUND_ERROR } - - else { - error!("Unexpected server error occurred : {}", error); - SERVER_ERROR - } + if error.to_string() == "query returned an unexpected number of rows" { + USER_NOT_FOUND_ERROR + } else { + error!("Unexpected server error occurred : {}", error); + SERVER_ERROR + } }) }) - } -} \ No newline at end of file + } +} diff --git a/backend/microservices/users/domain/mod.rs b/backend/microservices/users/domain/mod.rs index c94a01a..e41f520 100644 --- a/backend/microservices/users/domain/mod.rs +++ b/backend/microservices/users/domain/mod.rs @@ -1,2 +1,2 @@ pub mod ports; -pub mod usecases; \ No newline at end of file +pub mod usecases; diff --git a/backend/microservices/users/domain/ports.rs b/backend/microservices/users/domain/ports.rs index 99df506..3e777b7 100644 --- a/backend/microservices/users/domain/ports.rs +++ b/backend/microservices/users/domain/ports.rs @@ -1,5 +1,5 @@ -use async_trait::async_trait; use anyhow::Result; +use async_trait::async_trait; #[async_trait] pub trait UsersRepository: Sync + Send { @@ -7,9 +7,9 @@ pub trait UsersRepository: Sync + Send { async fn findByEmail(&self, email: &str) -> Result; async fn findByUsername(&self, username: &str) -> Result; - async fn findById(&self, id: i32) -> Result; + async fn findById(&self, id: i32) -> Result; - fn cleanup(&self); + fn cleanup(&self); } #[derive(Debug)] @@ -17,11 +17,11 @@ pub struct CreateArgs<'createArgs> { pub name: &'createArgs str, pub email: &'createArgs str, pub username: &'createArgs str, - pub hashedPassword: &'createArgs str + pub hashedPassword: &'createArgs str, } #[derive(Debug)] pub struct FindByOutput { pub id: String, - pub hashedPassword: String -} \ No newline at end of file + pub hashedPassword: String, +} diff --git a/backend/microservices/users/domain/usecases.rs b/backend/microservices/users/domain/usecases.rs index 9133f0e..df49c89 100644 --- a/backend/microservices/users/domain/usecases.rs +++ b/backend/microservices/users/domain/usecases.rs @@ -2,64 +2,70 @@ use super::ports::UsersRepository; use crate::{ domain::ports::CreateArgs, proto::{AuthenticationResponse, SigninRequest, SignupRequest}, - utils::{hashPassword, jwt::{createJwt, self}, verifyPassword} + utils::{ + hashPassword, + jwt::{self, createJwt}, + verifyPassword, + }, }; use anyhow::{anyhow, Result}; use derive_more::Constructor; -const WRONG_PASSWORD_ERROR: &str= "Wrong password provided"; +const WRONG_PASSWORD_ERROR: &str = "Wrong password provided"; #[derive(Constructor)] pub struct Usecases { - usersRepository: &'static dyn UsersRepository + usersRepository: &'static dyn UsersRepository, } impl Usecases { - pub async fn signup(&self, args: &SignupRequest) -> Result { - let id= - self.usersRepository - .create(CreateArgs { - name: &args.name, - email: &args.email, - username: &args.username, - hashedPassword: &hashPassword(&args.password)?, - }) - .await?; + pub async fn signup(&self, args: &SignupRequest) -> Result { + let id = self + .usersRepository + .create(CreateArgs { + name: &args.name, + email: &args.email, + username: &args.username, + hashedPassword: &hashPassword(&args.password)?, + }) + .await?; - let jwt= createJwt(id)?; + let jwt = createJwt(id)?; Ok(AuthenticationResponse { jwt }) } pub async fn signin(&self, args: &SigninRequest) -> Result { - let userDetails= { - - // CASE: User provided his/her email. - if args.identifier.contains('@') { - self.usersRepository.findByEmail(&args.identifier).await?} - - // CASE: User provided his/her username. - else { - self.usersRepository + let userDetails = { + // CASE: User provided his/her email. + if args.identifier.contains('@') { + self.usersRepository.findByEmail(&args.identifier).await? + } + // CASE: User provided his/her username. + else { + self + .usersRepository .findByUsername(&args.identifier) .await? } }; if !verifyPassword(&args.password, &userDetails.hashedPassword)? { - return Err(anyhow!(WRONG_PASSWORD_ERROR))} + return Err(anyhow!(WRONG_PASSWORD_ERROR)); + } - let jwt= createJwt(userDetails.id)?; + let jwt = createJwt(userDetails.id)?; Ok(AuthenticationResponse { jwt }) } - pub async fn verifyJwt(&self, jwt: &str) -> Result { - let userId: i32= jwt::decodeJwt(jwt)? - .parse( ).map_err(|_| anyhow!("Jwt is invalid"))?; + pub async fn verifyJwt(&self, jwt: &str) -> Result { + let userId: i32 = jwt::decodeJwt(jwt)? + .parse() + .map_err(|_| anyhow!("Jwt is invalid"))?; - // TODO: When creating a JWT, include the user's hashed password in it. So here, during JWT - // verification, we can also verify the user's hashed password. - let _= self.usersRepository.findById(userId).await?; + // TODO: When creating a JWT, include the user's hashed password in it. So here, during JWT + // verification, we can also verify the user's hashed password. + let _ = self.usersRepository.findById(userId).await?; - Ok(userId) - } -} \ No newline at end of file + Ok(userId) + } +} diff --git a/backend/microservices/users/main.rs b/backend/microservices/users/main.rs index 83ccd5a..d564e36 100644 --- a/backend/microservices/users/main.rs +++ b/backend/microservices/users/main.rs @@ -1,39 +1,39 @@ #![allow(non_snake_case)] -mod domain; mod adapters; +mod domain; mod utils; mod proto { // Including code generated from the .proto files. tonic::include_proto!("users_microservice"); - pub const FILE_DESCRIPTOR_SET: &[u8]= + pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("users_microservice.descriptor"); } -use std::process::exit; +use crate::domain::ports::UsersRepository; use adapters::{GrpcAdapter, PostgresAdapter}; use domain::usecases::Usecases; use lazy_static::lazy_static; use opentelemetry::global; use shared::utils::{getEnv, observability::setupObservability}; +use std::process::exit; use tokio::signal; use tokio_util::sync::CancellationToken; -use tracing::{warn, error}; -use crate::domain::ports::UsersRepository; +use tracing::{error, warn}; struct Config { JWT_SECRET: String, - GRPC_SERVER_PORT: String + GRPC_SERVER_PORT: String, } // Each value inside is initialized (in a thread safe manner) on the heap, when accessed for the // first time. // Read more about lazy_static here - https://blog.logrocket.com/rust-lazy-static-pattern/ lazy_static! { - static ref CONFIG: Config= Config { - JWT_SECRET: getEnv("JWT_SECRET"), + static ref CONFIG: Config= Config { + JWT_SECRET: getEnv("JWT_SECRET"), GRPC_SERVER_PORT: getEnv("GRPC_SERVER_PORT") }; @@ -46,27 +46,28 @@ lazy_static! { // future representing your main function to the tokio runtime executor. The tokio executor calls // the poll method on that future. #[tokio::main] // By default, Tokio will spawn a separate thread to run the Tokio runtime. -async fn main( ) { - // Load environment variables from a .env file, during development process. - let _= dotenv::from_filename("./backend/microservices/users/.env"); +async fn main() { + // Load environment variables from a .env file, during development process. + let _ = dotenv::from_filename("./backend/microservices/users/.env"); - setupObservability("users-microservice"); + setupObservability("users-microservice"); - let postgresAdapter= - Box::leak::<'static>(Box::new(PostgresAdapter::new( ).await)) as &'static PostgresAdapter; + let postgresAdapter = + Box::leak::<'static>(Box::new(PostgresAdapter::new().await)) as &'static PostgresAdapter; - let usecases= Box::new(Usecases::new(postgresAdapter)); + let usecases = Box::new(Usecases::new(postgresAdapter)); - GrpcAdapter::startServer(usecases).await; + GrpcAdapter::startServer(usecases).await; - /* Gracefully shutdown on receiving program shutdown signal. */ { - let error= signal::ctrl_c( ).await.err( ); + /* Gracefully shutdown on receiving program shutdown signal. */ + { + let error = signal::ctrl_c().await.err(); warn!("Received program shutdown signal"); - let _= &THREAD_CANCELLATION_TOKEN.cancel( ); // Do cleanup tasks in currently active Tokio + let _ = &THREAD_CANCELLATION_TOKEN.cancel(); // Do cleanup tasks in currently active Tokio // threads. - postgresAdapter.cleanup( ); - global::shutdown_tracer_provider( ); + postgresAdapter.cleanup(); + global::shutdown_tracer_provider(); match error { None => exit(0), @@ -77,4 +78,4 @@ async fn main( ) { } } } -} \ No newline at end of file +} diff --git a/backend/microservices/users/utils.rs b/backend/microservices/users/utils.rs index 795a90a..5ee1f78 100644 --- a/backend/microservices/users/utils.rs +++ b/backend/microservices/users/utils.rs @@ -7,24 +7,23 @@ use shared::utils::SERVER_ERROR; use tracing::error; pub fn hashPassword(password: &str) -> Result { - Argon2::default( ) - .hash_password(password.as_bytes( ), &SaltString::generate(&mut OsRng)) - .map(|value| value.to_string( )) + Argon2::default() + .hash_password(password.as_bytes(), &SaltString::generate(&mut OsRng)) + .map(|value| value.to_string()) .map_err(|error| { - error!("Unexpected server error occurred : {}", error); - anyhow!(SERVER_ERROR) - }) + error!("Unexpected server error occurred : {}", error); + anyhow!(SERVER_ERROR) + }) } pub fn verifyPassword(password: &str, hashedPassword: &str) -> Result { - let parsedHashedPassword= PasswordHash::new(hashedPassword) - .map_err(|error| { - error!("Unexpected server error occurred : {}", error); - anyhow!(SERVER_ERROR) - })?; - let result= Argon2::default( ).verify_password(password.as_bytes( ), &parsedHashedPassword); + let parsedHashedPassword = PasswordHash::new(hashedPassword).map_err(|error| { + error!("Unexpected server error occurred : {}", error); + anyhow!(SERVER_ERROR) + })?; + let result = Argon2::default().verify_password(password.as_bytes(), &parsedHashedPassword); - Ok(result.is_ok( )) + Ok(result.is_ok()) } pub mod jwt { @@ -44,13 +43,12 @@ pub mod jwt { sub: String, issuedAt: usize, exp: usize, - // Public and Private Claims. } impl JwtClaims { fn new(sub: String) -> Self { - let currentTimestamp= Local::now( ).timestamp( ) as usize; + let currentTimestamp = Local::now().timestamp() as usize; Self { sub, @@ -61,23 +59,26 @@ pub mod jwt { } lazy_static! { - static ref JWT_ENCODING_KEY: EncodingKey= EncodingKey::from_secret(CONFIG.JWT_SECRET.as_bytes( )); - static ref JWT_DECODING_KEY: DecodingKey= DecodingKey::from_secret(CONFIG.JWT_SECRET.as_bytes( )); + static ref JWT_ENCODING_KEY: EncodingKey = + EncodingKey::from_secret(CONFIG.JWT_SECRET.as_bytes()); + static ref JWT_DECODING_KEY: DecodingKey = + DecodingKey::from_secret(CONFIG.JWT_SECRET.as_bytes()); } pub fn createJwt(id: String) -> Result { - let claims= JwtClaims::new(id); - encode(&Header::default( ), &claims, &JWT_ENCODING_KEY).map_err(toServerError) + let claims = JwtClaims::new(id); + encode(&Header::default(), &claims, &JWT_ENCODING_KEY).map_err(toServerError) } pub fn decodeJwt(jwt: &str) -> Result { - let tokenData= decode::(jwt, &JWT_DECODING_KEY, &Validation::default( )) - .map_err(toServerError)?; - let claims= tokenData.claims; + let tokenData = + decode::(jwt, &JWT_DECODING_KEY, &Validation::default()).map_err(toServerError)?; + let claims = tokenData.claims; - if claims.exp < Local::now( ).timestamp( ) as usize { - return Err(anyhow!("JWT expired"))} + if claims.exp < Local::now().timestamp() as usize { + return Err(anyhow!("JWT expired")); + } Ok(claims.sub) } -} \ No newline at end of file +} diff --git a/build.rs b/build.rs index eeb8c9a..5fed129 100644 --- a/build.rs +++ b/build.rs @@ -2,24 +2,24 @@ use std::{env, path::PathBuf}; -fn main( ) { - let outputDirectory= PathBuf::from(env::var("OUT_DIR").unwrap( )); +fn main() { + let outputDirectory = PathBuf::from(env::var("OUT_DIR").unwrap()); - let microservices= vec![ "users", "profiles", "followships", "posts", "feeds" ]; + let microservices = vec!["users", "profiles", "followships", "posts", "feeds"]; for microservice in microservices { - let protoFilePath= format!("backend/protos/{}_microservice.proto", microservice); - let descriptorFilePath= + let protoFilePath = format!("backend/protos/{}_microservice.proto", microservice); + let descriptorFilePath = outputDirectory.join(format!("{}_microservice.descriptor.bin", microservice)); - tonic_build::configure( ) + tonic_build::configure() .build_client(false) // Descriptors are the commonly used language model for Protocol Buffers. They are used as an // intermediate artifact to support code generation, and they are also used in runtime // libraries to implement support for reflection and dynamic types. // Read more here - https://protobuf.com/docs/descriptors .file_descriptor_set_path(descriptorFilePath) - .compile(&[protoFilePath], &[ "backend/protos" ]) - .unwrap( ); + .compile(&[protoFilePath], &["backend/protos"]) + .unwrap(); } -} \ No newline at end of file +} diff --git a/cloud/.terraform.lock.hcl b/cloud/.terraform.lock.hcl index 6008cfc..6b8dd51 100644 --- a/cloud/.terraform.lock.hcl +++ b/cloud/.terraform.lock.hcl @@ -2,26 +2,26 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/digitalocean/digitalocean" { - version = "2.31.0" - constraints = "2.31.0" + version = "2.34.1" + constraints = "2.34.1" hashes = [ - "h1:gZaRh599fu1VkMUzoauhsBXYQ0NxH7+MfW3z/nDiQWI=", - "zh:1eaf43da5ba5cf0ad4579fc084866ac70d2f597250218db8e573ee6045b51879", - "zh:1fd974e38833443c7d2c4b6e56cbb83d5ac086858c6dcaa9be79a85cb4106984", - "zh:2143630f078f844e4006b546a6f43653308d00ef5a5afa51e5605d290d8f9270", - "zh:2ea11260f4aada058d978abf6371fb0016f1e5ad650583b1842733dde1a1c6ed", - "zh:2f77f4e385db98bfc26b7c43c52ab4bcda2221191404726d0b76939d96eeb254", - "zh:3262dbbbfa33f3e0e775f4e2a0d995f942a0606df3f92f3db58d3a2b828eb4c1", - "zh:39cc06925c2141b7fccd729e2d98d84194af4b6603849c8eeef9e16c6e473507", - "zh:4a401f612caef535905c793bad2c7d7e54ff385f0cd5fd352bad648468647a80", - "zh:50d59d672d7c9e7e7eb4228eb6bdbe8dae8e8dac106c8c5effced15bfa65300a", - "zh:7760d8ec7af57b95a115496698fed14676b584d85465459d50e21c37add4b3e1", - "zh:8bc9f5b3b74bc084724b7342fff44e93a4f552acf4cf5878e53bd4f327a6362a", - "zh:9abf8e64705d57e29129472ac937531154dc8eec83a3a4848fbaaee87a656276", - "zh:a3d7ac59fdeb704fcb0a8c354e0ae611b377637fb76d88f89e9dc9be0e3c3945", - "zh:c71fa05665304954f62d7e2632634f29e8ab7a0a228698c6605c951dfb843a51", - "zh:efd7b29d8f65a97cb65823948b878f0cd3e42703c2ed71e2fe39769a1a9b9faa", - "zh:fb04df7c68ee96b110b5e72da7a776f01007ec919ecff914fd84ae6cb8e3ddad", + "h1:5tfXRq80lhTUCYxAqcUGL8BjR3SSTk+ggiW20UvK+JA=", + "zh:022d4c97af3d022d4e3735a81c6a7297aa43c3b28a8cecaa0ff58273a5677e2e", + "zh:1922f86d5710707eb497fbebcb1a1c5584c843a7e95c3900d750d81bd2785204", + "zh:1b7ab7c67a26c399eb5aa8a7a695cb59279c6a1a562ead3064e4a6b17cdacabe", + "zh:1dc666faa2ec0efc32329b4c8ff79813b54741ef1741bc42d90513e5ba904048", + "zh:220dec61ffd9448a91cca92f2bc6642df10db57b25d3d27036c3a370e9870cb7", + "zh:262301545057e654bd6193dc04b01666531fccfcf722f730827695098d93afa7", + "zh:63677684a14e6b7790833982d203fb2f84b105ad6b9b490b3a4ecc7043cdba81", + "zh:67a2932227623073aa9431a12916b52ce1ccddb96f9a2d6cdae2aaf7558ccbf8", + "zh:70dfc6ac33ee140dcb29a971df7eeb15117741b5a75b9f8486c5468c9dd28f24", + "zh:7e3b3b62754e86442048b4b1284e10807e3e58f417e1d59a4575dd29ac6ba518", + "zh:7e6fe662b1e283ad498eb2549d0c2260b908ab5b848e05f84fa4acdca5b4d5ca", + "zh:9c554170f20e659222896533a3a91954fb1d210eea60de05aea803b36d5ccd5d", + "zh:ad2f64d758bd718eb39171f1c31219900fd2bfb552a14f6a90b18cfd178a74b4", + "zh:cfce070000e95dfe56a901340ac256f9d2f84a73bf62391cba8a8e9bf1f857e0", + "zh:d5ae30eccd53ca7314157e62d8ec53151697ed124e43b24b2d16c565054730c6", + "zh:fbe5edf5337adb7360f9ffef57d02b397555b6a89bba68d1b60edfec6e23f02c", ] } diff --git a/cloud/main.tf b/cloud/main.tf index 9004623..0a6c91f 100644 --- a/cloud/main.tf +++ b/cloud/main.tf @@ -6,7 +6,7 @@ terraform { required_providers { digitalocean = { source = "digitalocean/digitalocean" - version = "2.31.0" + version = "2.34.1" } kubernetes = { diff --git a/frontend/.prettierrc b/frontend/.prettierrc index 0a8eb8a..8ea255a 100644 --- a/frontend/.prettierrc +++ b/frontend/.prettierrc @@ -1,7 +1,7 @@ { - "trailingComma": "none", - "singleQuote": false, - "semi": false, - "printWidth": 100, - "jsxSingleQuote": false -} \ No newline at end of file + "trailingComma": "none", + "singleQuote": false, + "semi": false, + "printWidth": 100, + "jsxSingleQuote": false +} diff --git a/frontend/app/authentication/signin/page.tsx b/frontend/app/authentication/signin/page.tsx index db1c327..f1e28a4 100644 --- a/frontend/app/authentication/signin/page.tsx +++ b/frontend/app/authentication/signin/page.tsx @@ -2,11 +2,11 @@ import { NextPage } from "next" import { Fragment } from "react" import { SigninForm } from "./signin-form.component" -const SigninPage: NextPage= ( ) => { +const SigninPage: NextPage = () => { return ( ) } -export default SigninPage \ No newline at end of file +export default SigninPage diff --git a/frontend/app/authentication/signin/signin-form.component.tsx b/frontend/app/authentication/signin/signin-form.component.tsx index ad0b8c1..44df8bd 100644 --- a/frontend/app/authentication/signin/signin-form.component.tsx +++ b/frontend/app/authentication/signin/signin-form.component.tsx @@ -11,58 +11,55 @@ import toast from "react-hot-toast" import { useRouter } from "next/navigation" import { useCookies } from "react-cookie" -const signinFormSchema= z.object({ - - identifier: z.string( ), - password: z.string( ).min(4).max(25) +const signinFormSchema = z.object({ + identifier: z.string(), + password: z.string().min(4).max(25) }) -export type SigninFormSchema= z.infer +export type SigninFormSchema = z.infer -export const SigninForm: FunctionComponent= ({ }) => { - const router= useRouter( ) +export const SigninForm: FunctionComponent = ({}) => { + const router = useRouter() - const [cookies, setCookies]= useCookies( ) + const [cookies, setCookies] = useCookies() const submitHandler: SubmitHandler = async (data: SigninFormSchema) => { - const result= await signinHandler(data) + const result = await signinHandler(data) - if(result.Err) { + if (result.Err) { toast(result.Err.message) return } - const jwt= result.Ok + const jwt = result.Ok setCookies("jwt", jwt) router.replace("/") } - const formContext= useForm({ + const formContext = useForm({ mode: "onChange", - resolver: zodResolver(signinFormSchema), reValidateMode: "onBlur" + resolver: zodResolver(signinFormSchema), + reValidateMode: "onBlur" }) - const { handleSubmit, formState: { isSubmitting }}= formContext + const { + handleSubmit, + formState: { isSubmitting } + } = formContext return (
+ - - - + - +
) -} \ No newline at end of file +} diff --git a/frontend/app/authentication/signin/signin.action.ts b/frontend/app/authentication/signin/signin.action.ts index 62149a6..2006fe7 100644 --- a/frontend/app/authentication/signin/signin.action.ts +++ b/frontend/app/authentication/signin/signin.action.ts @@ -6,21 +6,19 @@ import { QuerySigninArgs, SigninDocument, SigninQuery } from "@/graphql/__genera import { Result } from "@/lib/utils" export async function signinHandler(data: SigninFormSchema): Promise> { - const apolloClient= getApolloClient( )( ) + const apolloClient = getApolloClient()() try { - const { data: response, errors }= await apolloClient.query({ + const { data: response, errors } = await apolloClient.query({ query: SigninDocument, variables: { args: data } }) - if(!response) - return { Err: new Error("No data found in the response")} - - else if(errors && errors.length > 0) - return { Err: new Error(errors.join(" | "))} + if (!response) return { Err: new Error("No data found in the response") } + else if (errors && errors.length > 0) return { Err: new Error(errors.join(" | ")) } return { Ok: response.signin.jwt } - - } catch(error) { return { Err: new Error("Server error occurred")}} -} \ No newline at end of file + } catch (error) { + return { Err: new Error("Server error occurred") } + } +} diff --git a/frontend/app/authentication/signup/page.tsx b/frontend/app/authentication/signup/page.tsx index 0554d84..e41d2b6 100644 --- a/frontend/app/authentication/signup/page.tsx +++ b/frontend/app/authentication/signup/page.tsx @@ -2,11 +2,11 @@ import { NextPage } from "next" import { Fragment } from "react" import { SignupForm } from "./signup-form.component" -const SignupPage: NextPage= ( ) => { +const SignupPage: NextPage = () => { return ( ) } -export default SignupPage \ No newline at end of file +export default SignupPage diff --git a/frontend/app/authentication/signup/signup-form.component.tsx b/frontend/app/authentication/signup/signup-form.component.tsx index 51289ca..fe5c796 100644 --- a/frontend/app/authentication/signup/signup-form.component.tsx +++ b/frontend/app/authentication/signup/signup-form.component.tsx @@ -12,82 +12,76 @@ import toast from "react-hot-toast" import { useRouter } from "next/navigation" import { useCookies } from "react-cookie" -const signupFormSchema= z.object({ - - name: z.string( ).min(2).max(25), - email: z.string( ).email( ), - - username: z.string( ).min(4).max(25) - .refine(usernameRefiner, { message: "Username can only contain alphanumeric characters and underscores" }), - - password: z.string( ).min(4).max(25) +const signupFormSchema = z.object({ + name: z.string().min(2).max(25), + email: z.string().email(), + + username: z + .string() + .min(4) + .max(25) + .refine(usernameRefiner, { + message: "Username can only contain alphanumeric characters and underscores" + }), + + password: z.string().min(4).max(25) }) function usernameRefiner(value: string) { - for(let character of value) - if(!validator.isAlphanumeric(character) && character !== "_") - return false + for (let character of value) + if (!validator.isAlphanumeric(character) && character !== "_") return false return true } -export type SignupFormSchema= z.infer +export type SignupFormSchema = z.infer -export const SignupForm: FunctionComponent= ({ }) => { - const router= useRouter( ) +export const SignupForm: FunctionComponent = ({}) => { + const router = useRouter() - const [cookies, setCookies]= useCookies( ) + const [cookies, setCookies] = useCookies() const submitHandler: SubmitHandler = async (data: SignupFormSchema) => { - const result= await signupHandler(data) + const result = await signupHandler(data) - if(result.Err) { + if (result.Err) { toast(result.Err.message) return } - const jwt= result.Ok + const jwt = result.Ok setCookies("jwt", jwt) router.replace("/") } - const formContext= useForm({ + const formContext = useForm({ mode: "onChange", - resolver: zodResolver(signupFormSchema), reValidateMode: "onBlur" + resolver: zodResolver(signupFormSchema), + reValidateMode: "onBlur" }) - const { handleSubmit, formState: { isSubmitting }}= formContext + const { + handleSubmit, + formState: { isSubmitting } + } = formContext return (
+ + + - - - - - - - + + + - +
) -} \ No newline at end of file +} diff --git a/frontend/app/authentication/signup/signup.action.ts b/frontend/app/authentication/signup/signup.action.ts index 42f1058..e5d8acc 100644 --- a/frontend/app/authentication/signup/signup.action.ts +++ b/frontend/app/authentication/signup/signup.action.ts @@ -10,25 +10,30 @@ import { getApolloClient } from "@/lib/apollo-client" import { SignupFormSchema } from "./signup-form.component" -import { MutationSignupArgs, SignupDocument, SignupMutation } from "@/graphql/__generated__/generated" +import { + MutationSignupArgs, + SignupDocument, + SignupMutation +} from "@/graphql/__generated__/generated" import { Result } from "@/lib/utils" export async function signupHandler(data: SignupFormSchema): Promise> { - const apolloClient= getApolloClient( )( ) + const apolloClient = getApolloClient()() try { - const { data: response, errors }= await apolloClient.mutate({ + const { data: response, errors } = await apolloClient.mutate< + SignupMutation, + MutationSignupArgs + >({ mutation: SignupDocument, variables: { args: data } }) - if(!response) - return { Err: new Error("No data found in the response")} - - else if(errors && errors.length > 0) - return { Err: new Error(errors.join(" | "))} + if (!response) return { Err: new Error("No data found in the response") } + else if (errors && errors.length > 0) return { Err: new Error(errors.join(" | ")) } return { Ok: response.signup.jwt } - - } catch(error) { return { Err: new Error("Server error occurred")}} -} \ No newline at end of file + } catch (error) { + return { Err: new Error("Server error occurred") } + } +} diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx index a01181f..fdde836 100644 --- a/frontend/app/layout.tsx +++ b/frontend/app/layout.tsx @@ -12,21 +12,19 @@ import { Providers } from "./providers.component" The Edge runtime is a subset of available NodeJS APIs. It is ideal if you need to deliver dynamic, personalized content at low latency with small, simple functions. */ -export const runtime: ServerRuntime= "edge" +export const runtime: ServerRuntime = "edge" export const metadata: Metadata = { - title: "Instagram Clone" + title: "Instagram Clone" } const RootLayout: FunctionComponent = ({ children }) => { - return ( - - - - { children } - + return ( + + + {children} - - ) + + ) } -export default RootLayout \ No newline at end of file +export default RootLayout diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx index bb89fac..bf42726 100644 --- a/frontend/app/page.tsx +++ b/frontend/app/page.tsx @@ -1,11 +1,7 @@ import { NextPage } from "next" import { Fragment } from "react" -const Home: NextPage = ( ) => { - return ( - - - - ) +const Home: NextPage = () => { + return } -export default Home \ No newline at end of file +export default Home diff --git a/frontend/app/providers.component.tsx b/frontend/app/providers.component.tsx index e90a4af..5f2ec5b 100644 --- a/frontend/app/providers.component.tsx +++ b/frontend/app/providers.component.tsx @@ -16,11 +16,11 @@ export const Providers: FunctionComponent = ({ children }) =>
- { children } + {children}
) -} \ No newline at end of file +} diff --git a/frontend/app/search-profiles/page.tsx b/frontend/app/search-profiles/page.tsx index 5937a1d..68c9c10 100644 --- a/frontend/app/search-profiles/page.tsx +++ b/frontend/app/search-profiles/page.tsx @@ -9,17 +9,17 @@ import toast from "react-hot-toast" import { useCookies } from "react-cookie" import { AuthenticationGuard } from "@/components/authentication-guard.component" -const SearchProfiles: NextPage= ( ) => { - const [cookies]= useCookies( ); +const SearchProfiles: NextPage = () => { + const [cookies] = useCookies() - const [searchQuery, setSearchQuery]= useState("") - const [profilePreviews, setProfilePreviews]= useState([ ]) + const [searchQuery, setSearchQuery] = useState("") + const [profilePreviews, setProfilePreviews] = useState([]) - useEffect(( ) => { - const fetchData= async ( ) => { - const result= await searchProfilesHandler(searchQuery, cookies.jwt) + useEffect(() => { + const fetchData = async () => { + const result = await searchProfilesHandler(searchQuery, cookies.jwt) - if(result.Err) { + if (result.Err) { toast(result.Err.message) return } @@ -27,30 +27,23 @@ const SearchProfiles: NextPage= ( ) => { setProfilePreviews(result.Ok!) } - if(searchQuery.length > 0) - fetchData( ) + if (searchQuery.length > 0) fetchData() + else setProfilePreviews([]) - else setProfilePreviews([ ]) - - return ( ) => { } - }, [ searchQuery ]) + return () => {} + }, [searchQuery]) return ( - setSearchQuery(event.target.value)} - /> - - { - profilePreviews.map(profilePreview => ( -
-

{ profilePreview.name }

-

{ profilePreview.username }

-
- )) - } + setSearchQuery(event.target.value)} /> + + {profilePreviews.map((profilePreview) => ( +
+

{profilePreview.name}

+

{profilePreview.username}

+
+ ))}
) } -export default SearchProfiles \ No newline at end of file +export default SearchProfiles diff --git a/frontend/app/search-profiles/search-profiles.action.ts b/frontend/app/search-profiles/search-profiles.action.ts index e366324..243979c 100644 --- a/frontend/app/search-profiles/search-profiles.action.ts +++ b/frontend/app/search-profiles/search-profiles.action.ts @@ -1,25 +1,34 @@ "use server" import { getApolloClient } from "@/lib/apollo-client" -import { ProfilePreview, QuerySearchProfilesArgs, SearchProfilesDocument, SearchProfilesQuery } from "@/graphql/__generated__/generated" +import { + ProfilePreview, + QuerySearchProfilesArgs, + SearchProfilesDocument, + SearchProfilesQuery +} from "@/graphql/__generated__/generated" import { Result } from "@/lib/utils" -export async function searchProfilesHandler(searchQuery: string, jwt: string): Promise> { - const apolloClient= getApolloClient(jwt)( ) +export async function searchProfilesHandler( + searchQuery: string, + jwt: string +): Promise> { + const apolloClient = getApolloClient(jwt)() try { - const { data: response, errors }= await apolloClient.query({ + const { data: response, errors } = await apolloClient.query< + SearchProfilesQuery, + QuerySearchProfilesArgs + >({ query: SearchProfilesDocument, - variables: { args: { query: searchQuery }} + variables: { args: { query: searchQuery } } }) - if(!response) - return { Err: new Error("No data found in the response")} - - else if(errors && errors.length > 0) - return { Err: new Error(errors.join(" | "))} + if (!response) return { Err: new Error("No data found in the response") } + else if (errors && errors.length > 0) return { Err: new Error(errors.join(" | ")) } return { Ok: response.searchProfiles.profilePreviews as ProfilePreview[] } - - } catch(error) { return { Err: new Error("Server error occurred")}} -} \ No newline at end of file + } catch (error) { + return { Err: new Error("Server error occurred") } + } +} diff --git a/frontend/codegen.yaml b/frontend/codegen.yaml index 00f0d10..5d9aebe 100644 --- a/frontend/codegen.yaml +++ b/frontend/codegen.yaml @@ -9,4 +9,4 @@ generates: - typescript-react-apollo - typescript-msw config: - withHooks: true \ No newline at end of file + withHooks: true diff --git a/frontend/components/authentication-guard.component.tsx b/frontend/components/authentication-guard.component.tsx index 04d0064..27afcdf 100644 --- a/frontend/components/authentication-guard.component.tsx +++ b/frontend/components/authentication-guard.component.tsx @@ -5,17 +5,14 @@ import { Fragment, FunctionComponent, PropsWithChildren, useEffect } from "react import { useCookies } from "react-cookie" export const AuthenticationGuard: FunctionComponent = ({ children }) => { - const router= useRouter( ) + const router = useRouter() - const [cookies]= useCookies( ) + const [cookies] = useCookies() - useEffect(( ) => { - if(!cookies.jwt) - router.replace("/authentication/signin") - }, [ ]) - - if(!cookies.jwt) - return + useEffect(() => { + if (!cookies.jwt) router.replace("/authentication/signin") + }, []) + if (!cookies.jwt) return else return children -} \ No newline at end of file +} diff --git a/frontend/components/form-field.component.tsx b/frontend/components/form-field.component.tsx index e1ecb0d..e1b1af2 100644 --- a/frontend/components/form-field.component.tsx +++ b/frontend/components/form-field.component.tsx @@ -10,16 +10,19 @@ interface FormFieldProps { type?: HTMLInputTypeAttribute } -export function FormField({ name, label, type="text" }: FormFieldProps) { - const { control }= useFormContext( ) +export function FormField({ + name, + label, + type = "text" +}: FormFieldProps) { + const { control } = useFormContext() return ( ( - + render={({ field, fieldState: { error, invalid } }) => ( ({ name, label, type="text" }: F /> ) -} \ No newline at end of file +} diff --git a/frontend/doc.ts b/frontend/doc.ts index 3dc41f9..1bd0437 100644 --- a/frontend/doc.ts +++ b/frontend/doc.ts @@ -71,4 +71,4 @@ | Server Component trees, and update the DOM. */ -// Composition patterns - https://nextjs.org/docs/app/building-your-application/rendering/composition-patterns. \ No newline at end of file +// Composition patterns - https://nextjs.org/docs/app/building-your-application/rendering/composition-patterns. diff --git a/frontend/graphql/follow.mutation.graphql b/frontend/graphql/follow.mutation.graphql index a16d39d..5e33f7d 100644 --- a/frontend/graphql/follow.mutation.graphql +++ b/frontend/graphql/follow.mutation.graphql @@ -1,3 +1,3 @@ mutation Follow($followeeId: Int!) { - follow(followeeId: $followeeId) -} \ No newline at end of file + follow(followeeId: $followeeId) +} diff --git a/frontend/graphql/get-followers.query.graphql b/frontend/graphql/get-followers.query.graphql index e99571c..923ada1 100644 --- a/frontend/graphql/get-followers.query.graphql +++ b/frontend/graphql/get-followers.query.graphql @@ -1,9 +1,9 @@ query GetFollowers($args: GetFollowersArgs!) { - getFollowers(args: $args) { - id + getFollowers(args: $args) { + id - name - username - profilePictureUri - } -} \ No newline at end of file + name + username + profilePictureUri + } +} diff --git a/frontend/graphql/get-followings.query.graphql b/frontend/graphql/get-followings.query.graphql index 2b26c14..1fb7bad 100644 --- a/frontend/graphql/get-followings.query.graphql +++ b/frontend/graphql/get-followings.query.graphql @@ -1,9 +1,9 @@ query GetFollowings($args: GetFollowingsArgs!) { - getFollowings(args: $args) { - id + getFollowings(args: $args) { + id - name - username - profilePictureUri - } -} \ No newline at end of file + name + username + profilePictureUri + } +} diff --git a/frontend/graphql/get-posts-of-user.query.graphql b/frontend/graphql/get-posts-of-user.query.graphql index 5502bf6..156c35b 100644 --- a/frontend/graphql/get-posts-of-user.query.graphql +++ b/frontend/graphql/get-posts-of-user.query.graphql @@ -1,9 +1,9 @@ query GetPostsOfUser($args: GetPostsOfUserArgs!) { - getPostsOfUser(args: $args) { - id - ownerId + getPostsOfUser(args: $args) { + id + ownerId - description - createdAt - } -} \ No newline at end of file + description + createdAt + } +} diff --git a/frontend/graphql/get-profile.query.graphql b/frontend/graphql/get-profile.query.graphql index fabd26a..6d63957 100644 --- a/frontend/graphql/get-profile.query.graphql +++ b/frontend/graphql/get-profile.query.graphql @@ -1,18 +1,17 @@ query GetProfile($args: GetProfileArgs!) { - getProfile(args: $args) { + getProfile(args: $args) { + name + username + profilePictureUri - name - username - profilePictureUri + followerCount + followingCount - followerCount - followingCount + recentPosts { + id - recentPosts { - id - - description - createdAt - } - } -} \ No newline at end of file + description + createdAt + } + } +} diff --git a/frontend/graphql/search-profiles.query.graphql b/frontend/graphql/search-profiles.query.graphql index b1b6be6..5ea6a99 100644 --- a/frontend/graphql/search-profiles.query.graphql +++ b/frontend/graphql/search-profiles.query.graphql @@ -1,12 +1,11 @@ query SearchProfiles($args: SearchProfilesArgs!) { - searchProfiles(args: $args) { + searchProfiles(args: $args) { + profilePreviews { + id - profilePreviews { - id - - name - username - profilePictureUri - } - } -} \ No newline at end of file + name + username + profilePictureUri + } + } +} diff --git a/frontend/graphql/signin.query.graphql b/frontend/graphql/signin.query.graphql index bc74d45..e3793ce 100644 --- a/frontend/graphql/signin.query.graphql +++ b/frontend/graphql/signin.query.graphql @@ -1,6 +1,5 @@ query Signin($args: SigninArgs!) { signin(args: $args) { - jwt } -} \ No newline at end of file +} diff --git a/frontend/graphql/signup.mutation.graphql b/frontend/graphql/signup.mutation.graphql index adf624f..c88d368 100644 --- a/frontend/graphql/signup.mutation.graphql +++ b/frontend/graphql/signup.mutation.graphql @@ -1,6 +1,5 @@ mutation Signup($args: SignupArgs!) { signup(args: $args) { - jwt } -} \ No newline at end of file +} diff --git a/frontend/graphql/unfollow.mutation.graphql b/frontend/graphql/unfollow.mutation.graphql index a006cbd..62b554c 100644 --- a/frontend/graphql/unfollow.mutation.graphql +++ b/frontend/graphql/unfollow.mutation.graphql @@ -1,3 +1,3 @@ mutation Unfollow($followeeId: Int!) { - unfollow(followeeId: $followeeId) -} \ No newline at end of file + unfollow(followeeId: $followeeId) +} diff --git a/frontend/lib/apollo-client.ts b/frontend/lib/apollo-client.ts index bff24f5..2c7b245 100644 --- a/frontend/lib/apollo-client.ts +++ b/frontend/lib/apollo-client.ts @@ -16,10 +16,9 @@ import { registerApolloClient } from "@apollo/experimental-nextjs-app-support/rs */ // We have decided to always use Apollo client on the server side. -export const getApolloClient= (jwt?: string) => { - return registerApolloClient(( ) => { +export const getApolloClient = (jwt?: string) => { + return registerApolloClient(() => { return new ApolloClient({ - /* Apollo Client stores the results of your GraphQL queries in a local, normalized, in-memory cache. @@ -42,14 +41,16 @@ export const getApolloClient= (jwt?: string) => { */ // InMemoryCache stores data as a flat lookup table of objects that can reference each other. // These objects correspond to the objects that are returned by your GraphQL queries. - cache: new InMemoryCache( ), - + cache: new InMemoryCache(), + link: new HttpLink({ uri: "http://localhost:4000/graphql", - headers: jwt ? { - "Authorization": `Bearer ${jwt}` - }: { } - }), + headers: jwt + ? { + Authorization: `Bearer ${jwt}` + } + : {} + }) }) }).getClient -} \ No newline at end of file +} diff --git a/frontend/lib/utils.ts b/frontend/lib/utils.ts index 6009ce5..efa9ff0 100644 --- a/frontend/lib/utils.ts +++ b/frontend/lib/utils.ts @@ -1,3 +1 @@ -export type Result = - | { Ok: Ok, Err?: Err } - | { Ok?: Ok, Err: Err } \ No newline at end of file +export type Result = { Ok: Ok; Err?: Err } | { Ok?: Ok; Err: Err } diff --git a/frontend/next.config.js b/frontend/next.config.js index 09c3ec1..87a391e 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -1,6 +1,5 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - /* Since Server Actions can be invoked in a
element, this opens them up to CSRF attacks. Behind the scenes, Server Actions use the POST method, and only this HTTP method is allowed to @@ -12,4 +11,4 @@ const nextConfig = { */ } -module.exports = nextConfig \ No newline at end of file +module.exports = nextConfig diff --git a/frontend/package.json b/frontend/package.json index e1d9bb2..f988163 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,43 +1,43 @@ { - "name": "frontend", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "codegen": "graphql-codegen" - }, - "dependencies": { - "@apollo/client": "3.8.0-rc.2", - "@apollo/experimental-nextjs-app-support": "^0.5.2", - "@hookform/resolvers": "^3.3.3", - "@nextui-org/react": "^2.2.9", - "framer-motion": "^10.16.16", - "next": "14.0.4", - "react": "^18", - "react-cookie": "^6.1.1", - "react-dom": "^18", - "react-hook-form": "^7.49.2", - "react-hot-toast": "^2.4.1", - "validator": "^13.11.0", - "zod": "^3.22.4" - }, - "devDependencies": { - "@graphql-codegen/cli": "^5.0.0", - "@graphql-codegen/typescript": "^4.0.1", - "@graphql-codegen/typescript-msw": "^2.1.0", - "@graphql-codegen/typescript-operations": "^4.0.1", - "@graphql-codegen/typescript-react-apollo": "^4.1.0", - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "@types/validator": "^13.11.7", - "autoprefixer": "^10.0.1", - "msw": "^2.0.11", - "postcss": "^8", - "tailwindcss": "^3.3.0", - "typescript": "^5" - } + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "codegen": "graphql-codegen" + }, + "dependencies": { + "@apollo/client": "3.8.0-rc.2", + "@apollo/experimental-nextjs-app-support": "^0.5.2", + "@hookform/resolvers": "^3.3.3", + "@nextui-org/react": "^2.2.9", + "framer-motion": "^10.16.16", + "next": "14.0.4", + "react": "^18", + "react-cookie": "^6.1.1", + "react-dom": "^18", + "react-hook-form": "^7.49.2", + "react-hot-toast": "^2.4.1", + "validator": "^13.11.0", + "zod": "^3.22.4" + }, + "devDependencies": { + "@graphql-codegen/cli": "^5.0.0", + "@graphql-codegen/typescript": "^4.0.1", + "@graphql-codegen/typescript-msw": "^2.1.0", + "@graphql-codegen/typescript-operations": "^4.0.1", + "@graphql-codegen/typescript-react-apollo": "^4.1.0", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "@types/validator": "^13.11.7", + "autoprefixer": "^10.0.1", + "msw": "^2.0.11", + "postcss": "^8", + "tailwindcss": "^3.3.0", + "typescript": "^5" + } } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index e771420..f93014f 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -1,20 +1,20 @@ -lockfileVersion: '6.0' +lockfileVersion: "6.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false dependencies: - '@apollo/client': + "@apollo/client": specifier: 3.8.0-rc.2 version: 3.8.0-rc.2(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0) - '@apollo/experimental-nextjs-app-support': + "@apollo/experimental-nextjs-app-support": specifier: ^0.5.2 version: 0.5.2(@apollo/client@3.8.0-rc.2)(next@14.0.4)(react@18.2.0) - '@hookform/resolvers': + "@hookform/resolvers": specifier: ^3.3.3 version: 3.3.3(react-hook-form@7.49.2) - '@nextui-org/react': + "@nextui-org/react": specifier: ^2.2.9 version: 2.2.9(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19)(tailwindcss@3.4.0) framer-motion: @@ -46,31 +46,31 @@ dependencies: version: 3.22.4 devDependencies: - '@graphql-codegen/cli': + "@graphql-codegen/cli": specifier: ^5.0.0 version: 5.0.0(@types/node@20.10.5)(graphql@16.8.1)(typescript@5.3.3) - '@graphql-codegen/typescript': + "@graphql-codegen/typescript": specifier: ^4.0.1 version: 4.0.1(graphql@16.8.1) - '@graphql-codegen/typescript-msw': + "@graphql-codegen/typescript-msw": specifier: ^2.1.0 version: 2.1.0(graphql@16.8.1) - '@graphql-codegen/typescript-operations': + "@graphql-codegen/typescript-operations": specifier: ^4.0.1 version: 4.0.1(graphql@16.8.1) - '@graphql-codegen/typescript-react-apollo': + "@graphql-codegen/typescript-react-apollo": specifier: ^4.1.0 version: 4.1.0(graphql-tag@2.12.6)(graphql@16.8.1) - '@types/node': + "@types/node": specifier: ^20 version: 20.10.5 - '@types/react': + "@types/react": specifier: ^18 version: 18.2.45 - '@types/react-dom': + "@types/react-dom": specifier: ^18 version: 18.2.18 - '@types/validator': + "@types/validator": specifier: ^13.11.7 version: 13.11.7 autoprefixer: @@ -90,20 +90,28 @@ devDependencies: version: 5.3.3 packages: - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + } + engines: { node: ">=10" } /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + } + engines: { node: ">=6.0.0" } dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + "@jridgewell/gen-mapping": 0.3.3 + "@jridgewell/trace-mapping": 0.3.20 /@apollo/client@3.8.0-rc.2(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OQhMbYhNscVwqfxb9diOZpra4m4Vr+CbzkHZGdg51+BADzUeQCEaQyeKhClJqh1HAH3kIqRf+pD9otzuMDhcSg==} + resolution: + { + integrity: sha512-OQhMbYhNscVwqfxb9diOZpra4m4Vr+CbzkHZGdg51+BADzUeQCEaQyeKhClJqh1HAH3kIqRf+pD9otzuMDhcSg== + } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 graphql-ws: ^5.5.5 @@ -120,10 +128,10 @@ packages: subscriptions-transport-ws: optional: true dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) - '@wry/context': 0.7.4 - '@wry/equality': 0.5.7 - '@wry/trie': 0.4.3 + "@graphql-typed-document-node/core": 3.2.0(graphql@16.8.1) + "@wry/context": 0.7.4 + "@wry/equality": 0.5.7 + "@wry/trie": 0.4.3 graphql: 16.8.1 graphql-tag: 2.12.6(graphql@16.8.1) hoist-non-react-statics: 3.3.2 @@ -139,13 +147,16 @@ packages: dev: false /@apollo/experimental-nextjs-app-support@0.5.2(@apollo/client@3.8.0-rc.2)(next@14.0.4)(react@18.2.0): - resolution: {integrity: sha512-qUopCHDocCBfL+XDhuPNwiWrJHf7rc75bdDBF2TxZyYwW32wo3vPPac6bGWrYy8lgkJ8K8Z5O56655WQOynFTg==} + resolution: + { + integrity: sha512-qUopCHDocCBfL+XDhuPNwiWrJHf7rc75bdDBF2TxZyYwW32wo3vPPac6bGWrYy8lgkJ8K8Z5O56655WQOynFTg== + } peerDependencies: - '@apollo/client': '>=3.8.0-rc || ^3.8.0 || >=3.9.0-alpha || >=3.9.0-beta || >=3.9.0-rc' + "@apollo/client": ">=3.8.0-rc || ^3.8.0 || >=3.9.0-alpha || >=3.9.0-beta || >=3.9.0-rc" next: ^13.4.1 || ^14.0.0 react: ^18 dependencies: - '@apollo/client': 3.8.0-rc.2(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0) + "@apollo/client": 3.8.0-rc.2(graphql@16.8.1)(react-dom@18.2.0)(react@18.2.0) next: 14.0.4(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 server-only: 0.0.1 @@ -154,17 +165,20 @@ packages: dev: false /@ardatan/relay-compiler@12.0.0(graphql@16.8.1): - resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} + resolution: + { + integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q== + } hasBin: true peerDependencies: - graphql: '*' + graphql: "*" dependencies: - '@babel/core': 7.23.7 - '@babel/generator': 7.23.6 - '@babel/parser': 7.23.6 - '@babel/runtime': 7.23.7 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + "@babel/core": 7.23.7 + "@babel/generator": 7.23.6 + "@babel/parser": 7.23.6 + "@babel/runtime": 7.23.7 + "@babel/traverse": 7.23.7 + "@babel/types": 7.23.6 babel-preset-fbjs: 3.4.0(@babel/core@7.23.7) chalk: 4.1.2 fb-watchman: 2.0.2 @@ -183,8 +197,11 @@ packages: dev: true /@ardatan/sync-fetch@0.0.1: - resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA== + } + engines: { node: ">=14" } dependencies: node-fetch: 2.7.0 transitivePeerDependencies: @@ -192,30 +209,39 @@ packages: dev: true /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/highlight': 7.23.4 + "@babel/highlight": 7.23.4 chalk: 2.4.2 /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + } + engines: { node: ">=6.9.0" } /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@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/core@7.23.7) - '@babel/helpers': 7.23.7 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + resolution: + { + integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + } + engines: { node: ">=6.9.0" } + dependencies: + "@ampproject/remapping": 2.2.1 + "@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/core@7.23.7) + "@babel/helpers": 7.23.7 + "@babel/parser": 7.23.6 + "@babel/template": 7.22.15 + "@babel/traverse": 7.23.7 + "@babel/types": 7.23.6 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -225,599 +251,791 @@ packages: - supports-color /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + resolution: + { + integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + } + engines: { node: ">=6.9.0" } + dependencies: + "@babel/types": 7.23.6 + "@jridgewell/gen-mapping": 0.3.3 + "@jridgewell/trace-mapping": 0.3.20 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 dev: true /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 + resolution: + { + integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + } + engines: { node: ">=6.9.0" } + dependencies: + "@babel/compat-data": 7.23.5 + "@babel/helper-validator-option": 7.23.5 browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7): - resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + resolution: + { + integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + dependencies: + "@babel/core": 7.23.7 + "@babel/helper-annotate-as-pure": 7.22.5 + "@babel/helper-environment-visitor": 7.22.20 + "@babel/helper-function-name": 7.23.0 + "@babel/helper-member-expression-to-functions": 7.23.0 + "@babel/helper-optimise-call-expression": 7.22.5 + "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.7) + "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 + "@babel/helper-split-export-declaration": 7.22.6 semver: 6.3.1 dev: true /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + } + engines: { node: ">=6.9.0" } /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 + "@babel/template": 7.22.15 + "@babel/types": 7.23.6 /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 dev: true /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0 + "@babel/core": ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + "@babel/core": 7.23.7 + "@babel/helper-environment-visitor": 7.22.20 + "@babel/helper-module-imports": 7.22.15 + "@babel/helper-simple-access": 7.22.5 + "@babel/helper-split-export-declaration": 7.22.6 + "@babel/helper-validator-identifier": 7.22.20 /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 dev: true /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + } + engines: { node: ">=6.9.0" } dev: true /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0 + "@babel/core": ^7.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-environment-visitor": 7.22.20 + "@babel/helper-member-expression-to-functions": 7.23.0 + "@babel/helper-optimise-call-expression": 7.22.5 dev: true /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 dev: true /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + } + engines: { node: ">=6.9.0" } /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + } + engines: { node: ">=6.9.0" } /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + } + engines: { node: ">=6.9.0" } /@babel/helpers@7.23.7: - resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + resolution: + { + integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ== + } + engines: { node: ">=6.9.0" } + dependencies: + "@babel/template": 7.22.15 + "@babel/traverse": 7.23.7 + "@babel/types": 7.23.6 transitivePeerDependencies: - supports-color /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/helper-validator-identifier': 7.22.20 + "@babel/helper-validator-identifier": 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + } + engines: { node: ">=6.0.0" } hasBin: true dependencies: - '@babel/types': 7.23.6 + "@babel/types": 7.23.6 /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.7): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + } + engines: { node: ">=6.9.0" } deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-create-class-features-plugin": 7.23.7(@babel/core@7.23.7) + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.7): - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + } + engines: { node: ">=6.9.0" } deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + "@babel/compat-data": 7.23.5 + "@babel/core": 7.23.7 + "@babel/helper-compilation-targets": 7.23.6 + "@babel/helper-plugin-utils": 7.22.5 + "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.23.7) + "@babel/plugin-transform-parameters": 7.23.3(@babel/core@7.23.7) dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + resolution: + { + integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + resolution: + { + integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.7): - resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) - '@babel/helper-split-export-declaration': 7.22.6 + resolution: + { + integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + dependencies: + "@babel/core": 7.23.7 + "@babel/helper-annotate-as-pure": 7.22.5 + "@babel/helper-compilation-targets": 7.23.6 + "@babel/helper-environment-visitor": 7.22.20 + "@babel/helper-function-name": 7.23.0 + "@babel/helper-optimise-call-expression": 7.22.5 + "@babel/helper-plugin-utils": 7.22.5 + "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.7) + "@babel/helper-split-export-declaration": 7.22.6 globals: 11.12.0 dev: true /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 + "@babel/template": 7.22.15 dev: true /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 + "@babel/plugin-syntax-flow": 7.23.3(@babel/core@7.23.7) dev: true /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7): - resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 dev: true /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-compilation-targets": 7.23.6 + "@babel/helper-function-name": 7.23.0 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-module-transforms": 7.23.3(@babel/core@7.23.7) + "@babel/helper-plugin-utils": 7.22.5 + "@babel/helper-simple-access": 7.22.5 dev: true /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 + "@babel/helper-replace-supers": 7.22.20(@babel/core@7.23.7) dev: true /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.7): - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) - '@babel/types': 7.23.6 + "@babel/core": 7.23.7 + "@babel/helper-annotate-as-pure": 7.22.5 + "@babel/helper-module-imports": 7.22.15 + "@babel/helper-plugin-utils": 7.22.5 + "@babel/plugin-syntax-jsx": 7.23.3(@babel/core@7.23.7) + "@babel/types": 7.23.6 dev: true /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": 7.22.5 dev: true /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/core": ^7.0.0-0 dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + "@babel/core": 7.23.7 + "@babel/helper-plugin-utils": 7.22.5 dev: true /@babel/runtime@7.23.7: - resolution: {integrity: sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA== + } + engines: { node: ">=6.9.0" } dependencies: regenerator-runtime: 0.14.1 /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + } + engines: { node: ">=6.9.0" } dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + "@babel/code-frame": 7.23.5 + "@babel/parser": 7.23.6 + "@babel/types": 7.23.6 /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@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.6 - '@babel/types': 7.23.6 + resolution: + { + integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== + } + engines: { node: ">=6.9.0" } + dependencies: + "@babel/code-frame": 7.23.5 + "@babel/generator": 7.23.6 + "@babel/helper-environment-visitor": 7.22.20 + "@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.6 + "@babel/types": 7.23.6 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 + resolution: + { + integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + } + engines: { node: ">=6.9.0" } + dependencies: + "@babel/helper-string-parser": 7.23.4 + "@babel/helper-validator-identifier": 7.22.20 to-fast-properties: 2.0.0 /@bundled-es-modules/cookie@2.0.0: - resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} + resolution: + { + integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw== + } dependencies: cookie: 0.5.0 dev: true /@bundled-es-modules/js-levenshtein@2.0.1: - resolution: {integrity: sha512-DERMS3yfbAljKsQc0U2wcqGKUWpdFjwqWuoMugEJlqBnKO180/n+4SR/J8MRDt1AN48X1ovgoD9KrdVXcaa3Rg==} + resolution: + { + integrity: sha512-DERMS3yfbAljKsQc0U2wcqGKUWpdFjwqWuoMugEJlqBnKO180/n+4SR/J8MRDt1AN48X1ovgoD9KrdVXcaa3Rg== + } dependencies: js-levenshtein: 1.1.6 dev: true /@bundled-es-modules/statuses@1.0.1: - resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + resolution: + { + integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== + } dependencies: statuses: 2.0.1 dev: true /@emotion/is-prop-valid@0.8.8: - resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + resolution: + { + integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + } requiresBuild: true dependencies: - '@emotion/memoize': 0.7.4 + "@emotion/memoize": 0.7.4 dev: false optional: true /@emotion/memoize@0.7.4: - resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + resolution: + { + integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + } requiresBuild: true dev: false optional: true /@formatjs/ecma402-abstract@1.18.0: - resolution: {integrity: sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==} + resolution: + { + integrity: sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA== + } dependencies: - '@formatjs/intl-localematcher': 0.5.2 + "@formatjs/intl-localematcher": 0.5.2 tslib: 2.6.2 dev: false /@formatjs/fast-memoize@2.2.0: - resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} + resolution: + { + integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA== + } dependencies: tslib: 2.6.2 dev: false /@formatjs/icu-messageformat-parser@2.7.3: - resolution: {integrity: sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw==} + resolution: + { + integrity: sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw== + } dependencies: - '@formatjs/ecma402-abstract': 1.18.0 - '@formatjs/icu-skeleton-parser': 1.7.0 + "@formatjs/ecma402-abstract": 1.18.0 + "@formatjs/icu-skeleton-parser": 1.7.0 tslib: 2.6.2 dev: false /@formatjs/icu-skeleton-parser@1.7.0: - resolution: {integrity: sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A==} + resolution: + { + integrity: sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A== + } dependencies: - '@formatjs/ecma402-abstract': 1.18.0 + "@formatjs/ecma402-abstract": 1.18.0 tslib: 2.6.2 dev: false /@formatjs/intl-localematcher@0.5.2: - resolution: {integrity: sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw==} + resolution: + { + integrity: sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw== + } dependencies: tslib: 2.6.2 dev: false /@graphql-codegen/cli@5.0.0(@types/node@20.10.5)(graphql@16.8.1)(typescript@5.3.3): - resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==} + resolution: + { + integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA== + } hasBin: true peerDependencies: - '@parcel/watcher': ^2.1.0 + "@parcel/watcher": ^2.1.0 graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 peerDependenciesMeta: - '@parcel/watcher': + "@parcel/watcher": optional: true dependencies: - '@babel/generator': 7.23.6 - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - '@graphql-codegen/core': 4.0.0(graphql@16.8.1) - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/code-file-loader': 8.0.3(graphql@16.8.1) - '@graphql-tools/git-loader': 8.0.3(graphql@16.8.1) - '@graphql-tools/github-loader': 8.0.0(@types/node@20.10.5)(graphql@16.8.1) - '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/load': 8.0.1(graphql@16.8.1) - '@graphql-tools/prisma-loader': 8.0.2(@types/node@20.10.5)(graphql@16.8.1) - '@graphql-tools/url-loader': 8.0.1(@types/node@20.10.5)(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@whatwg-node/fetch': 0.8.8 + "@babel/generator": 7.23.6 + "@babel/template": 7.22.15 + "@babel/types": 7.23.6 + "@graphql-codegen/core": 4.0.0(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 5.0.1(graphql@16.8.1) + "@graphql-tools/apollo-engine-loader": 8.0.0(graphql@16.8.1) + "@graphql-tools/code-file-loader": 8.0.3(graphql@16.8.1) + "@graphql-tools/git-loader": 8.0.3(graphql@16.8.1) + "@graphql-tools/github-loader": 8.0.0(@types/node@20.10.5)(graphql@16.8.1) + "@graphql-tools/graphql-file-loader": 8.0.0(graphql@16.8.1) + "@graphql-tools/json-file-loader": 8.0.0(graphql@16.8.1) + "@graphql-tools/load": 8.0.1(graphql@16.8.1) + "@graphql-tools/prisma-loader": 8.0.2(@types/node@20.10.5)(graphql@16.8.1) + "@graphql-tools/url-loader": 8.0.1(@types/node@20.10.5)(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@whatwg-node/fetch": 0.8.8 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.3.3) debounce: 1.2.1 @@ -838,7 +1056,7 @@ packages: yaml: 2.3.4 yargs: 17.7.2 transitivePeerDependencies: - - '@types/node' + - "@types/node" - bufferutil - cosmiconfig-toml-loader - encoding @@ -849,23 +1067,29 @@ packages: dev: true /@graphql-codegen/core@4.0.0(graphql@16.8.1): - resolution: {integrity: sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==} + resolution: + { + integrity: sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-tools/schema': 10.0.2(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 5.0.1(graphql@16.8.1) + "@graphql-tools/schema": 10.0.2(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 tslib: 2.5.3 dev: true /@graphql-codegen/plugin-helpers@2.7.2(graphql@16.8.1): - resolution: {integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==} + resolution: + { + integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/utils': 8.13.1(graphql@16.8.1) + "@graphql-tools/utils": 8.13.1(graphql@16.8.1) change-case-all: 1.0.14 common-tags: 1.8.2 graphql: 16.8.1 @@ -875,11 +1099,14 @@ packages: dev: true /@graphql-codegen/plugin-helpers@3.1.2(graphql@16.8.1): - resolution: {integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==} + resolution: + { + integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + "@graphql-tools/utils": 9.2.1(graphql@16.8.1) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.8.1 @@ -889,11 +1116,14 @@ packages: dev: true /@graphql-codegen/plugin-helpers@5.0.1(graphql@16.8.1): - resolution: {integrity: sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==} + resolution: + { + integrity: sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.8.1 @@ -903,24 +1133,30 @@ packages: dev: true /@graphql-codegen/schema-ast@4.0.0(graphql@16.8.1): - resolution: {integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==} + resolution: + { + integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 5.0.1(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 tslib: 2.5.3 dev: true /@graphql-codegen/typescript-msw@2.1.0(graphql@16.8.1): - resolution: {integrity: sha512-KjwFVT01FeZEFeHt1TaPj7EYUibdj2pX6fFXu7TyyrkYw2f5P4wnRfBqX8WWHvuL6eFj5c17EKCSuyDf1A3Xpw==} - engines: {node: '>= 16.0.0'} + resolution: + { + integrity: sha512-KjwFVT01FeZEFeHt1TaPj7EYUibdj2pX6fFXu7TyyrkYw2f5P4wnRfBqX8WWHvuL6eFj5c17EKCSuyDf1A3Xpw== + } + engines: { node: ">= 16.0.0" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 3.1.2(graphql@16.8.1) + "@graphql-codegen/visitor-plugin-common": 2.13.1(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 graphql: 16.8.1 @@ -931,13 +1167,16 @@ packages: dev: true /@graphql-codegen/typescript-operations@4.0.1(graphql@16.8.1): - resolution: {integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==} + resolution: + { + integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-codegen/typescript': 4.0.1(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 5.0.1(graphql@16.8.1) + "@graphql-codegen/typescript": 4.0.1(graphql@16.8.1) + "@graphql-codegen/visitor-plugin-common": 4.0.1(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 tslib: 2.5.3 @@ -947,14 +1186,17 @@ packages: dev: true /@graphql-codegen/typescript-react-apollo@4.1.0(graphql-tag@2.12.6)(graphql@16.8.1): - resolution: {integrity: sha512-G7l4ECoilGnW1zJeqgsFQEVup9ME3w3811ZxHP5yvTra3ZNsbZO4WbYBOPKyS5uc4swsTAxj70a28hNF7kdVcw==} - engines: {node: '>= 16.0.0'} + resolution: + { + integrity: sha512-G7l4ECoilGnW1zJeqgsFQEVup9ME3w3811ZxHP5yvTra3ZNsbZO4WbYBOPKyS5uc4swsTAxj70a28hNF7kdVcw== + } + engines: { node: ">= 16.0.0" } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 graphql-tag: ^2.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 3.1.2(graphql@16.8.1) + "@graphql-codegen/visitor-plugin-common": 2.13.1(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 graphql: 16.8.1 @@ -966,13 +1208,16 @@ packages: dev: true /@graphql-codegen/typescript@4.0.1(graphql@16.8.1): - resolution: {integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==} + resolution: + { + integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA== + } peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-codegen/schema-ast': 4.0.0(graphql@16.8.1) - '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 5.0.1(graphql@16.8.1) + "@graphql-codegen/schema-ast": 4.0.0(graphql@16.8.1) + "@graphql-codegen/visitor-plugin-common": 4.0.1(graphql@16.8.1) auto-bind: 4.0.0 graphql: 16.8.1 tslib: 2.5.3 @@ -982,14 +1227,17 @@ packages: dev: true /@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.8.1): - resolution: {integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==} + resolution: + { + integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.8.1) - '@graphql-tools/optimize': 1.4.0(graphql@16.8.1) - '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.8.1) - '@graphql-tools/utils': 8.13.1(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 2.7.2(graphql@16.8.1) + "@graphql-tools/optimize": 1.4.0(graphql@16.8.1) + "@graphql-tools/relay-operation-optimizer": 6.5.18(graphql@16.8.1) + "@graphql-tools/utils": 8.13.1(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.14 dependency-graph: 0.11.0 @@ -1003,14 +1251,17 @@ packages: dev: true /@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.8.1): - resolution: {integrity: sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==} + resolution: + { + integrity: sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) - '@graphql-tools/optimize': 2.0.0(graphql@16.8.1) - '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-codegen/plugin-helpers": 5.0.1(graphql@16.8.1) + "@graphql-tools/optimize": 2.0.0(graphql@16.8.1) + "@graphql-tools/relay-operation-optimizer": 7.0.0(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 @@ -1024,14 +1275,17 @@ packages: dev: true /@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.8.1): - resolution: {integrity: sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@whatwg-node/fetch': 0.9.14 + "@ardatan/sync-fetch": 0.0.1 + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@whatwg-node/fetch": 0.9.14 graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: @@ -1039,12 +1293,15 @@ packages: dev: true /@graphql-tools/batch-execute@9.0.2(graphql@16.8.1): - resolution: {integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) dataloader: 2.2.2 graphql: 16.8.1 tslib: 2.6.2 @@ -1052,13 +1309,16 @@ packages: dev: true /@graphql-tools/code-file-loader@8.0.3(graphql@16.8.1): - resolution: {integrity: sha512-gVnnlWs0Ua+5FkuHHEriFUOI3OIbHv6DS1utxf28n6NkfGMJldC4j0xlJRY0LS6dWK34IGYgD4HelKYz2l8KiA==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-gVnnlWs0Ua+5FkuHHEriFUOI3OIbHv6DS1utxf28n6NkfGMJldC4j0xlJRY0LS6dWK34IGYgD4HelKYz2l8KiA== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/graphql-tag-pluck": 8.1.0(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 @@ -1068,28 +1328,34 @@ packages: dev: true /@graphql-tools/delegate@10.0.3(graphql@16.8.1): - resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/batch-execute': 9.0.2(graphql@16.8.1) - '@graphql-tools/executor': 1.2.0(graphql@16.8.1) - '@graphql-tools/schema': 10.0.2(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/batch-execute": 9.0.2(graphql@16.8.1) + "@graphql-tools/executor": 1.2.0(graphql@16.8.1) + "@graphql-tools/schema": 10.0.2(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) dataloader: 2.2.2 graphql: 16.8.1 tslib: 2.6.2 dev: true /@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1): - resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@types/ws': 8.5.10 + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@types/ws": 8.5.10 graphql: 16.8.1 graphql-ws: 5.14.3(graphql@16.8.1) isomorphic-ws: 5.0.0(ws@8.16.0) @@ -1101,31 +1367,37 @@ packages: dev: true /@graphql-tools/executor-http@1.0.5(@types/node@20.10.5)(graphql@16.8.1): - resolution: {integrity: sha512-roQyDLOAywyaCTPOhwXiT/WDr0bfuVhqOXjECsnrIl/1TMPDUYjiT2sW6Gz6pqnYMmokdhyvlV6D5d7WtIrKsA==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-roQyDLOAywyaCTPOhwXiT/WDr0bfuVhqOXjECsnrIl/1TMPDUYjiT2sW6Gz6pqnYMmokdhyvlV6D5d7WtIrKsA== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@repeaterjs/repeater': 3.0.5 - '@whatwg-node/fetch': 0.9.14 + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@repeaterjs/repeater": 3.0.5 + "@whatwg-node/fetch": 0.9.14 extract-files: 11.0.0 graphql: 16.8.1 meros: 1.3.0(@types/node@20.10.5) tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: - - '@types/node' + - "@types/node" dev: true /@graphql-tools/executor-legacy-ws@1.0.5(graphql@16.8.1): - resolution: {integrity: sha512-w54AZ7zkNuvpyV09FH+eGHnnAmaxhBVHg4Yh2ICcsMfRg0brkLt77PlbjBuxZ4HY8XZnKJaYWf+tKazQZtkQtg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-w54AZ7zkNuvpyV09FH+eGHnnAmaxhBVHg4Yh2ICcsMfRg0brkLt77PlbjBuxZ4HY8XZnKJaYWf+tKazQZtkQtg== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@types/ws': 8.5.10 + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@types/ws": 8.5.10 graphql: 16.8.1 isomorphic-ws: 5.0.0(ws@8.16.0) tslib: 2.6.2 @@ -1136,27 +1408,33 @@ packages: dev: true /@graphql-tools/executor@1.2.0(graphql@16.8.1): - resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) - '@repeaterjs/repeater': 3.0.5 + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@graphql-typed-document-node/core": 3.2.0(graphql@16.8.1) + "@repeaterjs/repeater": 3.0.5 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 dev: true /@graphql-tools/git-loader@8.0.3(graphql@16.8.1): - resolution: {integrity: sha512-Iz9KbRUAkuOe8JGTS0qssyJ+D5Snle17W+z9anwWrLFrkBhHrRFUy5AdjZqgJuhls0x30QkZBnnCtnHDBdQ4nA==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-Iz9KbRUAkuOe8JGTS0qssyJ+D5Snle17W+z9anwWrLFrkBhHrRFUy5AdjZqgJuhls0x30QkZBnnCtnHDBdQ4nA== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/graphql-tag-pluck": 8.1.0(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 is-glob: 4.0.3 micromatch: 4.0.5 @@ -1167,33 +1445,39 @@ packages: dev: true /@graphql-tools/github-loader@8.0.0(@types/node@20.10.5)(graphql@16.8.1): - resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/executor-http': 1.0.5(@types/node@20.10.5)(graphql@16.8.1) - '@graphql-tools/graphql-tag-pluck': 8.1.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@whatwg-node/fetch': 0.9.14 + "@ardatan/sync-fetch": 0.0.1 + "@graphql-tools/executor-http": 1.0.5(@types/node@20.10.5)(graphql@16.8.1) + "@graphql-tools/graphql-tag-pluck": 8.1.0(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@whatwg-node/fetch": 0.9.14 graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: - - '@types/node' + - "@types/node" - encoding - supports-color dev: true /@graphql-tools/graphql-file-loader@8.0.0(graphql@16.8.1): - resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/import': 7.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/import": 7.0.0(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 @@ -1201,17 +1485,20 @@ packages: dev: true /@graphql-tools/graphql-tag-pluck@8.1.0(graphql@16.8.1): - resolution: {integrity: sha512-kt5l6H/7QxQcIaewInTcune6NpATojdFEW98/8xWcgmy7dgXx5vU9e0AicFZIH+ewGyZzTpwFqO2RI03roxj2w==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-kt5l6H/7QxQcIaewInTcune6NpATojdFEW98/8xWcgmy7dgXx5vU9e0AicFZIH+ewGyZzTpwFqO2RI03roxj2w== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/core': 7.23.7 - '@babel/parser': 7.23.6 - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@babel/core": 7.23.7 + "@babel/parser": 7.23.6 + "@babel/plugin-syntax-import-assertions": 7.23.3(@babel/core@7.23.7) + "@babel/traverse": 7.23.7 + "@babel/types": 7.23.6 + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: @@ -1219,24 +1506,30 @@ packages: dev: true /@graphql-tools/import@7.0.0(graphql@16.8.1): - resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 resolve-from: 5.0.0 tslib: 2.6.2 dev: true /@graphql-tools/json-file-loader@8.0.0(graphql@16.8.1): - resolution: {integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) globby: 11.1.0 graphql: 16.8.1 tslib: 2.6.2 @@ -1244,31 +1537,40 @@ packages: dev: true /@graphql-tools/load@8.0.1(graphql@16.8.1): - resolution: {integrity: sha512-qSMsKngJhDqRbuWyo3NvakEFqFL6+eSjy8ooJ1o5qYD26N7dqXkKzIMycQsX7rBK19hOuINAUSaRcVWH6hTccw==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-qSMsKngJhDqRbuWyo3NvakEFqFL6+eSjy8ooJ1o5qYD26N7dqXkKzIMycQsX7rBK19hOuINAUSaRcVWH6hTccw== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 10.0.2(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/schema": 10.0.2(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 p-limit: 3.1.0 tslib: 2.6.2 dev: true /@graphql-tools/merge@9.0.1(graphql@16.8.1): - resolution: {integrity: sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 dev: true /@graphql-tools/optimize@1.4.0(graphql@16.8.1): - resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} + resolution: + { + integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw== + } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: @@ -1277,8 +1579,11 @@ packages: dev: true /@graphql-tools/optimize@2.0.0(graphql@16.8.1): - resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: @@ -1287,16 +1592,19 @@ packages: dev: true /@graphql-tools/prisma-loader@8.0.2(@types/node@20.10.5)(graphql@16.8.1): - resolution: {integrity: sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/url-loader': 8.0.1(@types/node@20.10.5)(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@types/js-yaml': 4.0.9 - '@types/json-stable-stringify': 1.0.36 - '@whatwg-node/fetch': 0.9.14 + "@graphql-tools/url-loader": 8.0.1(@types/node@20.10.5)(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@types/js-yaml": 4.0.9 + "@types/json-stable-stringify": 1.0.36 + "@whatwg-node/fetch": 0.9.14 chalk: 4.1.2 debug: 4.3.4 dotenv: 16.3.1 @@ -1312,7 +1620,7 @@ packages: tslib: 2.6.2 yaml-ast-parser: 0.0.43 transitivePeerDependencies: - - '@types/node' + - "@types/node" - bufferutil - encoding - supports-color @@ -1320,12 +1628,15 @@ packages: dev: true /@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.8.1): - resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} + resolution: + { + integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg== + } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) - '@graphql-tools/utils': 9.2.1(graphql@16.8.1) + "@ardatan/relay-compiler": 12.0.0(graphql@16.8.1) + "@graphql-tools/utils": 9.2.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: @@ -1334,13 +1645,16 @@ packages: dev: true /@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.8.1): - resolution: {integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@ardatan/relay-compiler": 12.0.0(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 transitivePeerDependencies: @@ -1349,52 +1663,61 @@ packages: dev: true /@graphql-tools/schema@10.0.2(graphql@16.8.1): - resolution: {integrity: sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 9.0.1(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/merge": 9.0.1(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 dev: true /@graphql-tools/url-loader@8.0.1(@types/node@20.10.5)(graphql@16.8.1): - resolution: {integrity: sha512-B2k8KQEkEQmfV1zhurT5GLoXo8jbXP+YQHUayhCSxKYlRV7j/1Fhp1b21PDM8LXIDGlDRXaZ0FbWKOs7eYXDuQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-B2k8KQEkEQmfV1zhurT5GLoXo8jbXP+YQHUayhCSxKYlRV7j/1Fhp1b21PDM8LXIDGlDRXaZ0FbWKOs7eYXDuQ== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) - '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1) - '@graphql-tools/executor-http': 1.0.5(@types/node@20.10.5)(graphql@16.8.1) - '@graphql-tools/executor-legacy-ws': 1.0.5(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) - '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) - '@types/ws': 8.5.10 - '@whatwg-node/fetch': 0.9.14 + "@ardatan/sync-fetch": 0.0.1 + "@graphql-tools/delegate": 10.0.3(graphql@16.8.1) + "@graphql-tools/executor-graphql-ws": 1.1.0(graphql@16.8.1) + "@graphql-tools/executor-http": 1.0.5(@types/node@20.10.5)(graphql@16.8.1) + "@graphql-tools/executor-legacy-ws": 1.0.5(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) + "@graphql-tools/wrap": 10.0.1(graphql@16.8.1) + "@types/ws": 8.5.10 + "@whatwg-node/fetch": 0.9.14 graphql: 16.8.1 isomorphic-ws: 5.0.0(ws@8.16.0) tslib: 2.6.2 value-or-promise: 1.0.12 ws: 8.16.0 transitivePeerDependencies: - - '@types/node' + - "@types/node" - bufferutil - encoding - utf-8-validate dev: true /@graphql-tools/utils@10.0.12(graphql@16.8.1): - resolution: {integrity: sha512-+yS1qlFwXlwU3Gv8ek/h2aJ95quog4yF22haC11M0zReMSTddbGJZ5yXKkE3sXoY2BcL1utilSFjylJ9uXpSNQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-+yS1qlFwXlwU3Gv8ek/h2aJ95quog4yF22haC11M0zReMSTddbGJZ5yXKkE3sXoY2BcL1utilSFjylJ9uXpSNQ== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + "@graphql-typed-document-node/core": 3.2.0(graphql@16.8.1) cross-inspect: 1.0.0 dset: 3.1.3 graphql: 16.8.1 @@ -1402,7 +1725,10 @@ packages: dev: true /@graphql-tools/utils@8.13.1(graphql@16.8.1): - resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} + resolution: + { + integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw== + } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: @@ -1411,38 +1737,50 @@ packages: dev: true /@graphql-tools/utils@9.2.1(graphql@16.8.1): - resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + resolution: + { + integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A== + } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + "@graphql-typed-document-node/core": 3.2.0(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 dev: true /@graphql-tools/wrap@10.0.1(graphql@16.8.1): - resolution: {integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg== + } + engines: { node: ">=16.0.0" } peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) - '@graphql-tools/schema': 10.0.2(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/delegate": 10.0.3(graphql@16.8.1) + "@graphql-tools/schema": 10.0.2(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) graphql: 16.8.1 tslib: 2.6.2 value-or-promise: 1.0.12 dev: true /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + resolution: + { + integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + } peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: graphql: 16.8.1 /@hookform/resolvers@3.3.3(react-hook-form@7.49.2): - resolution: {integrity: sha512-bOMxKkSD3zWcS11TKoUQ8O0ZqKslFohvUsPKSrdCHiuEuMjRo/u3cq9YRJD/+xtNGYup++XD2LkjhegP5XENiw==} + resolution: + { + integrity: sha512-bOMxKkSD3zWcS11TKoUQ8O0ZqKslFohvUsPKSrdCHiuEuMjRo/u3cq9YRJD/+xtNGYup++XD2LkjhegP5XENiw== + } peerDependencies: react-hook-form: ^7.0.0 dependencies: @@ -1450,33 +1788,48 @@ packages: dev: false /@internationalized/date@3.5.1: - resolution: {integrity: sha512-LUQIfwU9e+Fmutc/DpRTGXSdgYZLBegi4wygCWDSVmUdLTaMHsQyASDiJtREwanwKuQLq0hY76fCJ9J/9I2xOQ==} + resolution: + { + integrity: sha512-LUQIfwU9e+Fmutc/DpRTGXSdgYZLBegi4wygCWDSVmUdLTaMHsQyASDiJtREwanwKuQLq0hY76fCJ9J/9I2xOQ== + } dependencies: - '@swc/helpers': 0.5.2 + "@swc/helpers": 0.5.2 dev: false /@internationalized/message@3.1.1: - resolution: {integrity: sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw==} + resolution: + { + integrity: sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw== + } dependencies: - '@swc/helpers': 0.5.2 + "@swc/helpers": 0.5.2 intl-messageformat: 10.5.8 dev: false /@internationalized/number@3.5.0: - resolution: {integrity: sha512-ZY1BW8HT9WKYvaubbuqXbbDdHhOUMfE2zHHFJeTppid0S+pc8HtdIxFxaYMsGjCb4UsF+MEJ4n2TfU7iHnUK8w==} + resolution: + { + integrity: sha512-ZY1BW8HT9WKYvaubbuqXbbDdHhOUMfE2zHHFJeTppid0S+pc8HtdIxFxaYMsGjCb4UsF+MEJ4n2TfU7iHnUK8w== + } dependencies: - '@swc/helpers': 0.5.2 + "@swc/helpers": 0.5.2 dev: false /@internationalized/string@3.2.0: - resolution: {integrity: sha512-Xx3Sy3f2c9ctT+vh8c7euEaEHQZltp0euZ3Hy4UfT3E13r6lxpUS3kgKyumEjboJZSnaZv7JhqWz3D75v+IxQg==} + resolution: + { + integrity: sha512-Xx3Sy3f2c9ctT+vh8c7euEaEHQZltp0euZ3Hy4UfT3E13r6lxpUS3kgKyumEjboJZSnaZv7JhqWz3D75v+IxQg== + } dependencies: - '@swc/helpers': 0.5.2 + "@swc/helpers": 0.5.2 dev: false /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + } + engines: { node: ">=12" } dependencies: string-width: 5.1.2 string-width-cjs: /string-width@4.2.3 @@ -1486,58 +1839,88 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + } + engines: { node: ">=6.0.0" } dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + "@jridgewell/set-array": 1.1.2 + "@jridgewell/sourcemap-codec": 1.4.15 + "@jridgewell/trace-mapping": 0.3.20 /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + } + engines: { node: ">=6.0.0" } /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + } + engines: { node: ">=6.0.0" } /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + resolution: + { + integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + } /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + resolution: + { + integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + } dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + "@jridgewell/resolve-uri": 3.1.1 + "@jridgewell/sourcemap-codec": 1.4.15 /@kamilkisiela/fast-url-parser@1.1.4: - resolution: {integrity: sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==} + resolution: + { + integrity: sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew== + } dev: true /@mswjs/cookies@1.1.0: - resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw== + } + engines: { node: ">=18" } dev: true /@mswjs/interceptors@0.25.13: - resolution: {integrity: sha512-xfjR81WwXPHwhDbqJRHlxYmboJuiSaIKpP4I5TJVFl/EmByOU13jOBT9hmEnxcjR3jvFYoqoNKt7MM9uqerj9A==} - engines: {node: '>=18'} - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 + resolution: + { + integrity: sha512-xfjR81WwXPHwhDbqJRHlxYmboJuiSaIKpP4I5TJVFl/EmByOU13jOBT9hmEnxcjR3jvFYoqoNKt7MM9uqerj9A== + } + engines: { node: ">=18" } + dependencies: + "@open-draft/deferred-promise": 2.2.0 + "@open-draft/logger": 0.3.0 + "@open-draft/until": 2.1.0 is-node-process: 1.2.0 outvariant: 1.4.2 strict-event-emitter: 0.5.1 dev: true /@next/env@14.0.4: - resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==} + resolution: + { + integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ== + } dev: false /@next/swc-darwin-arm64@14.0.4: - resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg== + } + engines: { node: ">= 10" } cpu: [arm64] os: [darwin] requiresBuild: true @@ -1545,8 +1928,11 @@ packages: optional: true /@next/swc-darwin-x64@14.0.4: - resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw== + } + engines: { node: ">= 10" } cpu: [x64] os: [darwin] requiresBuild: true @@ -1554,8 +1940,11 @@ packages: optional: true /@next/swc-linux-arm64-gnu@14.0.4: - resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w== + } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] requiresBuild: true @@ -1563,8 +1952,11 @@ packages: optional: true /@next/swc-linux-arm64-musl@14.0.4: - resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ== + } + engines: { node: ">= 10" } cpu: [arm64] os: [linux] requiresBuild: true @@ -1572,8 +1964,11 @@ packages: optional: true /@next/swc-linux-x64-gnu@14.0.4: - resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A== + } + engines: { node: ">= 10" } cpu: [x64] os: [linux] requiresBuild: true @@ -1581,8 +1976,11 @@ packages: optional: true /@next/swc-linux-x64-musl@14.0.4: - resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw== + } + engines: { node: ">= 10" } cpu: [x64] os: [linux] requiresBuild: true @@ -1590,8 +1988,11 @@ packages: optional: true /@next/swc-win32-arm64-msvc@14.0.4: - resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w== + } + engines: { node: ">= 10" } cpu: [arm64] os: [win32] requiresBuild: true @@ -1599,8 +2000,11 @@ packages: optional: true /@next/swc-win32-ia32-msvc@14.0.4: - resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg== + } + engines: { node: ">= 10" } cpu: [ia32] os: [win32] requiresBuild: true @@ -1608,8 +2012,11 @@ packages: optional: true /@next/swc-win32-x64-msvc@14.0.4: - resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A== + } + engines: { node: ">= 10" } cpu: [x64] os: [win32] requiresBuild: true @@ -1617,31 +2024,34 @@ packages: optional: true /@nextui-org/accordion@2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-WzD7sscL+4K0TFyUutTn1AhU0wcS68TqNCTNv7KgON6ODdwieydilMxAyXvwo3RgXeWG+8BbdxJC/6W+/iLBTg==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/aria-utils': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/divider': 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/framer-transitions': 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-accordion': 2.0.2(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@react-aria/button': 3.9.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/tree': 3.7.5(react@18.2.0) - '@react-types/accordion': 3.0.0-alpha.17(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-WzD7sscL+4K0TFyUutTn1AhU0wcS68TqNCTNv7KgON6ODdwieydilMxAyXvwo3RgXeWG+8BbdxJC/6W+/iLBTg== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/aria-utils": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/divider": 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/framer-transitions": 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-accordion": 2.0.2(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@react-aria/button": 3.9.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/tree": 3.7.5(react@18.2.0) + "@react-types/accordion": 3.0.0-alpha.17(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -1650,95 +2060,107 @@ packages: dev: false /@nextui-org/aria-utils@2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-4M4jeJ/ghGaia9064yS+mEZ3sFPH80onmjNGWJZkkZDmUV4R88lNkqe/XYBK1tbxfl4Kxa8jc/ALsZkUkkvR5w==} - peerDependencies: - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-rsc-utils': 2.0.10 - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-types/overlays': 3.8.4(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-4M4jeJ/ghGaia9064yS+mEZ3sFPH80onmjNGWJZkkZDmUV4R88lNkqe/XYBK1tbxfl4Kxa8jc/ALsZkUkkvR5w== + } + peerDependencies: + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-rsc-utils": 2.0.10 + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@nextui-org/theme' + - "@nextui-org/theme" - tailwind-variants dev: false /@nextui-org/autocomplete@2.0.9(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-ViPXrZnP35k7LF+TBA4w8nqu0OEj9p1z9Rt7rwrACmY2VmDGY6h6a6nDCMjhuTVXptftRvzxfIPsIyzBYqxb0g==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/aria-utils': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/button': 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/input': 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/listbox': 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/popover': 2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/scroll-shadow': 2.1.12(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/spinner': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-button': 2.0.6(react@18.2.0) - '@react-aria/combobox': 3.8.1(react-dom@18.2.0)(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-stately/combobox': 3.8.1(react@18.2.0) - '@react-types/combobox': 3.10.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-ViPXrZnP35k7LF+TBA4w8nqu0OEj9p1z9Rt7rwrACmY2VmDGY6h6a6nDCMjhuTVXptftRvzxfIPsIyzBYqxb0g== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/aria-utils": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/button": 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/input": 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/listbox": 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/popover": 2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/scroll-shadow": 2.1.12(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/spinner": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-button": 2.0.6(react@18.2.0) + "@react-aria/combobox": 3.8.1(react-dom@18.2.0)(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-stately/combobox": 3.8.1(react@18.2.0) + "@react-types/combobox": 3.10.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" - tailwind-variants dev: false /@nextui-org/avatar@2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3QUn8v61iNvAYogUbEDVnhDjBK6WBxxFYLp95a0H52zN0p2LHXe+UNwdGZYFo5QNWx6CHGH3vh2AHlLLy3WFSQ==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-image': 2.0.4(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) + resolution: + { + integrity: sha512-3QUn8v61iNvAYogUbEDVnhDjBK6WBxxFYLp95a0H52zN0p2LHXe+UNwdGZYFo5QNWx6CHGH3vh2AHlLLy3WFSQ== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-image": 2.0.4(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/badge@2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-FA3XgqEbyKWepMXqMZg7D+1IRf7flrb2LzFvTbkmsbvWQ4yYz1LqJXZ/HDmoCydvh2pOnc+1zPK3BpB7vGrrwA==} + resolution: + { + integrity: sha512-FA3XgqEbyKWepMXqMZg7D+1IRf7flrb2LzFvTbkmsbvWQ4yYz1LqJXZ/HDmoCydvh2pOnc+1zPK3BpB7vGrrwA== + } peerDependencies: - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system-rsc': 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system-rsc": 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -1746,49 +2168,55 @@ packages: dev: false /@nextui-org/breadcrumbs@2.0.4(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-SAE0+QRgA7vxUHPL65TKz3MRj7u2mbSwk8Eifkwo6hPcF0d34zv2QDupTGyphIjoGCSrQHFIq/CPAkXyaOXZxw==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@react-aria/breadcrumbs': 3.5.9(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/breadcrumbs': 3.7.2(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-SAE0+QRgA7vxUHPL65TKz3MRj7u2mbSwk8Eifkwo6hPcF0d34zv2QDupTGyphIjoGCSrQHFIq/CPAkXyaOXZxw== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@react-aria/breadcrumbs": 3.5.9(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/breadcrumbs": 3.7.2(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/button@2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-mDrSII1oneY4omwDdxUhl5oLa3AhoWCchwV/jt7egunnAFie32HbTqfFYGpLGiJw3JMMh3WDUthrI1islVTRKA==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/ripple': 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/spinner': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-button': 2.0.6(react@18.2.0) - '@react-aria/button': 3.9.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-mDrSII1oneY4omwDdxUhl5oLa3AhoWCchwV/jt7egunnAFie32HbTqfFYGpLGiJw3JMMh3WDUthrI1islVTRKA== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/ripple": 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/spinner": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-button": 2.0.6(react@18.2.0) + "@react-aria/button": 3.9.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -1797,89 +2225,101 @@ packages: dev: false /@nextui-org/card@2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-16uAS0i6+EO+u8aqtmaCXatjovsyuTq51JwCLBlB67OldfgXoYcYl3GaE2VoZdEwxVu1G/qypDfXv29k46nZuA==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/ripple': 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-button': 2.0.6(react@18.2.0) - '@react-aria/button': 3.9.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-16uAS0i6+EO+u8aqtmaCXatjovsyuTq51JwCLBlB67OldfgXoYcYl3GaE2VoZdEwxVu1G/qypDfXv29k46nZuA== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/ripple": 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-button": 2.0.6(react@18.2.0) + "@react-aria/button": 3.9.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/checkbox@2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-X6WkwPbZlDvioEcXF6HhKH21wD6OK+3+FSroKkzMPQLJrj2KYUIYGbiuw9rT9aCtdjbT+6HUCv+FA8/cBQr7cA==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@react-aria/checkbox': 3.13.0(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-stately/checkbox': 3.6.1(react@18.2.0) - '@react-stately/toggle': 3.7.0(react@18.2.0) - '@react-types/checkbox': 3.6.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-X6WkwPbZlDvioEcXF6HhKH21wD6OK+3+FSroKkzMPQLJrj2KYUIYGbiuw9rT9aCtdjbT+6HUCv+FA8/cBQr7cA== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@react-aria/checkbox": 3.13.0(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-stately/checkbox": 3.6.1(react@18.2.0) + "@react-stately/toggle": 3.7.0(react@18.2.0) + "@react-types/checkbox": 3.6.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/chip@2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-hfVSaq5JWzGn97s3K2Ac/xOopHWelaUW3eus0O0wns/6+NCI0QUjgwNt2bAQSNvnE6vjvYLJTqGG/jFHyFJjOg==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/checkbox': 3.6.0(react@18.2.0) + resolution: + { + integrity: sha512-hfVSaq5JWzGn97s3K2Ac/xOopHWelaUW3eus0O0wns/6+NCI0QUjgwNt2bAQSNvnE6vjvYLJTqGG/jFHyFJjOg== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/checkbox": 3.6.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/code@2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-Kw/uOQtdytRWY99zMQuGHqMAAGXWBAxHlyMMge1OCckpadCDfX6plPjqoS18SGM0orJ4fox+a1FM8VhnRQ2kQw==} + resolution: + { + integrity: sha512-Kw/uOQtdytRWY99zMQuGHqMAAGXWBAxHlyMMge1OCckpadCDfX6plPjqoS18SGM0orJ4fox+a1FM8VhnRQ2kQw== + } peerDependencies: - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system-rsc': 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system-rsc": 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -1887,17 +2327,20 @@ packages: dev: false /@nextui-org/divider@2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-yEvHqYlhNBwmF68pfjJKdzC8gVQtL+txxD5COBGF9uFyfxA5hVw2D6GmYgOH514bxrFBuWOLcQX6gyljgcN3bA==} + resolution: + { + integrity: sha512-yEvHqYlhNBwmF68pfjJKdzC8gVQtL+txxD5COBGF9uFyfxA5hVw2D6GmYgOH514bxrFBuWOLcQX6gyljgcN3bA== + } peerDependencies: - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/react-rsc-utils': 2.0.10 - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system-rsc': 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@nextui-org/react-rsc-utils": 2.0.10 + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system-rsc": 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -1905,106 +2348,121 @@ packages: dev: false /@nextui-org/dropdown@2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-3KINNvC7Cz+deQltCM8gaB7iJCfU4Qsp1fwnoy1wUEjeZhEtPOPR59oTyqT+gPaPIisP1+LLOfcqRl4jNQoVXw==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/menu': 2.0.17(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/popover': 2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/menu': 3.12.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/menu': 3.6.0(react@18.2.0) - '@react-types/menu': 3.9.6(react@18.2.0) + resolution: + { + integrity: sha512-3KINNvC7Cz+deQltCM8gaB7iJCfU4Qsp1fwnoy1wUEjeZhEtPOPR59oTyqT+gPaPIisP1+LLOfcqRl4jNQoVXw== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/menu": 2.0.17(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/popover": 2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/menu": 3.12.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/menu": 3.6.0(react@18.2.0) + "@react-types/menu": 3.9.6(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" - tailwind-variants dev: false /@nextui-org/framer-transitions@2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-UlWMCAFdrq8wKrYFGwc+O4kFhKCkL4L9ZadBkP0PqjmfyAC2gA3ygRbNqtKhFMWeKbBAiC8qQ9aTBEA/+0r/EA==} + resolution: + { + integrity: sha512-UlWMCAFdrq8wKrYFGwc+O4kFhKCkL4L9ZadBkP0PqjmfyAC2gA3ygRbNqtKhFMWeKbBAiC8qQ9aTBEA/+0r/EA== + } peerDependencies: - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@nextui-org/theme' + - "@nextui-org/theme" - tailwind-variants dev: false /@nextui-org/image@2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-bps5D5ki7PoLldb8wcJEf6C4EUFZm3PocLytNaGa7dNxFfaCOD78So+kq+K+0IRusK3yn94K8r31qMvpI3Gg2Q==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-image': 2.0.4(react@18.2.0) + resolution: + { + integrity: sha512-bps5D5ki7PoLldb8wcJEf6C4EUFZm3PocLytNaGa7dNxFfaCOD78So+kq+K+0IRusK3yn94K8r31qMvpI3Gg2Q== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-image": 2.0.4(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/input@2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nUTlAvsXj5t88ycvQdICxf78/pko6Wznx2OomvYjb3E45eb77twQcWUDhydkJCWIh3b4AhGHSMM6GYxwWUgMDA==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/textfield': 3.14.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/textfield': 3.9.0(react@18.2.0) + resolution: + { + integrity: sha512-nUTlAvsXj5t88ycvQdICxf78/pko6Wznx2OomvYjb3E45eb77twQcWUDhydkJCWIh3b4AhGHSMM6GYxwWUgMDA== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/textfield": 3.14.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/textfield": 3.9.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-textarea-autosize: 8.5.3(@types/react@18.2.45)(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" dev: false /@nextui-org/kbd@2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-cYwbEjp/+/tjtOdmiRy2UHjfBhP3bqd5e+JFTa5sY1HotckUZrCintATyBcg9bPa3iSPUI44M6Cb9e0oAUUeMA==} + resolution: + { + integrity: sha512-cYwbEjp/+/tjtOdmiRy2UHjfBhP3bqd5e+JFTa5sY1HotckUZrCintATyBcg9bPa3iSPUI44M6Cb9e0oAUUeMA== + } peerDependencies: - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system-rsc': 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@react-aria/utils': 3.23.0(react@18.2.0) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system-rsc": 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@react-aria/utils": 3.23.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2012,50 +2470,56 @@ packages: dev: false /@nextui-org/link@2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-X8zX3U5MWfiStOCd45oIZ2YKZG0GoUio6PcMFYjpOPsEG7wV58CuhUSxpyx3QTF8JavVSO/p/cl4Pc9pukVDUg==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-link': 2.0.15(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/link': 3.6.3(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/link': 3.5.2(react@18.2.0) + resolution: + { + integrity: sha512-X8zX3U5MWfiStOCd45oIZ2YKZG0GoUio6PcMFYjpOPsEG7wV58CuhUSxpyx3QTF8JavVSO/p/cl4Pc9pukVDUg== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-link": 2.0.15(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/link": 3.6.3(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/link": 3.5.2(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/listbox@2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-5PmUCoHFgAr+1nAU3IlqPFTgyHo7zsTcNeja4wcErD/KseCF2h7Uk5OqUX5hQDN9B9fZuGjPrkG4yoK/6pqcUQ==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/aria-utils': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/divider': 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@nextui-org/use-is-mobile': 2.0.6(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/listbox': 3.11.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/list': 3.10.2(react@18.2.0) - '@react-types/menu': 3.9.6(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-5PmUCoHFgAr+1nAU3IlqPFTgyHo7zsTcNeja4wcErD/KseCF2h7Uk5OqUX5hQDN9B9fZuGjPrkG4yoK/6pqcUQ== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/aria-utils": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/divider": 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@nextui-org/use-is-mobile": 2.0.6(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/listbox": 3.11.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/list": 3.10.2(react@18.2.0) + "@react-types/menu": 3.9.6(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2063,29 +2527,32 @@ packages: dev: false /@nextui-org/menu@2.0.17(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-qr/BPDbBvg5tpAZZLkLx8eNnvYwJYM3Q72fmRYbzwmG3upNtdjln0QYxSwPXUz7RYqTKEFWc9JPxq2pgPM15Wg==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/aria-utils': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/divider': 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@nextui-org/use-is-mobile': 2.0.6(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/menu': 3.12.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/menu': 3.6.0(react@18.2.0) - '@react-stately/tree': 3.7.5(react@18.2.0) - '@react-types/menu': 3.9.6(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-qr/BPDbBvg5tpAZZLkLx8eNnvYwJYM3Q72fmRYbzwmG3upNtdjln0QYxSwPXUz7RYqTKEFWc9JPxq2pgPM15Wg== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/aria-utils": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/divider": 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@nextui-org/use-is-mobile": 2.0.6(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/menu": 3.12.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/menu": 3.6.0(react@18.2.0) + "@react-stately/tree": 3.7.5(react@18.2.0) + "@react-types/menu": 3.9.6(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2093,339 +2560,384 @@ packages: dev: false /@nextui-org/modal@2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-unfP0EMF3FDg5CkRqou03s4/BopWbaBTeVIMZeA2A1WF5teHUOmpLdp44Z1KOoWB1RVMDVd4JeoauNHNhJMp0g==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/framer-transitions': 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-button': 2.0.6(react@18.2.0) - '@nextui-org/use-aria-modal-overlay': 2.0.6(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/use-disclosure': 2.0.6(react@18.2.0) - '@react-aria/dialog': 3.5.9(react-dom@18.2.0)(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/overlays': 3.6.4(react@18.2.0) - '@react-types/overlays': 3.8.4(react@18.2.0) + resolution: + { + integrity: sha512-unfP0EMF3FDg5CkRqou03s4/BopWbaBTeVIMZeA2A1WF5teHUOmpLdp44Z1KOoWB1RVMDVd4JeoauNHNhJMp0g== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/framer-transitions": 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-button": 2.0.6(react@18.2.0) + "@nextui-org/use-aria-modal-overlay": 2.0.6(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/use-disclosure": 2.0.6(react@18.2.0) + "@react-aria/dialog": 3.5.9(react-dom@18.2.0)(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/overlays": 3.6.4(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.7(@types/react@18.2.45)(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" - tailwind-variants dev: false /@nextui-org/navbar@2.0.27(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-iP4Pn4ItQkAW1nbu1Jmrh5l9pMVG43lDxq9rbx6DbLjLnnZOOrE6fURb8uN5NVy3ooV5dF02zKAoxlkE5fN/xw==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/framer-transitions': 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-toggle-button': 2.0.6(react@18.2.0) - '@nextui-org/use-scroll-position': 2.0.4(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/toggle': 3.7.0(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) + resolution: + { + integrity: sha512-iP4Pn4ItQkAW1nbu1Jmrh5l9pMVG43lDxq9rbx6DbLjLnnZOOrE6fURb8uN5NVy3ooV5dF02zKAoxlkE5fN/xw== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/framer-transitions": 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-toggle-button": 2.0.6(react@18.2.0) + "@nextui-org/use-scroll-position": 2.0.4(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/toggle": 3.7.0(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.7(@types/react@18.2.45)(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" - tailwind-variants dev: false /@nextui-org/pagination@2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OVpkpXqUKRuMRIcYESBAL95d3pqZ17SKAyNINMiJ/DwWnrzJu/LXGmFwTuYRoBdqHFlm7guGqZbHmAkcS/Fgow==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@nextui-org/use-pagination': 2.0.4(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) + resolution: + { + integrity: sha512-OVpkpXqUKRuMRIcYESBAL95d3pqZ17SKAyNINMiJ/DwWnrzJu/LXGmFwTuYRoBdqHFlm7guGqZbHmAkcS/Fgow== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@nextui-org/use-pagination": 2.0.4(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.0.10 dev: false /@nextui-org/popover@2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-fqqktFQ/chIBS9Y3MghL6KX6qAy3hodtXUDchnxLa1GL+oi6TCBLUjo+wgI5EMJrTTbqo/eFLui/Ks00JfCj+A==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/aria-utils': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/button': 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/framer-transitions': 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-button': 2.0.6(react@18.2.0) - '@react-aria/dialog': 3.5.9(react-dom@18.2.0)(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/overlays': 3.6.4(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/overlays': 3.8.4(react@18.2.0) + resolution: + { + integrity: sha512-fqqktFQ/chIBS9Y3MghL6KX6qAy3hodtXUDchnxLa1GL+oi6TCBLUjo+wgI5EMJrTTbqo/eFLui/Ks00JfCj+A== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/aria-utils": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/button": 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/framer-transitions": 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-button": 2.0.6(react@18.2.0) + "@react-aria/dialog": 3.5.9(react-dom@18.2.0)(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/overlays": 3.6.4(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.7(@types/react@18.2.45)(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" - tailwind-variants dev: false /@nextui-org/progress@2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-RPVsFCF8COFClS/8PqEepzryhDFtIcJGQLu/P+qAr7jIDlXizXaBDrp0X34GVtQsapNeE9ExxX9Kt+QIspuHHQ==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-is-mounted': 2.0.4(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/progress': 3.4.9(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/progress': 3.5.1(react@18.2.0) + resolution: + { + integrity: sha512-RPVsFCF8COFClS/8PqEepzryhDFtIcJGQLu/P+qAr7jIDlXizXaBDrp0X34GVtQsapNeE9ExxX9Kt+QIspuHHQ== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-is-mounted": 2.0.4(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/progress": 3.4.9(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/progress": 3.5.1(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/radio@2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-vRX0ppM5Tlzu0HoqTG6LdmQnMjk8RRl66BH1+QaosvZRXA1iIdA3BduqQYqn5ZZHBBlJ2u9QzaD3lTAlWIHvNg==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/radio': 3.10.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-stately/radio': 3.10.1(react@18.2.0) - '@react-types/radio': 3.7.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-vRX0ppM5Tlzu0HoqTG6LdmQnMjk8RRl66BH1+QaosvZRXA1iIdA3BduqQYqn5ZZHBBlJ2u9QzaD3lTAlWIHvNg== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/radio": 3.10.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-stately/radio": 3.10.1(react@18.2.0) + "@react-types/radio": 3.7.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/react-rsc-utils@2.0.10: - resolution: {integrity: sha512-LNePDEThUF9PAbJW4T8k7EgSfqwlvGku5fIqJ1IA9+OpVy5LqhrUQehjvgXe63N1RupC7Pt+XvaaxkGu9U2FiQ==} + resolution: + { + integrity: sha512-LNePDEThUF9PAbJW4T8k7EgSfqwlvGku5fIqJ1IA9+OpVy5LqhrUQehjvgXe63N1RupC7Pt+XvaaxkGu9U2FiQ== + } dev: false /@nextui-org/react-utils@2.0.10(react@18.2.0): - resolution: {integrity: sha512-bcA+k7ZdcgcK+r/8nrCtbdgHo0SD6jicbazWIokknFwjb97JQ7ooaMwxnLt5E5sswCAv0XeLwybOmrgm7JA5TA==} + resolution: + { + integrity: sha512-bcA+k7ZdcgcK+r/8nrCtbdgHo0SD6jicbazWIokknFwjb97JQ7ooaMwxnLt5E5sswCAv0XeLwybOmrgm7JA5TA== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/react-rsc-utils': 2.0.10 - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) + "@nextui-org/react-rsc-utils": 2.0.10 + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/react@2.2.9(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19)(tailwindcss@3.4.0): - resolution: {integrity: sha512-QHkUQTxI9sYoVjrvTpYm5K68pMDRqD13+DVzdsrkJuETGhbvE2c2CCGc4on9EwXC3JsOxuP/OyqaAmOIuHhYkA==} - peerDependencies: - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/accordion': 2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/autocomplete': 2.0.9(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/avatar': 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/badge': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/breadcrumbs': 2.0.4(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/button': 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/card': 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/checkbox': 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/chip': 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/code': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/divider': 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/dropdown': 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/image': 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/input': 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/kbd': 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/link': 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/listbox': 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/menu': 2.0.17(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/modal': 2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/navbar': 2.0.27(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/pagination': 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/popover': 2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/progress': 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/radio': 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/ripple': 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/scroll-shadow': 2.1.12(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/select': 2.1.20(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/skeleton': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/slider': 2.2.5(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/snippet': 2.0.30(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/spacer': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/spinner': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/switch': 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/table': 2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/tabs': 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/tooltip': 2.0.29(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/user': 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) + resolution: + { + integrity: sha512-QHkUQTxI9sYoVjrvTpYm5K68pMDRqD13+DVzdsrkJuETGhbvE2c2CCGc4on9EwXC3JsOxuP/OyqaAmOIuHhYkA== + } + peerDependencies: + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/accordion": 2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/autocomplete": 2.0.9(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/avatar": 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/badge": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/breadcrumbs": 2.0.4(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/button": 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/card": 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/checkbox": 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/chip": 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/code": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/divider": 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/dropdown": 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/image": 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/input": 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/kbd": 2.0.25(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/link": 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/listbox": 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/menu": 2.0.17(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/modal": 2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/navbar": 2.0.27(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/pagination": 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/popover": 2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/progress": 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/radio": 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/ripple": 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/scroll-shadow": 2.1.12(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/select": 2.1.20(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/skeleton": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/slider": 2.2.5(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/snippet": 2.0.30(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/spacer": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/spinner": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/switch": 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/table": 2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/tabs": 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/tooltip": 2.0.29(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/user": 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" - tailwind-variants - tailwindcss dev: false /@nextui-org/ripple@2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PCvAk9ErhmPX46VRmhsg8yMxw3Qd9LY7BDkRRfIF8KftgRDyOpG2vV8DxvSOxQu1/aqBWkkHNUuEjM/EvSEung==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) + resolution: + { + integrity: sha512-PCvAk9ErhmPX46VRmhsg8yMxw3Qd9LY7BDkRRfIF8KftgRDyOpG2vV8DxvSOxQu1/aqBWkkHNUuEjM/EvSEung== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/scroll-shadow@2.1.12(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-uxT8D+WCWeBy4xaFDfqVpBgjjHZUwydXsX5HhbzZCBir/1eRG5GMnUES3w98DSwcUVadG64gAVsyGW4HmSZw1Q==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-data-scroll-overflow': 2.1.2(react@18.2.0) + resolution: + { + integrity: sha512-uxT8D+WCWeBy4xaFDfqVpBgjjHZUwydXsX5HhbzZCBir/1eRG5GMnUES3w98DSwcUVadG64gAVsyGW4HmSZw1Q== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-data-scroll-overflow": 2.1.2(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/select@2.1.20(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-GCO9uzyYnFIdJTqIe6aDe2NnYlclcdYfZnECFAze/R2MW0jpoysk5ysGBDjVDmZis6tLu+BOFXJbIlYEi+LoUQ==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/aria-utils': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/listbox': 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/popover': 2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/scroll-shadow': 2.1.12(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/spinner': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-button': 2.0.6(react@18.2.0) - '@nextui-org/use-aria-multiselect': 2.1.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-GCO9uzyYnFIdJTqIe6aDe2NnYlclcdYfZnECFAze/R2MW0jpoysk5ysGBDjVDmZis6tLu+BOFXJbIlYEi+LoUQ== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/aria-utils": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/listbox": 2.1.16(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/popover": 2.1.14(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(@types/react@18.2.45)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/scroll-shadow": 2.1.12(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/spinner": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-button": 2.0.6(react@18.2.0) + "@nextui-org/use-aria-multiselect": 2.1.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" - tailwind-variants dev: false /@nextui-org/shared-icons@2.0.6(react@18.2.0): - resolution: {integrity: sha512-Mw5utPJAclFaeKAZowznEgabI5gdhXrW0iMaMA18Y4zcZRTidAc0WFeGYUlX876NxYLPc1Zk4bZUhQvMe+7uWg==} + resolution: + { + integrity: sha512-Mw5utPJAclFaeKAZowznEgabI5gdhXrW0iMaMA18Y4zcZRTidAc0WFeGYUlX876NxYLPc1Zk4bZUhQvMe+7uWg== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: react: 18.2.0 dev: false /@nextui-org/shared-utils@2.0.4(react@18.2.0): - resolution: {integrity: sha512-Ms7A6UCvo/SZt/9Nmb7cZwHe9fZFw+EPsieTnC1vtpvDNCasxrTB0hj9VWFoYfWOaCzzqxl1AL9maIz/gMvckQ==} + resolution: + { + integrity: sha512-Ms7A6UCvo/SZt/9Nmb7cZwHe9fZFw+EPsieTnC1vtpvDNCasxrTB0hj9VWFoYfWOaCzzqxl1AL9maIz/gMvckQ== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: react: 18.2.0 dev: false /@nextui-org/skeleton@2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-bsb+lYugSfQV3RHrEHLbHhkkeslaxybnnT4z485Y/GBYTENOiHIOnWFWntfxCbjZ6vCewGlfgnphj6zeqlk20g==} + resolution: + { + integrity: sha512-bsb+lYugSfQV3RHrEHLbHhkkeslaxybnnT4z485Y/GBYTENOiHIOnWFWntfxCbjZ6vCewGlfgnphj6zeqlk20g== + } peerDependencies: - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system-rsc': 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system-rsc": 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2433,26 +2945,29 @@ packages: dev: false /@nextui-org/slider@2.2.5(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-dC6HHMmtn2WvxDmbY/Dq51XJjQ7cAnjZsuYVIvhwIiCLDG8QnEIhmYN0DQp/6oeZsCHnyMHC4DmtgOiJL0eXrQ==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/tooltip': 2.0.29(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/slider': 3.7.4(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-stately/slider': 3.5.0(react@18.2.0) + resolution: + { + integrity: sha512-dC6HHMmtn2WvxDmbY/Dq51XJjQ7cAnjZsuYVIvhwIiCLDG8QnEIhmYN0DQp/6oeZsCHnyMHC4DmtgOiJL0eXrQ== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/tooltip": 2.0.29(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/slider": 3.7.4(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-stately/slider": 3.5.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2461,24 +2976,27 @@ packages: dev: false /@nextui-org/snippet@2.0.30(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-8hKxqKpbJIMqFVedzYj90T4td+TkWdOdyYD9+VjywMdezAjsWdr8tqQj7boaMFjVNVSG+Pnw55Pgg/vkpc21aw==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/button': 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/tooltip': 2.0.29(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/use-clipboard': 2.0.4(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) + resolution: + { + integrity: sha512-8hKxqKpbJIMqFVedzYj90T4td+TkWdOdyYD9+VjywMdezAjsWdr8tqQj7boaMFjVNVSG+Pnw55Pgg/vkpc21aw== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/button": 2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/tooltip": 2.0.29(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/use-clipboard": 2.0.4(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2487,16 +3005,19 @@ packages: dev: false /@nextui-org/spacer@2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-bLnhPRnoyHQXhLneHjbRqZNxJWMFOBYOZkuX83uy59/FFUY07BcoNsb2s80tN3GoVxsaZ2jB6NxxVbaCJwoPog==} + resolution: + { + integrity: sha512-bLnhPRnoyHQXhLneHjbRqZNxJWMFOBYOZkuX83uy59/FFUY07BcoNsb2s80tN3GoVxsaZ2jB6NxxVbaCJwoPog== + } peerDependencies: - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system-rsc': 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system-rsc": 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2504,16 +3025,19 @@ packages: dev: false /@nextui-org/spinner@2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-s/q2FmxGPNEqA0ifWfc7xgs5a5D9c3xKkxL3n7jDoRnWo0NPlRsa6QRJGiSL5dHNoUqspRf/lNw2V94Bxk86Pg==} + resolution: + { + integrity: sha512-s/q2FmxGPNEqA0ifWfc7xgs5a5D9c3xKkxL3n7jDoRnWo0NPlRsa6QRJGiSL5dHNoUqspRf/lNw2V94Bxk86Pg== + } peerDependencies: - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system-rsc': 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system-rsc": 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2521,84 +3045,96 @@ packages: dev: false /@nextui-org/switch@2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-U7g68eReMSkgG0bBOSdzRLK+npv422YK6WYHpYOSkEBDqGwQ7LCeMRQreT/KxN0QFxIKmafebdLHAbuKc/X+5Q==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/switch': 3.6.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-stately/toggle': 3.7.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-U7g68eReMSkgG0bBOSdzRLK+npv422YK6WYHpYOSkEBDqGwQ7LCeMRQreT/KxN0QFxIKmafebdLHAbuKc/X+5Q== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/switch": 3.6.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-stately/toggle": 3.7.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/system-rsc@2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-1QqZ+GM7Ii0rsfSHXS6BBjzKOoLIWwb72nm4h4WgjlMXbRKLZcCQasRHVe5HMSBMvN0JUo7qyGExchfDFl/Ubw==} + resolution: + { + integrity: sha512-1QqZ+GM7Ii0rsfSHXS6BBjzKOoLIWwb72nm4h4WgjlMXbRKLZcCQasRHVe5HMSBMvN0JUo7qyGExchfDFl/Ubw== + } peerDependencies: - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - tailwind-variants: '>=0.1.13' + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + tailwind-variants: ">=0.1.13" dependencies: - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) clsx: 1.2.1 react: 18.2.0 tailwind-variants: 0.1.19(tailwindcss@3.4.0) dev: false /@nextui-org/system@2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-WFDq+Rx6D+gmK1YGEG2RBARPK9EOYonQDt5Tq2tUchzOOqj3kXXcM5Z0F3fudM59eIncLa/tX/ApJSTLry+hsw==} + resolution: + { + integrity: sha512-WFDq+Rx6D+gmK1YGEG2RBARPK9EOYonQDt5Tq2tUchzOOqj3kXXcM5Z0F3fudM59eIncLa/tX/ApJSTLry+hsw== + } peerDependencies: - react: '>=18' - react-dom: '>=18' + react: ">=18" + react-dom: ">=18" dependencies: - '@nextui-org/system-rsc': 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) + "@nextui-org/system-rsc": 2.0.11(@nextui-org/theme@2.1.17)(react@18.2.0)(tailwind-variants@0.1.19) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@nextui-org/theme' + - "@nextui-org/theme" - tailwind-variants dev: false /@nextui-org/table@2.0.28(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-qH/7jdV5+tiMDDvBfMrUZN4jamds0FsL5Ak+ighoKIUYRFTSXOroi+63ZzzAh/mZAsUALCPPcfbXt4r4aBFDzg==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/checkbox': 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-icons': 2.0.6(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/spacer': 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/table': 3.13.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-stately/table': 3.11.4(react@18.2.0) - '@react-stately/virtualizer': 3.6.6(react@18.2.0) - '@react-types/grid': 3.2.3(react@18.2.0) - '@react-types/table': 3.9.2(react@18.2.0) + resolution: + { + integrity: sha512-qH/7jdV5+tiMDDvBfMrUZN4jamds0FsL5Ak+ighoKIUYRFTSXOroi+63ZzzAh/mZAsUALCPPcfbXt4r4aBFDzg== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/checkbox": 2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-icons": 2.0.6(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/spacer": 2.0.24(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/table": 3.13.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-stately/table": 3.11.4(react@18.2.0) + "@react-stately/virtualizer": 3.6.6(react@18.2.0) + "@react-types/grid": 3.2.3(react@18.2.0) + "@react-types/table": 3.9.2(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2606,29 +3142,32 @@ packages: dev: false /@nextui-org/tabs@2.0.26(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-GjERgBYUAY1KD4GqNVy0cRi6GyQnf62q0ddcN4je3sEM6rsq3PygEXhkN5pxxFPacoYM/UE6rBswHSKlbjJjgw==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/aria-utils': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/framer-transitions': 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@nextui-org/use-is-mounted': 2.0.4(react@18.2.0) - '@nextui-org/use-update-effect': 2.0.4(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/tabs': 3.8.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/tabs': 3.6.3(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/tabs': 3.3.4(react@18.2.0) + resolution: + { + integrity: sha512-GjERgBYUAY1KD4GqNVy0cRi6GyQnf62q0ddcN4je3sEM6rsq3PygEXhkN5pxxFPacoYM/UE6rBswHSKlbjJjgw== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/aria-utils": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/framer-transitions": 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@nextui-org/use-is-mounted": 2.0.4(react@18.2.0) + "@nextui-org/use-update-effect": 2.0.4(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/tabs": 3.8.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/tabs": 3.6.3(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/tabs": 3.3.4(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2638,9 +3177,12 @@ packages: dev: false /@nextui-org/theme@2.1.17(tailwindcss@3.4.0): - resolution: {integrity: sha512-/WeHcMrAcWPGsEVn9M9TnvxKkaYkCocBH9JrDYCEFQoJgleUzHd4nVk7MWtpSOYJXLUzUMY1M9AqAK3jBkw+5g==} + resolution: + { + integrity: sha512-/WeHcMrAcWPGsEVn9M9TnvxKkaYkCocBH9JrDYCEFQoJgleUzHd4nVk7MWtpSOYJXLUzUMY1M9AqAK3jBkw+5g== + } peerDependencies: - tailwindcss: '*' + tailwindcss: "*" dependencies: color: 4.2.3 color2k: 2.0.3 @@ -2656,27 +3198,30 @@ packages: dev: false /@nextui-org/tooltip@2.0.29(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19): - resolution: {integrity: sha512-LaFyS5bXhcZFXP9rnh6pTKsYX6siWjzEe5z72FIOyAV2yvv2yhkRiO/mEHKI8moo+/tScW/6muFXsvbEalPefg==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - framer-motion: '>=4.0.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/aria-utils': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/framer-transitions': 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/tooltip': 3.7.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/tooltip': 3.4.6(react@18.2.0) - '@react-types/overlays': 3.8.4(react@18.2.0) - '@react-types/tooltip': 3.4.6(react@18.2.0) + resolution: + { + integrity: sha512-LaFyS5bXhcZFXP9rnh6pTKsYX6siWjzEe5z72FIOyAV2yvv2yhkRiO/mEHKI8moo+/tScW/6muFXsvbEalPefg== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/aria-utils": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/framer-transitions": 2.0.15(@nextui-org/theme@2.1.17)(framer-motion@10.16.16)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/tooltip": 3.7.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/tooltip": 3.4.6(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) + "@react-types/tooltip": 3.4.6(react@18.2.0) framer-motion: 10.16.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2685,262 +3230,340 @@ packages: dev: false /@nextui-org/use-aria-accordion@2.0.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ebYr4CdvWifuTM/yyhQLKCa7aUqbVrWyR0SB6VNCGDID/kvRUW52puWnY9k24xdwY0cKbW3JRciKtQkrokRQwg==} + resolution: + { + integrity: sha512-ebYr4CdvWifuTM/yyhQLKCa7aUqbVrWyR0SB6VNCGDID/kvRUW52puWnY9k24xdwY0cKbW3JRciKtQkrokRQwg== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@react-aria/button': 3.9.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/tree': 3.7.5(react@18.2.0) - '@react-types/accordion': 3.0.0-alpha.17(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-aria/button": 3.9.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/selection": 3.17.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/tree": 3.7.5(react@18.2.0) + "@react-types/accordion": 3.0.0-alpha.17(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 transitivePeerDependencies: - react-dom dev: false /@nextui-org/use-aria-button@2.0.6(react@18.2.0): - resolution: {integrity: sha512-38DZ3FK/oPZ3sppfM5EtgJ4DITOajNwSKkAMePBmuSZl+bsW7peP8g5JNd9uPOEz3edCOppT60AQSICsYiH3cg==} + resolution: + { + integrity: sha512-38DZ3FK/oPZ3sppfM5EtgJ4DITOajNwSKkAMePBmuSZl+bsW7peP8g5JNd9uPOEz3edCOppT60AQSICsYiH3cg== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-aria-link@2.0.15(react@18.2.0): - resolution: {integrity: sha512-znzOeTZ10o3O5F2nihi8BR8rAhRHgrRWcEBovV7OqJeFzvTQwsHl9/xy45zBfwJQksBtfcBfQf+GEHXeDwfigA==} + resolution: + { + integrity: sha512-znzOeTZ10o3O5F2nihi8BR8rAhRHgrRWcEBovV7OqJeFzvTQwsHl9/xy45zBfwJQksBtfcBfQf+GEHXeDwfigA== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/use-aria-press': 2.0.1(react@18.2.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/link': 3.5.2(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@nextui-org/use-aria-press": 2.0.1(react@18.2.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/link": 3.5.2(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-aria-modal-overlay@2.0.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-JfhXvH2RObWpHeLmxdIBDPF2SDzV4SqBvEh01yRvg/EuZ3HDRfCnTDh+5HD0ziUVdk/kWuy/hZLX59sMX7QHWA==} + resolution: + { + integrity: sha512-JfhXvH2RObWpHeLmxdIBDPF2SDzV4SqBvEh01yRvg/EuZ3HDRfCnTDh+5HD0ziUVdk/kWuy/hZLX59sMX7QHWA== + } peerDependencies: - react: '>=18' - react-dom: '>=18' + react: ">=18" + react-dom: ">=18" dependencies: - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/overlays': 3.6.4(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/overlays": 3.6.4(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/use-aria-multiselect@2.1.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OM1lj2jdl0Q2Zme/ds6qyT4IIGsBJSGNjvkM6pEnpdyoej/HwTKsSEpEFTDGJ5t9J9DWWCEt3hz0uJxOPnZ66Q==} - peerDependencies: - react: '>=18' - react-dom: '>=18' - dependencies: - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/label': 3.7.4(react@18.2.0) - '@react-aria/listbox': 3.11.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/menu': 3.12.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/list': 3.10.2(react@18.2.0) - '@react-stately/menu': 3.6.0(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/overlays': 3.8.4(react@18.2.0) - '@react-types/select': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + resolution: + { + integrity: sha512-OM1lj2jdl0Q2Zme/ds6qyT4IIGsBJSGNjvkM6pEnpdyoej/HwTKsSEpEFTDGJ5t9J9DWWCEt3hz0uJxOPnZ66Q== + } + peerDependencies: + react: ">=18" + react-dom: ">=18" + dependencies: + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/label": 3.7.4(react@18.2.0) + "@react-aria/listbox": 3.11.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/menu": 3.12.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/selection": 3.17.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/list": 3.10.2(react@18.2.0) + "@react-stately/menu": 3.6.0(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) + "@react-types/select": 3.9.1(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nextui-org/use-aria-press@2.0.1(react@18.2.0): - resolution: {integrity: sha512-T3MjHH5TU9qnkf872GmhcfQK16ITMmMW9zir6xsSsz0w6ay9Y0XTSPrI2zRL6ociFyfJjP840XCLtSx6VBfEBQ==} + resolution: + { + integrity: sha512-T3MjHH5TU9qnkf872GmhcfQK16ITMmMW9zir6xsSsz0w6ay9Y0XTSPrI2zRL6ociFyfJjP840XCLtSx6VBfEBQ== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/ssr': 3.9.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/ssr": 3.9.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-aria-toggle-button@2.0.6(react@18.2.0): - resolution: {integrity: sha512-6Sjp7a0HQjmboLKNZu9AtZmyHz8+vhqcDwJDYTZjrrna0udxEXG+6C14YZzQxoJcvuaMimr5E8Aq0AxyRAr0MQ==} + resolution: + { + integrity: sha512-6Sjp7a0HQjmboLKNZu9AtZmyHz8+vhqcDwJDYTZjrrna0udxEXG+6C14YZzQxoJcvuaMimr5E8Aq0AxyRAr0MQ== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/use-aria-button': 2.0.6(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/toggle': 3.7.0(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@nextui-org/use-aria-button": 2.0.6(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/toggle": 3.7.0(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-callback-ref@2.0.4(react@18.2.0): - resolution: {integrity: sha512-GF50SzOFU/R0gQT1TmjbEUiS8CQ87qiV5Rp/TD5pqys1xprVgGLUUNQzlh+YDS2JHNu5FGlZc4sJKhtf2xF5aw==} + resolution: + { + integrity: sha512-GF50SzOFU/R0gQT1TmjbEUiS8CQ87qiV5Rp/TD5pqys1xprVgGLUUNQzlh+YDS2JHNu5FGlZc4sJKhtf2xF5aw== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/use-safe-layout-effect': 2.0.4(react@18.2.0) + "@nextui-org/use-safe-layout-effect": 2.0.4(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-clipboard@2.0.4(react@18.2.0): - resolution: {integrity: sha512-rMcaX0QsolOJ1BQbp1T/FVsSPn2m0Ss4Z+bbdS7eM6EFKtJdVJWlpbrST0/kR2UcW1KWeK27NYmtNPF5+hgZMA==} + resolution: + { + integrity: sha512-rMcaX0QsolOJ1BQbp1T/FVsSPn2m0Ss4Z+bbdS7eM6EFKtJdVJWlpbrST0/kR2UcW1KWeK27NYmtNPF5+hgZMA== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: react: 18.2.0 dev: false /@nextui-org/use-data-scroll-overflow@2.1.2(react@18.2.0): - resolution: {integrity: sha512-3h9QX+dWkfqnqciQc2KeeR67e77hobjefNHGBTDuB4LhJSJ180ToZH09SQNHaUmKRLTU/RABjGWXxdbORI0r6g==} + resolution: + { + integrity: sha512-3h9QX+dWkfqnqciQc2KeeR67e77hobjefNHGBTDuB4LhJSJ180ToZH09SQNHaUmKRLTU/RABjGWXxdbORI0r6g== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-disclosure@2.0.6(react@18.2.0): - resolution: {integrity: sha512-pazzLsAGKjUD4cMVySTivItmIgpsfIf4baP/02K0Xc8tbFAH4K1n7cUnEEjs+MTXy1Bprvz3pfAHDGZRDI1yYg==} + resolution: + { + integrity: sha512-pazzLsAGKjUD4cMVySTivItmIgpsfIf4baP/02K0Xc8tbFAH4K1n7cUnEEjs+MTXy1Bprvz3pfAHDGZRDI1yYg== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/use-callback-ref': 2.0.4(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) + "@nextui-org/use-callback-ref": 2.0.4(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-image@2.0.4(react@18.2.0): - resolution: {integrity: sha512-tomOkrhlhTA45qA/MLh1YmiWVGgJ2KeM0qBSLP1ikVcppc/e9UtkIJjHIGdNCnHZTjoPEh53HzyJeUMlYUM9uw==} + resolution: + { + integrity: sha512-tomOkrhlhTA45qA/MLh1YmiWVGgJ2KeM0qBSLP1ikVcppc/e9UtkIJjHIGdNCnHZTjoPEh53HzyJeUMlYUM9uw== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/use-safe-layout-effect': 2.0.4(react@18.2.0) + "@nextui-org/use-safe-layout-effect": 2.0.4(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-is-mobile@2.0.6(react@18.2.0): - resolution: {integrity: sha512-HeglWUoq6Ln8P5n6s1SZvBRatLYMKsiXQM7Mk2l+6jFByzZh3VWtZ05xmuX8te/1rGmeUxjeXtW6x+F7/f/JoA==} + resolution: + { + integrity: sha512-HeglWUoq6Ln8P5n6s1SZvBRatLYMKsiXQM7Mk2l+6jFByzZh3VWtZ05xmuX8te/1rGmeUxjeXtW6x+F7/f/JoA== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@react-aria/ssr': 3.9.1(react@18.2.0) + "@react-aria/ssr": 3.9.1(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-is-mounted@2.0.4(react@18.2.0): - resolution: {integrity: sha512-NSQwQjg8+k02GVov9cDwtAdop1Cr90eDgB0MAdvu7QCMgfBZjy88IdQnx3Yo7bG4wP45xC0vLjqDBanaK+11hw==} + resolution: + { + integrity: sha512-NSQwQjg8+k02GVov9cDwtAdop1Cr90eDgB0MAdvu7QCMgfBZjy88IdQnx3Yo7bG4wP45xC0vLjqDBanaK+11hw== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: react: 18.2.0 dev: false /@nextui-org/use-pagination@2.0.4(react@18.2.0): - resolution: {integrity: sha512-EETHzhh+LW8u2bm93LkUABbu0pIoWBCeY8hmvgjhhNMkILuwZNGYnp9tdF2rcS2P4KDlHQkIQcoiOGrGMqBUaQ==} + resolution: + { + integrity: sha512-EETHzhh+LW8u2bm93LkUABbu0pIoWBCeY8hmvgjhhNMkILuwZNGYnp9tdF2rcS2P4KDlHQkIQcoiOGrGMqBUaQ== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) react: 18.2.0 dev: false /@nextui-org/use-safe-layout-effect@2.0.4(react@18.2.0): - resolution: {integrity: sha512-K7ppEhTfzdVOzbgKaNFEBi4HwRfQ8j+kRBQqsU5yo8bSM+5uv8OUy/mjpEf4i02PUDIBmsgJC4En9S537DXrwg==} + resolution: + { + integrity: sha512-K7ppEhTfzdVOzbgKaNFEBi4HwRfQ8j+kRBQqsU5yo8bSM+5uv8OUy/mjpEf4i02PUDIBmsgJC4En9S537DXrwg== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: react: 18.2.0 dev: false /@nextui-org/use-scroll-position@2.0.4(react@18.2.0): - resolution: {integrity: sha512-5ugiHqQ1OptBmujOsJGigbUt/rQ826+8RKYSpBp1uax1eF7TlpigXt6mS1PDsJIyEauHi8rjH5B3weOn1//tug==} + resolution: + { + integrity: sha512-5ugiHqQ1OptBmujOsJGigbUt/rQ826+8RKYSpBp1uax1eF7TlpigXt6mS1PDsJIyEauHi8rjH5B3weOn1//tug== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: react: 18.2.0 dev: false /@nextui-org/use-update-effect@2.0.4(react@18.2.0): - resolution: {integrity: sha512-HycSl9Eopmy3ypZQxXVR7eov2D0q0zcgldgbIPvlKExbj8OInaIImc9zLMI9oQgfmg/YdvLeFSrfwc5BPrIvlg==} + resolution: + { + integrity: sha512-HycSl9Eopmy3ypZQxXVR7eov2D0q0zcgldgbIPvlKExbj8OInaIImc9zLMI9oQgfmg/YdvLeFSrfwc5BPrIvlg== + } peerDependencies: - react: '>=18' + react: ">=18" dependencies: react: 18.2.0 dev: false /@nextui-org/user@2.0.25(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Ykh65O0ynJBlstlZowM8KrX6zv/VLfDgYX892Dk0goLwU8gcSILPZE7yGIBZi1XsNN7mE3dmTp/APLFDbkzzXw==} - peerDependencies: - '@nextui-org/system': '>=2.0.0' - '@nextui-org/theme': '>=2.1.0' - react: '>=18' - react-dom: '>=18' - dependencies: - '@nextui-org/avatar': 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) - '@nextui-org/react-utils': 2.0.10(react@18.2.0) - '@nextui-org/shared-utils': 2.0.4(react@18.2.0) - '@nextui-org/system': 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) - '@nextui-org/theme': 2.1.17(tailwindcss@3.4.0) - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) + resolution: + { + integrity: sha512-Ykh65O0ynJBlstlZowM8KrX6zv/VLfDgYX892Dk0goLwU8gcSILPZE7yGIBZi1XsNN7mE3dmTp/APLFDbkzzXw== + } + peerDependencies: + "@nextui-org/system": ">=2.0.0" + "@nextui-org/theme": ">=2.1.0" + react: ">=18" + react-dom: ">=18" + dependencies: + "@nextui-org/avatar": 2.0.24(@nextui-org/system@2.0.15)(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0) + "@nextui-org/react-utils": 2.0.10(react@18.2.0) + "@nextui-org/shared-utils": 2.0.4(react@18.2.0) + "@nextui-org/system": 2.0.15(@nextui-org/theme@2.1.17)(react-dom@18.2.0)(react@18.2.0)(tailwind-variants@0.1.19) + "@nextui-org/theme": 2.1.17(tailwindcss@3.4.0) + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + } + engines: { node: ">= 8" } dependencies: - '@nodelib/fs.stat': 2.0.5 + "@nodelib/fs.stat": 2.0.5 run-parallel: 1.2.0 /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + } + engines: { node: ">= 8" } /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + } + engines: { node: ">= 8" } dependencies: - '@nodelib/fs.scandir': 2.1.5 + "@nodelib/fs.scandir": 2.1.5 fastq: 1.16.0 /@open-draft/deferred-promise@2.2.0: - resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + resolution: + { + integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + } dev: true /@open-draft/logger@0.3.0: - resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + resolution: + { + integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + } dependencies: is-node-process: 1.2.0 outvariant: 1.4.2 dev: true /@open-draft/until@2.1.0: - resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + resolution: + { + integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + } dev: true /@peculiar/asn1-schema@2.3.8: - resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==} + resolution: + { + integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA== + } dependencies: asn1js: 3.0.5 pvtsutils: 1.3.5 @@ -2948,863 +3571,1064 @@ packages: dev: true /@peculiar/json-schema@1.1.12: - resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== + } + engines: { node: ">=8.0.0" } dependencies: tslib: 2.6.2 dev: true /@peculiar/webcrypto@1.4.3: - resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} - engines: {node: '>=10.12.0'} - dependencies: - '@peculiar/asn1-schema': 2.3.8 - '@peculiar/json-schema': 1.1.12 + resolution: + { + integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A== + } + engines: { node: ">=10.12.0" } + dependencies: + "@peculiar/asn1-schema": 2.3.8 + "@peculiar/json-schema": 1.1.12 pvtsutils: 1.3.5 tslib: 2.6.2 webcrypto-core: 1.7.7 dev: true /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + } + engines: { node: ">=14" } requiresBuild: true optional: true /@react-aria/breadcrumbs@3.5.9(react@18.2.0): - resolution: {integrity: sha512-asbXTL5NjeHl1+YIF0K70y8tNHk8Lb6VneYH8yOkpLO49ejyNDYBK0tp0jtI9IZAQiTa2qkhYq58c9LloTwebQ==} + resolution: + { + integrity: sha512-asbXTL5NjeHl1+YIF0K70y8tNHk8Lb6VneYH8yOkpLO49ejyNDYBK0tp0jtI9IZAQiTa2qkhYq58c9LloTwebQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/link': 3.6.3(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/breadcrumbs': 3.7.2(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/link": 3.6.3(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/breadcrumbs": 3.7.2(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/button@3.9.1(react@18.2.0): - resolution: {integrity: sha512-nAnLMUAnwIVcRkKzS1G2IU6LZSkIWPJGu9amz/g7Y02cGUwFp3lk5bEw2LdoaXiSDJNSX8g0SZFU8FROg57jfQ==} + resolution: + { + integrity: sha512-nAnLMUAnwIVcRkKzS1G2IU6LZSkIWPJGu9amz/g7Y02cGUwFp3lk5bEw2LdoaXiSDJNSX8g0SZFU8FROg57jfQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/toggle': 3.7.0(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/toggle": 3.7.0(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/checkbox@3.13.0(react@18.2.0): - resolution: {integrity: sha512-eylJwtADIPKJ1Y5rITNJm/8JD8sXG2nhiZBIg1ko44Szxrpu+Le53NoGtg8nlrfh9vbUrXVvuFtf2jxbPXR5Jw==} + resolution: + { + integrity: sha512-eylJwtADIPKJ1Y5rITNJm/8JD8sXG2nhiZBIg1ko44Szxrpu+Le53NoGtg8nlrfh9vbUrXVvuFtf2jxbPXR5Jw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/form': 3.0.1(react@18.2.0) - '@react-aria/label': 3.7.4(react@18.2.0) - '@react-aria/toggle': 3.10.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/checkbox': 3.6.1(react@18.2.0) - '@react-stately/form': 3.0.0(react@18.2.0) - '@react-stately/toggle': 3.7.0(react@18.2.0) - '@react-types/checkbox': 3.6.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/form": 3.0.1(react@18.2.0) + "@react-aria/label": 3.7.4(react@18.2.0) + "@react-aria/toggle": 3.10.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/checkbox": 3.6.1(react@18.2.0) + "@react-stately/form": 3.0.0(react@18.2.0) + "@react-stately/toggle": 3.7.0(react@18.2.0) + "@react-types/checkbox": 3.6.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/combobox@3.8.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0Zsy91WC2uhnIjtProL1E5qRjBtRVdsNgpr8T9QCQht4i2sHd8L/srrOx7b6vRIngUMZq7GofOpQcKVdxx4kEA==} + resolution: + { + integrity: sha512-0Zsy91WC2uhnIjtProL1E5qRjBtRVdsNgpr8T9QCQht4i2sHd8L/srrOx7b6vRIngUMZq7GofOpQcKVdxx4kEA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/listbox': 3.11.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/live-announcer': 3.3.1 - '@react-aria/menu': 3.12.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/textfield': 3.14.0(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/combobox': 3.8.1(react@18.2.0) - '@react-stately/form': 3.0.0(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/combobox': 3.10.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/listbox": 3.11.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/live-announcer": 3.3.1 + "@react-aria/menu": 3.12.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/selection": 3.17.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/textfield": 3.14.0(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/combobox": 3.8.1(react@18.2.0) + "@react-stately/form": 3.0.0(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/combobox": 3.10.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/dialog@3.5.9(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Eg5pFJN3b5NitKL60nf30iPpQGCyOcU4YakUVn5+GWKLBlm8ryE8jyoIIO0e0LCM65K+fL+gGHGK01GCZyKrpQ==} + resolution: + { + integrity: sha512-Eg5pFJN3b5NitKL60nf30iPpQGCyOcU4YakUVn5+GWKLBlm8ryE8jyoIIO0e0LCM65K+fL+gGHGK01GCZyKrpQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/dialog': 3.5.7(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/dialog": 3.5.7(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/focus@3.16.0(react@18.2.0): - resolution: {integrity: sha512-GP6EYI07E8NKQQcXHjpIocEU0vh0oi0Vcsd+/71fKS0NnTR0TUOEeil0JuuQ9ymkmPDTu51Aaaa4FxVsuN/23A==} + resolution: + { + integrity: sha512-GP6EYI07E8NKQQcXHjpIocEU0vh0oi0Vcsd+/71fKS0NnTR0TUOEeil0JuuQ9ymkmPDTu51Aaaa4FxVsuN/23A== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 clsx: 2.1.0 react: 18.2.0 dev: false /@react-aria/form@3.0.1(react@18.2.0): - resolution: {integrity: sha512-6586oODMDR4/ciGRwXjpvEAg7tWGSDrXE//waK0n5e5sMuzlPOo1DHc5SpPTvz0XdJsu6VDt2rHdVWVIC9LEyw==} + resolution: + { + integrity: sha512-6586oODMDR4/ciGRwXjpvEAg7tWGSDrXE//waK0n5e5sMuzlPOo1DHc5SpPTvz0XdJsu6VDt2rHdVWVIC9LEyw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/form': 3.0.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/form": 3.0.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/grid@3.8.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-JlQDkdm5heG1FfRyy5KnB8b6s/hRqSI6Xt2xN2AccLX5kcbfFr2/d5KVxyf6ahfa4Gfd46alN6477ju5eTWJew==} + resolution: + { + integrity: sha512-JlQDkdm5heG1FfRyy5KnB8b6s/hRqSI6Xt2xN2AccLX5kcbfFr2/d5KVxyf6ahfa4Gfd46alN6477ju5eTWJew== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/live-announcer': 3.3.1 - '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/grid': 3.8.4(react@18.2.0) - '@react-stately/selection': 3.14.2(react@18.2.0) - '@react-stately/virtualizer': 3.6.6(react@18.2.0) - '@react-types/checkbox': 3.6.0(react@18.2.0) - '@react-types/grid': 3.2.3(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/live-announcer": 3.3.1 + "@react-aria/selection": 3.17.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/grid": 3.8.4(react@18.2.0) + "@react-stately/selection": 3.14.2(react@18.2.0) + "@react-stately/virtualizer": 3.6.6(react@18.2.0) + "@react-types/checkbox": 3.6.0(react@18.2.0) + "@react-types/grid": 3.2.3(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/i18n@3.10.0(react@18.2.0): - resolution: {integrity: sha512-sviD5Y1pLPG49HHRmVjR+5nONrp0HK219+nu9Y7cDfUhXu2EjyhMS9t/n9/VZ69hHChZ2PnHYLEE2visu9CuCg==} + resolution: + { + integrity: sha512-sviD5Y1pLPG49HHRmVjR+5nONrp0HK219+nu9Y7cDfUhXu2EjyhMS9t/n9/VZ69hHChZ2PnHYLEE2visu9CuCg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@internationalized/date': 3.5.1 - '@internationalized/message': 3.1.1 - '@internationalized/number': 3.5.0 - '@internationalized/string': 3.2.0 - '@react-aria/ssr': 3.9.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@internationalized/date": 3.5.1 + "@internationalized/message": 3.1.1 + "@internationalized/number": 3.5.0 + "@internationalized/string": 3.2.0 + "@react-aria/ssr": 3.9.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/interactions@3.20.1(react@18.2.0): - resolution: {integrity: sha512-PLNBr87+SzRhe9PvvF9qvzYeP4ofTwfKSorwmO+hjr3qoczrSXf4LRQlb27wB6hF10C7ZE/XVbUI1lj4QQrZ/g==} + resolution: + { + integrity: sha512-PLNBr87+SzRhe9PvvF9qvzYeP4ofTwfKSorwmO+hjr3qoczrSXf4LRQlb27wB6hF10C7ZE/XVbUI1lj4QQrZ/g== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/ssr': 3.9.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/ssr": 3.9.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/label@3.7.4(react@18.2.0): - resolution: {integrity: sha512-3Y0yyrqpLzZdzHw+TOyzwuyx5wa2ujU5DGfKuL5GFnU9Ii4DtdwBGSYS7Yu7qadU+eQmG4OGhAgFVswbIgIwJw==} + resolution: + { + integrity: sha512-3Y0yyrqpLzZdzHw+TOyzwuyx5wa2ujU5DGfKuL5GFnU9Ii4DtdwBGSYS7Yu7qadU+eQmG4OGhAgFVswbIgIwJw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/link@3.6.3(react@18.2.0): - resolution: {integrity: sha512-8kPWc4u/lDow3Ll0LDxeMgaxt9Y3sl8UldKLGli8tzRSltYFugNh/n+i9sCnmo4Qv9Tp9kYv+yxBK50Uk9sINw==} + resolution: + { + integrity: sha512-8kPWc4u/lDow3Ll0LDxeMgaxt9Y3sl8UldKLGli8tzRSltYFugNh/n+i9sCnmo4Qv9Tp9kYv+yxBK50Uk9sINw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/link': 3.5.2(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/link": 3.5.2(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/listbox@3.11.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PBrnldmyEYUUJvfDeljW8ITvZyBTfGpLNf0b5kfBPK3TDgRH4niEH2vYEcaZvSqb0FrpdvcunuTRXcOpfb+gCQ==} + resolution: + { + integrity: sha512-PBrnldmyEYUUJvfDeljW8ITvZyBTfGpLNf0b5kfBPK3TDgRH4niEH2vYEcaZvSqb0FrpdvcunuTRXcOpfb+gCQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/label': 3.7.4(react@18.2.0) - '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/list': 3.10.2(react@18.2.0) - '@react-types/listbox': 3.4.6(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/label": 3.7.4(react@18.2.0) + "@react-aria/selection": 3.17.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/list": 3.10.2(react@18.2.0) + "@react-types/listbox": 3.4.6(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/live-announcer@3.3.1: - resolution: {integrity: sha512-hsc77U7S16trM86d+peqJCOCQ7/smO1cybgdpOuzXyiwcHQw8RQ4GrXrS37P4Ux/44E9nMZkOwATQRT2aK8+Ew==} + resolution: + { + integrity: sha512-hsc77U7S16trM86d+peqJCOCQ7/smO1cybgdpOuzXyiwcHQw8RQ4GrXrS37P4Ux/44E9nMZkOwATQRT2aK8+Ew== + } dependencies: - '@swc/helpers': 0.5.2 + "@swc/helpers": 0.5.2 dev: false /@react-aria/menu@3.12.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Nsujv3b61WR0gybDKnBjAeyxDVJOfPLMggRUf9SQDfPWnrPXEsAFxaPaVcAkzlfI4HiQs1IxNwsKFNpc3PPZTQ==} + resolution: + { + integrity: sha512-Nsujv3b61WR0gybDKnBjAeyxDVJOfPLMggRUf9SQDfPWnrPXEsAFxaPaVcAkzlfI4HiQs1IxNwsKFNpc3PPZTQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/overlays': 3.20.0(react-dom@18.2.0)(react@18.2.0) - '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/menu': 3.6.0(react@18.2.0) - '@react-stately/tree': 3.7.5(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/menu': 3.9.6(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/overlays": 3.20.0(react-dom@18.2.0)(react@18.2.0) + "@react-aria/selection": 3.17.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/menu": 3.6.0(react@18.2.0) + "@react-stately/tree": 3.7.5(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/menu": 3.9.6(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/overlays@3.20.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2m7MpRJL5UucbEuu08lMHsiFJoDowkJV4JAIFBZYK1NzVH0vF/A+w9HRNM7jRwx2DUxE+iIsZnl8yKV/7KY8OQ==} + resolution: + { + integrity: sha512-2m7MpRJL5UucbEuu08lMHsiFJoDowkJV4JAIFBZYK1NzVH0vF/A+w9HRNM7jRwx2DUxE+iIsZnl8yKV/7KY8OQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/ssr': 3.9.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-stately/overlays': 3.6.4(react@18.2.0) - '@react-types/button': 3.9.1(react@18.2.0) - '@react-types/overlays': 3.8.4(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/ssr": 3.9.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-stately/overlays": 3.6.4(react@18.2.0) + "@react-types/button": 3.9.1(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/progress@3.4.9(react@18.2.0): - resolution: {integrity: sha512-CME1ZLsJHOmSgK8IAPOC/+vYO5Oc614mkEw5MluT/yclw5rMyjAkK1XsHLjEXy81uwPeiRyoQQIMPKG2/sMxFQ==} + resolution: + { + integrity: sha512-CME1ZLsJHOmSgK8IAPOC/+vYO5Oc614mkEw5MluT/yclw5rMyjAkK1XsHLjEXy81uwPeiRyoQQIMPKG2/sMxFQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/label': 3.7.4(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/progress': 3.5.1(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/label": 3.7.4(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/progress": 3.5.1(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/radio@3.10.0(react@18.2.0): - resolution: {integrity: sha512-6NaKzdGymdcVWLYgHT0cHsVmNzPOp89o8r41w29OPBQWu8w2c9mxg4366OiIZn/uXIBS4abhQ4nL4toBRLgBrg==} + resolution: + { + integrity: sha512-6NaKzdGymdcVWLYgHT0cHsVmNzPOp89o8r41w29OPBQWu8w2c9mxg4366OiIZn/uXIBS4abhQ4nL4toBRLgBrg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/form': 3.0.1(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/label': 3.7.4(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/radio': 3.10.1(react@18.2.0) - '@react-types/radio': 3.7.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/form": 3.0.1(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/label": 3.7.4(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/radio": 3.10.1(react@18.2.0) + "@react-types/radio": 3.7.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/selection@3.17.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-xl2sgeGH61ngQeE05WOWWPVpGRTPMjQEFmsAWEprArFi4Z7ihSZgpGX22l1w7uSmtXM/eN/v0W8hUYUju5iXlQ==} + resolution: + { + integrity: sha512-xl2sgeGH61ngQeE05WOWWPVpGRTPMjQEFmsAWEprArFi4Z7ihSZgpGX22l1w7uSmtXM/eN/v0W8hUYUju5iXlQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/selection': 3.14.2(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/selection": 3.14.2(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/slider@3.7.4(react@18.2.0): - resolution: {integrity: sha512-OFJWeGSL2duVDFs/kcjlWsY6bqCVKZgM0aFn2QN4wmID+vfBvBnqGHAgWv3BCePTAPS3+GBjMN002TrftorjwQ==} + resolution: + { + integrity: sha512-OFJWeGSL2duVDFs/kcjlWsY6bqCVKZgM0aFn2QN4wmID+vfBvBnqGHAgWv3BCePTAPS3+GBjMN002TrftorjwQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/label': 3.7.4(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/slider': 3.5.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/slider': 3.7.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/label": 3.7.4(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/slider": 3.5.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/slider": 3.7.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/ssr@3.9.1(react@18.2.0): - resolution: {integrity: sha512-NqzkLFP8ZVI4GSorS0AYljC13QW2sc8bDqJOkBvkAt3M8gbcAXJWVRGtZBCRscki9RZF+rNlnPdg0G0jYkhJcg==} - engines: {node: '>= 12'} + resolution: + { + integrity: sha512-NqzkLFP8ZVI4GSorS0AYljC13QW2sc8bDqJOkBvkAt3M8gbcAXJWVRGtZBCRscki9RZF+rNlnPdg0G0jYkhJcg== + } + engines: { node: ">= 12" } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@swc/helpers': 0.5.2 + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/switch@3.6.0(react@18.2.0): - resolution: {integrity: sha512-YNWc5fGLNXE4XlmDAKyqAdllRiClGR7ki4KGFY7nL+xR5jxzjCGU3S3ToMK5Op3QSMGZLxY/aYmC4O+MvcoADQ==} + resolution: + { + integrity: sha512-YNWc5fGLNXE4XlmDAKyqAdllRiClGR7ki4KGFY7nL+xR5jxzjCGU3S3ToMK5Op3QSMGZLxY/aYmC4O+MvcoADQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/toggle': 3.10.0(react@18.2.0) - '@react-stately/toggle': 3.7.0(react@18.2.0) - '@react-types/switch': 3.5.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/toggle": 3.10.0(react@18.2.0) + "@react-stately/toggle": 3.7.0(react@18.2.0) + "@react-types/switch": 3.5.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/table@3.13.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-AzmETpyxwNqISTzwHJPs85x9gujG40IIsSOBUdp49oKhB85RbPLvMwhadp4wCVAoHw3erOC/TJxHtVc7o2K1LA==} + resolution: + { + integrity: sha512-AzmETpyxwNqISTzwHJPs85x9gujG40IIsSOBUdp49oKhB85RbPLvMwhadp4wCVAoHw3erOC/TJxHtVc7o2K1LA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/grid': 3.8.6(react-dom@18.2.0)(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/live-announcer': 3.3.1 - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-aria/visually-hidden': 3.8.8(react@18.2.0) - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/flags': 3.0.0 - '@react-stately/table': 3.11.4(react@18.2.0) - '@react-stately/virtualizer': 3.6.6(react@18.2.0) - '@react-types/checkbox': 3.6.0(react@18.2.0) - '@react-types/grid': 3.2.3(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/table': 3.9.2(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/grid": 3.8.6(react-dom@18.2.0)(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/live-announcer": 3.3.1 + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-aria/visually-hidden": 3.8.8(react@18.2.0) + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/flags": 3.0.0 + "@react-stately/table": 3.11.4(react@18.2.0) + "@react-stately/virtualizer": 3.6.6(react@18.2.0) + "@react-types/checkbox": 3.6.0(react@18.2.0) + "@react-types/grid": 3.2.3(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/table": 3.9.2(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/tabs@3.8.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Plw0K/5Qv35vYq7pHZFfQB2BF5OClFx4Abzo9hLVx4oMy3qb7i5lxmLBVbt81yPX/MdjYeP4zO1EHGBl4zMRhA==} + resolution: + { + integrity: sha512-Plw0K/5Qv35vYq7pHZFfQB2BF5OClFx4Abzo9hLVx4oMy3qb7i5lxmLBVbt81yPX/MdjYeP4zO1EHGBl4zMRhA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/i18n': 3.10.0(react@18.2.0) - '@react-aria/selection': 3.17.3(react-dom@18.2.0)(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/tabs': 3.6.3(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/tabs': 3.3.4(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/i18n": 3.10.0(react@18.2.0) + "@react-aria/selection": 3.17.3(react-dom@18.2.0)(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/tabs": 3.6.3(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/tabs": 3.3.4(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /@react-aria/textfield@3.14.0(react@18.2.0): - resolution: {integrity: sha512-LtHFcPK/N9m3KWSRM5KdmlIk7cUEk0OF+uBUrfKsGGc1bJKVToimdW7jQusChHmHhslHUR7WQ4KDjXyFjoLXOw==} + resolution: + { + integrity: sha512-LtHFcPK/N9m3KWSRM5KdmlIk7cUEk0OF+uBUrfKsGGc1bJKVToimdW7jQusChHmHhslHUR7WQ4KDjXyFjoLXOw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/form': 3.0.1(react@18.2.0) - '@react-aria/label': 3.7.4(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/form': 3.0.0(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/textfield': 3.9.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/form": 3.0.1(react@18.2.0) + "@react-aria/label": 3.7.4(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/form": 3.0.0(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/textfield": 3.9.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/toggle@3.10.0(react@18.2.0): - resolution: {integrity: sha512-6cUf4V9TuG2J7AvXUdU/GspEPFCubUOID3mrselSe563RViy+mMZk0vUEOdyoNanDcEXl58W4dE3SGWxFn71vg==} + resolution: + { + integrity: sha512-6cUf4V9TuG2J7AvXUdU/GspEPFCubUOID3mrselSe563RViy+mMZk0vUEOdyoNanDcEXl58W4dE3SGWxFn71vg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/toggle': 3.7.0(react@18.2.0) - '@react-types/checkbox': 3.6.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/toggle": 3.7.0(react@18.2.0) + "@react-types/checkbox": 3.6.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/tooltip@3.7.0(react@18.2.0): - resolution: {integrity: sha512-+u9Sftkfe09IDyPEnbbreFKS50vh9X/WTa7n1u2y3PenI9VreLpUR6czyzda4BlvQ95e9jQz1cVxUjxTNaZmBw==} + resolution: + { + integrity: sha512-+u9Sftkfe09IDyPEnbbreFKS50vh9X/WTa7n1u2y3PenI9VreLpUR6czyzda4BlvQ95e9jQz1cVxUjxTNaZmBw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/focus': 3.16.0(react@18.2.0) - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-stately/tooltip': 3.4.6(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/tooltip': 3.4.6(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/focus": 3.16.0(react@18.2.0) + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-stately/tooltip": 3.4.6(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/tooltip": 3.4.6(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-aria/utils@3.23.0(react@18.2.0): - resolution: {integrity: sha512-fJA63/VU4iQNT8WUvrmll3kvToqMurD69CcgVmbQ56V7ZbvlzFi44E7BpnoaofScYLLtFWRjVdaHsohT6O/big==} + resolution: + { + integrity: sha512-fJA63/VU4iQNT8WUvrmll3kvToqMurD69CcgVmbQ56V7ZbvlzFi44E7BpnoaofScYLLtFWRjVdaHsohT6O/big== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/ssr': 3.9.1(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/ssr": 3.9.1(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 clsx: 2.1.0 react: 18.2.0 dev: false /@react-aria/visually-hidden@3.8.8(react@18.2.0): - resolution: {integrity: sha512-Cn2PYKD4ijGDtF0+dvsh8qa4y7KTNAlkTG6h20r8Q+6UTyRNmtE2/26QEaApRF8CBiNy9/BZC/ZC4FK2OjvCoA==} + resolution: + { + integrity: sha512-Cn2PYKD4ijGDtF0+dvsh8qa4y7KTNAlkTG6h20r8Q+6UTyRNmtE2/26QEaApRF8CBiNy9/BZC/ZC4FK2OjvCoA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/interactions': 3.20.1(react@18.2.0) - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/interactions": 3.20.1(react@18.2.0) + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/checkbox@3.6.1(react@18.2.0): - resolution: {integrity: sha512-rOjFeVBy32edYwhKiHj3ZLdLeO+xZ2fnBwxnOBjcygnw4Neygm8FJH/dB1J0hdYYR349yby86ED2x0wRc84zPw==} + resolution: + { + integrity: sha512-rOjFeVBy32edYwhKiHj3ZLdLeO+xZ2fnBwxnOBjcygnw4Neygm8FJH/dB1J0hdYYR349yby86ED2x0wRc84zPw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/form': 3.0.0(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/checkbox': 3.6.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/form": 3.0.0(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/checkbox": 3.6.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/collections@3.10.4(react@18.2.0): - resolution: {integrity: sha512-OHhCrItGt4zB2bSrgObRo0H2SC7QlkH8ReGxo+NVIWchXRLRoiWBP7S+IwleewEo5gOqDVPY3hqA9n4iiI8twg==} + resolution: + { + integrity: sha512-OHhCrItGt4zB2bSrgObRo0H2SC7QlkH8ReGxo+NVIWchXRLRoiWBP7S+IwleewEo5gOqDVPY3hqA9n4iiI8twg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/combobox@3.8.1(react@18.2.0): - resolution: {integrity: sha512-FaWkqTXQdWg7ptaeU4iPcqF/kxbRg2ZNUcvW/hiL/enciV5tRCsddvfNqvDvy1L30z9AUwlp9MWqzm/DhBITCw==} + resolution: + { + integrity: sha512-FaWkqTXQdWg7ptaeU4iPcqF/kxbRg2ZNUcvW/hiL/enciV5tRCsddvfNqvDvy1L30z9AUwlp9MWqzm/DhBITCw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/form': 3.0.0(react@18.2.0) - '@react-stately/list': 3.10.2(react@18.2.0) - '@react-stately/overlays': 3.6.4(react@18.2.0) - '@react-stately/select': 3.6.1(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/combobox': 3.10.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/form": 3.0.0(react@18.2.0) + "@react-stately/list": 3.10.2(react@18.2.0) + "@react-stately/overlays": 3.6.4(react@18.2.0) + "@react-stately/select": 3.6.1(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/combobox": 3.10.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/flags@3.0.0: - resolution: {integrity: sha512-e3i2ItHbIa0eEwmSXAnPdD7K8syW76JjGe8ENxwFJPW/H1Pu9RJfjkCb/Mq0WSPN/TpxBb54+I9TgrGhbCoZ9w==} + resolution: + { + integrity: sha512-e3i2ItHbIa0eEwmSXAnPdD7K8syW76JjGe8ENxwFJPW/H1Pu9RJfjkCb/Mq0WSPN/TpxBb54+I9TgrGhbCoZ9w== + } dependencies: - '@swc/helpers': 0.4.36 + "@swc/helpers": 0.4.36 dev: false /@react-stately/form@3.0.0(react@18.2.0): - resolution: {integrity: sha512-C8wkfFmtx1escizibhdka5JvTy9/Vp173CS9cakjvWTmnjYYC1nOlzwp7BsYWTgerCFbRY/BU/Cf/bJDxPiUKQ==} + resolution: + { + integrity: sha512-C8wkfFmtx1escizibhdka5JvTy9/Vp173CS9cakjvWTmnjYYC1nOlzwp7BsYWTgerCFbRY/BU/Cf/bJDxPiUKQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/grid@3.8.4(react@18.2.0): - resolution: {integrity: sha512-rwqV1K4lVhaiaqJkt4TfYqdJoVIyqvSm98rKAYfCNzrKcivVpoiCMJ2EMt6WlYCjDVBdEOQ7fMV1I60IV0pntA==} + resolution: + { + integrity: sha512-rwqV1K4lVhaiaqJkt4TfYqdJoVIyqvSm98rKAYfCNzrKcivVpoiCMJ2EMt6WlYCjDVBdEOQ7fMV1I60IV0pntA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/selection': 3.14.2(react@18.2.0) - '@react-types/grid': 3.2.3(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/selection": 3.14.2(react@18.2.0) + "@react-types/grid": 3.2.3(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/list@3.10.2(react@18.2.0): - resolution: {integrity: sha512-INt+zofkIg2KN8B95xPi9pJG7ZFWAm30oIm/lCPBqM3K1Nm03/QaAbiQj2QeJcOsG3lb7oqI6D6iwTolwJkjIQ==} + resolution: + { + integrity: sha512-INt+zofkIg2KN8B95xPi9pJG7ZFWAm30oIm/lCPBqM3K1Nm03/QaAbiQj2QeJcOsG3lb7oqI6D6iwTolwJkjIQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/selection': 3.14.2(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/selection": 3.14.2(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/menu@3.6.0(react@18.2.0): - resolution: {integrity: sha512-OB6CjNyfOkAuirqx1oTL8z8epS9WDzLyrXjmRnxdiCU9EgRXLGAQNECuO7VIpl58oDry8tgRJiJ8fn8FivWSQA==} + resolution: + { + integrity: sha512-OB6CjNyfOkAuirqx1oTL8z8epS9WDzLyrXjmRnxdiCU9EgRXLGAQNECuO7VIpl58oDry8tgRJiJ8fn8FivWSQA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/overlays': 3.6.4(react@18.2.0) - '@react-types/menu': 3.9.6(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/overlays": 3.6.4(react@18.2.0) + "@react-types/menu": 3.9.6(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/overlays@3.6.4(react@18.2.0): - resolution: {integrity: sha512-tHEaoAGpE9dSnsskqLPVKum59yGteoSqsniTopodM+miQozbpPlSjdiQnzGLroy5Afx5OZYClE616muNHUILXA==} + resolution: + { + integrity: sha512-tHEaoAGpE9dSnsskqLPVKum59yGteoSqsniTopodM+miQozbpPlSjdiQnzGLroy5Afx5OZYClE616muNHUILXA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/overlays': 3.8.4(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/radio@3.10.1(react@18.2.0): - resolution: {integrity: sha512-MsBYbcLCvjKsqTAKe43T681F2XwKMsS7PLG0eplZgWP9210AMY78GeY1XPYZKHPAau8XkbYiuJqbqTerIJ3DBw==} + resolution: + { + integrity: sha512-MsBYbcLCvjKsqTAKe43T681F2XwKMsS7PLG0eplZgWP9210AMY78GeY1XPYZKHPAau8XkbYiuJqbqTerIJ3DBw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/form': 3.0.0(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/radio': 3.7.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/form": 3.0.0(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/radio": 3.7.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/select@3.6.1(react@18.2.0): - resolution: {integrity: sha512-e5ixtLiYLlFWM8z1msDqXWhflF9esIRfroptZsltMn1lt2iImUlDRlOTZlMtPQzUrDWoiHXRX88sSKUM/jXjQQ==} + resolution: + { + integrity: sha512-e5ixtLiYLlFWM8z1msDqXWhflF9esIRfroptZsltMn1lt2iImUlDRlOTZlMtPQzUrDWoiHXRX88sSKUM/jXjQQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/form': 3.0.0(react@18.2.0) - '@react-stately/list': 3.10.2(react@18.2.0) - '@react-stately/overlays': 3.6.4(react@18.2.0) - '@react-types/select': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/form": 3.0.0(react@18.2.0) + "@react-stately/list": 3.10.2(react@18.2.0) + "@react-stately/overlays": 3.6.4(react@18.2.0) + "@react-types/select": 3.9.1(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/selection@3.14.2(react@18.2.0): - resolution: {integrity: sha512-mL7OoiUgVWaaF7ks5XSxgbXeShijYmD4G3bkBHhqkpugU600QH6BM2hloCq8KOUupk1y8oTljPtF9EmCv375DA==} + resolution: + { + integrity: sha512-mL7OoiUgVWaaF7ks5XSxgbXeShijYmD4G3bkBHhqkpugU600QH6BM2hloCq8KOUupk1y8oTljPtF9EmCv375DA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/slider@3.5.0(react@18.2.0): - resolution: {integrity: sha512-dOVpIxb7XKuiRxgpHt1bUSlsklciFki100tKIyBPR+Okar9iC/CwLYROYgVfLkGe77jEBNkor9tDLjDGEWcc1w==} + resolution: + { + integrity: sha512-dOVpIxb7XKuiRxgpHt1bUSlsklciFki100tKIyBPR+Okar9iC/CwLYROYgVfLkGe77jEBNkor9tDLjDGEWcc1w== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/slider': 3.7.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/slider": 3.7.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/table@3.11.4(react@18.2.0): - resolution: {integrity: sha512-dWINJIEOKQl4qq3moq+S8xCD3m+yJqBj0dahr+rOkS+t2uqORwzsusTM35D2T/ZHZi49S2GpE7QuDa+edCynPw==} + resolution: + { + integrity: sha512-dWINJIEOKQl4qq3moq+S8xCD3m+yJqBj0dahr+rOkS+t2uqORwzsusTM35D2T/ZHZi49S2GpE7QuDa+edCynPw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/flags': 3.0.0 - '@react-stately/grid': 3.8.4(react@18.2.0) - '@react-stately/selection': 3.14.2(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/grid': 3.2.3(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/table': 3.9.2(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/flags": 3.0.0 + "@react-stately/grid": 3.8.4(react@18.2.0) + "@react-stately/selection": 3.14.2(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/grid": 3.2.3(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/table": 3.9.2(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/tabs@3.6.3(react@18.2.0): - resolution: {integrity: sha512-Nj+Gacwa2SIzYIvHW40GsyX4Q6c8kF7GOuXESeQswbCjnwqhrSbDBp+ngPcUPUJxqFh6JhDCVwAS3wMhUoyUwA==} + resolution: + { + integrity: sha512-Nj+Gacwa2SIzYIvHW40GsyX4Q6c8kF7GOuXESeQswbCjnwqhrSbDBp+ngPcUPUJxqFh6JhDCVwAS3wMhUoyUwA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/list': 3.10.2(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@react-types/tabs': 3.3.4(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/list": 3.10.2(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@react-types/tabs": 3.3.4(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/toggle@3.7.0(react@18.2.0): - resolution: {integrity: sha512-TRksHkCJk/Xogq4181g3CYgJf+EfsJCqX5UZDSw1Z1Kgpvonjmdf6FAfQfCh9QR2OuXUL6hOLUDVLte5OPI+5g==} + resolution: + { + integrity: sha512-TRksHkCJk/Xogq4181g3CYgJf+EfsJCqX5UZDSw1Z1Kgpvonjmdf6FAfQfCh9QR2OuXUL6hOLUDVLte5OPI+5g== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/checkbox': 3.6.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/checkbox": 3.6.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/tooltip@3.4.6(react@18.2.0): - resolution: {integrity: sha512-uL93bmsXf+OOgpKLPEKfpDH4z+MK2CuqlqVxx7rshN0vjWOSoezE5nzwgee90+RpDrLNNNWTNa7n+NkDRpI1jA==} + resolution: + { + integrity: sha512-uL93bmsXf+OOgpKLPEKfpDH4z+MK2CuqlqVxx7rshN0vjWOSoezE5nzwgee90+RpDrLNNNWTNa7n+NkDRpI1jA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/overlays': 3.6.4(react@18.2.0) - '@react-types/tooltip': 3.4.6(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/overlays": 3.6.4(react@18.2.0) + "@react-types/tooltip": 3.4.6(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/tree@3.7.5(react@18.2.0): - resolution: {integrity: sha512-xTJVwvhAeY0N5rui4N/TxN7f8hjXdqApDuGDxMZeFAWoQz8Abf7LFKBVQ3OkT6qVr7P+23dgoisUDBhD5a45Hg==} + resolution: + { + integrity: sha512-xTJVwvhAeY0N5rui4N/TxN7f8hjXdqApDuGDxMZeFAWoQz8Abf7LFKBVQ3OkT6qVr7P+23dgoisUDBhD5a45Hg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-stately/collections': 3.10.4(react@18.2.0) - '@react-stately/selection': 3.14.2(react@18.2.0) - '@react-stately/utils': 3.9.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-stately/collections": 3.10.4(react@18.2.0) + "@react-stately/selection": 3.14.2(react@18.2.0) + "@react-stately/utils": 3.9.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/utils@3.9.0(react@18.2.0): - resolution: {integrity: sha512-yPKFY1F88HxuZ15BG2qwAYxtpE4HnIU0Ofi4CuBE0xC6I8mwo4OQjDzi+DZjxQngM9D6AeTTD6F1V8gkozA0Gw==} + resolution: + { + integrity: sha512-yPKFY1F88HxuZ15BG2qwAYxtpE4HnIU0Ofi4CuBE0xC6I8mwo4OQjDzi+DZjxQngM9D6AeTTD6F1V8gkozA0Gw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@swc/helpers': 0.5.2 + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-stately/virtualizer@3.6.6(react@18.2.0): - resolution: {integrity: sha512-9hWvfITdE/028q4YFve6FxlmA3PdSMkUwpYA+vfaGCXI/4DFZIssBMspUeu4PTRJoV+k+m0z1wYHPmufrq6a3g==} + resolution: + { + integrity: sha512-9hWvfITdE/028q4YFve6FxlmA3PdSMkUwpYA+vfaGCXI/4DFZIssBMspUeu4PTRJoV+k+m0z1wYHPmufrq6a3g== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/utils': 3.23.0(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) - '@swc/helpers': 0.5.2 + "@react-aria/utils": 3.23.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) + "@swc/helpers": 0.5.2 react: 18.2.0 dev: false /@react-types/accordion@3.0.0-alpha.17(react@18.2.0): - resolution: {integrity: sha512-Wsp31bYRu9wy4zAAV2W8FLvVGFF3Vk/JKn2MxqhzaSHwHBw/dfgJTvRRUW+OmBgnqVN97ur893TP9A3odpoZEg==} + resolution: + { + integrity: sha512-Wsp31bYRu9wy4zAAV2W8FLvVGFF3Vk/JKn2MxqhzaSHwHBw/dfgJTvRRUW+OmBgnqVN97ur893TP9A3odpoZEg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/breadcrumbs@3.7.2(react@18.2.0): - resolution: {integrity: sha512-esl6RucDW2CNMsApJxNYfMtDaUcfLlwKMPH/loYsOBbKxGl2HsgVLMcdpjEkTRs2HCTNCbBXWpeU8AY77t+bsw==} + resolution: + { + integrity: sha512-esl6RucDW2CNMsApJxNYfMtDaUcfLlwKMPH/loYsOBbKxGl2HsgVLMcdpjEkTRs2HCTNCbBXWpeU8AY77t+bsw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/link': 3.5.2(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/link": 3.5.2(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/button@3.9.1(react@18.2.0): - resolution: {integrity: sha512-bf9iTar3PtqnyV9rA+wyFyrskZKhwmOuOd/ifYIjPs56YNVXWH5Wfqj6Dx3xdFBgtKx8mEVQxVhoX+WkHX+rtw==} + resolution: + { + integrity: sha512-bf9iTar3PtqnyV9rA+wyFyrskZKhwmOuOd/ifYIjPs56YNVXWH5Wfqj6Dx3xdFBgtKx8mEVQxVhoX+WkHX+rtw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/checkbox@3.6.0(react@18.2.0): - resolution: {integrity: sha512-vgbuJzQpVCNT5AZWV0OozXCnihqrXxoZKfJFIw0xro47pT2sn3t5UC4RA9wfjDGMoK4frw1K/4HQLsQIOsPBkw==} + resolution: + { + integrity: sha512-vgbuJzQpVCNT5AZWV0OozXCnihqrXxoZKfJFIw0xro47pT2sn3t5UC4RA9wfjDGMoK4frw1K/4HQLsQIOsPBkw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/combobox@3.10.0(react@18.2.0): - resolution: {integrity: sha512-1IXSNS02TPbguyYopaW2snU6sZusbClHrEyVr4zPeexTV4kpUUBNXOzFQ+eSQRR0r2XW57Z0yRW4GJ6FGU0yCA==} + resolution: + { + integrity: sha512-1IXSNS02TPbguyYopaW2snU6sZusbClHrEyVr4zPeexTV4kpUUBNXOzFQ+eSQRR0r2XW57Z0yRW4GJ6FGU0yCA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/dialog@3.5.7(react@18.2.0): - resolution: {integrity: sha512-geYoqAyQaTLG43AaXdMUVqZXYgkSifrD9cF7lR2kPAT0uGFv0YREi6ieU+aui8XJ83EW0xcxP+EPWd2YkN4D4w==} + resolution: + { + integrity: sha512-geYoqAyQaTLG43AaXdMUVqZXYgkSifrD9cF7lR2kPAT0uGFv0YREi6ieU+aui8XJ83EW0xcxP+EPWd2YkN4D4w== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/overlays': 3.8.4(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/grid@3.2.3(react@18.2.0): - resolution: {integrity: sha512-GQM4RDmYhstcYZ0Odjq+xUwh1fhLmRebG6qMM8OXHTPQ77nhl3wc1UTGRhZm6mzEionplSRx4GCpEMEHMJIU0w==} + resolution: + { + integrity: sha512-GQM4RDmYhstcYZ0Odjq+xUwh1fhLmRebG6qMM8OXHTPQ77nhl3wc1UTGRhZm6mzEionplSRx4GCpEMEHMJIU0w== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/link@3.5.2(react@18.2.0): - resolution: {integrity: sha512-/s51/WejmpLiyxOgP89s4txgxYoGaPe8pVDItVo1h4+BhU1Puyvgv/Jx8t9dPvo6LUXbraaN+SgKk/QDxaiirw==} + resolution: + { + integrity: sha512-/s51/WejmpLiyxOgP89s4txgxYoGaPe8pVDItVo1h4+BhU1Puyvgv/Jx8t9dPvo6LUXbraaN+SgKk/QDxaiirw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/listbox@3.4.6(react@18.2.0): - resolution: {integrity: sha512-XOQvrTqNh5WIPDvKiWiep8T07RAsMfjAXTjDbnjxVlKACUXkcwpts9kFaLnJ9LJRFt6DwItfP+WMkzvmx63/NQ==} + resolution: + { + integrity: sha512-XOQvrTqNh5WIPDvKiWiep8T07RAsMfjAXTjDbnjxVlKACUXkcwpts9kFaLnJ9LJRFt6DwItfP+WMkzvmx63/NQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/menu@3.9.6(react@18.2.0): - resolution: {integrity: sha512-w/RbFInOf4nNayQDv5c2L8IMJbcFOkBhsT3xvvpTy+CHvJcQdjggwaV1sRiw7eF/PwB81k2CwigmidUzHJhKDg==} + resolution: + { + integrity: sha512-w/RbFInOf4nNayQDv5c2L8IMJbcFOkBhsT3xvvpTy+CHvJcQdjggwaV1sRiw7eF/PwB81k2CwigmidUzHJhKDg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/overlays': 3.8.4(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/overlays@3.8.4(react@18.2.0): - resolution: {integrity: sha512-pfgNlQnbF6RB/R2oSxyqAP3Uzz0xE/k5q4n5gUeCDNLjY5qxFHGE8xniZZ503nZYw6VBa9XMN1efDOKQyeiO0w==} + resolution: + { + integrity: sha512-pfgNlQnbF6RB/R2oSxyqAP3Uzz0xE/k5q4n5gUeCDNLjY5qxFHGE8xniZZ503nZYw6VBa9XMN1efDOKQyeiO0w== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/progress@3.5.1(react@18.2.0): - resolution: {integrity: sha512-CqsUjczUK/SfuFzDcajBBaXRTW0D3G9S/yqLDj9e8E0ii+lGDLt1PHj24t1J7E88U2rVYqmM9VL4NHTt8o3IYA==} + resolution: + { + integrity: sha512-CqsUjczUK/SfuFzDcajBBaXRTW0D3G9S/yqLDj9e8E0ii+lGDLt1PHj24t1J7E88U2rVYqmM9VL4NHTt8o3IYA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/radio@3.7.0(react@18.2.0): - resolution: {integrity: sha512-EcwGAXzSHjSqpFZha7xn3IUrhPiJLj+0yb1Ip0qPmhWz0VVw2DwrkY7q/jfaKroVvQhTo2TbfGhcsAQrt0fRqg==} + resolution: + { + integrity: sha512-EcwGAXzSHjSqpFZha7xn3IUrhPiJLj+0yb1Ip0qPmhWz0VVw2DwrkY7q/jfaKroVvQhTo2TbfGhcsAQrt0fRqg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/select@3.9.1(react@18.2.0): - resolution: {integrity: sha512-EpKSxrnh8HdZvOF9dHQkjivAcdIp1K81FaxmvosH8Lygqh0iYXxAdZGtKLMyBoPI8YFhA+rotIzTcOqgCCnqWA==} + resolution: + { + integrity: sha512-EpKSxrnh8HdZvOF9dHQkjivAcdIp1K81FaxmvosH8Lygqh0iYXxAdZGtKLMyBoPI8YFhA+rotIzTcOqgCCnqWA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/shared@3.22.0(react@18.2.0): - resolution: {integrity: sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA==} + resolution: + { + integrity: sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: @@ -3812,181 +4636,268 @@ packages: dev: false /@react-types/slider@3.7.0(react@18.2.0): - resolution: {integrity: sha512-uyQXUVFfqc9SPUW0LZLMan2n232F/OflRafiHXz9viLFa9tVOupVa7GhASRAoHojwkjoJ1LjFlPih7g5dOZ0/Q==} + resolution: + { + integrity: sha512-uyQXUVFfqc9SPUW0LZLMan2n232F/OflRafiHXz9viLFa9tVOupVa7GhASRAoHojwkjoJ1LjFlPih7g5dOZ0/Q== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/switch@3.5.0(react@18.2.0): - resolution: {integrity: sha512-/wNmUGjk69bP6t5k2QkAdrNN5Eb9Rz4dOyp0pCPmoeE+5haW6sV5NmtkvWX1NSc4DQz1xL/a5b+A0vxPCP22Jw==} + resolution: + { + integrity: sha512-/wNmUGjk69bP6t5k2QkAdrNN5Eb9Rz4dOyp0pCPmoeE+5haW6sV5NmtkvWX1NSc4DQz1xL/a5b+A0vxPCP22Jw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/table@3.9.2(react@18.2.0): - resolution: {integrity: sha512-brw5JUANOzBa2rYNpN8AIl9nDZ9RwRZC6G/wTM/JhtirjC1S42oCtf8Ap5rWJBdmMG/5KOfcGNcAl/huyqb3gg==} + resolution: + { + integrity: sha512-brw5JUANOzBa2rYNpN8AIl9nDZ9RwRZC6G/wTM/JhtirjC1S42oCtf8Ap5rWJBdmMG/5KOfcGNcAl/huyqb3gg== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/grid': 3.2.3(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/grid": 3.2.3(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/tabs@3.3.4(react@18.2.0): - resolution: {integrity: sha512-4mCTtFrwMRypyGTZCvNYVT9CkknexO/UYvqwDm2jMYb8JgjRvxnomu776Yh7uyiYKWyql2upm20jqasEOm620w==} + resolution: + { + integrity: sha512-4mCTtFrwMRypyGTZCvNYVT9CkknexO/UYvqwDm2jMYb8JgjRvxnomu776Yh7uyiYKWyql2upm20jqasEOm620w== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/textfield@3.9.0(react@18.2.0): - resolution: {integrity: sha512-D/DiwzsfkwlAg3uv8hoIfwju+zhB/hWDEdTvxQbPkntDr0kmN/QfI17NMSzbOBCInC4ABX87ViXLGxr940ykGA==} + resolution: + { + integrity: sha512-D/DiwzsfkwlAg3uv8hoIfwju+zhB/hWDEdTvxQbPkntDr0kmN/QfI17NMSzbOBCInC4ABX87ViXLGxr940ykGA== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@react-types/tooltip@3.4.6(react@18.2.0): - resolution: {integrity: sha512-RaZewdER7ZcsNL99RhVHs8kSLyzIBkwc0W6eFZrxST2MD9J5GzkVWRhIiqtFOd5U1aYnxdJ6woq72Ef+le6Vfw==} + resolution: + { + integrity: sha512-RaZewdER7ZcsNL99RhVHs8kSLyzIBkwc0W6eFZrxST2MD9J5GzkVWRhIiqtFOd5U1aYnxdJ6woq72Ef+le6Vfw== + } peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/overlays': 3.8.4(react@18.2.0) - '@react-types/shared': 3.22.0(react@18.2.0) + "@react-types/overlays": 3.8.4(react@18.2.0) + "@react-types/shared": 3.22.0(react@18.2.0) react: 18.2.0 dev: false /@repeaterjs/repeater@3.0.5: - resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==} + resolution: + { + integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA== + } dev: true /@swc/helpers@0.4.14: - resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} + resolution: + { + integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + } dependencies: tslib: 2.6.2 dev: false /@swc/helpers@0.4.36: - resolution: {integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==} + resolution: + { + integrity: sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q== + } dependencies: legacy-swc-helpers: /@swc/helpers@0.4.14 tslib: 2.6.2 dev: false /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + resolution: + { + integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== + } dependencies: tslib: 2.6.2 dev: false /@types/cookie@0.4.1: - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + resolution: + { + integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + } dev: true /@types/cookie@0.6.0: - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + resolution: + { + integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + } dev: false /@types/hoist-non-react-statics@3.3.5: - resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} + resolution: + { + integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + } dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 hoist-non-react-statics: 3.3.2 dev: false /@types/js-levenshtein@1.1.3: - resolution: {integrity: sha512-jd+Q+sD20Qfu9e2aEXogiO3vpOC1PYJOUdyN9gvs4Qrvkg4wF43L5OhqrPeokdv8TL0/mXoYfpkcoGZMNN2pkQ==} + resolution: + { + integrity: sha512-jd+Q+sD20Qfu9e2aEXogiO3vpOC1PYJOUdyN9gvs4Qrvkg4wF43L5OhqrPeokdv8TL0/mXoYfpkcoGZMNN2pkQ== + } dev: true /@types/js-yaml@4.0.9: - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + resolution: + { + integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== + } dev: true /@types/json-stable-stringify@1.0.36: - resolution: {integrity: sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw==} + resolution: + { + integrity: sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw== + } dev: true /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + resolution: + { + integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw== + } dependencies: undici-types: 5.26.5 dev: true /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + resolution: + { + integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + } /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + resolution: + { + integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== + } dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 dev: true /@types/react@18.2.45: - resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} + resolution: + { + integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg== + } dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 + "@types/prop-types": 15.7.11 + "@types/scheduler": 0.16.8 csstype: 3.1.3 /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + resolution: + { + integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== + } /@types/statuses@2.0.4: - resolution: {integrity: sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==} + resolution: + { + integrity: sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw== + } dev: true /@types/validator@13.11.7: - resolution: {integrity: sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q==} + resolution: + { + integrity: sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q== + } dev: true /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + resolution: + { + integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + } dependencies: - '@types/node': 20.10.5 + "@types/node": 20.10.5 dev: true /@whatwg-node/events@0.0.3: - resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} + resolution: + { + integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA== + } dev: true /@whatwg-node/events@0.1.1: - resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w== + } + engines: { node: ">=16.0.0" } dev: true /@whatwg-node/fetch@0.8.8: - resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} + resolution: + { + integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg== + } dependencies: - '@peculiar/webcrypto': 1.4.3 - '@whatwg-node/node-fetch': 0.3.6 + "@peculiar/webcrypto": 1.4.3 + "@whatwg-node/node-fetch": 0.3.6 busboy: 1.6.0 urlpattern-polyfill: 8.0.2 web-streams-polyfill: 3.2.1 dev: true /@whatwg-node/fetch@0.9.14: - resolution: {integrity: sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w== + } + engines: { node: ">=16.0.0" } dependencies: - '@whatwg-node/node-fetch': 0.5.3 + "@whatwg-node/node-fetch": 0.5.3 urlpattern-polyfill: 9.0.0 dev: true /@whatwg-node/node-fetch@0.3.6: - resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} + resolution: + { + integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA== + } dependencies: - '@whatwg-node/events': 0.0.3 + "@whatwg-node/events": 0.0.3 busboy: 1.6.0 fast-querystring: 1.1.2 fast-url-parser: 1.1.3 @@ -3994,40 +4905,55 @@ packages: dev: true /@whatwg-node/node-fetch@0.5.3: - resolution: {integrity: sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw==} - engines: {node: '>=16.0.0'} - dependencies: - '@kamilkisiela/fast-url-parser': 1.1.4 - '@whatwg-node/events': 0.1.1 + resolution: + { + integrity: sha512-toMC8N53RxgprcuU7Fc05KOrJhZV49njJCHPZvXBsjZMQBKrDm9o14Y56CsrUC85cvjQu862MaYOjd8rKgHdDw== + } + engines: { node: ">=16.0.0" } + dependencies: + "@kamilkisiela/fast-url-parser": 1.1.4 + "@whatwg-node/events": 0.1.1 busboy: 1.6.0 fast-querystring: 1.1.2 tslib: 2.6.2 dev: true /@wry/context@0.7.4: - resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== + } + engines: { node: ">=8" } dependencies: tslib: 2.6.2 dev: false /@wry/equality@0.5.7: - resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== + } + engines: { node: ">=8" } dependencies: tslib: 2.6.2 dev: false /@wry/trie@0.4.3: - resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w== + } + engines: { node: ">=8" } dependencies: tslib: 2.6.2 dev: false /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + } + engines: { node: ">= 14" } dependencies: debug: 4.3.4 transitivePeerDependencies: @@ -4035,73 +4961,115 @@ packages: dev: true /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + } + engines: { node: ">=8" } dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 dev: true /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + } + engines: { node: ">=8" } dependencies: type-fest: 0.21.3 dev: true /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + } + engines: { node: ">=8" } /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + } + engines: { node: ">=12" } /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + } + engines: { node: ">=4" } dependencies: color-convert: 1.9.3 /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + } + engines: { node: ">=8" } dependencies: color-convert: 2.0.1 /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + } + engines: { node: ">=12" } /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + resolution: + { + integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + } /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + } + engines: { node: ">= 8" } dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + resolution: + { + integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + } /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + } dev: true /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + } + engines: { node: ">=8" } dev: true /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + resolution: + { + integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + } dev: true /asn1js@3.0.5: - resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== + } + engines: { node: ">=12.0.0" } dependencies: pvtsutils: 1.3.5 pvutils: 1.1.3 @@ -4109,18 +5077,27 @@ packages: dev: true /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + } + engines: { node: ">=8" } dev: true /auto-bind@4.0.0: - resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ== + } + engines: { node: ">=8" } dev: true /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== + } + engines: { node: ^10 || ^12 || >=14 } hasBin: true peerDependencies: postcss: ^8.1.0 @@ -4135,57 +5112,75 @@ packages: dev: true /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: - resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + resolution: + { + integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== + } dev: true /babel-preset-fbjs@3.4.0(@babel/core@7.23.7): - resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.7) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) + resolution: + { + integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== + } + peerDependencies: + "@babel/core": ^7.0.0 + dependencies: + "@babel/core": 7.23.7 + "@babel/plugin-proposal-class-properties": 7.18.6(@babel/core@7.23.7) + "@babel/plugin-proposal-object-rest-spread": 7.20.7(@babel/core@7.23.7) + "@babel/plugin-syntax-class-properties": 7.12.13(@babel/core@7.23.7) + "@babel/plugin-syntax-flow": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-syntax-jsx": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.23.7) + "@babel/plugin-transform-arrow-functions": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-block-scoped-functions": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-block-scoping": 7.23.4(@babel/core@7.23.7) + "@babel/plugin-transform-classes": 7.23.5(@babel/core@7.23.7) + "@babel/plugin-transform-computed-properties": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-destructuring": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-flow-strip-types": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-for-of": 7.23.6(@babel/core@7.23.7) + "@babel/plugin-transform-function-name": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-literals": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-member-expression-literals": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-modules-commonjs": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-object-super": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-parameters": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-property-literals": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-react-display-name": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-react-jsx": 7.23.4(@babel/core@7.23.7) + "@babel/plugin-transform-shorthand-properties": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-spread": 7.23.3(@babel/core@7.23.7) + "@babel/plugin-transform-template-literals": 7.23.3(@babel/core@7.23.7) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 dev: true /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + } /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + resolution: + { + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + } dev: true /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + } + engines: { node: ">=8" } /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + resolution: + { + integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + } dependencies: buffer: 5.7.1 inherits: 2.0.4 @@ -4193,26 +5188,38 @@ packages: dev: true /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + resolution: + { + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + } dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + resolution: + { + integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + } dependencies: balanced-match: 1.0.2 /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + } + engines: { node: ">=8" } dependencies: fill-range: 7.0.1 /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + resolution: + { + integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true dependencies: caniuse-lite: 1.0.30001572 @@ -4221,26 +5228,38 @@ packages: update-browserslist-db: 1.0.13(browserslist@4.22.2) /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + resolution: + { + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + } dependencies: node-int64: 0.4.0 dev: true /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + resolution: + { + integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + } dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + resolution: + { + integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + } + engines: { node: ">=10.16.0" } dependencies: streamsearch: 1.1.0 /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + resolution: + { + integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + } dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 @@ -4248,31 +5267,49 @@ packages: dev: true /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + } + engines: { node: ">=6" } dev: true /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + resolution: + { + integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + } dependencies: pascal-case: 3.1.2 tslib: 2.6.2 dev: true /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + } + engines: { node: ">= 6" } /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + } + engines: { node: ">=6" } dev: true /caniuse-lite@1.0.30001572: - resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} + resolution: + { + integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw== + } /capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + resolution: + { + integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + } dependencies: no-case: 3.0.4 tslib: 2.6.2 @@ -4280,23 +5317,32 @@ packages: dev: true /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + } + engines: { node: ">=4" } dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + } + engines: { node: ">=10" } dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 dev: true /change-case-all@1.0.14: - resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} + resolution: + { + integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA== + } dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -4311,7 +5357,10 @@ packages: dev: true /change-case-all@1.0.15: - resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + resolution: + { + integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ== + } dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -4326,7 +5375,10 @@ packages: dev: true /change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + resolution: + { + integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + } dependencies: camel-case: 4.1.2 capital-case: 1.0.4 @@ -4343,12 +5395,18 @@ packages: dev: true /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + resolution: + { + integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + } dev: true /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + resolution: + { + integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + } + engines: { node: ">= 8.10.0" } dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -4361,41 +5419,62 @@ packages: fsevents: 2.3.3 /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + } + engines: { node: ">=6" } dev: true /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + } + engines: { node: ">=8" } dependencies: restore-cursor: 3.1.0 dev: true /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + } + engines: { node: ">=6" } dev: true /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + } + engines: { node: ">=8" } dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 dev: true /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + } + engines: { node: ">= 10" } dev: true /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + } dev: false /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + resolution: + { + integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + } dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -4403,8 +5482,11 @@ packages: dev: true /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + } + engines: { node: ">=12" } dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -4412,79 +5494,127 @@ packages: dev: true /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + } + engines: { node: ">=0.8" } dev: true /clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + } + engines: { node: ">=6" } dev: false /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== + } + engines: { node: ">=6" } dev: false /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + resolution: + { + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + } dependencies: color-name: 1.1.3 /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + } + engines: { node: ">=7.0.0" } dependencies: color-name: 1.1.4 /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + resolution: + { + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + } /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + } /color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + resolution: + { + integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + } dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 dev: false /color2k@2.0.3: - resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} + resolution: + { + integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog== + } dev: false /color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + resolution: + { + integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + } + engines: { node: ">=12.5.0" } dependencies: color-convert: 2.0.1 color-string: 1.9.1 dev: false /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + } dev: true /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + } + engines: { node: ">= 6" } /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} + resolution: + { + integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + } + engines: { node: ">=4.0.0" } dev: true /compute-scroll-into-view@3.1.0: - resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} + resolution: + { + integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg== + } dev: false /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + } dev: true /constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + resolution: + { + integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== + } dependencies: no-case: 3.0.4 tslib: 2.6.2 @@ -4492,30 +5622,45 @@ packages: dev: true /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + } /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + } + engines: { node: ">= 0.6" } dev: true /cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + } + engines: { node: ">= 0.6" } dev: false /copy-anything@3.0.5: - resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} - engines: {node: '>=12.13'} + resolution: + { + integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== + } + engines: { node: ">=12.13" } dependencies: is-what: 4.1.16 dev: false /cosmiconfig@8.3.6(typescript@5.3.3): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + } + engines: { node: ">=14" } peerDependencies: - typescript: '>=4.9.5' + typescript: ">=4.9.5" peerDependenciesMeta: typescript: optional: true @@ -4528,7 +5673,10 @@ packages: dev: true /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + resolution: + { + integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + } dependencies: node-fetch: 2.7.0 transitivePeerDependencies: @@ -4536,41 +5684,62 @@ packages: dev: true /cross-inspect@1.0.0: - resolution: {integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ== + } + engines: { node: ">=16.0.0" } dependencies: tslib: 2.6.2 dev: true /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + } + engines: { node: ">= 8" } dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + } + engines: { node: ">=4" } hasBin: true /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + resolution: + { + integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + } /dataloader@2.2.2: - resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + resolution: + { + integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== + } dev: true /debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + resolution: + { + integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + } dev: true /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true @@ -4578,24 +5747,36 @@ packages: ms: 2.1.2 /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + } + engines: { node: ">=0.10.0" } dev: true /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + } + engines: { node: ">=0.10.0" } dev: false /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + resolution: + { + integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + } dependencies: clone: 1.0.4 dev: true /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + } + engines: { node: ">= 0.4" } dependencies: get-intrinsic: 1.2.2 gopd: 1.0.1 @@ -4603,78 +5784,129 @@ packages: dev: true /dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} + resolution: + { + integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== + } + engines: { node: ">= 0.6.0" } dev: true /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + } + engines: { node: ">=8" } dev: true /detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + resolution: + { + integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + } dev: false /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + resolution: + { + integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + } /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + } + engines: { node: ">=8" } dependencies: path-type: 4.0.0 dev: true /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + resolution: + { + integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + } /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + resolution: + { + integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + } dependencies: no-case: 3.0.4 tslib: 2.6.2 dev: true /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + } + engines: { node: ">=12" } dev: true /dset@3.1.3: - resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ== + } + engines: { node: ">=4" } dev: true /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + resolution: + { + integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + } /electron-to-chromium@1.4.616: - resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} + resolution: + { + integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg== + } /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + } /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + } /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + } dependencies: is-arrayish: 0.2.1 dev: true /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + } + engines: { node: ">=6" } /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + } + engines: { node: ">=0.8.0" } /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + } + engines: { node: ">=4" } dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 @@ -4682,53 +5914,80 @@ packages: dev: true /extract-files@11.0.0: - resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} - engines: {node: ^12.20 || >= 14.13} + resolution: + { + integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== + } + engines: { node: ^12.20 || >= 14.13 } dev: true /fast-decode-uri-component@1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + resolution: + { + integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== + } dev: true /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 + resolution: + { + integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + } + engines: { node: ">=8.6.0" } + dependencies: + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 /fast-querystring@1.1.2: - resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + resolution: + { + integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== + } dependencies: fast-decode-uri-component: 1.0.1 dev: true /fast-url-parser@1.1.3: - resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + resolution: + { + integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + } dependencies: punycode: 1.4.1 dev: true /fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} + resolution: + { + integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + } dependencies: reusify: 1.0.4 /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + resolution: + { + integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + } dependencies: bser: 2.1.1 dev: true /fbjs-css-vars@1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + resolution: + { + integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + } dev: true /fbjs@3.0.5: - resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + resolution: + { + integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== + } dependencies: cross-fetch: 3.1.8 fbjs-css-vars: 1.0.2 @@ -4742,44 +6001,65 @@ packages: dev: true /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + } + engines: { node: ">=8" } dependencies: escape-string-regexp: 1.0.5 dev: true /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + } + engines: { node: ">=8" } dependencies: to-regex-range: 5.0.1 /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + } + engines: { node: ">=8" } dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + resolution: + { + integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + } hasBin: true dev: false /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + } + engines: { node: ">=14" } dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + resolution: + { + integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + } dev: true /framer-motion@10.16.16(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-je6j91rd7NmUX7L1XHouwJ4v3R+SO4umso2LUcgOct3rHZ0PajZ80ETYZTajzEXEl9DlKyzjyt4AvGQ+lrebOw==} + resolution: + { + integrity: sha512-je6j91rd7NmUX7L1XHouwJ4v3R+SO4umso2LUcgOct3rHZ0PajZ80ETYZTajzEXEl9DlKyzjyt4AvGQ+lrebOw== + } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -4793,34 +6073,52 @@ packages: react-dom: 18.2.0(react@18.2.0) tslib: 2.6.2 optionalDependencies: - '@emotion/is-prop-valid': 0.8.8 + "@emotion/is-prop-valid": 0.8.8 dev: false /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + } dev: true /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] requiresBuild: true optional: true /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + } /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + } + engines: { node: ">=6.9.0" } /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + } + engines: { node: 6.* || 8.* || >= 10.* } dev: true /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + resolution: + { + integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + } dependencies: function-bind: 1.1.2 has-proto: 1.0.1 @@ -4829,29 +6127,44 @@ packages: dev: true /get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + } + engines: { node: ">=6" } dev: false /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + } + engines: { node: ">= 6" } dependencies: is-glob: 4.0.3 /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + } + engines: { node: ">=10.13.0" } dependencies: is-glob: 4.0.3 /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + resolution: + { + integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + } dev: false /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + } + engines: { node: ">=16 || 14 >=14.17" } hasBin: true dependencies: foreground-child: 3.1.1 @@ -4861,7 +6174,10 @@ packages: path-scurry: 1.10.1 /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + } dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4872,12 +6188,18 @@ packages: dev: true /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + } + engines: { node: ">=4" } /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + } + engines: { node: ">=10" } dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -4888,7 +6210,10 @@ packages: dev: true /goober@2.1.13(csstype@3.1.3): - resolution: {integrity: sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==} + resolution: + { + integrity: sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ== + } peerDependencies: csstype: ^3.0.10 dependencies: @@ -4896,18 +6221,27 @@ packages: dev: false /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + } dependencies: get-intrinsic: 1.2.2 dev: true /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + } dev: false /graphql-config@5.0.3(@types/node@20.10.5)(graphql@16.8.1)(typescript@5.3.3): - resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} - engines: {node: '>= 16.0.0'} + resolution: + { + integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ== + } + engines: { node: ">= 16.0.0" } peerDependencies: cosmiconfig-toml-loader: ^1.0.0 graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -4915,12 +6249,12 @@ packages: cosmiconfig-toml-loader: optional: true dependencies: - '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) - '@graphql-tools/load': 8.0.1(graphql@16.8.1) - '@graphql-tools/merge': 9.0.1(graphql@16.8.1) - '@graphql-tools/url-loader': 8.0.1(@types/node@20.10.5)(graphql@16.8.1) - '@graphql-tools/utils': 10.0.12(graphql@16.8.1) + "@graphql-tools/graphql-file-loader": 8.0.0(graphql@16.8.1) + "@graphql-tools/json-file-loader": 8.0.0(graphql@16.8.1) + "@graphql-tools/load": 8.0.1(graphql@16.8.1) + "@graphql-tools/merge": 9.0.1(graphql@16.8.1) + "@graphql-tools/url-loader": 8.0.1(@types/node@20.10.5)(graphql@16.8.1) + "@graphql-tools/utils": 10.0.12(graphql@16.8.1) cosmiconfig: 8.3.6(typescript@5.3.3) graphql: 16.8.1 jiti: 1.21.0 @@ -4928,7 +6262,7 @@ packages: string-env-interpolation: 1.0.1 tslib: 2.6.2 transitivePeerDependencies: - - '@types/node' + - "@types/node" - bufferutil - encoding - typescript @@ -4936,11 +6270,14 @@ packages: dev: true /graphql-request@6.1.0(graphql@16.8.1): - resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + resolution: + { + integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw== + } peerDependencies: graphql: 14 - 16 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + "@graphql-typed-document-node/core": 3.2.0(graphql@16.8.1) cross-fetch: 3.1.8 graphql: 16.8.1 transitivePeerDependencies: @@ -4948,8 +6285,11 @@ packages: dev: true /graphql-tag@2.12.6(graphql@16.8.1): - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + } + engines: { node: ">=10" } peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: @@ -4957,69 +6297,105 @@ packages: tslib: 2.6.2 /graphql-ws@5.14.3(graphql@16.8.1): - resolution: {integrity: sha512-F/i2xNIVbaEF2xWggID0X/UZQa2V8kqKDPO8hwmu53bVOcTL7uNkxnexeEgSCVxYBQUTUNEI8+e4LO1FOhKPKQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-F/i2xNIVbaEF2xWggID0X/UZQa2V8kqKDPO8hwmu53bVOcTL7uNkxnexeEgSCVxYBQUTUNEI8+e4LO1FOhKPKQ== + } + engines: { node: ">=10" } peerDependencies: - graphql: '>=0.11 <=16' + graphql: ">=0.11 <=16" dependencies: graphql: 16.8.1 dev: true /graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + resolution: + { + integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + } + engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + } + engines: { node: ">=4" } /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + } + engines: { node: ">=8" } dev: true /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + resolution: + { + integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + } dependencies: get-intrinsic: 1.2.2 dev: true /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + } + engines: { node: ">= 0.4" } dev: true /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + } + engines: { node: ">= 0.4" } dev: true /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + } + engines: { node: ">= 0.4" } dependencies: function-bind: 1.1.2 /header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + resolution: + { + integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== + } dependencies: capital-case: 1.0.4 tslib: 2.6.2 dev: true /headers-polyfill@4.0.2: - resolution: {integrity: sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==} + resolution: + { + integrity: sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw== + } dev: true /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + resolution: + { + integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + } dependencies: react-is: 16.13.1 dev: false /http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== + } + engines: { node: ">= 14" } dependencies: agent-base: 7.1.0 debug: 4.3.4 @@ -5028,8 +6404,11 @@ packages: dev: true /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== + } + engines: { node: ">= 14" } dependencies: agent-base: 7.1.0 debug: 4.3.4 @@ -5038,58 +6417,88 @@ packages: dev: true /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + } + engines: { node: ">=0.10.0" } dependencies: safer-buffer: 2.1.2 dev: true /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + resolution: + { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + } dev: true /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + } + engines: { node: ">= 4" } dev: true /immutable@3.7.6: - resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} - engines: {node: '>=0.8.0'} + resolution: + { + integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw== + } + engines: { node: ">=0.8.0" } dev: true /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + } + engines: { node: ">=6" } dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 dev: true /import-from@4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} + resolution: + { + integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== + } + engines: { node: ">=12.2" } dev: true /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + } + engines: { node: ">=8" } dev: true /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + } dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + } dev: true /inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + } + engines: { node: ">=12.0.0" } dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -5109,172 +6518,268 @@ packages: dev: true /intl-messageformat@10.5.8: - resolution: {integrity: sha512-NRf0jpBWV0vd671G5b06wNofAN8tp7WWDogMZyaU8GUAsmbouyvgwmFJI7zLjfAMpm3zK+vSwRP3jzaoIcMbaA==} - dependencies: - '@formatjs/ecma402-abstract': 1.18.0 - '@formatjs/fast-memoize': 2.2.0 - '@formatjs/icu-messageformat-parser': 2.7.3 + resolution: + { + integrity: sha512-NRf0jpBWV0vd671G5b06wNofAN8tp7WWDogMZyaU8GUAsmbouyvgwmFJI7zLjfAMpm3zK+vSwRP3jzaoIcMbaA== + } + dependencies: + "@formatjs/ecma402-abstract": 1.18.0 + "@formatjs/fast-memoize": 2.2.0 + "@formatjs/icu-messageformat-parser": 2.7.3 tslib: 2.6.2 dev: false /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + resolution: + { + integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + } dependencies: loose-envify: 1.4.0 /is-absolute@1.0.0: - resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + } + engines: { node: ">=0.10.0" } dependencies: is-relative: 1.0.0 is-windows: 1.0.2 dev: true /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + } dev: true /is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + resolution: + { + integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + } dev: false /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + } + engines: { node: ">=8" } dependencies: binary-extensions: 2.2.0 /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + resolution: + { + integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + } dependencies: hasown: 2.0.0 /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + } + engines: { node: ">=0.10.0" } /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + } + engines: { node: ">=8" } /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + } + engines: { node: ">=0.10.0" } dependencies: is-extglob: 2.1.1 /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + } + engines: { node: ">=8" } dev: true /is-lower-case@2.0.2: - resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + resolution: + { + integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ== + } dependencies: tslib: 2.6.2 dev: true /is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + resolution: + { + integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== + } dev: true /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + } + engines: { node: ">=0.12.0" } /is-relative@1.0.0: - resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + } + engines: { node: ">=0.10.0" } dependencies: is-unc-path: 1.0.0 dev: true /is-unc-path@1.0.0: - resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + } + engines: { node: ">=0.10.0" } dependencies: unc-path-regex: 0.1.2 dev: true /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + } + engines: { node: ">=10" } dev: true /is-upper-case@2.0.2: - resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + resolution: + { + integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ== + } dependencies: tslib: 2.6.2 dev: true /is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} + resolution: + { + integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + } + engines: { node: ">=12.13" } dev: false /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + } + engines: { node: ">=0.10.0" } dev: true /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + } dev: true /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + } /isomorphic-ws@5.0.0(ws@8.16.0): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + resolution: + { + integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== + } peerDependencies: - ws: '*' + ws: "*" dependencies: ws: 8.16.0 dev: true /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + } + engines: { node: ">=14" } dependencies: - '@isaacs/cliui': 8.0.2 + "@isaacs/cliui": 8.0.2 optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + "@pkgjs/parseargs": 0.11.0 /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + resolution: + { + integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + } hasBin: true /jose@5.2.0: - resolution: {integrity: sha512-oW3PCnvyrcm1HMvGTzqjxxfnEs9EoFOFWi2HsEGhlFVOXxTE3K9GKWVMFoFw06yPUqwpvEWic1BmtUZBI/tIjw==} + resolution: + { + integrity: sha512-oW3PCnvyrcm1HMvGTzqjxxfnEs9EoFOFWi2HsEGhlFVOXxTE3K9GKWVMFoFw06yPUqwpvEWic1BmtUZBI/tIjw== + } dev: true /js-levenshtein@1.1.6: - resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + } + engines: { node: ">=0.10.0" } dev: true /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + } /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + } hasBin: true dependencies: argparse: 2.0.1 dev: true /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + } + engines: { node: ">=4" } hasBin: true /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + } dev: true /json-stable-stringify@1.1.0: - resolution: {integrity: sha512-zfA+5SuwYN2VWqN1/5HZaDzQKLJHaBVMZIIM+wuYjdptkaQsqzDdqjqf+lZZJUuJq1aanHiY8LhH8LmH+qBYJA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-zfA+5SuwYN2VWqN1/5HZaDzQKLJHaBVMZIIM+wuYjdptkaQsqzDdqjqf+lZZJUuJq1aanHiY8LhH8LmH+qBYJA== + } + engines: { node: ">= 0.4" } dependencies: call-bind: 1.0.5 isarray: 2.0.5 @@ -5283,38 +6788,59 @@ packages: dev: true /json-to-pretty-yaml@1.2.2: - resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} - engines: {node: '>= 0.2.0'} + resolution: + { + integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A== + } + engines: { node: ">= 0.2.0" } dependencies: remedial: 1.0.8 remove-trailing-spaces: 1.0.8 dev: true /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + } + engines: { node: ">=6" } hasBin: true /jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + resolution: + { + integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + } dev: true /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + } + engines: { node: ">=10" } /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + } + engines: { node: ">=14" } /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + } /listr2@4.0.5: - resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== + } + engines: { node: ">=12" } peerDependencies: - enquirer: '>= 2.3.0 < 3' + enquirer: ">= 2.3.0 < 3" peerDependenciesMeta: enquirer: optional: true @@ -5330,47 +6856,74 @@ packages: dev: true /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + } + engines: { node: ">=8" } dependencies: p-locate: 4.1.0 dev: true /lodash.foreach@4.5.0: - resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} + resolution: + { + integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== + } dev: false /lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + resolution: + { + integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + } dev: false /lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + resolution: + { + integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + } dev: false /lodash.mapkeys@4.6.0: - resolution: {integrity: sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA==} + resolution: + { + integrity: sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA== + } dev: false /lodash.omit@4.5.0: - resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + resolution: + { + integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== + } dev: false /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + } dev: true /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + } + engines: { node: ">=10" } dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 dev: true /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + } + engines: { node: ">=10" } dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 @@ -5379,111 +6932,159 @@ packages: dev: true /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + } hasBin: true dependencies: js-tokens: 4.0.0 /lower-case-first@2.0.2: - resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + resolution: + { + integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg== + } dependencies: tslib: 2.6.2 dev: true /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + resolution: + { + integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + } dependencies: tslib: 2.6.2 dev: true /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} + resolution: + { + integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + } + engines: { node: 14 || >=16.14 } /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + } dependencies: yallist: 3.1.1 /map-cache@0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + } + engines: { node: ">=0.10.0" } dev: true /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + } + engines: { node: ">= 8" } /meros@1.3.0(@types/node@20.10.5): - resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} - engines: {node: '>=13'} + resolution: + { + integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w== + } + engines: { node: ">=13" } peerDependencies: - '@types/node': '>=13' + "@types/node": ">=13" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true dependencies: - '@types/node': 20.10.5 + "@types/node": 20.10.5 dev: true /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + } + engines: { node: ">=8.6" } dependencies: braces: 3.0.2 picomatch: 2.3.1 /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + } + engines: { node: ">=6" } dev: true /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + } dependencies: brace-expansion: 1.1.11 dev: true /minimatch@4.2.3: - resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng== + } + engines: { node: ">=10" } dependencies: brace-expansion: 1.1.11 dev: true /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + } + engines: { node: ">=16 || 14 >=14.17" } dependencies: brace-expansion: 2.0.1 /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + } + engines: { node: ">=16 || 14 >=14.17" } /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + resolution: + { + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + } /msw@2.0.11(typescript@5.3.3): - resolution: {integrity: sha512-dAXFS2DxZX0uFqMPhS3oUAu8S/5IQ5qKKSwtXl3/dMTeML0C8JfSvbeWtowYg6pu4Iehgp5L/pHLrlIcG++y/A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-dAXFS2DxZX0uFqMPhS3oUAu8S/5IQ5qKKSwtXl3/dMTeML0C8JfSvbeWtowYg6pu4Iehgp5L/pHLrlIcG++y/A== + } + engines: { node: ">=18" } hasBin: true requiresBuild: true peerDependencies: - typescript: '>= 4.7.x <= 5.2.x' + typescript: ">= 4.7.x <= 5.2.x" peerDependenciesMeta: typescript: optional: true dependencies: - '@bundled-es-modules/cookie': 2.0.0 - '@bundled-es-modules/js-levenshtein': 2.0.1 - '@bundled-es-modules/statuses': 1.0.1 - '@mswjs/cookies': 1.1.0 - '@mswjs/interceptors': 0.25.13 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.4.1 - '@types/js-levenshtein': 1.1.3 - '@types/statuses': 2.0.4 + "@bundled-es-modules/cookie": 2.0.0 + "@bundled-es-modules/js-levenshtein": 2.0.1 + "@bundled-es-modules/statuses": 1.0.1 + "@mswjs/cookies": 1.1.0 + "@mswjs/interceptors": 0.25.13 + "@open-draft/until": 2.1.0 + "@types/cookie": 0.4.1 + "@types/js-levenshtein": 1.1.3 + "@types/statuses": 2.0.4 chalk: 4.1.2 chokidar: 3.5.3 graphql: 16.8.1 @@ -5500,38 +7101,50 @@ packages: dev: true /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + resolution: + { + integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + } dev: true /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + resolution: + { + integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + } dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { + integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true /next@14.0.4(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} - engines: {node: '>=18.17.0'} + resolution: + { + integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA== + } + engines: { node: ">=18.17.0" } hasBin: true peerDependencies: - '@opentelemetry/api': ^1.1.0 + "@opentelemetry/api": ^1.1.0 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 peerDependenciesMeta: - '@opentelemetry/api': + "@opentelemetry/api": optional: true sass: optional: true dependencies: - '@next/env': 14.0.4 - '@swc/helpers': 0.5.2 + "@next/env": 14.0.4 + "@swc/helpers": 0.5.2 busboy: 1.6.0 caniuse-lite: 1.0.30001572 graceful-fs: 4.2.11 @@ -5541,30 +7154,36 @@ packages: styled-jsx: 5.1.1(@babel/core@7.23.7)(react@18.2.0) watchpack: 2.4.0 optionalDependencies: - '@next/swc-darwin-arm64': 14.0.4 - '@next/swc-darwin-x64': 14.0.4 - '@next/swc-linux-arm64-gnu': 14.0.4 - '@next/swc-linux-arm64-musl': 14.0.4 - '@next/swc-linux-x64-gnu': 14.0.4 - '@next/swc-linux-x64-musl': 14.0.4 - '@next/swc-win32-arm64-msvc': 14.0.4 - '@next/swc-win32-ia32-msvc': 14.0.4 - '@next/swc-win32-x64-msvc': 14.0.4 + "@next/swc-darwin-arm64": 14.0.4 + "@next/swc-darwin-x64": 14.0.4 + "@next/swc-linux-arm64-gnu": 14.0.4 + "@next/swc-linux-arm64-musl": 14.0.4 + "@next/swc-linux-x64-gnu": 14.0.4 + "@next/swc-linux-x64-musl": 14.0.4 + "@next/swc-win32-arm64-msvc": 14.0.4 + "@next/swc-win32-ia32-msvc": 14.0.4 + "@next/swc-win32-x64-msvc": 14.0.4 transitivePeerDependencies: - - '@babel/core' + - "@babel/core" - babel-plugin-macros dev: false /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + resolution: + { + integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + } dependencies: lower-case: 2.0.2 tslib: 2.6.2 dev: true /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} + resolution: + { + integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + } + engines: { node: 4.x || >=6.0.0 } peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -5575,69 +7194,108 @@ packages: dev: true /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + resolution: + { + integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + } dev: true /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + resolution: + { + integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + } /normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== + } + engines: { node: ">=0.10.0" } dependencies: remove-trailing-separator: 1.1.0 dev: true /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + } + engines: { node: ">=0.10.0" } /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + } + engines: { node: ">=0.10.0" } dev: true /nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + resolution: + { + integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== + } dev: true /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + } + engines: { node: ">=0.10.0" } /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + } + engines: { node: ">= 6" } /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + } + engines: { node: ">= 0.4" } dev: true /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + } dependencies: wrappy: 1.0.2 dev: true /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + } + engines: { node: ">=6" } dependencies: mimic-fn: 2.1.0 dev: true /optimism@0.17.5: - resolution: {integrity: sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw==} + resolution: + { + integrity: sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw== + } dependencies: - '@wry/context': 0.7.4 - '@wry/trie': 0.4.3 + "@wry/context": 0.7.4 + "@wry/trie": 0.4.3 tslib: 2.6.2 dev: false /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + } + engines: { node: ">=10" } dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -5651,64 +7309,94 @@ packages: dev: true /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + } + engines: { node: ">=0.10.0" } dev: true /outvariant@1.4.2: - resolution: {integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==} + resolution: + { + integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== + } dev: true /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + } + engines: { node: ">=6" } dependencies: p-try: 2.2.0 dev: true /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + } + engines: { node: ">=10" } dependencies: yocto-queue: 0.1.0 dev: true /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + } + engines: { node: ">=8" } dependencies: p-limit: 2.3.0 dev: true /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + } + engines: { node: ">=10" } dependencies: aggregate-error: 3.1.0 dev: true /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + } + engines: { node: ">=6" } dev: true /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + resolution: + { + integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + } dependencies: dot-case: 3.0.4 tslib: 2.6.2 dev: true /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + } + engines: { node: ">=6" } dependencies: callsites: 3.1.0 dev: true /parse-filepath@1.0.2: - resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== + } + engines: { node: ">=0.8" } dependencies: is-absolute: 1.0.0 map-cache: 0.2.2 @@ -5716,92 +7404,143 @@ packages: dev: true /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + } + engines: { node: ">=8" } dependencies: - '@babel/code-frame': 7.23.5 + "@babel/code-frame": 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 dev: true /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + resolution: + { + integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + } dependencies: no-case: 3.0.4 tslib: 2.6.2 dev: true /path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + resolution: + { + integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== + } dependencies: dot-case: 3.0.4 tslib: 2.6.2 dev: true /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + } + engines: { node: ">=8" } dev: true /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + } + engines: { node: ">=0.10.0" } dev: true /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + } + engines: { node: ">=8" } /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + } /path-root-regex@0.1.2: - resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== + } + engines: { node: ">=0.10.0" } dev: true /path-root@0.1.1: - resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== + } + engines: { node: ">=0.10.0" } dependencies: path-root-regex: 0.1.2 dev: true /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + } + engines: { node: ">=16 || 14 >=14.17" } dependencies: lru-cache: 10.1.0 minipass: 7.0.4 /path-to-regexp@6.2.1: - resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + resolution: + { + integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== + } dev: true /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + } + engines: { node: ">=8" } dev: true /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + resolution: + { + integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + } /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + } + engines: { node: ">=8.6" } /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + } + engines: { node: ">=0.10.0" } /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + } + engines: { node: ">= 6" } /postcss-import@15.1.0(postcss@8.4.32): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + } + engines: { node: ">=14.0.0" } peerDependencies: postcss: ^8.0.0 dependencies: @@ -5811,8 +7550,11 @@ packages: resolve: 1.22.8 /postcss-js@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} + resolution: + { + integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + } + engines: { node: ^12 || ^14 || >= 16 } peerDependencies: postcss: ^8.4.21 dependencies: @@ -5820,11 +7562,14 @@ packages: postcss: 8.4.32 /postcss-load-config@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' + resolution: + { + integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + } + engines: { node: ">= 14" } + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" peerDependenciesMeta: postcss: optional: true @@ -5836,8 +7581,11 @@ packages: yaml: 2.3.4 /postcss-nested@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} + resolution: + { + integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + } + engines: { node: ">=12.0" } peerDependencies: postcss: ^8.2.14 dependencies: @@ -5845,18 +7593,27 @@ packages: postcss-selector-parser: 6.0.14 /postcss-selector-parser@6.0.14: - resolution: {integrity: sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA== + } + engines: { node: ">=4" } dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + resolution: + { + integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + } /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + } + engines: { node: ^10 || ^12 || >=14 } dependencies: nanoid: 3.3.7 picocolors: 1.0.0 @@ -5864,21 +7621,30 @@ packages: dev: false /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== + } + engines: { node: ^10 || ^12 || >=14 } dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 /promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + resolution: + { + integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + } dependencies: asap: 2.0.6 dev: true /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + resolution: + { + integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + } dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 @@ -5886,36 +7652,54 @@ packages: dev: false /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + resolution: + { + integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + } dev: true /pvtsutils@1.3.5: - resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + resolution: + { + integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA== + } dependencies: tslib: 2.6.2 dev: true /pvutils@1.1.3: - resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== + } + engines: { node: ">=6.0.0" } dev: true /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + } /react-cookie@6.1.3(react@18.2.0): - resolution: {integrity: sha512-cOToXQPdxvLfK0MH4ZFrrL3cOpDwbboKupFS96MCvrHsHMABMk48vdd1fRWkNG6F5D1JZMvoI5Y74sj8vtHGpA==} + resolution: + { + integrity: sha512-cOToXQPdxvLfK0MH4ZFrrL3cOpDwbboKupFS96MCvrHsHMABMk48vdd1fRWkNG6F5D1JZMvoI5Y74sj8vtHGpA== + } peerDependencies: - react: '>= 16.3.0' + react: ">= 16.3.0" dependencies: - '@types/hoist-non-react-statics': 3.3.5 + "@types/hoist-non-react-statics": 3.3.5 hoist-non-react-statics: 3.3.2 react: 18.2.0 universal-cookie: 6.1.3 dev: false /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + resolution: + { + integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + } peerDependencies: react: ^18.2.0 dependencies: @@ -5925,8 +7709,11 @@ packages: dev: false /react-hook-form@7.49.2(react@18.2.0): - resolution: {integrity: sha512-TZcnSc17+LPPVpMRIDNVITY6w20deMdNi6iehTFLV1x8SqThXGwu93HjlUVU09pzFgZH7qZOvLMM7UYf2ShAHA==} - engines: {node: '>=18', pnpm: '8'} + resolution: + { + integrity: sha512-TZcnSc17+LPPVpMRIDNVITY6w20deMdNi6iehTFLV1x8SqThXGwu93HjlUVU09pzFgZH7qZOvLMM7UYf2ShAHA== + } + engines: { node: ">=18", pnpm: "8" } peerDependencies: react: ^16.8.0 || ^17 || ^18 dependencies: @@ -5934,11 +7721,14 @@ packages: dev: false /react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ== + } + engines: { node: ">=10" } peerDependencies: - react: '>=16' - react-dom: '>=16' + react: ">=16" + react-dom: ">=16" dependencies: goober: 2.1.13(csstype@3.1.3) react: 18.2.0 @@ -5948,36 +7738,45 @@ packages: dev: false /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + resolution: + { + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + } dev: false /react-remove-scroll-bar@2.3.4(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== + } + engines: { node: ">=10" } peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.45)(react@18.2.0) tslib: 2.6.2 dev: false /react-remove-scroll@2.5.7(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA== + } + engines: { node: ">=10" } peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.2.45)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.45)(react@18.2.0) @@ -5987,16 +7786,19 @@ packages: dev: false /react-style-singleton@2.2.1(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + } + engines: { node: ">=10" } peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -6004,34 +7806,46 @@ packages: dev: false /react-textarea-autosize@8.5.3(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ== + } + engines: { node: ">=10" } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.7 + "@babel/runtime": 7.23.7 react: 18.2.0 use-composed-ref: 1.3.0(react@18.2.0) use-latest: 1.2.1(@types/react@18.2.45)(react@18.2.0) transitivePeerDependencies: - - '@types/react' + - "@types/react" dev: false /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + } + engines: { node: ">=0.10.0" } dependencies: loose-envify: 1.4.0 dev: false /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + resolution: + { + integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + } dependencies: pify: 2.3.0 /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + } + engines: { node: ">= 6" } dependencies: inherits: 2.0.4 string_decoder: 1.3.0 @@ -6039,18 +7853,27 @@ packages: dev: true /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + resolution: + { + integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + } + engines: { node: ">=8.10.0" } dependencies: picomatch: 2.3.1 /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + resolution: + { + integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + } /relay-runtime@12.0.0: - resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + resolution: + { + integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug== + } dependencies: - '@babel/runtime': 7.23.7 + "@babel/runtime": 7.23.7 fbjs: 3.0.5 invariant: 2.2.4 transitivePeerDependencies: @@ -6058,38 +7881,62 @@ packages: dev: true /remedial@1.0.8: - resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + resolution: + { + integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg== + } dev: true /remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + resolution: + { + integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== + } dev: true /remove-trailing-spaces@1.0.8: - resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} + resolution: + { + integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA== + } dev: true /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + } + engines: { node: ">=0.10.0" } dev: true /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolution: + { + integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + } dev: true /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + } + engines: { node: ">=4" } dev: true /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + } + engines: { node: ">=8" } dev: true /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolution: + { + integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + } hasBin: true dependencies: is-core-module: 2.13.1 @@ -6097,72 +7944,114 @@ packages: supports-preserve-symlinks-flag: 1.0.0 /response-iterator@0.2.6: - resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== + } + engines: { node: ">=0.8" } dev: false /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + } + engines: { node: ">=8" } dependencies: onetime: 5.1.2 signal-exit: 3.0.7 dev: true /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + resolution: + { + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + resolution: + { + integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + } dev: true /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + } + engines: { node: ">=0.12.0" } dev: true /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + } dependencies: queue-microtask: 1.2.3 /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + resolution: + { + integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + } dependencies: tslib: 2.6.2 dev: true /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + resolution: + { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + } dev: true /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + } dev: true /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + resolution: + { + integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + } dependencies: loose-envify: 1.4.0 dev: false /scroll-into-view-if-needed@3.0.10: - resolution: {integrity: sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==} + resolution: + { + integrity: sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg== + } dependencies: compute-scroll-into-view: 3.1.0 dev: false /scuid@1.1.0: - resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + resolution: + { + integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg== + } dev: true /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + } hasBin: true /sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + resolution: + { + integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + } dependencies: no-case: 3.0.4 tslib: 2.6.2 @@ -6170,16 +8059,25 @@ packages: dev: true /server-only@0.0.1: - resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + resolution: + { + integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== + } dev: false /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + resolution: + { + integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + } dev: true /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + } + engines: { node: ">= 0.4" } dependencies: define-data-property: 1.1.1 get-intrinsic: 1.2.2 @@ -6188,49 +8086,79 @@ packages: dev: true /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + resolution: + { + integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + } dev: true /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + } + engines: { node: ">=8" } dependencies: shebang-regex: 3.0.0 /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + } + engines: { node: ">=8" } /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + resolution: + { + integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + } dev: true /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + } dev: true /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + } + engines: { node: ">=14" } /signedsource@1.0.0: - resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + resolution: + { + integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww== + } dev: true /simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + resolution: + { + integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + } dependencies: is-arrayish: 0.3.2 dev: false /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + } + engines: { node: ">=8" } dev: true /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + } + engines: { node: ">=8" } dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 @@ -6238,8 +8166,11 @@ packages: dev: true /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + } + engines: { node: ">=10" } dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 @@ -6247,97 +8178,139 @@ packages: dev: true /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + resolution: + { + integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + } dependencies: dot-case: 3.0.4 tslib: 2.6.2 dev: true /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + } + engines: { node: ">=0.10.0" } /sponge-case@1.0.1: - resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + resolution: + { + integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA== + } dependencies: tslib: 2.6.2 dev: true /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + } + engines: { node: ">= 0.8" } dev: true /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + } + engines: { node: ">=10.0.0" } /strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + resolution: + { + integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== + } dev: true /string-env-interpolation@1.0.1: - resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + resolution: + { + integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== + } dev: true /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + } + engines: { node: ">=8" } dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + } + engines: { node: ">=12" } dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + resolution: + { + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + } dependencies: safe-buffer: 5.2.1 dev: true /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + } + engines: { node: ">=8" } dependencies: ansi-regex: 5.0.1 /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + } + engines: { node: ">=12" } dependencies: ansi-regex: 6.0.1 /styled-jsx@5.1.1(@babel/core@7.23.7)(react@18.2.0): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + resolution: + { + integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + } + engines: { node: ">= 12.0.0" } + peerDependencies: + "@babel/core": "*" + babel-plugin-macros: "*" + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" peerDependenciesMeta: - '@babel/core': + "@babel/core": optional: true babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.7 + "@babel/core": 7.23.7 client-only: 0.0.1 react: 18.2.0 dev: false /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + } + engines: { node: ">=16 || 14 >=14.17" } hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.3 + "@jridgewell/gen-mapping": 0.3.3 commander: 4.1.1 glob: 10.3.10 lines-and-columns: 1.2.4 @@ -6346,60 +8319,87 @@ packages: ts-interface-checker: 0.1.13 /superjson@1.13.3: - resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg== + } + engines: { node: ">=10" } dependencies: copy-anything: 3.0.5 dev: false /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + } + engines: { node: ">=4" } dependencies: has-flag: 3.0.0 /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + } + engines: { node: ">=8" } dependencies: has-flag: 4.0.0 dev: true /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + } + engines: { node: ">= 0.4" } /swap-case@2.0.2: - resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + resolution: + { + integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw== + } dependencies: tslib: 2.6.2 dev: true /symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + } + engines: { node: ">=0.10" } dev: false /tailwind-merge@1.14.0: - resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + resolution: + { + integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ== + } dev: false /tailwind-variants@0.1.19(tailwindcss@3.4.0): - resolution: {integrity: sha512-D9Yf5WqsxodnCtjZt6KifEoKwW8rTURXQV03KRKlojITQM5gV1vPVWufWNiIvd/ptC3QybYFpwmHK9cs4Ei08Q==} - engines: {node: '>=16.x', pnpm: '>=7.x'} + resolution: + { + integrity: sha512-D9Yf5WqsxodnCtjZt6KifEoKwW8rTURXQV03KRKlojITQM5gV1vPVWufWNiIvd/ptC3QybYFpwmHK9cs4Ei08Q== + } + engines: { node: ">=16.x", pnpm: ">=7.x" } peerDependencies: - tailwindcss: '*' + tailwindcss: "*" dependencies: tailwind-merge: 1.14.0 tailwindcss: 3.4.0 dev: false /tailwindcss@3.4.0: - resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA== + } + engines: { node: ">=14.0.0" } hasBin: true dependencies: - '@alloc/quick-lru': 5.2.0 + "@alloc/quick-lru": 5.2.0 arg: 5.0.2 chokidar: 3.5.3 didyoumean: 1.2.2 @@ -6425,162 +8425,249 @@ packages: - ts-node /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + } + engines: { node: ">=0.8" } dependencies: thenify: 3.3.1 /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + resolution: + { + integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + } dependencies: any-promise: 1.3.0 /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + resolution: + { + integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + } dev: true /title-case@3.0.3: - resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + resolution: + { + integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA== + } dependencies: tslib: 2.6.2 dev: true /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + resolution: + { + integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + } + engines: { node: ">=0.6.0" } dependencies: os-tmpdir: 1.0.2 dev: true /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + } + engines: { node: ">=4" } /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + } + engines: { node: ">=8.0" } dependencies: is-number: 7.0.0 /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + resolution: + { + integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + } dev: true /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + resolution: + { + integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + } /ts-invariant@0.10.3: - resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== + } + engines: { node: ">=8" } dependencies: tslib: 2.6.2 dev: false /ts-log@2.2.5: - resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} + resolution: + { + integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA== + } dev: true /tslib@2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + resolution: + { + integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + } dev: true /tslib@2.5.3: - resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + resolution: + { + integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + } dev: true /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + resolution: + { + integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + } /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + } + engines: { node: ">=10" } dev: true /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} + resolution: + { + integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + } + engines: { node: ">=12.20" } dev: true /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + } + engines: { node: ">=14.17" } hasBin: true dev: true /ua-parser-js@1.0.37: - resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} + resolution: + { + integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== + } dev: true /unc-path-regex@0.1.2: - resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== + } + engines: { node: ">=0.10.0" } dev: true /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + resolution: + { + integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + } dev: true /universal-cookie@6.1.3: - resolution: {integrity: sha512-AETYRrhpRgl9T1YtnODmQE32G81U3A+f3HO3ZeK7efbXqe3x+RNOW4RTpV0iff7zJWhGYJA6EI0Mm+w50aFTAw==} + resolution: + { + integrity: sha512-AETYRrhpRgl9T1YtnODmQE32G81U3A+f3HO3ZeK7efbXqe3x+RNOW4RTpV0iff7zJWhGYJA6EI0Mm+w50aFTAw== + } dependencies: - '@types/cookie': 0.6.0 + "@types/cookie": 0.6.0 cookie: 0.6.0 dev: false /unixify@1.0.0: - resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg== + } + engines: { node: ">=0.10.0" } dependencies: normalize-path: 2.1.1 dev: true /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + resolution: + { + integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + } hasBin: true peerDependencies: - browserslist: '>= 4.21.0' + browserslist: ">= 4.21.0" dependencies: browserslist: 4.22.2 escalade: 3.1.1 picocolors: 1.0.0 /upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + resolution: + { + integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== + } dependencies: tslib: 2.6.2 dev: true /upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + resolution: + { + integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + } dependencies: tslib: 2.6.2 dev: true /urlpattern-polyfill@8.0.2: - resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + resolution: + { + integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== + } dev: true /urlpattern-polyfill@9.0.0: - resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + resolution: + { + integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g== + } dev: true /use-callback-ref@1.3.1(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ== + } + engines: { node: ">=10" } peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 react: 18.2.0 tslib: 2.6.2 dev: false /use-composed-ref@1.3.0(react@18.2.0): - resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} + resolution: + { + integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: @@ -6588,115 +8675,160 @@ packages: dev: false /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + resolution: + { + integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 react: 18.2.0 dev: false /use-latest@1.2.1(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} + resolution: + { + integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + } peerDependencies: - '@types/react': '*' + "@types/react": "*" react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 react: 18.2.0 use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.45)(react@18.2.0) dev: false /use-sidecar@1.1.2(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + } + engines: { node: ">=10" } peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - '@types/react': + "@types/react": optional: true dependencies: - '@types/react': 18.2.45 + "@types/react": 18.2.45 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 dev: false /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + } /validator@13.11.0: - resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} - engines: {node: '>= 0.10'} + resolution: + { + integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + } + engines: { node: ">= 0.10" } dev: false /value-or-promise@1.0.12: - resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== + } + engines: { node: ">=12" } dev: true /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + } + engines: { node: ">=10.13.0" } dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 dev: false /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + resolution: + { + integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + } dependencies: defaults: 1.0.4 dev: true /web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + } + engines: { node: ">= 8" } dev: true /webcrypto-core@1.7.7: - resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} + resolution: + { + integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g== + } dependencies: - '@peculiar/asn1-schema': 2.3.8 - '@peculiar/json-schema': 1.1.12 + "@peculiar/asn1-schema": 2.3.8 + "@peculiar/json-schema": 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.5 tslib: 2.6.2 dev: true /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + resolution: + { + integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + } dev: true /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + resolution: + { + integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + } dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: true /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + resolution: + { + integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + } dev: true /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + } + engines: { node: ">= 8" } hasBin: true dependencies: isexe: 2.0.0 /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + } + engines: { node: ">=8" } dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 @@ -6704,31 +8836,43 @@ packages: dev: true /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + } + engines: { node: ">=10" } dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + } + engines: { node: ">=12" } dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + } dev: true /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + } + engines: { node: ">=10.0.0" } peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true @@ -6737,41 +8881,65 @@ packages: dev: true /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + resolution: + { + integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + } dev: true /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + } + engines: { node: ">=10" } dev: true /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + } /yaml-ast-parser@0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + resolution: + { + integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== + } dev: true /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== + } + engines: { node: ">= 14" } /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + } + engines: { node: ">=6" } dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + } + engines: { node: ">=12" } dev: true /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + } + engines: { node: ">=8" } dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -6787,8 +8955,11 @@ packages: dev: true /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + } + engines: { node: ">=12" } dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -6800,20 +8971,32 @@ packages: dev: true /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + } + engines: { node: ">=10" } dev: true /zen-observable-ts@1.2.5: - resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + resolution: + { + integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== + } dependencies: zen-observable: 0.8.15 dev: false /zen-observable@0.8.15: - resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + resolution: + { + integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== + } dev: false /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + resolution: + { + integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== + } dev: false diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js index 33ad091..941cff2 100644 --- a/frontend/postcss.config.js +++ b/frontend/postcss.config.js @@ -1,6 +1,6 @@ module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, + plugins: { + tailwindcss: {}, + autoprefixer: {} + } } diff --git a/frontend/tailwind.config.ts b/frontend/tailwind.config.ts index c244608..34fca02 100644 --- a/frontend/tailwind.config.ts +++ b/frontend/tailwind.config.ts @@ -1,13 +1,11 @@ import type { Config } from "tailwindcss" const config: Config = { - content: [ - "./node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}" - ], + content: ["./node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}"], theme: { - extends: { } + extends: {} }, darkMode: "class" } -export default config \ No newline at end of file +export default config diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index c714696..f862f65 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -1,27 +1,27 @@ { - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] } diff --git a/kubernetes/operators/application/main.go b/kubernetes/operators/application/main.go index ebc04d7..50b62f6 100644 --- a/kubernetes/operators/application/main.go +++ b/kubernetes/operators/application/main.go @@ -15,15 +15,15 @@ import ( "k8s.io/client-go/util/homedir" ) -func main( ) { +func main() { var kubeconfigFilepath *string - if homeDir := homedir.HomeDir( ); homeDir != "" { - kubeconfigFilepath= flag.String("kubeconfig", filepath.Join(homeDir, ".kube", "config"), "(optional) absolute path to the kubeconfig file") + if homeDir := homedir.HomeDir(); homeDir != "" { + kubeconfigFilepath = flag.String("kubeconfig", filepath.Join(homeDir, ".kube", "config"), "(optional) absolute path to the kubeconfig file") } else { - kubeconfigFilepath= flag.String("kubeconfig", "", "absolute path to the kubeconfig file") + kubeconfigFilepath = flag.String("kubeconfig", "", "absolute path to the kubeconfig file") } - flag.Parse( ) + flag.Parse() kubeconfig, err := clientcmd.BuildConfigFromFlags("", *kubeconfigFilepath) if err != nil { @@ -33,27 +33,31 @@ func main( ) { // In-cluster configuration allows applications running in a pod to automatically connect to the // Kubernetes API using the service account (mounted on the pod) credentials and API server // endpoint information injected by the cluster. - if kubeconfig, err= rest.InClusterConfig( ); err != nil { - log.Fatalf("Error building kubeconfig from in-cluster config : %v", err)} + if kubeconfig, err = rest.InClusterConfig(); err != nil { + log.Fatalf("Error building kubeconfig from in-cluster config : %v", err) + } } - ctx := setupGracefullShutdownHandler( ) + ctx := setupGracefullShutdownHandler() kubeclient, err := kubernetes.NewForConfig(kubeconfig) if err != nil { - log.Errorf("Error creating Kubernetes API server client : %v", err)} + log.Errorf("Error creating Kubernetes API server client : %v", err) + } clientset, err := clientset.NewForConfig(kubeconfig) if err != nil { - log.Errorf("Error creating Kubernetes API server client (for Application resource type) : %v", err)} + log.Errorf("Error creating Kubernetes API server client (for Application resource type) : %v", err) + } - informerFactory := informers.NewSharedInformerFactory(clientset, 20 * time.Second) - informer := informerFactory.Instagramclone( ).V1alpha1( ).Applications( ) + informerFactory := informers.NewSharedInformerFactory(clientset, 20*time.Second) + informer := informerFactory.Instagramclone().V1alpha1().Applications() controller := controller.NewController(kubeclient, clientset, informer) - informerFactory.Start(ctx.Done( )) + informerFactory.Start(ctx.Done()) if err := controller.Run(ctx); err != nil { - log.Errorf("Error running controller : %v", err)} -} \ No newline at end of file + log.Errorf("Error running controller : %v", err) + } +} diff --git a/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/doc.go b/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/doc.go index 8733ac3..c5afb85 100644 --- a/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/doc.go +++ b/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/doc.go @@ -2,4 +2,4 @@ // +k8s:defaulter-gen=TypeMeta // +groupName=instagramclone.io -package v1alpha1 \ No newline at end of file +package v1alpha1 diff --git a/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/register.go b/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/register.go index cc95a15..91b479a 100644 --- a/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/register.go +++ b/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/register.go @@ -7,27 +7,27 @@ import ( ) var ( - SchemeGroupVersion= schema.GroupVersion { - Group: "instagramclone.io", + SchemeGroupVersion = schema.GroupVersion{ + Group: "instagramclone.io", Version: "v1alpha1", } SchemeBuilder runtime.SchemeBuilder - AddToScheme= SchemeBuilder.AddToScheme + AddToScheme = SchemeBuilder.AddToScheme ) func Resource(resource string) schema.GroupResource { - return SchemeGroupVersion.WithResource(resource).GroupResource( ) + return SchemeGroupVersion.WithResource(resource).GroupResource() } -func init( ) { +func init() { // Registering the custom resource types with the Kubernetes API server. SchemeBuilder.Register( func(s *runtime.Scheme) error { - s.AddKnownTypes(SchemeGroupVersion, &Application{ }, &ApplicationList{ }) + s.AddKnownTypes(SchemeGroupVersion, &Application{}, &ApplicationList{}) metav1.AddToGroupVersion(s, SchemeGroupVersion) return nil }, ) -} \ No newline at end of file +} diff --git a/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/types.go b/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/types.go index 13ba7d5..5ffbfe1 100644 --- a/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/types.go +++ b/kubernetes/operators/application/pkg/apis/instagramclone.io/v1alpha1/types.go @@ -9,16 +9,16 @@ type ( // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object Application struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` Spec ApplicationSpec `json:"spec,omitempty"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object ApplicationList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` Items []Application `json:"items,omitempty"` } @@ -44,4 +44,4 @@ type ( Min int32 `json:"min,omitempty"` Max int32 `json:"max,omitempty"` } -) \ No newline at end of file +) diff --git a/kubernetes/operators/application/pkg/controller/application.go b/kubernetes/operators/application/pkg/controller/application.go index 12e2241..21826d7 100644 --- a/kubernetes/operators/application/pkg/controller/application.go +++ b/kubernetes/operators/application/pkg/controller/application.go @@ -54,7 +54,7 @@ type ( 3. Informers are built on top of listers and are responsible for watching changes to resources in the cluster. They continuously synchronize the local cache with the cluster state. */ - clientset clientset.Interface + clientset clientset.Interface applicationLister lister.ApplicationLister // informerSynced is a function that can be used to determine if the informer has synced the // lister cache. @@ -71,7 +71,7 @@ type ( Operation struct { _type int - key string + key string } ) @@ -80,11 +80,11 @@ func NewController(kubeclient *kubernetes.Clientset, clientset clientset.Interfa runtime.Must(applicationScheme.AddToScheme(scheme.Scheme)) // An event broadcaster can broadcast events to multiple sinks like API server and standard log. - eventBroadcaster := record.NewBroadcaster( ) + eventBroadcaster := record.NewBroadcaster() // This starts recording events to the API server event sink. It uses the CoreV1 client to send // events to the /events endpoint of the related Application resource. eventBroadcaster.StartRecordingToSink(&typedCoreV1.EventSinkImpl{ - Interface: kubeclient.CoreV1( ).Events(""), + Interface: kubeclient.CoreV1().Events(""), }) controller := &Controller{ @@ -92,18 +92,18 @@ func NewController(kubeclient *kubernetes.Clientset, clientset clientset.Interfa kubeclient: kubeclient, - clientset: clientset, - applicationLister: informer.Lister( ), - informerSynced: informer.Informer( ).HasSynced, + clientset: clientset, + applicationLister: informer.Lister(), + informerSynced: informer.Informer().HasSynced, - workQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter( ), "application"), + workQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "application"), - eventRecorder: eventBroadcaster.NewRecorder(scheme.Scheme, coreV1.EventSource{ Component: "Application" }), + eventRecorder: eventBroadcaster.NewRecorder(scheme.Scheme, coreV1.EventSource{Component: "Application"}), } log.Info("Setting up event handlers in informer factory") - informer.Informer( ).AddEventHandler(cache.ResourceEventHandlerFuncs{ - AddFunc: controller.handleObjectAdded, + informer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: controller.handleObjectAdded, UpdateFunc: controller.handleObjectUpdated, DeleteFunc: controller.handleObjectDeleted, }) @@ -113,20 +113,20 @@ func NewController(kubeclient *kubernetes.Clientset, clientset clientset.Interfa // handleObjectAdded is invoked when an Application object is created in the cluster. It takes the // Application object, constructs its 'namespace/name' key and puts the key into the work queue. -func(c *Controller) handleObjectAdded(obj interface{}) { +func (c *Controller) handleObjectAdded(obj interface{}) { key, err := cache.MetaNamespaceKeyFunc(obj) if err != nil { runtime.HandleError(err) return } - c.workQueue.Add(Operation { + c.workQueue.Add(Operation{ _type: CREATE_OPERATION, - key: key, + key: key, }) } -func(c *Controller) handleObjectUpdated(oldObj interface{}, newObj interface{}) { +func (c *Controller) handleObjectUpdated(oldObj interface{}, newObj interface{}) { if oldObj == newObj { return } @@ -137,24 +137,24 @@ func(c *Controller) handleObjectUpdated(oldObj interface{}, newObj interface{}) return } - c.workQueue.Add(Operation { + c.workQueue.Add(Operation{ _type: UPDATE_OPERATION, - key: key, + key: key, }) } // handleObjectDeleted is invoked when an Application object is deleted from the cluster. It adds // the object to the work-queue. -func(c *Controller) handleObjectDeleted(obj interface{}) { +func (c *Controller) handleObjectDeleted(obj interface{}) { key, err := cache.MetaNamespaceKeyFunc(obj) if err != nil { runtime.HandleError(err) return } - c.workQueue.Add(Operation { + c.workQueue.Add(Operation{ _type: DELETE_OPERATION, - key: key, + key: key, }) } @@ -162,38 +162,40 @@ func(c *Controller) handleObjectDeleted(obj interface{}) { // caches and starting workers. It will block until stopCh (in the informerFactory) is closed, at // which point it will shutdown the workqueue and wait for workers to finish processing their // current work items. -func(c *Controller) Run(ctx context.Context) error { +func (c *Controller) Run(ctx context.Context) error { log.Info("Starting Application controller") - defer runtime.HandleCrash( ) - defer c.workQueue.ShutDown( ) + defer runtime.HandleCrash() + defer c.workQueue.ShutDown() // Start the informer factory to begin populating the informer cache. Wait for the cache to be // synced before starting any workers. log.Info("Waiting for informer caches to sync") - if ok := cache.WaitForCacheSync(ctx.Done( ), c.informerSynced); !ok { - return fmt.Errorf("failed waiting for informer cache to sync")} + if ok := cache.WaitForCacheSync(ctx.Done(), c.informerSynced); !ok { + return fmt.Errorf("failed waiting for informer cache to sync") + } // Launch a worker to process Application resources. log.Info("Starting worker to process Application resources") go wait.UntilWithContext(ctx, c.processWorkQueueItems, time.Second) log.Info("Worker started") - <-ctx.Done( ) + <-ctx.Done() log.Info("Shutting down worker") return nil } // processWorkQueueItems is a long-running method that will continually call the // processNextWorkQueueItem function in order to read and process an event int the work-queue. -func(c *Controller) processWorkQueueItems(ctx context.Context) { - for c.processNextWorkQueueItem(ctx) { } +func (c *Controller) processWorkQueueItems(ctx context.Context) { + for c.processNextWorkQueueItem(ctx) { + } } // processNextWorkQueueItem will read a single work item off the work-queue and attempt to process // it, by calling the syncHandler method. -func(c *Controller) processNextWorkQueueItem(ctx context.Context) bool { - obj, shutdown := c.workQueue.Get( ) +func (c *Controller) processNextWorkQueueItem(ctx context.Context) bool { + obj, shutdown := c.workQueue.Get() if shutdown { return false } @@ -215,7 +217,7 @@ func(c *Controller) processNextWorkQueueItem(ctx context.Context) bool { if err := c.syncHandler(ctx, operation); err != nil { // Put the item back in the work-queue to handle any transient errors. c.workQueue.AddRateLimited(operation) - return fmt.Errorf("error syncing '%s': %s, requeuing", operation.key, err.Error( )) + return fmt.Errorf("error syncing '%s': %s, requeuing", operation.key, err.Error()) } c.workQueue.Forget(obj) @@ -224,14 +226,15 @@ func(c *Controller) processNextWorkQueueItem(ctx context.Context) bool { }(obj) if err != nil { - runtime.HandleError(err)} + runtime.HandleError(err) + } return true } // syncHandler compares the actual state with the desired (for an Application resource), and // attempts to converge the two. -func(c *Controller) syncHandler(ctx context.Context, operation Operation) error { +func (c *Controller) syncHandler(ctx context.Context, operation Operation) error { key := operation.key logger := log.With("resourceKey", key) @@ -242,21 +245,22 @@ func(c *Controller) syncHandler(ctx context.Context, operation Operation) error } switch operation._type { - // If the Application resource is deleted. - case DELETE_OPERATION: { - if err := c.kubeclient.AppsV1( ).Deployments(namespace).Delete(ctx, name, metav1.DeleteOptions{ }); err != nil { + // If the Application resource is deleted. + case DELETE_OPERATION: + { + if err := c.kubeclient.AppsV1().Deployments(namespace).Delete(ctx, name, metav1.DeleteOptions{}); err != nil { logger.Errorf("Error deleting Kubernetes Deployment : %v", err) return err } logger.Info("Successfully deleted Kubernetes Deployment") - if err := c.kubeclient.AutoscalingV2( ).HorizontalPodAutoscalers(namespace).Delete(ctx, name, metav1.DeleteOptions{ }); err != nil { + if err := c.kubeclient.AutoscalingV2().HorizontalPodAutoscalers(namespace).Delete(ctx, name, metav1.DeleteOptions{}); err != nil { logger.Errorf("Error deleting Kubernetes Horizontal Pod Autoscaler : %v", err) return err } logger.Info("Successfully deleted Kubernetes Horizontal Pod Autoscaler") - if err := c.kubeclient.CoreV1( ).Services(namespace).Delete(ctx, name, metav1.DeleteOptions{ }); err != nil { + if err := c.kubeclient.CoreV1().Services(namespace).Delete(ctx, name, metav1.DeleteOptions{}); err != nil { logger.Errorf("Error deleting Kubernetes Service : %v", err) return err } @@ -265,10 +269,11 @@ func(c *Controller) syncHandler(ctx context.Context, operation Operation) error return nil } - // If the Application resource is created / updated. - default: { + // If the Application resource is created / updated. + default: + { var application *v1alpha1.Application - if application, err= c.applicationLister.Applications(namespace).Get(name); err != nil { + if application, err = c.applicationLister.Applications(namespace).Get(name); err != nil { return err } @@ -276,16 +281,16 @@ func(c *Controller) syncHandler(ctx context.Context, operation Operation) error var operationName string if operation._type == UPDATE_OPERATION { - operationName= "update" + operationName = "update" } else { - operationName= "create" + operationName = "create" } // Create / update Kubernetes Deployment, Service and Horizontal Pod Autoscaler. if err := c.createOrUpdateDeployment(ctx, application, update); err != nil { logger.Errorf("Error trying to %s Kubernetes Deployment : %v", operationName, err) - c.eventRecorder.Event(application, coreV1.EventTypeWarning, err.Error( ), fmt.Sprintf("Error trying to %s Kubernetes Deployment", operationName)) + c.eventRecorder.Event(application, coreV1.EventTypeWarning, err.Error(), fmt.Sprintf("Error trying to %s Kubernetes Deployment", operationName)) return err } logger.Infof("Succeeded to %s Kubernetes Deployment", operationName) @@ -293,7 +298,7 @@ func(c *Controller) syncHandler(ctx context.Context, operation Operation) error if err := c.createOrUpdateHpa(ctx, application, update); err != nil { logger.Errorf("Error trying to %s Horizontal Pod Autoscaler : %v", operationName, err) - c.eventRecorder.Event(application, coreV1.EventTypeWarning, err.Error( ), fmt.Sprintf("Error trying to %s Horizontal Pod Autoscaler", operationName)) + c.eventRecorder.Event(application, coreV1.EventTypeWarning, err.Error(), fmt.Sprintf("Error trying to %s Horizontal Pod Autoscaler", operationName)) return err } logger.Infof("Succeeded to %s Horizontal Pod Autoscaler", operationName) @@ -301,7 +306,7 @@ func(c *Controller) syncHandler(ctx context.Context, operation Operation) error if err := c.createOrUpdateService(ctx, application, update); err != nil { logger.Errorf("Error trying to %s Kubernetes Service : %v", operationName, err) - c.eventRecorder.Event(application, coreV1.EventTypeWarning, err.Error( ), fmt.Sprintf("Error trying to %s Kubernetes Service", operationName)) + c.eventRecorder.Event(application, coreV1.EventTypeWarning, err.Error(), fmt.Sprintf("Error trying to %s Kubernetes Service", operationName)) return err } logger.Infof("Succeeded to %s Kubernetes Service", operationName) @@ -313,7 +318,7 @@ func(c *Controller) syncHandler(ctx context.Context, operation Operation) error } // createOrUpdateDeployment creates / updates the Kubernetes Deployment for an Application resource. -func(c *Controller) createOrUpdateDeployment(ctx context.Context, application *v1alpha1.Application, update bool) error { +func (c *Controller) createOrUpdateDeployment(ctx context.Context, application *v1alpha1.Application, update bool) error { name := application.Name namespace := application.Namespace @@ -329,12 +334,12 @@ func(c *Controller) createOrUpdateDeployment(ctx context.Context, application *v { Name: name, - Image: application.Spec.Image, + Image: application.Spec.Image, ImagePullPolicy: coreV1.PullIfNotPresent, Resources: coreV1.ResourceRequirements{ Requests: application.Spec.Resources, - Limits: application.Spec.Resources, + Limits: application.Spec.Resources, }, EnvFrom: []coreV1.EnvFromSource{ @@ -349,9 +354,9 @@ func(c *Controller) createOrUpdateDeployment(ctx context.Context, application *v Ports: []coreV1.ContainerPort{ { - Name: "grpc-server", + Name: "grpc-server", ContainerPort: application.Spec.Port, - Protocol: "TCP", + Protocol: "TCP", }, }, }, @@ -362,10 +367,10 @@ func(c *Controller) createOrUpdateDeployment(ctx context.Context, application *v deploymentObject := &appsV1.Deployment{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, Namespace: namespace, Labels: map[string]string{ - "app.kubernetes.io/part-of": name, + "app.kubernetes.io/part-of": name, "app.kubernetes.io/managed-by": c.name, }, }, @@ -381,7 +386,7 @@ func(c *Controller) createOrUpdateDeployment(ctx context.Context, application *v // Maximum number of pods that can be unavailable during the update. MaxUnavailable: &intstr.IntOrString{ - Type: intstr.Int, + Type: intstr.Int, IntVal: application.Spec.Replicas.Max - application.Spec.Replicas.Min, }, }, @@ -397,35 +402,35 @@ func(c *Controller) createOrUpdateDeployment(ctx context.Context, application *v }, } - deployments := c.kubeclient.AppsV1( ).Deployments(namespace) + deployments := c.kubeclient.AppsV1().Deployments(namespace) var err error if update { - _, err= deployments.Update(ctx, deploymentObject, metav1.UpdateOptions{ }) + _, err = deployments.Update(ctx, deploymentObject, metav1.UpdateOptions{}) } else { - _, err= deployments.Create(ctx, deploymentObject, metav1.CreateOptions{ }) + _, err = deployments.Create(ctx, deploymentObject, metav1.CreateOptions{}) } return err } // createOrUpdateHpa creates / updates the Kubernetes Horizontal Pod Autoscaler for an Application // resource. -func(c *Controller) createOrUpdateHpa(ctx context.Context, application *v1alpha1.Application, update bool) error { +func (c *Controller) createOrUpdateHpa(ctx context.Context, application *v1alpha1.Application, update bool) error { var ( - name= application.Name - namespace= application.Namespace + name = application.Name + namespace = application.Namespace - averageCpuUtilization int32= 80 - averageMemoryUtilization int32= 80 + averageCpuUtilization int32 = 80 + averageMemoryUtilization int32 = 80 ) hpaObject := &autoscalingV2.HorizontalPodAutoscaler{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, Namespace: namespace, Labels: map[string]string{ - "app.kubernetes.io/part-of": name, + "app.kubernetes.io/part-of": name, "app.kubernetes.io/managed-by": c.name, }, }, @@ -434,8 +439,8 @@ func(c *Controller) createOrUpdateHpa(ctx context.Context, application *v1alpha1 ScaleTargetRef: autoscalingV2.CrossVersionObjectReference{ APIVersion: "apps/v1", - Kind: "Deployments", - Name: name, + Kind: "Deployments", + Name: name, }, MinReplicas: &application.Spec.Replicas.Min, @@ -447,7 +452,7 @@ func(c *Controller) createOrUpdateHpa(ctx context.Context, application *v1alpha1 Resource: &autoscalingV2.ResourceMetricSource{ Name: "cpu", Target: autoscalingV2.MetricTarget{ - Type: autoscalingV2.UtilizationMetricType, + Type: autoscalingV2.UtilizationMetricType, AverageUtilization: &averageCpuUtilization, }, }, @@ -457,7 +462,7 @@ func(c *Controller) createOrUpdateHpa(ctx context.Context, application *v1alpha1 Resource: &autoscalingV2.ResourceMetricSource{ Name: "memory", Target: autoscalingV2.MetricTarget{ - Type: autoscalingV2.UtilizationMetricType, + Type: autoscalingV2.UtilizationMetricType, AverageUtilization: &averageMemoryUtilization, }, }, @@ -466,29 +471,29 @@ func(c *Controller) createOrUpdateHpa(ctx context.Context, application *v1alpha1 }, } - hpas := c.kubeclient.AutoscalingV2( ).HorizontalPodAutoscalers(namespace) + hpas := c.kubeclient.AutoscalingV2().HorizontalPodAutoscalers(namespace) var err error if update { - _, err= hpas.Update(ctx, hpaObject, metav1.UpdateOptions{ }) + _, err = hpas.Update(ctx, hpaObject, metav1.UpdateOptions{}) } else { - _, err= hpas.Create(ctx, hpaObject, metav1.CreateOptions{ }) + _, err = hpas.Create(ctx, hpaObject, metav1.CreateOptions{}) } return err } // createOrUpdateService creates / updates the Kubernetes Service for an Application resource. -func(c *Controller) createOrUpdateService(ctx context.Context, application *v1alpha1.Application, update bool) error { +func (c *Controller) createOrUpdateService(ctx context.Context, application *v1alpha1.Application, update bool) error { name := application.Name namespace := application.Namespace serviceObject := &coreV1.Service{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, Namespace: namespace, Labels: map[string]string{ - "app.kubernetes.io/part-of": name, + "app.kubernetes.io/part-of": name, "app.kubernetes.io/managed-by": c.name, }, }, @@ -500,21 +505,21 @@ func(c *Controller) createOrUpdateService(ctx context.Context, application *v1al Ports: []coreV1.ServicePort{ { - Name: "grpc-server", - Port: application.Spec.Port, + Name: "grpc-server", + Port: application.Spec.Port, TargetPort: intstr.FromInt32(application.Spec.Port), }, }, }, } - services := c.kubeclient.CoreV1( ).Services(namespace) + services := c.kubeclient.CoreV1().Services(namespace) var err error if update { - _, err= services.Update(ctx, serviceObject, metav1.UpdateOptions{ }) + _, err = services.Update(ctx, serviceObject, metav1.UpdateOptions{}) } else { - _, err= services.Create(ctx, serviceObject, metav1.CreateOptions{ }) + _, err = services.Create(ctx, serviceObject, metav1.CreateOptions{}) } return err -} \ No newline at end of file +} diff --git a/kubernetes/operators/application/signal.go b/kubernetes/operators/application/signal.go index d02047f..dcb6bfe 100644 --- a/kubernetes/operators/application/signal.go +++ b/kubernetes/operators/application/signal.go @@ -7,25 +7,25 @@ import ( "syscall" ) -var signalsChan = make(chan struct{ }) +var signalsChan = make(chan struct{}) -func setupGracefullShutdownHandler( ) context.Context { +func setupGracefullShutdownHandler() context.Context { // Makes sure that this function is invoked only once. close(signalsChan) // Panics if called twice. c := make(chan os.Signal, 2) - ctx, cancel := context.WithCancel(context.Background( )) + ctx, cancel := context.WithCancel(context.Background()) - signal.Notify(c, []os.Signal{ os.Interrupt, syscall.SIGTERM }...) + signal.Notify(c, []os.Signal{os.Interrupt, syscall.SIGTERM}...) - go func( ) { + go func() { <-c - cancel( ) + cancel() // Exit directly on receiving 2nd signal. <-c os.Exit(1) - }( ) + }() return ctx -} \ No newline at end of file +}