diff --git a/backend/auth/jwt.go b/backend/auth/jwt.go
index e154eb2..5c1c769 100644
--- a/backend/auth/jwt.go
+++ b/backend/auth/jwt.go
@@ -49,7 +49,7 @@ func RevokeJTI(ctx context.Context, jti string, expiresAt time.Time) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -98,7 +98,7 @@ func CleanupRevokedJTIs(ctx context.Context) (int, error) {
return 0, err
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -208,7 +208,7 @@ func GenerateRefreshToken(ctx context.Context, userID string, role string) (stri
return "", fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -241,7 +241,7 @@ func VerifyRefreshToken(ctx context.Context, tokenString string) (userID string,
return "", "", fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/admin/custom_services.go b/backend/handlers/admin/custom_services.go
index 9625df4..362c9b9 100644
--- a/backend/handlers/admin/custom_services.go
+++ b/backend/handlers/admin/custom_services.go
@@ -382,7 +382,7 @@ func UpdateCustomService(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -418,7 +418,7 @@ func PromoteCustomService(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -519,7 +519,7 @@ func DeleteCustomService(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/admin/discount_campaigns.go b/backend/handlers/admin/discount_campaigns.go
index 154020a..08a5fb9 100644
--- a/backend/handlers/admin/discount_campaigns.go
+++ b/backend/handlers/admin/discount_campaigns.go
@@ -281,7 +281,7 @@ func CreateDiscountCampaign(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -518,7 +518,7 @@ func UpdateDiscountCampaign(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -646,7 +646,7 @@ func DeleteDiscountCampaign(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/admin/patch_tests.go b/backend/handlers/admin/patch_tests.go
index 16fc690..05fe14b 100644
--- a/backend/handlers/admin/patch_tests.go
+++ b/backend/handlers/admin/patch_tests.go
@@ -102,7 +102,7 @@ func CreatePatchTest(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -182,7 +182,7 @@ func UpdatePatchTest(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -215,7 +215,7 @@ func DeletePatchTest(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/admin/settings.go b/backend/handlers/admin/settings.go
index 2e43a54..6823ad6 100644
--- a/backend/handlers/admin/settings.go
+++ b/backend/handlers/admin/settings.go
@@ -246,7 +246,7 @@ func UpdateBusinessSettings(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/auth/local.go b/backend/handlers/auth/local.go
index 8ca80a8..1ee6ae5 100644
--- a/backend/handlers/auth/local.go
+++ b/backend/handlers/auth/local.go
@@ -220,7 +220,7 @@ func RegisterHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -381,7 +381,7 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -430,7 +430,7 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -652,7 +652,7 @@ func VerifyCodeHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/bookings/admin_reserve.go b/backend/handlers/bookings/admin_reserve.go
index 426a8e8..0e81a9a 100644
--- a/backend/handlers/bookings/admin_reserve.go
+++ b/backend/handlers/bookings/admin_reserve.go
@@ -178,7 +178,7 @@ func AdminReserveSlotHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/bookings/bookings.go b/backend/handlers/bookings/bookings.go
index 85bde29..610d81a 100644
--- a/backend/handlers/bookings/bookings.go
+++ b/backend/handlers/bookings/bookings.go
@@ -1449,7 +1449,7 @@ func UpdateBookingServicesHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -2230,7 +2230,7 @@ func CreateBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -2440,7 +2440,7 @@ func EditBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -2598,7 +2598,7 @@ func ProgressBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -3017,7 +3017,7 @@ func ConfirmBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -3256,7 +3256,7 @@ func DeleteBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -3347,7 +3347,7 @@ func DeleteBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -4185,7 +4185,7 @@ func AdminRescheduleBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/bookings/manage.go b/backend/handlers/bookings/manage.go
index 3f9a9df..9446bfb 100644
--- a/backend/handlers/bookings/manage.go
+++ b/backend/handlers/bookings/manage.go
@@ -45,7 +45,7 @@ func UserCancelBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -172,7 +172,7 @@ func AdminCancelBookingHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -709,7 +709,7 @@ func AdminCreateBookingForUserHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1255,7 +1255,7 @@ func DeleteEditRequestHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1433,7 +1433,7 @@ func RequestEditHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1801,7 +1801,7 @@ func AdminApproveEditRequestHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -2090,7 +2090,7 @@ func AdminRejectEditRequestHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/bookings/reserve.go b/backend/handlers/bookings/reserve.go
index c9858fa..8f19ec6 100644
--- a/backend/handlers/bookings/reserve.go
+++ b/backend/handlers/bookings/reserve.go
@@ -181,7 +181,7 @@ func ReserveSlotHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -255,7 +255,7 @@ func ReserveSlotHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/notifications/notifications.go b/backend/handlers/notifications/notifications.go
index 4cb371f..91f7d45 100644
--- a/backend/handlers/notifications/notifications.go
+++ b/backend/handlers/notifications/notifications.go
@@ -244,7 +244,7 @@ func AcknowledgeNotification(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/payments/giftcards.go b/backend/handlers/payments/giftcards.go
index 851899e..a3c7705 100644
--- a/backend/handlers/payments/giftcards.go
+++ b/backend/handlers/payments/giftcards.go
@@ -356,7 +356,7 @@ func CreateGiftCard(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -463,7 +463,7 @@ func TopUpGiftCard(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -577,7 +577,7 @@ func TransferGiftCard(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -681,7 +681,7 @@ func RedeemGiftCard(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -816,7 +816,7 @@ func GetUserGiftCardBalanceAdmin(w http.ResponseWriter, r *http.Request) {
log.Printf("Failed to begin transaction: %v", err)
} else {
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -927,7 +927,7 @@ func BuyGiftCard(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1203,7 +1203,7 @@ func ClaimExpiredBalance(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/payments/handlers.go b/backend/handlers/payments/handlers.go
index e2a45e2..9d16991 100644
--- a/backend/handlers/payments/handlers.go
+++ b/backend/handlers/payments/handlers.go
@@ -351,7 +351,7 @@ func CreateTerminalPayment(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -623,7 +623,7 @@ func GetCheckoutStatus(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -822,7 +822,7 @@ func CreateBookingPayment(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1418,6 +1418,24 @@ func buildSplitRecords(primary PaymentRecord, reqPaymentType string, info *Booki
return records
}
+// nonDepositPaymentType picks the right label for the non-deposit portion of a
+// split payment, following the same rules as the frontend's handlePayFull:
+// 'balance' when some payment already exists, 'full' when covering everything,
+// 'partial' when leaving a remainder.
+//nolint:unused
+func nonDepositPaymentType(reqType string, totalPaidAfterThis float64, thisPortion float64, bookingTotal float64) string {
+ if totalPaidAfterThis >= bookingTotal {
+ if totalPaidAfterThis-thisPortion > 0 {
+ return "balance"
+ }
+ return "full"
+ }
+ if reqType == "full" || reqType == "deposit" {
+ return "partial"
+ }
+ return "partial"
+}
+
func GetUserPaymentMethods(w http.ResponseWriter, r *http.Request) {
userID, ok := r.Context().Value(mw.UserIDKey).(string)
if !ok || userID == "" {
@@ -1601,7 +1619,7 @@ func RefundPayment(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1947,7 +1965,7 @@ func AcquirePaymentLock(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1998,7 +2016,7 @@ func ReleasePaymentLock(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/payments/loyalty.go b/backend/handlers/payments/loyalty.go
index 4035ee2..9bcb24b 100644
--- a/backend/handlers/payments/loyalty.go
+++ b/backend/handlers/payments/loyalty.go
@@ -98,7 +98,7 @@ func ApplyLoyaltyRedemption(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/payments/refunds.go b/backend/handlers/payments/refunds.go
index db81aef..9c524e4 100644
--- a/backend/handlers/payments/refunds.go
+++ b/backend/handlers/payments/refunds.go
@@ -293,7 +293,7 @@ func ProcessCancellationRefund(
return &calc, nil
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/payments/service.go b/backend/handlers/payments/service.go
index 81237e3..4624a73 100644
--- a/backend/handlers/payments/service.go
+++ b/backend/handlers/payments/service.go
@@ -470,7 +470,7 @@ func (s *PaymentService) DeletePaymentMethod(ctx context.Context, cardID, userID
return err
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/payments/till.go b/backend/handlers/payments/till.go
index 2010ca2..059b65c 100644
--- a/backend/handlers/payments/till.go
+++ b/backend/handlers/payments/till.go
@@ -117,7 +117,7 @@ func CreateTillSale(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -506,7 +506,7 @@ func GetTillCheckoutStatus(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/portfolio/images.go b/backend/handlers/portfolio/images.go
index a3f0758..29d7810 100644
--- a/backend/handlers/portfolio/images.go
+++ b/backend/handlers/portfolio/images.go
@@ -23,6 +23,7 @@ import (
"time"
"github.com/go-chi/chi/v5"
+ "github.com/kovidgoyal/imaging"
)
const MaxInputLength = 256
@@ -42,6 +43,26 @@ func mimeTypeForField(fieldName string) string {
}
}
+// processImage strips metadata and auto-orients the image
+ //nolint:unused
+func processImage(data []byte, quality int) ([]byte, error) {
+ // Decode the image - this automatically applies EXIF orientation
+ // and strips all metadata (EXIF, GPS, etc.)
+ img, err := imaging.Decode(bytes.NewReader(data), imaging.AutoOrientation(true))
+ if err != nil {
+ return nil, fmt.Errorf("failed to decode image: %w", err)
+ }
+
+ // Encode to JPEG without any metadata
+ var buf bytes.Buffer
+ err = imaging.Encode(&buf, img, imaging.JPEG, imaging.JPEGQuality(quality))
+ if err != nil {
+ return nil, fmt.Errorf("failed to encode image: %w", err)
+ }
+
+ return buf.Bytes(), nil
+}
+
// validateInputLength returns an error if input exceeds max length
func validateInputLength(input string) error {
@@ -867,7 +888,7 @@ func UploadImage(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1000,7 +1021,7 @@ func DeleteImage(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/scheduling/default-hours.go b/backend/handlers/scheduling/default-hours.go
index 52f6bba..e7c952b 100644
--- a/backend/handlers/scheduling/default-hours.go
+++ b/backend/handlers/scheduling/default-hours.go
@@ -95,7 +95,7 @@ func UpdateDefaultHours(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/scheduling/exceptional-hours.go b/backend/handlers/scheduling/exceptional-hours.go
index fddf444..98655e1 100644
--- a/backend/handlers/scheduling/exceptional-hours.go
+++ b/backend/handlers/scheduling/exceptional-hours.go
@@ -185,7 +185,7 @@ func CreateExceptionalGroup(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -262,7 +262,7 @@ func DeleteExceptionalGroup(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -330,7 +330,7 @@ func UpdateExceptionalApplications(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/scheduling/scheduled-cleanup.go b/backend/handlers/scheduling/scheduled-cleanup.go
index 389505c..0991f6e 100644
--- a/backend/handlers/scheduling/scheduled-cleanup.go
+++ b/backend/handlers/scheduling/scheduled-cleanup.go
@@ -17,7 +17,7 @@ func NotifyUnpaidOneWeek(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -86,7 +86,7 @@ func NotifyUnpaidOneMonth(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -155,7 +155,7 @@ func TransitionDiscountCampaigns(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -201,7 +201,7 @@ func CleanupExpiredVerificationCodes(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -230,7 +230,7 @@ func CleanupExpiredRefreshTokens(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/scheduling/time-blockers.go b/backend/handlers/scheduling/time-blockers.go
index 96476ea..57d08cd 100644
--- a/backend/handlers/scheduling/time-blockers.go
+++ b/backend/handlers/scheduling/time-blockers.go
@@ -152,7 +152,7 @@ func CreateTimeBlocker(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -197,7 +197,7 @@ func DeleteTimeBlocker(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -379,7 +379,7 @@ func CleanupOldReservations(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -410,7 +410,7 @@ func AnonymizeStaleGuestAccounts(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -506,7 +506,7 @@ func CleanupExpiredLoyaltyRedemptions(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -554,7 +554,7 @@ func CleanupExpiredFinancialRecords(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -670,7 +670,7 @@ func CleanupExpiredDeposits(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -802,7 +802,7 @@ func CleanupExpiredGiftCards(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -904,7 +904,7 @@ func CleanupIdleAccounts(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1013,7 +1013,7 @@ func CleanupOldIdempotencyKeys(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -1068,7 +1068,7 @@ func CleanupOldNameHistory(ctx context.Context) (int, error) {
return 0, fmt.Errorf("failed to begin transaction: %w", err)
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/services/services.go b/backend/handlers/services/services.go
index c0e15bc..e6b7d34 100644
--- a/backend/handlers/services/services.go
+++ b/backend/handlers/services/services.go
@@ -66,7 +66,7 @@ func ToggleService(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -143,7 +143,7 @@ func CreateServiceHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -237,7 +237,7 @@ func DeleteServiceHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/today/today.go b/backend/handlers/today/today.go
index 526a38b..11193fc 100644
--- a/backend/handlers/today/today.go
+++ b/backend/handlers/today/today.go
@@ -103,7 +103,7 @@ func GetCurrentAndNextHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -713,7 +713,7 @@ func GetTodayAppointmentsHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/user/account.go b/backend/handlers/user/account.go
index d06644c..879493b 100644
--- a/backend/handlers/user/account.go
+++ b/backend/handlers/user/account.go
@@ -105,7 +105,7 @@ func DeleteAccountHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -130,7 +130,7 @@ func DeleteAccountHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(ctx); err != nil {
+ if err := tx.Rollback(ctx); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/user/guest.go b/backend/handlers/user/guest.go
index 3d1b6a2..901c354 100644
--- a/backend/handlers/user/guest.go
+++ b/backend/handlers/user/guest.go
@@ -113,7 +113,7 @@ func CreateGuestUserHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/backend/handlers/user/profile.go b/backend/handlers/user/profile.go
index 57a3b31..8d0e025 100644
--- a/backend/handlers/user/profile.go
+++ b/backend/handlers/user/profile.go
@@ -318,9 +318,9 @@ func UpdateProfileHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
- slog.Error("failed to rollback transaction", "err", err)
- }
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
+ slog.Error("failed to rollback transaction", "err", err)
+}
}()
// If first or last name changed (via user edit), track the old names in history
@@ -725,9 +725,9 @@ func ChangePasswordHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
- slog.Error("failed to rollback transaction", "err", err)
- }
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
+ slog.Error("failed to rollback transaction", "err", err)
+}
}()
_, err = tx.Exec(r.Context(), `UPDATE users SET password_hash = $1, updated_at = NOW() WHERE id = $2`, string(newHash), userID)
@@ -863,9 +863,9 @@ func AddPatchTestHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
- slog.Error("failed to rollback transaction", "err", err)
- }
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
+ slog.Error("failed to rollback transaction", "err", err)
+}
}()
_, err = tx.Exec(r.Context(), `
@@ -958,9 +958,9 @@ func DeletePatchTestHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
- slog.Error("failed to rollback transaction", "err", err)
- }
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
+ slog.Error("failed to rollback transaction", "err", err)
+}
}()
result, err := tx.Exec(r.Context(), `
@@ -1064,9 +1064,9 @@ func UploadProfilePictureHandler(w http.ResponseWriter, r *http.Request) {
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
- slog.Error("failed to rollback transaction", "err", err)
- }
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
+ slog.Error("failed to rollback transaction", "err", err)
+}
}()
_, err = tx.Exec(r.Context(), `UPDATE users SET profile_pic_url = $1 WHERE id = $2`, url, userID)
@@ -1185,9 +1185,9 @@ func UpdateNotificationPreferencesHandler(w http.ResponseWriter, r *http.Request
return
}
defer func() {
- if err := tx.Rollback(r.Context()); err != nil {
- slog.Error("failed to rollback transaction", "err", err)
- }
+ if err := tx.Rollback(r.Context()); err != nil && err.Error() != "tx is closed" {
+ slog.Error("failed to rollback transaction", "err", err)
+}
}()
if exists {
diff --git a/backend/internal/dav/shared.go b/backend/internal/dav/shared.go
index 2b37704..75ae628 100644
--- a/backend/internal/dav/shared.go
+++ b/backend/internal/dav/shared.go
@@ -183,7 +183,7 @@ func (s *BaseService) CreateContact(addressBookID int, userID string, input Cont
return err
}
defer func() {
- if err := tx.Rollback(context.Background()); err != nil {
+ if err := tx.Rollback(context.Background()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -217,7 +217,7 @@ func (s *BaseService) UpdateContact(addressBookID int, uri string, input Contact
return err
}
defer func() {
- if err := tx.Rollback(context.Background()); err != nil {
+ if err := tx.Rollback(context.Background()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -242,7 +242,7 @@ func (s *BaseService) DeleteContact(addressBookID int, uri string) error {
return err
}
defer func() {
- if err := tx.Rollback(context.Background()); err != nil {
+ if err := tx.Rollback(context.Background()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -267,7 +267,7 @@ func (s *BaseService) CreateEvent(calendarID int, input EventInput) error {
return err
}
defer func() {
- if err := tx.Rollback(context.Background()); err != nil {
+ if err := tx.Rollback(context.Background()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -306,7 +306,7 @@ func (s *BaseService) UpdateEvent(calendarID int, uid string, input EventInput)
return err
}
defer func() {
- if err := tx.Rollback(context.Background()); err != nil {
+ if err := tx.Rollback(context.Background()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
@@ -336,7 +336,7 @@ func (s *BaseService) DeleteEvent(calendarID int, uid string) error {
return err
}
defer func() {
- if err := tx.Rollback(context.Background()); err != nil {
+ if err := tx.Rollback(context.Background()); err != nil && err.Error() != "tx is closed" {
slog.Error("failed to rollback transaction", "err", err)
}
}()
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 64086ee..e1c83ef 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -15,8 +15,6 @@
"@zxcvbn-ts/core": "^3.0.4",
"@zxcvbn-ts/language-common": "^3.0.4",
"@zxcvbn-ts/language-en": "^3.0.2",
- "cropperjs": "^1.6.2",
- "esbuild": "^0.28.1",
"heic2any": "^0.0.4",
"maplibre-gl": "^5.24.0"
},
@@ -25,7 +23,6 @@
"@eslint/js": "^9.22.0",
"@internationalized/date": "^3.11.0",
"@lucide/svelte": "^1.17.0",
- "@sveltejs/adapter-auto": "^6.0.0",
"@sveltejs/adapter-static": "^3.0.9",
"@sveltejs/kit": "^2.22.0",
"@sveltejs/vite-plugin-svelte": "^6.2.4",
@@ -37,263 +34,23 @@
"eslint": "^9.22.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-svelte": "^3.0.0",
- "formsnap": "^2.0.1",
"globals": "^17.3.0",
- "jsdom": "^29.1.1",
"mode-watcher": "^1.1.0",
"prettier": "^3.8.1",
"prettier-plugin-svelte": "^3.5.0",
"prettier-plugin-tailwindcss": "^0.7.2",
- "runed": "^0.37.1",
"shadcn-svelte": "^1.1.1",
"svelte": "^5.0.0",
"svelte-check": "^4.4.3",
"svelte-easy-crop": "^5.0.0",
"svelte-sonner": "^1.0.7",
- "svelte-toolbelt": "^0.10.6",
- "sveltekit-superforms": "^2.27.1",
"tailwind-merge": "^3.5.0",
"tailwind-variants": "^3.2.2",
"tailwindcss": "^4.2.0",
"tw-animate-css": "^1.4.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.20.0",
- "vite": "^7.0.4",
- "vitest": "^4.1.9"
- }
- },
- "node_modules/@ark/schema": {
- "version": "0.56.2",
- "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.2.tgz",
- "integrity": "sha512-Qx4D2JFbBWpntiHZaTv7bGG4H/M2rigiknezKg/WVyDSaLdE4YCcWAOoFB7pjjDqHbbV2OqRfntm1nnXvwMexg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@ark/util": "0.56.2"
- }
- },
- "node_modules/@ark/util": {
- "version": "0.56.2",
- "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.2.tgz",
- "integrity": "sha512-9kU2sUE38FZEGG7l3hamYMBieLYEJh2L1mrYD2eXpT+78EnQSV1bhjxJhnxGBMSTbtwpBSDNSK+K60WvaI/DTQ==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/@asamuzakjp/css-color": {
- "version": "5.1.11",
- "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz",
- "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@asamuzakjp/generational-cache": "^1.0.1",
- "@csstools/css-calc": "^3.2.0",
- "@csstools/css-color-parser": "^4.1.0",
- "@csstools/css-parser-algorithms": "^4.0.0",
- "@csstools/css-tokenizer": "^4.0.0"
- },
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
- }
- },
- "node_modules/@asamuzakjp/dom-selector": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz",
- "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@asamuzakjp/generational-cache": "^1.0.1",
- "@asamuzakjp/nwsapi": "^2.3.9",
- "bidi-js": "^1.0.3",
- "css-tree": "^3.2.1",
- "is-potential-custom-element-name": "^1.0.1"
- },
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
- }
- },
- "node_modules/@asamuzakjp/generational-cache": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz",
- "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
- }
- },
- "node_modules/@asamuzakjp/nwsapi": {
- "version": "2.3.9",
- "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz",
- "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@babel/runtime": {
- "version": "7.29.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
- "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bramus/specificity": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz",
- "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "css-tree": "^3.0.0"
- },
- "bin": {
- "specificity": "bin/cli.js"
- }
- },
- "node_modules/@csstools/color-helpers": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz",
- "integrity": "sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "engines": {
- "node": ">=20.19.0"
- }
- },
- "node_modules/@csstools/css-calc": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz",
- "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=20.19.0"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^4.0.0",
- "@csstools/css-tokenizer": "^4.0.0"
- }
- },
- "node_modules/@csstools/css-color-parser": {
- "version": "4.1.9",
- "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.9.tgz",
- "integrity": "sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@csstools/color-helpers": "^6.1.0",
- "@csstools/css-calc": "^3.2.1"
- },
- "engines": {
- "node": ">=20.19.0"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^4.0.0",
- "@csstools/css-tokenizer": "^4.0.0"
- }
- },
- "node_modules/@csstools/css-parser-algorithms": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz",
- "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=20.19.0"
- },
- "peerDependencies": {
- "@csstools/css-tokenizer": "^4.0.0"
- }
- },
- "node_modules/@csstools/css-syntax-patches-for-csstree": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz",
- "integrity": "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "peerDependencies": {
- "css-tree": "^3.2.1"
- },
- "peerDependenciesMeta": {
- "css-tree": {
- "optional": true
- }
- }
- },
- "node_modules/@csstools/css-tokenizer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz",
- "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=20.19.0"
+ "vite": "^7.0.4"
}
},
"node_modules/@discourse/jxl": {
@@ -312,6 +69,7 @@
"cpu": [
"ppc64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -328,6 +86,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -344,6 +103,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -360,6 +120,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -376,6 +137,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -392,6 +154,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -408,6 +171,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -424,6 +188,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -440,6 +205,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -456,6 +222,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -472,6 +239,7 @@
"cpu": [
"ia32"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -488,6 +256,7 @@
"cpu": [
"loong64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -504,6 +273,7 @@
"cpu": [
"mips64el"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -520,6 +290,7 @@
"cpu": [
"ppc64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -536,6 +307,7 @@
"cpu": [
"riscv64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -552,6 +324,7 @@
"cpu": [
"s390x"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -568,6 +341,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -584,6 +358,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -600,6 +375,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -616,6 +392,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -632,6 +409,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -648,6 +426,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -664,6 +443,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -680,6 +460,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -696,6 +477,7 @@
"cpu": [
"ia32"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -712,6 +494,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -899,32 +682,6 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@exodus/bytes": {
- "version": "1.15.1",
- "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz",
- "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
- },
- "peerDependencies": {
- "@noble/hashes": "^1.8.0 || ^2.0.0"
- },
- "peerDependenciesMeta": {
- "@noble/hashes": {
- "optional": true
- }
- }
- },
- "node_modules/@exodus/schemasafe": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz",
- "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/@floating-ui/core": {
"version": "1.7.5",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
@@ -953,25 +710,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@hapi/hoek": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
- "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true
- },
- "node_modules/@hapi/topo": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
- "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true,
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
"node_modules/@humanfs/core": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
@@ -1252,14 +990,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@poppinss/macroable": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@poppinss/macroable/-/macroable-1.1.2.tgz",
- "integrity": "sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.62.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz",
@@ -1610,33 +1340,6 @@
"win32"
]
},
- "node_modules/@sideway/address": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
- "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true,
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
- "node_modules/@sideway/formula": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
- "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true
- },
- "node_modules/@sideway/pinpoint": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
- "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true
- },
"node_modules/@standard-schema/spec": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
@@ -1654,16 +1357,6 @@
"acorn": "^8.9.0"
}
},
- "node_modules/@sveltejs/adapter-auto": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-6.1.1.tgz",
- "integrity": "sha512-cBNt4jgH4KuaNO5gRSB2CZKkGtz+OCZ8lPjRQGjhvVUD4akotnj2weUia6imLl2v07K3IgsQRyM36909miSwoQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@sveltejs/kit": "^2.0.0"
- }
- },
"node_modules/@sveltejs/adapter-static": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz",
@@ -2047,17 +1740,6 @@
"vite": "^5.2.0 || ^6 || ^7 || ^8"
}
},
- "node_modules/@types/chai": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
- "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/deep-eql": "*",
- "assertion-error": "^2.0.1"
- }
- },
"node_modules/@types/cookie": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
@@ -2065,13 +1747,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/deep-eql": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
- "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/estree": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
@@ -2109,49 +1784,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/validator": {
- "version": "13.15.10",
- "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz",
- "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/@typeschema/class-validator": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@typeschema/class-validator/-/class-validator-0.3.0.tgz",
- "integrity": "sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@typeschema/core": "0.14.0"
- },
- "peerDependencies": {
- "class-validator": "^0.14.1"
- },
- "peerDependenciesMeta": {
- "class-validator": {
- "optional": true
- }
- }
- },
- "node_modules/@typeschema/core": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@typeschema/core/-/core-0.14.0.tgz",
- "integrity": "sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peerDependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "peerDependenciesMeta": {
- "@types/json-schema": {
- "optional": true
- }
- }
- },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.63.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.63.0.tgz",
@@ -2434,162 +2066,6 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/@valibot/to-json-schema": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@valibot/to-json-schema/-/to-json-schema-1.7.1.tgz",
- "integrity": "sha512-3qkmU6KXWh8GIThEAW3kuRHPQBMjWkKy+Ppz3WkUucx53DTpOa6siMn4xDGSOhlVyMrDaJTCTMLYPZVAIk1P0A==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peerDependencies": {
- "valibot": "^1.4.0"
- }
- },
- "node_modules/@vinejs/compiler": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@vinejs/compiler/-/compiler-3.0.0.tgz",
- "integrity": "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@vinejs/vine": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-3.0.1.tgz",
- "integrity": "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@poppinss/macroable": "^1.0.4",
- "@types/validator": "^13.12.2",
- "@vinejs/compiler": "^3.0.0",
- "camelcase": "^8.0.0",
- "dayjs": "^1.11.13",
- "dlv": "^1.1.3",
- "normalize-url": "^8.0.1",
- "validator": "^13.12.0"
- },
- "engines": {
- "node": ">=18.16.0"
- }
- },
- "node_modules/@vitest/expect": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz",
- "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@standard-schema/spec": "^1.1.0",
- "@types/chai": "^5.2.2",
- "@vitest/spy": "4.1.10",
- "@vitest/utils": "4.1.10",
- "chai": "^6.2.2",
- "tinyrainbow": "^3.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/mocker": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz",
- "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/spy": "4.1.10",
- "estree-walker": "^3.0.3",
- "magic-string": "^0.30.21"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- },
- "peerDependencies": {
- "msw": "^2.4.9",
- "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "msw": {
- "optional": true
- },
- "vite": {
- "optional": true
- }
- }
- },
- "node_modules/@vitest/pretty-format": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz",
- "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tinyrainbow": "^3.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/runner": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz",
- "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/utils": "4.1.10",
- "pathe": "^2.0.3"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/snapshot": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz",
- "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/pretty-format": "4.1.10",
- "@vitest/utils": "4.1.10",
- "magic-string": "^0.30.21",
- "pathe": "^2.0.3"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/spy": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz",
- "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/utils": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz",
- "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/pretty-format": "4.1.10",
- "convert-source-map": "^2.0.0",
- "tinyrainbow": "^3.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
"node_modules/@zxcvbn-ts/core": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@zxcvbn-ts/core/-/core-3.0.4.tgz",
@@ -2684,40 +2160,6 @@
"node": ">= 0.4"
}
},
- "node_modules/arkregex": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.8.tgz",
- "integrity": "sha512-PJcx6G1kQTgLKPUbeYlYecDRaKq15AMSGVajlKFYWlPeJRQL+j3dKE6tyMs40HZ99djS1l9Vhl3ezAHy9JBIqQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@ark/util": "0.56.2"
- }
- },
- "node_modules/arktype": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.3.tgz",
- "integrity": "sha512-7W+0RLTUNJiBFIIZXwOQxSR8Z273IAd6IvqBeG9+gHnQKFsIx2C0iOtGTmMrPnlX4qLXyc5+ll7A0BIj9WrbTg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@ark/schema": "0.56.2",
- "@ark/util": "0.56.2",
- "arkregex": "0.0.8"
- }
- },
- "node_modules/assertion-error": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
- "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/axobject-query": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
@@ -2735,16 +2177,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/bidi-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz",
- "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "require-from-string": "^2.0.2"
- }
- },
"node_modules/bits-ui": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.18.1.tgz",
@@ -2816,30 +2248,6 @@
"node": ">=6"
}
},
- "node_modules/camelcase": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
- "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/chai": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
- "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -2873,19 +2281,6 @@
"url": "https://paulmillr.com/funding/"
}
},
- "node_modules/class-validator": {
- "version": "0.14.4",
- "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.4.tgz",
- "integrity": "sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@types/validator": "^13.15.3",
- "libphonenumber-js": "^1.11.1",
- "validator": "^13.15.22"
- }
- },
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
@@ -2933,13 +2328,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/cookie": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
@@ -2950,12 +2338,6 @@
"node": ">= 0.6"
}
},
- "node_modules/cropperjs": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.2.tgz",
- "integrity": "sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==",
- "license": "MIT"
- },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -2971,20 +2353,6 @@
"node": ">= 8"
}
},
- "node_modules/css-tree": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
- "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mdn-data": "2.27.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -2998,28 +2366,6 @@
"node": ">=4"
}
},
- "node_modules/data-urls": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz",
- "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "whatwg-mimetype": "^5.0.0",
- "whatwg-url": "^16.0.0"
- },
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
- }
- },
- "node_modules/dayjs": {
- "version": "1.11.21",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz",
- "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -3038,13 +2384,6 @@
}
}
},
- "node_modules/decimal.js": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
- "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -3089,32 +2428,12 @@
"dev": true,
"license": "MIT"
},
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/earcut": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/earcut/-/earcut-3.2.3.tgz",
"integrity": "sha512-vnS4AVwp1KHAF13i1vp1/2D5evWy3k5u/iW/B81QVsUZtV8cv2tU0b2VNFlqvh4kYwrFMDdjPCfAmfyJW9y14Q==",
"license": "ISC"
},
- "node_modules/effect": {
- "version": "3.21.4",
- "resolved": "https://registry.npmjs.org/effect/-/effect-3.21.4.tgz",
- "integrity": "sha512-B89v/xSgPbl1J2Ai2u18jxq3odpFauU1rC6/eSs4FeNHi72kwKdJp12VGigvRV2lK+kRnx+OOz41XV8guZd4gQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@standard-schema/spec": "^1.0.0",
- "fast-check": "^3.23.1"
- }
- },
"node_modules/enhanced-resolve": {
"version": "5.21.6",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz",
@@ -3129,30 +2448,11 @@
"node": ">=10.13.0"
}
},
- "node_modules/entities": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz",
- "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=20.19.0"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/es-module-lexer": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.0.tgz",
- "integrity": "sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/esbuild": {
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
"integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
+ "dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -3435,16 +2735,6 @@
"node": ">=4.0"
}
},
- "node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -3455,40 +2745,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/expect-type": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
- "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/fast-check": {
- "version": "3.23.2",
- "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz",
- "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/dubzzz"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fast-check"
- }
- ],
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "pure-rand": "^6.1.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3588,47 +2844,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/formsnap": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/formsnap/-/formsnap-2.0.1.tgz",
- "integrity": "sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "svelte-toolbelt": "^0.5.0"
- },
- "engines": {
- "node": ">=18",
- "pnpm": ">=8.7.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/huntabyte"
- },
- "peerDependencies": {
- "svelte": "^5.0.0",
- "sveltekit-superforms": "^2.19.0"
- }
- },
- "node_modules/formsnap/node_modules/svelte-toolbelt": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.5.0.tgz",
- "integrity": "sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ==",
- "dev": true,
- "funding": [
- "https://github.com/sponsors/huntabyte"
- ],
- "dependencies": {
- "clsx": "^2.1.1",
- "style-to-object": "^1.0.8"
- },
- "engines": {
- "node": ">=18",
- "pnpm": ">=8.7.0"
- },
- "peerDependencies": {
- "svelte": "^5.0.0-next.126"
- }
- },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -3699,19 +2914,6 @@
"integrity": "sha512-3lLnZiDELfabVH87htnRolZ2iehX9zwpRyGNz22GKXIu0fznlblf0/ftppXKNqS26dqFSeqfIBhAmAj/uSp0cA==",
"license": "MIT"
},
- "node_modules/html-encoding-sniffer": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz",
- "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@exodus/bytes": "^1.6.0"
- },
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
- }
- },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -3779,13 +2981,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/is-reference": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
@@ -3813,21 +3008,6 @@
"jiti": "lib/jiti-cli.mjs"
}
},
- "node_modules/joi": {
- "version": "17.13.4",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.4.tgz",
- "integrity": "sha512-1RuuER6kmt8K8I3nIWvPZKi5RQCb568ZPyY4Pwjlua+yo+63ZTmIwxLZH0heBmiKN4uxjvCiarDrjaeH84xicQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true,
- "dependencies": {
- "@hapi/hoek": "^9.3.0",
- "@hapi/topo": "^5.1.0",
- "@sideway/address": "^4.1.5",
- "@sideway/formula": "^3.0.1",
- "@sideway/pinpoint": "^2.0.0"
- }
- },
"node_modules/js-yaml": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
@@ -3851,47 +3031,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsdom": {
- "version": "29.1.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz",
- "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@asamuzakjp/css-color": "^5.1.11",
- "@asamuzakjp/dom-selector": "^7.1.1",
- "@bramus/specificity": "^2.4.2",
- "@csstools/css-syntax-patches-for-csstree": "^1.1.3",
- "@exodus/bytes": "^1.15.0",
- "css-tree": "^3.2.1",
- "data-urls": "^7.0.0",
- "decimal.js": "^10.6.0",
- "html-encoding-sniffer": "^6.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "lru-cache": "^11.3.5",
- "parse5": "^8.0.1",
- "saxes": "^6.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^6.0.1",
- "undici": "^7.25.0",
- "w3c-xmlserializer": "^5.0.0",
- "webidl-conversions": "^8.0.1",
- "whatwg-mimetype": "^5.0.0",
- "whatwg-url": "^16.0.1",
- "xml-name-validator": "^5.0.0"
- },
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24.0.0"
- },
- "peerDependencies": {
- "canvas": "^3.0.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
"node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
@@ -3899,21 +3038,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/json-schema-to-ts": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz",
- "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@babel/runtime": "^7.18.3",
- "ts-algebra": "^2.0.0"
- },
- "engines": {
- "node": ">=16"
- }
- },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -3981,14 +3105,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/libphonenumber-js": {
- "version": "1.13.8",
- "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.13.8.tgz",
- "integrity": "sha512-80xal1m93rADejw2pMp2MSzFhHCPLEspjHxnH2UtqI+DgAmElsbmLMiqk9niwH9NWAfjsRtaJI+qBrOEmRx9nQ==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/lightningcss": {
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
@@ -4290,16 +3406,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/lru-cache": {
- "version": "11.5.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
- "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": "20 || >=22"
- }
- },
"node_modules/lz-string": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
@@ -4354,20 +3460,6 @@
"url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1"
}
},
- "node_modules/mdn-data": {
- "version": "2.27.1",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
- "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/memoize-weak": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/memoize-weak/-/memoize-weak-1.0.2.tgz",
- "integrity": "sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/minimatch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
@@ -4523,20 +3615,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/normalize-url": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz",
- "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/obug": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz",
@@ -4614,19 +3692,6 @@
"node": ">=6"
}
},
- "node_modules/parse5": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz",
- "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "entities": "^8.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -4647,13 +3712,6 @@
"node": ">=8"
}
},
- "node_modules/pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/pbf": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/pbf/-/pbf-4.0.2.tgz",
@@ -4945,14 +4003,6 @@
}
}
},
- "node_modules/property-expr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
- "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/protocol-buffers-schema": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.1.tgz",
@@ -4969,24 +4019,6 @@
"node": ">=6"
}
},
- "node_modules/pure-rand": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
- "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/dubzzz"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fast-check"
- }
- ],
- "license": "MIT",
- "optional": true
- },
"node_modules/quickselect": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz",
@@ -5007,16 +4039,6 @@
"url": "https://paulmillr.com/funding/"
}
},
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -5081,35 +4103,6 @@
"fsevents": "~2.3.2"
}
},
- "node_modules/runed": {
- "version": "0.37.1",
- "resolved": "https://registry.npmjs.org/runed/-/runed-0.37.1.tgz",
- "integrity": "sha512-MeFY73xBW8IueWBm012nNFIGy19WUGPLtknavyUPMpnyt350M47PhGSGrGoSLbidwn+Zlt/O0cp8/OZE3LASWA==",
- "dev": true,
- "funding": [
- "https://github.com/sponsors/huntabyte",
- "https://github.com/sponsors/tglide"
- ],
- "license": "MIT",
- "dependencies": {
- "dequal": "^2.0.3",
- "esm-env": "^1.0.0",
- "lz-string": "^1.5.0"
- },
- "peerDependencies": {
- "@sveltejs/kit": "^2.21.0",
- "svelte": "^5.7.0",
- "zod": "^4.1.0"
- },
- "peerDependenciesMeta": {
- "@sveltejs/kit": {
- "optional": true
- },
- "zod": {
- "optional": true
- }
- }
- },
"node_modules/sade": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
@@ -5123,19 +4116,6 @@
"node": ">=6"
}
},
- "node_modules/saxes": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
- "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=v12.22.7"
- }
- },
"node_modules/semver": {
"version": "7.8.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
@@ -5198,13 +4178,6 @@
"node": ">=8"
}
},
- "node_modules/siginfo": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
- "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/sirv": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
@@ -5230,20 +4203,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/stackback": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
- "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/std-env": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz",
- "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -5267,17 +4226,6 @@
"inline-style-parser": "0.2.7"
}
},
- "node_modules/superstruct": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz",
- "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14.0.0"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -5461,111 +4409,6 @@
}
}
},
- "node_modules/sveltekit-superforms": {
- "version": "2.30.2",
- "resolved": "https://registry.npmjs.org/sveltekit-superforms/-/sveltekit-superforms-2.30.2.tgz",
- "integrity": "sha512-6sR70ZfjFMAfdNure/Bu26o1rY32+WGxebko1L8jUFS+qZw5fxIHBPkUaTpNBkOIlJZ/UJwoNCYCm5xK2Z7Kqw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ciscoheat"
- },
- {
- "type": "ko-fi",
- "url": "https://ko-fi.com/ciscoheat"
- },
- {
- "type": "paypal",
- "url": "https://www.paypal.com/donate/?hosted_button_id=NY7F5ALHHSVQS"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "devalue": "^5.8.1",
- "memoize-weak": "^1.0.2",
- "ts-deepmerge": "^8.0.0"
- },
- "optionalDependencies": {
- "@exodus/schemasafe": "^1.3.0",
- "@standard-schema/spec": "^1.1.0",
- "@typeschema/class-validator": "^0.3.0",
- "@valibot/to-json-schema": "^1.7.1",
- "@vinejs/vine": "^3.0.1",
- "arktype": "^2.2.2",
- "class-validator": "^0.14.4",
- "effect": "^3.21.4",
- "joi": "^17.13.4",
- "json-schema-to-ts": "^3.1.1",
- "superstruct": "^2.0.2",
- "typebox": "^1.3.3",
- "valibot": "^1.4.2",
- "yup": "^1.7.1",
- "zod": "^4.4.3",
- "zod-v3-to-json-schema": "^4.0.0"
- },
- "peerDependencies": {
- "@exodus/schemasafe": "^1.3.0",
- "@sveltejs/kit": "1.x || 2.x",
- "@typeschema/class-validator": "^0.3.0",
- "@vinejs/vine": "^1.8.0 || ^2.0.0 || ^3.0.0",
- "arktype": ">=2.0.0-rc.23",
- "class-validator": "^0.14.1",
- "effect": "^3.21.0",
- "joi": "^17.13.1",
- "superstruct": "^2.0.2",
- "svelte": "3.x || 4.x || >=5.0.0-next.51",
- "typebox": "^1.0.36",
- "valibot": "^1.2.0",
- "yup": "^1.4.0",
- "zod": "^3.25.0 || ^4.0.0"
- },
- "peerDependenciesMeta": {
- "@exodus/schemasafe": {
- "optional": true
- },
- "@typeschema/class-validator": {
- "optional": true
- },
- "@vinejs/vine": {
- "optional": true
- },
- "arktype": {
- "optional": true
- },
- "class-validator": {
- "optional": true
- },
- "effect": {
- "optional": true
- },
- "joi": {
- "optional": true
- },
- "superstruct": {
- "optional": true
- },
- "typebox": {
- "optional": true
- },
- "valibot": {
- "optional": true
- },
- "yup": {
- "optional": true
- },
- "zod": {
- "optional": true
- }
- }
- },
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/tabbable": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz",
@@ -5625,31 +4468,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/tiny-case": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
- "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/tinybench": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
- "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tinyexec": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz",
- "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/tinyglobby": {
"version": "0.2.17",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
@@ -5673,44 +4491,6 @@
"integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==",
"license": "ISC"
},
- "node_modules/tinyrainbow": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
- "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/tldts": {
- "version": "7.4.7",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.7.tgz",
- "integrity": "sha512-56L0/9HELHSsG1bFCzay8UoLxzRL7kpFf7Wl5q/kSYwiSJGACvro61xnKzPNM+SadxllzdtXsKDSXE7HPeqIAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tldts-core": "^7.4.7"
- },
- "bin": {
- "tldts": "bin/cli.js"
- }
- },
- "node_modules/tldts-core": {
- "version": "7.4.7",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.7.tgz",
- "integrity": "sha512-rNlAI8fKn/JckBMUSbNL/ES2kmDiurWaE49l+ikwEc9A6lFR7gMx9AhgQMQKBK4H5w4pKLH64JzZfB99uRsGNQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/toposort": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
- "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/totalist": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
@@ -5721,40 +4501,6 @@
"node": ">=6"
}
},
- "node_modules/tough-cookie": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz",
- "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tldts": "^7.0.5"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/tr46": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz",
- "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.3.1"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/ts-algebra": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz",
- "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/ts-api-utils": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
@@ -5768,16 +4514,6 @@
"typescript": ">=4.8.4"
}
},
- "node_modules/ts-deepmerge": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-8.0.0.tgz",
- "integrity": "sha512-133O+10nJmVI8w5xeVZPEv5PIrv7iaUae07wv1aH8XJH95Ur6YIhWAPhPyP1YPlbPS9fCVcNIZTu7m8urRVF0A==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14.13.1"
- }
- },
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
@@ -5808,28 +4544,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/type-fest": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
- "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "optional": true,
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typebox": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.3.6.tgz",
- "integrity": "sha512-Sc8RA0NCMEFmApHNU9ZMzqcpQj46She44J8ffpLM/bdhLNUZKq7DJumcLcsFx1gRmDfQPgCgOmFFJ7rcnfWNyA==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
@@ -5868,16 +4582,6 @@
"typescript": ">=4.8.4 <6.1.0"
}
},
- "node_modules/undici": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz",
- "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=20.18.1"
- }
- },
"node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
@@ -5902,33 +4606,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/valibot": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.4.2.tgz",
- "integrity": "sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peerDependencies": {
- "typescript": ">=5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/validator": {
- "version": "13.15.35",
- "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz",
- "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/vite": {
"version": "7.3.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz",
@@ -6024,150 +4701,12 @@
}
}
},
- "node_modules/vitest": {
- "version": "4.1.10",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz",
- "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitest/expect": "4.1.10",
- "@vitest/mocker": "4.1.10",
- "@vitest/pretty-format": "4.1.10",
- "@vitest/runner": "4.1.10",
- "@vitest/snapshot": "4.1.10",
- "@vitest/spy": "4.1.10",
- "@vitest/utils": "4.1.10",
- "es-module-lexer": "^2.0.0",
- "expect-type": "^1.3.0",
- "magic-string": "^0.30.21",
- "obug": "^2.1.1",
- "pathe": "^2.0.3",
- "picomatch": "^4.0.3",
- "std-env": "^4.0.0-rc.1",
- "tinybench": "^2.9.0",
- "tinyexec": "^1.0.2",
- "tinyglobby": "^0.2.15",
- "tinyrainbow": "^3.1.0",
- "vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
- "why-is-node-running": "^2.3.0"
- },
- "bin": {
- "vitest": "vitest.mjs"
- },
- "engines": {
- "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- },
- "peerDependencies": {
- "@edge-runtime/vm": "*",
- "@opentelemetry/api": "^1.9.0",
- "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
- "@vitest/browser-playwright": "4.1.10",
- "@vitest/browser-preview": "4.1.10",
- "@vitest/browser-webdriverio": "4.1.10",
- "@vitest/coverage-istanbul": "4.1.10",
- "@vitest/coverage-v8": "4.1.10",
- "@vitest/ui": "4.1.10",
- "happy-dom": "*",
- "jsdom": "*",
- "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "@edge-runtime/vm": {
- "optional": true
- },
- "@opentelemetry/api": {
- "optional": true
- },
- "@types/node": {
- "optional": true
- },
- "@vitest/browser-playwright": {
- "optional": true
- },
- "@vitest/browser-preview": {
- "optional": true
- },
- "@vitest/browser-webdriverio": {
- "optional": true
- },
- "@vitest/coverage-istanbul": {
- "optional": true
- },
- "@vitest/coverage-v8": {
- "optional": true
- },
- "@vitest/ui": {
- "optional": true
- },
- "happy-dom": {
- "optional": true
- },
- "jsdom": {
- "optional": true
- },
- "vite": {
- "optional": false
- }
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
- "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "xml-name-validator": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/wasm-feature-detect": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz",
"integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==",
"license": "Apache-2.0"
},
- "node_modules/webidl-conversions": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz",
- "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz",
- "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/whatwg-url": {
- "version": "16.0.1",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz",
- "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@exodus/bytes": "^1.11.0",
- "tr46": "^6.0.0",
- "webidl-conversions": "^8.0.1"
- },
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
- }
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -6184,23 +4723,6 @@
"node": ">= 8"
}
},
- "node_modules/why-is-node-running": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
- "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "siginfo": "^2.0.0",
- "stackback": "0.0.2"
- },
- "bin": {
- "why-is-node-running": "cli.js"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/word-wrap": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
@@ -6211,41 +4733,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/xml-name-validator": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
- "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/yaml": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
- "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "peer": true,
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/eemeli"
- }
- },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
@@ -6259,48 +4746,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/yup": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz",
- "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "property-expr": "^2.0.5",
- "tiny-case": "^1.0.3",
- "toposort": "^2.0.2",
- "type-fest": "^2.19.0"
- }
- },
"node_modules/zimmerframe": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz",
"integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==",
"dev": true,
"license": "MIT"
- },
- "node_modules/zod": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
- "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/zod-v3-to-json-schema": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/zod-v3-to-json-schema/-/zod-v3-to-json-schema-4.0.0.tgz",
- "integrity": "sha512-KixLrhX/uPmRFnDgsZrzrk4x5SSJA+PmaE5adbfID9+3KPJcdxqRobaHU397EfWBqfQircrjKqvEqZ/mW5QH6w==",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "peerDependencies": {
- "zod": "^3.25 || ^4.0.14"
- }
}
}
}
diff --git a/frontend/package.json b/frontend/package.json
index 57ca359..623be90 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -21,7 +21,6 @@
"@eslint/js": "^9.22.0",
"@internationalized/date": "^3.11.0",
"@lucide/svelte": "^1.17.0",
- "@sveltejs/adapter-auto": "^6.0.0",
"@sveltejs/adapter-static": "^3.0.9",
"@sveltejs/kit": "^2.22.0",
"@sveltejs/vite-plugin-svelte": "^6.2.4",
@@ -33,29 +32,23 @@
"eslint": "^9.22.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-svelte": "^3.0.0",
- "formsnap": "^2.0.1",
"globals": "^17.3.0",
- "jsdom": "^29.1.1",
"mode-watcher": "^1.1.0",
"prettier": "^3.8.1",
"prettier-plugin-svelte": "^3.5.0",
"prettier-plugin-tailwindcss": "^0.7.2",
- "runed": "^0.37.1",
"shadcn-svelte": "^1.1.1",
"svelte": "^5.0.0",
"svelte-check": "^4.4.3",
"svelte-easy-crop": "^5.0.0",
"svelte-sonner": "^1.0.7",
- "svelte-toolbelt": "^0.10.6",
- "sveltekit-superforms": "^2.27.1",
"tailwind-merge": "^3.5.0",
"tailwind-variants": "^3.2.2",
"tailwindcss": "^4.2.0",
"tw-animate-css": "^1.4.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.20.0",
- "vite": "^7.0.4",
- "vitest": "^4.1.9"
+ "vite": "^7.0.4"
},
"dependencies": {
"@discourse/jxl": "^1.3.0",
@@ -65,8 +58,6 @@
"@zxcvbn-ts/core": "^3.0.4",
"@zxcvbn-ts/language-common": "^3.0.4",
"@zxcvbn-ts/language-en": "^3.0.2",
- "cropperjs": "^1.6.2",
- "esbuild": "^0.28.1",
"heic2any": "^0.0.4",
"maplibre-gl": "^5.24.0"
}
diff --git a/frontend/src/lib/components/layout/Calendar.svelte b/frontend/src/lib/components/layout/Calendar.svelte
deleted file mode 100644
index 3764650..0000000
--- a/frontend/src/lib/components/layout/Calendar.svelte
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
- {formatCurrency(result.total_amount)} via {result.payment_method}
- Gift Card Code
- {formatCardCode(result.giftcard_code || result.item_id || '')}
- Show this code to the customer
- ✓ Gift card added to {selectedCustomer?.name || 'account'}
- Balance is available immediately {error || 'An error occurred'} No current appointment found.
- A walk-in customer purchasing a gift card. No details required.
- No saved cards found for this customer. Processing cash payment... Initiating card machine... Waiting for customer to tap card... This may take a few moments Card will be charged once — not saved.Payment Complete
-
- {#each users as userItem (userItem.id)}
-
- {/if}
- Enter Card Details
-