mirror of
https://github.com/GlueOps/autoglue.git
synced 2026-02-13 21:00:06 +01:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0f562ac5f4 | ||
|
|
810218124e | ||
|
|
5aff256377 | ||
|
|
bdd6b61859 | ||
|
|
42a86b22dd | ||
|
|
b8cb1e1a2a | ||
|
|
5a4ae19900 | ||
|
|
d9db293894 | ||
|
|
19d5ee7251 | ||
|
|
6b91a5760b | ||
|
|
bbd4c86013 | ||
|
|
99ebcb11a3 | ||
|
|
be1b35da3c | ||
|
|
a6a296f283 | ||
|
|
341ecf8b0a | ||
|
|
92998015ec | ||
|
|
9345c2761c | ||
|
|
6944e5d027 | ||
|
|
48b3bf5d3c | ||
|
|
4c595db85e |
@@ -37,7 +37,7 @@ func NewRouter(db *gorm.DB, jobs *bg.Jobs, studio http.Handler) http.Handler {
|
||||
r.Use(middleware.Recoverer)
|
||||
r.Use(SecurityHeaders)
|
||||
r.Use(requestBodyLimit(10 << 20))
|
||||
r.Use(httprate.LimitByIP(100, 1*time.Minute))
|
||||
r.Use(httprate.LimitByIP(1000, 1*time.Minute))
|
||||
r.Use(middleware.StripSlashes)
|
||||
|
||||
allowed := getAllowedOrigins()
|
||||
|
||||
@@ -503,7 +503,6 @@ func ListRecordSets(db *gorm.DB) http.HandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// GetRecordSet godoc
|
||||
//
|
||||
// @ID GetRecordSet
|
||||
@@ -517,35 +516,35 @@ func ListRecordSets(db *gorm.DB) http.HandlerFunc {
|
||||
// @Failure 404 {string} string "not found"
|
||||
// @Router /dns/records/{id} [get]
|
||||
func GetRecordSet(db *gorm.DB) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
orgID, ok := httpmiddleware.OrgIDFrom(r.Context())
|
||||
if !ok {
|
||||
utils.WriteError(w, http.StatusForbidden, "org_required", "specify X-Org-ID")
|
||||
return
|
||||
}
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
orgID, ok := httpmiddleware.OrgIDFrom(r.Context())
|
||||
if !ok {
|
||||
utils.WriteError(w, http.StatusForbidden, "org_required", "specify X-Org-ID")
|
||||
return
|
||||
}
|
||||
|
||||
id, err := uuid.Parse(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
utils.WriteError(w, http.StatusBadRequest, "bad_id", "invalid UUID")
|
||||
return
|
||||
}
|
||||
id, err := uuid.Parse(chi.URLParam(r, "id"))
|
||||
if err != nil {
|
||||
utils.WriteError(w, http.StatusBadRequest, "bad_id", "invalid UUID")
|
||||
return
|
||||
}
|
||||
|
||||
var row models.RecordSet
|
||||
if err := db.
|
||||
Joins("Domain").
|
||||
Where(`record_sets.id = ? AND "Domain"."organization_id" = ?`, id, orgID).
|
||||
First(&row).Error; err != nil {
|
||||
var row models.RecordSet
|
||||
if err := db.
|
||||
Joins("Domain").
|
||||
Where(`record_sets.id = ? AND "Domain"."organization_id" = ?`, id, orgID).
|
||||
First(&row).Error; err != nil {
|
||||
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
utils.WriteError(w, http.StatusNotFound, "not_found", "record set not found")
|
||||
return
|
||||
}
|
||||
utils.WriteError(w, http.StatusInternalServerError, "db_error", err.Error())
|
||||
return
|
||||
}
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
utils.WriteError(w, http.StatusNotFound, "not_found", "record set not found")
|
||||
return
|
||||
}
|
||||
utils.WriteError(w, http.StatusInternalServerError, "db_error", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.WriteJSON(w, http.StatusOK, recordOut(&row))
|
||||
}
|
||||
utils.WriteJSON(w, http.StatusOK, recordOut(&row))
|
||||
}
|
||||
}
|
||||
|
||||
// CreateRecordSet godoc
|
||||
|
||||
2
internal/web/dist/assets/index-Cdjh6IZW.css
vendored
Normal file
2
internal/web/dist/assets/index-Cdjh6IZW.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4167
internal/web/dist/assets/index-CyGsiYei.js
vendored
4167
internal/web/dist/assets/index-CyGsiYei.js
vendored
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/index-CyGsiYei.js.br
vendored
BIN
internal/web/dist/assets/index-CyGsiYei.js.br
vendored
Binary file not shown.
BIN
internal/web/dist/assets/index-CyGsiYei.js.gz
vendored
BIN
internal/web/dist/assets/index-CyGsiYei.js.gz
vendored
Binary file not shown.
4186
internal/web/dist/assets/index-GteqH5KT.js
vendored
Normal file
4186
internal/web/dist/assets/index-GteqH5KT.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
internal/web/dist/assets/index-VHZG0dIU.css
vendored
2
internal/web/dist/assets/index-VHZG0dIU.css
vendored
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/index-VHZG0dIU.css.br
vendored
BIN
internal/web/dist/assets/index-VHZG0dIU.css.br
vendored
Binary file not shown.
BIN
internal/web/dist/assets/index-VHZG0dIU.css.gz
vendored
BIN
internal/web/dist/assets/index-VHZG0dIU.css.gz
vendored
Binary file not shown.
4
internal/web/dist/assets/react-Dt2M6tWj.js
vendored
4
internal/web/dist/assets/react-Dt2M6tWj.js
vendored
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/react-Dt2M6tWj.js.br
vendored
BIN
internal/web/dist/assets/react-Dt2M6tWj.js.br
vendored
Binary file not shown.
BIN
internal/web/dist/assets/react-Dt2M6tWj.js.gz
vendored
BIN
internal/web/dist/assets/react-Dt2M6tWj.js.gz
vendored
Binary file not shown.
File diff suppressed because one or more lines are too long
4
internal/web/dist/assets/react-v1TLhXpT.js
vendored
Normal file
4
internal/web/dist/assets/react-v1TLhXpT.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
internal/web/dist/assets/react-v1TLhXpT.js.map
vendored
Normal file
1
internal/web/dist/assets/react-v1TLhXpT.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
6
internal/web/dist/index.html
vendored
6
internal/web/dist/index.html
vendored
@@ -5,9 +5,9 @@
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>AutoGlue</title>
|
||||
<script type="module" crossorigin src="/assets/index-CyGsiYei.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/react-Dt2M6tWj.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-VHZG0dIU.css">
|
||||
<script type="module" crossorigin src="/assets/index-GteqH5KT.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/react-v1TLhXpT.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-Cdjh6IZW.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
BIN
internal/web/dist/index.html.br
vendored
BIN
internal/web/dist/index.html.br
vendored
Binary file not shown.
BIN
internal/web/dist/index.html.gz
vendored
BIN
internal/web/dist/index.html.gz
vendored
Binary file not shown.
3
internal/web/dist/vite.svg
vendored
3
internal/web/dist/vite.svg
vendored
@@ -1,2 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88"
|
||||
height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -53,7 +53,7 @@
|
||||
"react": "^19.2.3",
|
||||
"react-day-picker": "^9.13.0",
|
||||
"react-dom": "^19.2.3",
|
||||
"react-hook-form": "^7.69.0",
|
||||
"react-hook-form": "^7.70.0",
|
||||
"react-icons": "^5.5.0",
|
||||
"react-resizable-panels": "^3.0.6",
|
||||
"react-router-dom": "^7.11.0",
|
||||
@@ -80,7 +80,7 @@
|
||||
"shadcn": "3.6.2",
|
||||
"tw-animate-css": "1.4.0",
|
||||
"typescript": "5.9.3",
|
||||
"typescript-eslint": "8.50.1",
|
||||
"typescript-eslint": "8.51.0",
|
||||
"vite": "7.3.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,10 @@ const AWS_ALLOWED_SERVICES = ["route53", "s3", "ec2", "iam", "rds", "dynamodb"]
|
||||
type AwsSvc = (typeof AWS_ALLOWED_SERVICES)[number]
|
||||
|
||||
// -------------------- Schemas --------------------
|
||||
// Zod v4 gotchas you hit:
|
||||
// - .partial() cannot be used if the object contains refinements/effects (often true once you have transforms/refines).
|
||||
// - .extend() cannot overwrite keys after refinements (requires .safeExtend()).
|
||||
// Easiest fix: define CREATE and UPDATE schemas separately (no .partial(), no post-refinement .extend()).
|
||||
|
||||
const createCredentialSchema = z
|
||||
.object({
|
||||
@@ -91,6 +95,16 @@ const createCredentialSchema = z
|
||||
secret: z.any(),
|
||||
})
|
||||
.superRefine((val, ctx) => {
|
||||
// scope required unless provider scope
|
||||
if (val.scope_kind !== "provider" && !val.scope) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["scope"],
|
||||
message: `scope is required`,
|
||||
})
|
||||
}
|
||||
|
||||
// AWS scope checks
|
||||
if (val.credential_provider === "aws") {
|
||||
if (val.scope_kind === "service") {
|
||||
const svc = (val.scope as any)?.service
|
||||
@@ -112,23 +126,25 @@ const createCredentialSchema = z
|
||||
})
|
||||
}
|
||||
}
|
||||
if (val.kind === "aws_access_key") {
|
||||
const sk = val.secret ?? {}
|
||||
const id = sk.access_key_id
|
||||
if (typeof id !== "string" || !/^[A-Z0-9]{20}$/.test(id)) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `access_key_id must be 20 chars (A-Z0-9)`,
|
||||
})
|
||||
}
|
||||
if (typeof sk.secret_access_key !== "string" || sk.secret_access_key.length < 10) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `secret_access_key is required`,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// secret requiredness by kind (create always validates)
|
||||
if (val.kind === "aws_access_key") {
|
||||
const sk = val.secret ?? {}
|
||||
const id = sk.access_key_id
|
||||
if (typeof id !== "string" || !/^[A-Z0-9]{20}$/.test(id)) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `access_key_id must be 20 chars (A-Z0-9)`,
|
||||
})
|
||||
}
|
||||
if (typeof sk.secret_access_key !== "string" || sk.secret_access_key.length < 10) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `secret_access_key is required`,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,6 +158,7 @@ const createCredentialSchema = z
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (val.kind === "basic_auth") {
|
||||
const s = val.secret ?? {}
|
||||
if (!s.username || !s.password) {
|
||||
@@ -152,6 +169,7 @@ const createCredentialSchema = z
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (val.kind === "oauth2") {
|
||||
const s = val.secret ?? {}
|
||||
if (!s.client_id || !s.client_secret || !s.refresh_token) {
|
||||
@@ -162,30 +180,144 @@ const createCredentialSchema = z
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (val.scope_kind !== "provider" && !val.scope) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["scope"],
|
||||
message: `scope is required`,
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
type CreateCredentialValues = z.input<typeof createCredentialSchema>
|
||||
const updateCredentialSchema = createCredentialSchema.partial().extend({
|
||||
name: z.string().min(1, "Name is required").max(100).optional(),
|
||||
})
|
||||
|
||||
// UPDATE schema: all fields optional, and validations are "patch-friendly".
|
||||
const updateCredentialSchema = z
|
||||
.object({
|
||||
credential_provider: z
|
||||
.enum(["aws", "cloudflare", "hetzner", "digitalocean", "generic"])
|
||||
.optional(),
|
||||
kind: z.enum(["aws_access_key", "api_token", "basic_auth", "oauth2"]).optional(),
|
||||
schema_version: z.number().optional(),
|
||||
name: z.string().min(1, "Name is required").max(100).optional(),
|
||||
scope_kind: z.enum(["provider", "service", "resource"]).optional(),
|
||||
scope_version: z.number().optional(),
|
||||
scope: z.any().optional(),
|
||||
// allow "" so your form can keep empty strings; buildUpdateBody will drop them
|
||||
account_id: z.string().optional().or(z.literal("")),
|
||||
region: z.string().optional().or(z.literal("")),
|
||||
secret: z.any().optional(),
|
||||
})
|
||||
.superRefine((val, ctx) => {
|
||||
// If scope_kind is being changed to non-provider, require scope in the patch
|
||||
if (typeof val.scope_kind !== "undefined") {
|
||||
if (val.scope_kind !== "provider" && !val.scope) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["scope"],
|
||||
message: `scope is required`,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// AWS scope checks only if we have enough info
|
||||
if (val.credential_provider === "aws") {
|
||||
if (val.scope_kind === "service" && typeof val.scope !== "undefined") {
|
||||
const svc = (val.scope as any)?.service
|
||||
if (!AWS_ALLOWED_SERVICES.includes(svc)) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["scope"],
|
||||
message: `For AWS service scope, "service" must be one of: ${AWS_ALLOWED_SERVICES.join(", ")}`,
|
||||
})
|
||||
}
|
||||
}
|
||||
if (val.scope_kind === "resource" && typeof val.scope !== "undefined") {
|
||||
const arn = (val.scope as any)?.arn
|
||||
if (typeof arn !== "string" || !arn.startsWith("arn:")) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["scope"],
|
||||
message: `For AWS resource scope, "arn" must start with "arn:"`,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Secret validation on update:
|
||||
// - only validate if rotating secret OR changing kind
|
||||
// - if rotating secret but kind is NOT provided, skip kind-specific checks (backend can validate)
|
||||
const rotatingSecret = typeof val.secret !== "undefined"
|
||||
const changingKind = typeof val.kind !== "undefined"
|
||||
if (!rotatingSecret && !changingKind) return
|
||||
if (!val.kind) return
|
||||
|
||||
if (val.kind === "aws_access_key") {
|
||||
const sk = val.secret ?? {}
|
||||
const id = sk.access_key_id
|
||||
if (typeof id !== "string" || !/^[A-Z0-9]{20}$/.test(id)) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `access_key_id must be 20 chars (A-Z0-9)`,
|
||||
})
|
||||
}
|
||||
if (typeof sk.secret_access_key !== "string" || sk.secret_access_key.length < 10) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `secret_access_key is required`,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (val.kind === "api_token") {
|
||||
const token = (val.secret ?? {}).token
|
||||
if (!token) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `token is required`,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (val.kind === "basic_auth") {
|
||||
const s = val.secret ?? {}
|
||||
if (!s.username || !s.password) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `username and password are required`,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (val.kind === "oauth2") {
|
||||
const s = val.secret ?? {}
|
||||
if (!s.client_id || !s.client_secret || !s.refresh_token) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["secret"],
|
||||
message: `client_id, client_secret, and refresh_token are required`,
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
type UpdateCredentialValues = z.input<typeof updateCredentialSchema>
|
||||
|
||||
// -------------------- Helpers --------------------
|
||||
|
||||
function pretty(obj: unknown) {
|
||||
try {
|
||||
return JSON.stringify(JSON.parse(obj as string), null, 2)
|
||||
if (obj == null) return ""
|
||||
if (typeof obj === "string") {
|
||||
try {
|
||||
return JSON.stringify(JSON.parse(obj), null, 2)
|
||||
} catch {
|
||||
return obj
|
||||
}
|
||||
}
|
||||
return JSON.stringify(obj, null, 2)
|
||||
} catch {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
function extractErr(e: any): string {
|
||||
const raw = (e as any)?.body ?? (e as any)?.response ?? (e as any)?.message
|
||||
if (typeof raw === "string") return raw
|
||||
@@ -252,9 +384,9 @@ function buildCreateBody(v: CreateCredentialValues) {
|
||||
}
|
||||
|
||||
// Build exact PATCH body (only provided fields)
|
||||
function buildUpdateBody(v: z.infer<typeof updateCredentialSchema>) {
|
||||
function buildUpdateBody(v: UpdateCredentialValues) {
|
||||
const body: any = {}
|
||||
const keys: (keyof typeof v)[] = [
|
||||
const keys: (keyof UpdateCredentialValues)[] = [
|
||||
"name",
|
||||
"account_id",
|
||||
"region",
|
||||
@@ -316,7 +448,7 @@ export const CredentialPage = () => {
|
||||
|
||||
// Update
|
||||
const updateMutation = useMutation({
|
||||
mutationFn: (payload: { id: string; body: z.infer<typeof updateCredentialSchema> }) =>
|
||||
mutationFn: (payload: { id: string; body: UpdateCredentialValues }) =>
|
||||
credentialsApi.updateCredential(payload.id, buildUpdateBody(payload.body)),
|
||||
onSuccess: async () => {
|
||||
await qc.invalidateQueries({ queryKey: ["credentials"] })
|
||||
@@ -362,7 +494,7 @@ export const CredentialPage = () => {
|
||||
mode: "onBlur",
|
||||
})
|
||||
|
||||
const editForm = useForm<z.input<typeof updateCredentialSchema>>({
|
||||
const editForm = useForm<UpdateCredentialValues>({
|
||||
resolver: zodResolver(updateCredentialSchema),
|
||||
defaultValues: {},
|
||||
mode: "onBlur",
|
||||
@@ -371,7 +503,8 @@ export const CredentialPage = () => {
|
||||
function openEdit(row: any) {
|
||||
setEditingId(row.id)
|
||||
editForm.reset({
|
||||
provider: row.provider,
|
||||
// FIX: correct key (was "provider" in your original)
|
||||
credential_provider: row.credential_provider,
|
||||
kind: row.kind,
|
||||
schema_version: row.schema_version ?? 1,
|
||||
name: row.name,
|
||||
@@ -380,7 +513,7 @@ export const CredentialPage = () => {
|
||||
account_id: row.account_id ?? "",
|
||||
region: row.region ?? "",
|
||||
scope: row.scope ?? (row.scope_kind === "provider" ? {} : undefined),
|
||||
secret: undefined,
|
||||
secret: undefined, // keep existing unless user rotates
|
||||
} as any)
|
||||
setUseRawEditSecretJSON(false)
|
||||
setEditOpen(true)
|
||||
@@ -394,7 +527,7 @@ export const CredentialPage = () => {
|
||||
return items.filter((c: any) =>
|
||||
[
|
||||
c.name,
|
||||
c.provider,
|
||||
c.credential_provider,
|
||||
c.kind,
|
||||
c.scope_kind,
|
||||
c.account_id,
|
||||
@@ -436,6 +569,7 @@ export const CredentialPage = () => {
|
||||
|
||||
function ensureCreateDefaultsForSecret() {
|
||||
if (useRawSecretJSON) return
|
||||
|
||||
if (credential_provider === "aws" && kind === "aws_access_key") {
|
||||
const s = createForm.getValues("secret") ?? {}
|
||||
setCreateSecret({
|
||||
@@ -459,7 +593,7 @@ export const CredentialPage = () => {
|
||||
}
|
||||
|
||||
function onChangeCreateScopeKind(next: "provider" | "service" | "resource") {
|
||||
createForm.setValue("scope_kind", next)
|
||||
createForm.setValue("scope_kind", next, { shouldDirty: true, shouldValidate: true })
|
||||
if (next === "provider") setCreateScope({})
|
||||
if (next === "service") setCreateScope({ service: "route53" as AwsSvc })
|
||||
if (next === "resource") setCreateScope({ arn: "" })
|
||||
@@ -905,6 +1039,7 @@ export const CredentialPage = () => {
|
||||
client_secret: e.target.value,
|
||||
})
|
||||
}
|
||||
placeholder="••••••••••"
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@@ -933,7 +1068,6 @@ export const CredentialPage = () => {
|
||||
)}
|
||||
|
||||
<DialogFooter className="gap-2">
|
||||
{/* Preview Create button */}
|
||||
<Button
|
||||
type="button"
|
||||
variant="secondary"
|
||||
@@ -1260,9 +1394,7 @@ export const CredentialPage = () => {
|
||||
<FormItem>
|
||||
<FormLabel>Rotate Secret (JSON)</FormLabel>
|
||||
<Textarea
|
||||
value={
|
||||
typeof field.value === "string" ? field.value : pretty(field.value ?? {})
|
||||
}
|
||||
value={typeof field.value === "string" ? field.value : pretty(field.value)}
|
||||
onChange={(e) => {
|
||||
try {
|
||||
field.onChange(JSON.parse(e.target.value))
|
||||
@@ -1281,7 +1413,6 @@ export const CredentialPage = () => {
|
||||
)}
|
||||
|
||||
<DialogFooter className="gap-2">
|
||||
{/* Preview Update button */}
|
||||
<Button
|
||||
type="button"
|
||||
variant="secondary"
|
||||
|
||||
@@ -128,6 +128,10 @@ const credLabel = (c: DtoCredentialOut) => {
|
||||
}
|
||||
|
||||
// ---------- zod schemas ----------
|
||||
// IMPORTANT (Zod v4):
|
||||
// - `.partial()` cannot be used on object schemas containing refinements/effects.
|
||||
// Your schemas contain effects via `.transform(...)` and refinements via `.superRefine(...)` / `.refine(...)`,
|
||||
// so we define UPDATE schemas explicitly instead of using `.partial()`.
|
||||
|
||||
const createDomainSchema = z.object({
|
||||
domain_name: z
|
||||
@@ -144,8 +148,22 @@ const createDomainSchema = z.object({
|
||||
})
|
||||
type CreateDomainValues = z.input<typeof createDomainSchema>
|
||||
|
||||
const updateDomainSchema = createDomainSchema.partial()
|
||||
type UpdateDomainValues = z.infer<typeof updateDomainSchema>
|
||||
// Update: all optional; replicate the normalization safely
|
||||
const updateDomainSchema = z.object({
|
||||
domain_name: z
|
||||
.string()
|
||||
.min(1, "Domain is required")
|
||||
.max(253)
|
||||
.transform((s) => s.trim().replace(/\.$/, "").toLowerCase())
|
||||
.optional(),
|
||||
credential_id: z.string().uuid("Pick a credential").optional(),
|
||||
zone_id: z
|
||||
.string()
|
||||
.optional()
|
||||
.or(z.literal(""))
|
||||
.transform((v) => (v ? v.trim() : undefined)),
|
||||
})
|
||||
type UpdateDomainValues = z.input<typeof updateDomainSchema>
|
||||
|
||||
const ttlSchema = z
|
||||
.union([
|
||||
@@ -182,7 +200,42 @@ const createRecordSchema = z
|
||||
})
|
||||
type CreateRecordValues = z.input<typeof createRecordSchema>
|
||||
|
||||
const updateRecordSchema = createRecordSchema.partial()
|
||||
// Update: all optional. Only enforce "values required"/"CNAME exactly one" if valuesCsv is present.
|
||||
// Only validate ttl if present (ttlSchema already optional).
|
||||
const updateRecordSchema = z
|
||||
.object({
|
||||
name: z
|
||||
.string()
|
||||
.min(1, "Name required")
|
||||
.max(253)
|
||||
.transform((s) => s.trim().replace(/\.$/, "").toLowerCase())
|
||||
.optional(),
|
||||
type: z.enum(rrtypes as [string, ...string[]]).optional(),
|
||||
ttl: ttlSchema,
|
||||
valuesCsv: z.string().optional(),
|
||||
})
|
||||
.superRefine((vals, ctx) => {
|
||||
const hasValues = typeof vals.valuesCsv !== "undefined"
|
||||
if (!hasValues) return
|
||||
|
||||
const arr = parseCommaList(vals.valuesCsv ?? "")
|
||||
if (arr.length === 0) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
path: ["valuesCsv"],
|
||||
message: "At least one value is required",
|
||||
})
|
||||
}
|
||||
|
||||
// We can only enforce CNAME rule if `type` is provided in patch (or you can enforce always if you want).
|
||||
if (vals.type === "CNAME" && arr.length !== 1) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
path: ["valuesCsv"],
|
||||
message: "CNAME requires exactly one value",
|
||||
})
|
||||
}
|
||||
})
|
||||
type UpdateRecordValues = z.input<typeof updateRecordSchema>
|
||||
|
||||
// ---------- main ----------
|
||||
@@ -224,12 +277,9 @@ export const DnsPage = () => {
|
||||
const r53Credentials = useMemo(() => (credentialQ.data ?? []).filter(isR53), [credentialQ.data])
|
||||
|
||||
useEffect(() => {
|
||||
const setSelectedDns = () => {
|
||||
if (!selected && domainsQ.data && domainsQ.data.length) {
|
||||
setSelected(domainsQ.data[0]!)
|
||||
}
|
||||
if (!selected && domainsQ.data && domainsQ.data.length) {
|
||||
setSelected(domainsQ.data[0]!)
|
||||
}
|
||||
setSelectedDns()
|
||||
}, [domainsQ.data, selected])
|
||||
|
||||
const filteredDomains = useMemo(() => {
|
||||
@@ -237,7 +287,7 @@ export const DnsPage = () => {
|
||||
if (!filter.trim()) return list
|
||||
const f = filter.toLowerCase()
|
||||
return list.filter((d) =>
|
||||
[d.domain_name, d.zone_id, d.status, d.domain_name]
|
||||
[d.domain_name, d.zone_id, d.status]
|
||||
.filter(Boolean)
|
||||
.map((x) => String(x).toLowerCase())
|
||||
.some((s) => s.includes(f))
|
||||
@@ -271,6 +321,7 @@ export const DnsPage = () => {
|
||||
|
||||
const editDomainForm = useForm<UpdateDomainValues>({
|
||||
resolver: zodResolver(updateDomainSchema),
|
||||
defaultValues: {},
|
||||
})
|
||||
|
||||
const openEditDomain = (d: DtoDomainResponse) => {
|
||||
@@ -283,10 +334,20 @@ export const DnsPage = () => {
|
||||
setEditDomOpen(true)
|
||||
}
|
||||
|
||||
// Build PATCH body (don’t send empty strings)
|
||||
const buildUpdateDomainBody = (vals: UpdateDomainValues): DtoUpdateDomainRequest => {
|
||||
const body: any = {}
|
||||
if (typeof vals.domain_name !== "undefined") body.domain_name = vals.domain_name
|
||||
if (typeof vals.credential_id !== "undefined" && vals.credential_id !== "")
|
||||
body.credential_id = vals.credential_id
|
||||
if (typeof vals.zone_id !== "undefined" && vals.zone_id !== "") body.zone_id = vals.zone_id
|
||||
return body as DtoUpdateDomainRequest
|
||||
}
|
||||
|
||||
const updateDomainMut = useMutation({
|
||||
mutationFn: (vals: UpdateDomainValues) => {
|
||||
if (!selected) throw new Error("No domain selected")
|
||||
return dnsApi.updateDomain(selected.id!, vals as unknown as DtoUpdateDomainRequest)
|
||||
return dnsApi.updateDomain(selected.id!, buildUpdateDomainBody(vals))
|
||||
},
|
||||
onSuccess: async () => {
|
||||
toast.success("Domain updated")
|
||||
@@ -338,7 +399,6 @@ export const DnsPage = () => {
|
||||
const body: DtoCreateRecordSetRequest = {
|
||||
name: vals.name,
|
||||
type: vals.type,
|
||||
// omit ttl when empty/undefined
|
||||
...(vals.ttl ? { ttl: vals.ttl as unknown as number } : {}),
|
||||
values: parseCommaList(vals.valuesCsv ?? ""),
|
||||
}
|
||||
@@ -356,6 +416,7 @@ export const DnsPage = () => {
|
||||
|
||||
const editRecForm = useForm<UpdateRecordValues>({
|
||||
resolver: zodResolver(updateRecordSchema),
|
||||
defaultValues: {},
|
||||
})
|
||||
|
||||
const openEditRecord = (r: DtoRecordSetResponse) => {
|
||||
@@ -374,15 +435,12 @@ export const DnsPage = () => {
|
||||
mutationFn: async (vals: UpdateRecordValues) => {
|
||||
if (!editingRecord) throw new Error("No record selected")
|
||||
const body: DtoUpdateRecordSetRequest = {}
|
||||
if (vals.name !== undefined) body.name = vals.name
|
||||
if (vals.type !== undefined) body.type = vals.type
|
||||
if (vals.ttl !== undefined && vals.ttl !== null) {
|
||||
// if blank string came through it would have been filtered; when undefined, omit
|
||||
body.ttl = vals.ttl as unknown as number | undefined
|
||||
}
|
||||
if (vals.valuesCsv !== undefined) {
|
||||
body.values = parseCommaList(vals.valuesCsv)
|
||||
}
|
||||
|
||||
if (typeof vals.name !== "undefined") body.name = vals.name
|
||||
if (typeof vals.type !== "undefined") body.type = vals.type
|
||||
if (typeof vals.ttl !== "undefined") body.ttl = vals.ttl as unknown as number | undefined
|
||||
if (typeof vals.valuesCsv !== "undefined") body.values = parseCommaList(vals.valuesCsv)
|
||||
|
||||
return dnsApi.updateRecordSetsByDomain(editingRecord.id!, body)
|
||||
},
|
||||
onSuccess: async () => {
|
||||
@@ -556,7 +614,14 @@ export const DnsPage = () => {
|
||||
</td>
|
||||
<td className="px-3 py-2">
|
||||
<div className="flex items-center justify-end gap-2">
|
||||
<Button size="icon" variant="ghost" onClick={() => openEditDomain(d)}>
|
||||
<Button
|
||||
size="icon"
|
||||
variant="ghost"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation()
|
||||
openEditDomain(d)
|
||||
}}
|
||||
>
|
||||
<Pencil className="h-4 w-4" />
|
||||
</Button>
|
||||
<AlertDialog>
|
||||
@@ -650,10 +715,7 @@ export const DnsPage = () => {
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Type</FormLabel>
|
||||
<Select
|
||||
onValueChange={field.onChange}
|
||||
defaultValue={field.value as string}
|
||||
>
|
||||
<Select onValueChange={field.onChange} value={field.value as string}>
|
||||
<FormControl>
|
||||
<SelectTrigger>
|
||||
<SelectValue />
|
||||
@@ -969,7 +1031,7 @@ export const DnsPage = () => {
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Type</FormLabel>
|
||||
<Select onValueChange={field.onChange} defaultValue={field.value as string}>
|
||||
<Select onValueChange={field.onChange} value={field.value as string}>
|
||||
<FormControl>
|
||||
<SelectTrigger>
|
||||
<SelectValue />
|
||||
|
||||
@@ -53,13 +53,17 @@ type Role = (typeof ROLE_OPTIONS)[number]
|
||||
const STATUS = ["pending", "provisioning", "ready", "failed"] as const
|
||||
type Status = (typeof STATUS)[number]
|
||||
|
||||
// ---------- Zod schemas ----------
|
||||
// Zod v4: `.partial()` cannot be used on schemas with refinements/effects.
|
||||
// createServerSchema has a refinement, so define updateServerSchema explicitly.
|
||||
|
||||
const createServerSchema = z
|
||||
.object({
|
||||
hostname: z.string().trim().max(60, "Max 60 chars"),
|
||||
public_ip_address: z.string().trim().optional().or(z.literal("")),
|
||||
private_ip_address: z.string().trim().min(1, "Private IP address required"),
|
||||
role: z.enum(ROLE_OPTIONS),
|
||||
ssh_key_id: z.uuid("Pick a valid SSH key"),
|
||||
ssh_key_id: z.string().uuid("Pick a valid SSH key"),
|
||||
ssh_user: z.string().trim().min(1, "SSH user is required"),
|
||||
status: z.enum(STATUS).default("pending"),
|
||||
})
|
||||
@@ -69,8 +73,33 @@ const createServerSchema = z
|
||||
)
|
||||
type CreateServerInput = z.input<typeof createServerSchema>
|
||||
|
||||
const updateServerSchema = createServerSchema.partial()
|
||||
type UpdateServerValues = z.infer<typeof updateServerSchema>
|
||||
// Patch-friendly update schema:
|
||||
// - all fields optional
|
||||
// - only enforce "public ip required" if role is being set to bastion in the patch
|
||||
const updateServerSchema = z
|
||||
.object({
|
||||
hostname: z.string().trim().max(60, "Max 60 chars").optional(),
|
||||
public_ip_address: z.string().trim().optional().or(z.literal("")),
|
||||
private_ip_address: z.string().trim().min(1, "Private IP address required").optional(),
|
||||
role: z.enum(ROLE_OPTIONS).optional(),
|
||||
ssh_key_id: z.string().uuid("Pick a valid SSH key").optional(),
|
||||
ssh_user: z.string().trim().min(1, "SSH user is required").optional(),
|
||||
status: z.enum(STATUS).optional(),
|
||||
})
|
||||
.superRefine((v, ctx) => {
|
||||
// If updating role to bastion, require public_ip_address in the patch
|
||||
if (v.role === "bastion") {
|
||||
const pub = typeof v.public_ip_address === "string" ? v.public_ip_address.trim() : ""
|
||||
if (!pub) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
path: ["public_ip_address"],
|
||||
message: "Public IP required for bastion",
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
type UpdateServerValues = z.input<typeof updateServerSchema>
|
||||
|
||||
function StatusBadge({ status }: { status: Status }) {
|
||||
const v =
|
||||
@@ -88,6 +117,27 @@ function StatusBadge({ status }: { status: Status }) {
|
||||
)
|
||||
}
|
||||
|
||||
// Build PATCH body: omit undefined and empty strings (so optional inputs can be cleared in UI without sending "")
|
||||
function buildUpdateBody(values: UpdateServerValues) {
|
||||
const body: any = {}
|
||||
const keys: (keyof UpdateServerValues)[] = [
|
||||
"hostname",
|
||||
"public_ip_address",
|
||||
"private_ip_address",
|
||||
"role",
|
||||
"ssh_key_id",
|
||||
"ssh_user",
|
||||
"status",
|
||||
]
|
||||
for (const k of keys) {
|
||||
const v = values[k]
|
||||
if (typeof v === "undefined") continue
|
||||
if (v === "") continue
|
||||
body[k] = v
|
||||
}
|
||||
return body
|
||||
}
|
||||
|
||||
export const ServerPage = () => {
|
||||
const [filter, setFilter] = useState<string>("")
|
||||
const [createOpen, setCreateOpen] = useState<boolean>(false)
|
||||
@@ -180,13 +230,12 @@ export const ServerPage = () => {
|
||||
})
|
||||
|
||||
const roleIsBastionU = watchedRoleUpdate === "bastion"
|
||||
|
||||
const pubUpdate = watchedPublicIpAddressUpdate?.trim() ?? ""
|
||||
const needPubUpdate = roleIsBastionU && pubUpdate === ""
|
||||
|
||||
const updateMut = useMutation({
|
||||
mutationFn: ({ id, values }: { id: string; values: UpdateServerValues }) =>
|
||||
serversApi.updateServer(id, values as any),
|
||||
serversApi.updateServer(id, buildUpdateBody(values) as any),
|
||||
onSuccess: async () => {
|
||||
await qc.invalidateQueries({ queryKey: ["servers"] })
|
||||
setUpdateOpen(false)
|
||||
@@ -279,7 +328,7 @@ export const ServerPage = () => {
|
||||
</div>
|
||||
|
||||
<Select
|
||||
value={roleFilter || "all"} // map "" -> "all" for the UI
|
||||
value={roleFilter || "all"}
|
||||
onValueChange={(v) => setRoleFilter(v === "all" ? "" : (v as Role))}
|
||||
>
|
||||
<SelectTrigger className="w-36">
|
||||
@@ -296,14 +345,14 @@ export const ServerPage = () => {
|
||||
</Select>
|
||||
|
||||
<Select
|
||||
value={statusFilter || "all"} // map "" -> "all" for the UI
|
||||
value={statusFilter || "all"}
|
||||
onValueChange={(v) => setStatusFilter(v === "all" ? "" : (v as Status))}
|
||||
>
|
||||
<SelectTrigger className="w-40">
|
||||
<SelectValue placeholder="Status (all)" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="all">All statuses</SelectItem> {/* sentinel */}
|
||||
<SelectItem value="all">All statuses</SelectItem>
|
||||
{STATUS.map((s) => (
|
||||
<SelectItem key={s} value={s}>
|
||||
{s}
|
||||
|
||||
458
ui/yarn.lock
458
ui/yarn.lock
@@ -311,17 +311,17 @@
|
||||
integrity sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==
|
||||
|
||||
"@emnapi/core@^1.7.1":
|
||||
version "1.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.7.1.tgz#3a79a02dbc84f45884a1806ebb98e5746bdfaac4"
|
||||
integrity sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.8.1.tgz#fd9efe721a616288345ffee17a1f26ac5dd01349"
|
||||
integrity sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==
|
||||
dependencies:
|
||||
"@emnapi/wasi-threads" "1.1.0"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@emnapi/runtime@^1.7.1":
|
||||
version "1.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.7.1.tgz#a73784e23f5d57287369c808197288b52276b791"
|
||||
integrity sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.8.1.tgz#550fa7e3c0d49c5fb175a116e8cd70614f9a22a5"
|
||||
integrity sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==
|
||||
dependencies:
|
||||
tslib "^2.4.0"
|
||||
|
||||
@@ -463,9 +463,9 @@
|
||||
integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==
|
||||
|
||||
"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0":
|
||||
version "4.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3"
|
||||
integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==
|
||||
version "4.9.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595"
|
||||
integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==
|
||||
dependencies:
|
||||
eslint-visitor-keys "^3.4.3"
|
||||
|
||||
@@ -1404,115 +1404,130 @@
|
||||
resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz#c57a5234ae122671aff6fe72e673a7ed90f03f87"
|
||||
integrity sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz#f3ff5dbde305c4fa994d49aeb0a5db5305eff03b"
|
||||
integrity sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==
|
||||
"@rollup/rollup-android-arm-eabi@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz#76e0fef6533b3ce313f969879e61e8f21f0eeb28"
|
||||
integrity sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz#c97d6ee47846a7ab1cd38e968adce25444a90a19"
|
||||
integrity sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==
|
||||
"@rollup/rollup-android-arm64@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz#d3cfc675a40bbdec97bda6d7fe3b3b05f0e1cd93"
|
||||
integrity sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz#a13fc2d82e01eaf8ac823634a3f5f76fd9d0f938"
|
||||
integrity sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==
|
||||
"@rollup/rollup-darwin-arm64@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz#eb912b8f59dd47c77b3c50a78489013b1d6772b4"
|
||||
integrity sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz#db4fa8b2b76d86f7e9b68ce4661fafe9767adf9b"
|
||||
integrity sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==
|
||||
"@rollup/rollup-darwin-x64@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz#e7d0839fdfd1276a1d34bc5ebbbd0dfd7d0b81a0"
|
||||
integrity sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==
|
||||
|
||||
"@rollup/rollup-freebsd-arm64@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz#b2c6039de4b75efd3f29417fcb1a795c75a4e3ee"
|
||||
integrity sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==
|
||||
"@rollup/rollup-freebsd-arm64@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz#7ff8118760f7351e48fd0cd3717ff80543d6aac8"
|
||||
integrity sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==
|
||||
|
||||
"@rollup/rollup-freebsd-x64@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz#9ae2a216c94f87912a596a3b3a2ec5199a689ba5"
|
||||
integrity sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==
|
||||
"@rollup/rollup-freebsd-x64@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz#49d330dadbda1d4e9b86b4a3951b59928a9489a9"
|
||||
integrity sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz#69d5de7f781132f138514f2b900c523e38e2461f"
|
||||
integrity sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz#98c5f1f8b9776b4a36e466e2a1c9ed1ba52ef1b6"
|
||||
integrity sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==
|
||||
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz#b6431e5699747f285306ffe8c1194d7af74f801f"
|
||||
integrity sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz#b9acecd3672e742f70b0c8a94075c816a91ff040"
|
||||
integrity sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz#a32931baec8a0fa7b3288afb72d400ae735112c2"
|
||||
integrity sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==
|
||||
"@rollup/rollup-linux-arm64-gnu@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz#7a6ab06651bc29e18b09a50ed1a02bc972977c9b"
|
||||
integrity sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz#0ad72572b01eb946c0b1a7a6f17ab3be6689a963"
|
||||
integrity sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==
|
||||
"@rollup/rollup-linux-arm64-musl@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz#3c8c9072ba4a4d4ef1156b85ab9a2cbb57c1fad0"
|
||||
integrity sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==
|
||||
|
||||
"@rollup/rollup-linux-loong64-gnu@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz#05681f000310906512279944b5bef38c0cd4d326"
|
||||
integrity sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==
|
||||
"@rollup/rollup-linux-loong64-gnu@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz#17a7af13530f4e4a7b12cd26276c54307a84a8b0"
|
||||
integrity sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==
|
||||
|
||||
"@rollup/rollup-linux-ppc64-gnu@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz#9847a8c9dd76d687c3bdbe38d7f5f32c6b2743c8"
|
||||
integrity sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==
|
||||
"@rollup/rollup-linux-loong64-musl@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz#5cd7a900fd7b077ecd753e34a9b7ff1157fe70c1"
|
||||
integrity sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz#173f20c278ac770ae3e969663a27d172a4545e87"
|
||||
integrity sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==
|
||||
"@rollup/rollup-linux-ppc64-gnu@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz#03a097e70243ddf1c07b59d3c20f38e6f6800539"
|
||||
integrity sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-musl@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz#db70c2377ae1ef61ef8673354d107ecb3fa7ffed"
|
||||
integrity sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==
|
||||
"@rollup/rollup-linux-ppc64-musl@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz#a5389873039d4650f35b4fa060d286392eb21a94"
|
||||
integrity sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==
|
||||
|
||||
"@rollup/rollup-linux-s390x-gnu@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz#b2c461778add1c2ee70ec07d1788611548647962"
|
||||
integrity sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz#789e60e7d6e2b76132d001ffb24ba80007fb17d0"
|
||||
integrity sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz#ab140b356569601f57ab8727bd7306463841894f"
|
||||
integrity sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==
|
||||
"@rollup/rollup-linux-riscv64-musl@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz#3556fa88d139282e9a73c337c9a170f3c5fe7aa4"
|
||||
integrity sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz#810134b4a9d0d88576938f2eed38999a653814a1"
|
||||
integrity sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==
|
||||
"@rollup/rollup-linux-s390x-gnu@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz#c085995b10143c16747a67f1a5487512b2ff04b2"
|
||||
integrity sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==
|
||||
|
||||
"@rollup/rollup-openharmony-arm64@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz#0182bae7a54e748be806acef7a7f726f6949213c"
|
||||
integrity sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==
|
||||
"@rollup/rollup-linux-x64-gnu@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz#9563a5419dd2604841bad31a39ccfdd2891690fb"
|
||||
integrity sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz#1f19349bd1c5e454d03e4508a9277b6354985b9d"
|
||||
integrity sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==
|
||||
"@rollup/rollup-linux-x64-musl@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz#691bb06e6269a8959c13476b0cd2aa7458facb31"
|
||||
integrity sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz#234ff739993539f64efac6c2e59704a691a309c2"
|
||||
integrity sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==
|
||||
"@rollup/rollup-openbsd-x64@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz#223e71224746a59ce6d955bbc403577bb5a8be9d"
|
||||
integrity sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==
|
||||
|
||||
"@rollup/rollup-win32-x64-gnu@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz#a4df0507c3be09c152a795cfc0c4f0c225765c5c"
|
||||
integrity sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==
|
||||
"@rollup/rollup-openharmony-arm64@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz#0817e5d8ecbfeb8b7939bf58f8ce3c9dd67fce77"
|
||||
integrity sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.54.0":
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz#beacb356412eef5dc0164e9edfee51c563732054"
|
||||
integrity sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==
|
||||
"@rollup/rollup-win32-arm64-msvc@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz#de56d8f2013c84570ef5fb917aae034abda93e4a"
|
||||
integrity sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz#659aff5244312475aeea2c9479a6c7d397b517bf"
|
||||
integrity sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==
|
||||
|
||||
"@rollup/rollup-win32-x64-gnu@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz#2cb09549cbb66c1b979f9238db6dd454cac14a88"
|
||||
integrity sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.55.1":
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz#f79437939020b83057faf07e98365b1fa51c458b"
|
||||
integrity sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==
|
||||
|
||||
"@scarf/scarf@=1.4.0":
|
||||
version "1.4.0"
|
||||
@@ -2283,110 +2298,100 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
|
||||
integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==
|
||||
|
||||
"@typescript-eslint/eslint-plugin@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.1.tgz#b56e422fb82eb40fae04905f1444aef0298b634b"
|
||||
integrity sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==
|
||||
"@typescript-eslint/eslint-plugin@8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.51.0.tgz#8985230730c0d955bf6aa0aed98c5c2c95102e1a"
|
||||
integrity sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.10.0"
|
||||
"@typescript-eslint/scope-manager" "8.50.1"
|
||||
"@typescript-eslint/type-utils" "8.50.1"
|
||||
"@typescript-eslint/utils" "8.50.1"
|
||||
"@typescript-eslint/visitor-keys" "8.50.1"
|
||||
"@typescript-eslint/scope-manager" "8.51.0"
|
||||
"@typescript-eslint/type-utils" "8.51.0"
|
||||
"@typescript-eslint/utils" "8.51.0"
|
||||
"@typescript-eslint/visitor-keys" "8.51.0"
|
||||
ignore "^7.0.0"
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^2.1.0"
|
||||
ts-api-utils "^2.2.0"
|
||||
|
||||
"@typescript-eslint/parser@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.50.1.tgz#9772760c0c4090ba3e8b43c796128ff88aff345c"
|
||||
integrity sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==
|
||||
"@typescript-eslint/parser@8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.51.0.tgz#584fb8be3a867cbf980917aabed5f7528f615d6b"
|
||||
integrity sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "8.50.1"
|
||||
"@typescript-eslint/types" "8.50.1"
|
||||
"@typescript-eslint/typescript-estree" "8.50.1"
|
||||
"@typescript-eslint/visitor-keys" "8.50.1"
|
||||
"@typescript-eslint/scope-manager" "8.51.0"
|
||||
"@typescript-eslint/types" "8.51.0"
|
||||
"@typescript-eslint/typescript-estree" "8.51.0"
|
||||
"@typescript-eslint/visitor-keys" "8.51.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/project-service@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.50.1.tgz#3176e55ac2907638f4b8d43da486c864934adc8d"
|
||||
integrity sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==
|
||||
"@typescript-eslint/project-service@8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.51.0.tgz#3cfef313d8bebbf4b2442675a4dd463cef4c8369"
|
||||
integrity sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/tsconfig-utils" "^8.50.1"
|
||||
"@typescript-eslint/types" "^8.50.1"
|
||||
"@typescript-eslint/tsconfig-utils" "^8.51.0"
|
||||
"@typescript-eslint/types" "^8.51.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.50.1.tgz#4a7cd64bcd45990865bdb2bedcacbfeccbd08193"
|
||||
integrity sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==
|
||||
"@typescript-eslint/scope-manager@8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.51.0.tgz#19b42f65680c21f7b6f40fe9024327f6bb1893c1"
|
||||
integrity sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.50.1"
|
||||
"@typescript-eslint/visitor-keys" "8.50.1"
|
||||
"@typescript-eslint/types" "8.51.0"
|
||||
"@typescript-eslint/visitor-keys" "8.51.0"
|
||||
|
||||
"@typescript-eslint/tsconfig-utils@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.1.tgz#ee4894bec14ef13db305d0323b14b109d996f116"
|
||||
integrity sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==
|
||||
|
||||
"@typescript-eslint/tsconfig-utils@^8.50.1":
|
||||
"@typescript-eslint/tsconfig-utils@8.51.0", "@typescript-eslint/tsconfig-utils@^8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.51.0.tgz#a575e9885e62dbd260fb64474eff1dae6e317515"
|
||||
integrity sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==
|
||||
|
||||
"@typescript-eslint/type-utils@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.50.1.tgz#7bbc79baa03aee6e3b3faf14bb0b8a78badb2370"
|
||||
integrity sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==
|
||||
"@typescript-eslint/type-utils@8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.51.0.tgz#ec165b0312a6025c2a2a3f39641e46ab4f049564"
|
||||
integrity sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.50.1"
|
||||
"@typescript-eslint/typescript-estree" "8.50.1"
|
||||
"@typescript-eslint/utils" "8.50.1"
|
||||
"@typescript-eslint/types" "8.51.0"
|
||||
"@typescript-eslint/typescript-estree" "8.51.0"
|
||||
"@typescript-eslint/utils" "8.51.0"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^2.1.0"
|
||||
ts-api-utils "^2.2.0"
|
||||
|
||||
"@typescript-eslint/types@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.50.1.tgz#43d19e99613788e0715f799a29f139981bcd8385"
|
||||
integrity sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==
|
||||
|
||||
"@typescript-eslint/types@^8.50.1":
|
||||
"@typescript-eslint/types@8.51.0", "@typescript-eslint/types@^8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.51.0.tgz#6996e59d49e92fb893531bdc249f0d92a7bebdbb"
|
||||
integrity sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==
|
||||
|
||||
"@typescript-eslint/typescript-estree@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.1.tgz#ce273e584694fa5bd34514fcfbea51fe1d79e271"
|
||||
integrity sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==
|
||||
"@typescript-eslint/typescript-estree@8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.51.0.tgz#b57f5157d1ac2127bd7c2c9ad8060fa017df4a1a"
|
||||
integrity sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==
|
||||
dependencies:
|
||||
"@typescript-eslint/project-service" "8.50.1"
|
||||
"@typescript-eslint/tsconfig-utils" "8.50.1"
|
||||
"@typescript-eslint/types" "8.50.1"
|
||||
"@typescript-eslint/visitor-keys" "8.50.1"
|
||||
"@typescript-eslint/project-service" "8.51.0"
|
||||
"@typescript-eslint/tsconfig-utils" "8.51.0"
|
||||
"@typescript-eslint/types" "8.51.0"
|
||||
"@typescript-eslint/visitor-keys" "8.51.0"
|
||||
debug "^4.3.4"
|
||||
minimatch "^9.0.4"
|
||||
semver "^7.6.0"
|
||||
tinyglobby "^0.2.15"
|
||||
ts-api-utils "^2.1.0"
|
||||
ts-api-utils "^2.2.0"
|
||||
|
||||
"@typescript-eslint/utils@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.50.1.tgz#054db870952e7526c3cf2162a2ff6e9434e544d0"
|
||||
integrity sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==
|
||||
"@typescript-eslint/utils@8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.51.0.tgz#b9a071cd210647f860a38873acf9bc5157bea56a"
|
||||
integrity sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.7.0"
|
||||
"@typescript-eslint/scope-manager" "8.50.1"
|
||||
"@typescript-eslint/types" "8.50.1"
|
||||
"@typescript-eslint/typescript-estree" "8.50.1"
|
||||
"@typescript-eslint/scope-manager" "8.51.0"
|
||||
"@typescript-eslint/types" "8.51.0"
|
||||
"@typescript-eslint/typescript-estree" "8.51.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@8.50.1":
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.1.tgz#13b9d43b7567862faca69527580b9adda1a5c9fd"
|
||||
integrity sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==
|
||||
"@typescript-eslint/visitor-keys@8.51.0":
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.51.0.tgz#d37f5c82b9bece2c8aeb3ba7bb836bbba0f92bb8"
|
||||
integrity sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.50.1"
|
||||
"@typescript-eslint/types" "8.51.0"
|
||||
eslint-visitor-keys "^4.2.1"
|
||||
|
||||
"@vitejs/plugin-react@5.1.2":
|
||||
@@ -3216,9 +3221,9 @@ esprima@~4.0.0:
|
||||
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||
|
||||
esquery@^1.5.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
|
||||
integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d"
|
||||
integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==
|
||||
dependencies:
|
||||
estraverse "^5.1.0"
|
||||
|
||||
@@ -3476,10 +3481,10 @@ forwarded@0.2.0:
|
||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
||||
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
|
||||
|
||||
framer-motion@^12.23.26:
|
||||
version "12.23.26"
|
||||
resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.23.26.tgz#2a684e9b156118e1c4989d7fc9327def83480391"
|
||||
integrity sha512-cPcIhgR42xBn1Uj+PzOyheMtZ73H927+uWPDVhUMqxy8UHt6Okavb6xIz9J/phFUHUj0OncR6UvMfJTXoc/LKA==
|
||||
framer-motion@^12.23.27:
|
||||
version "12.23.27"
|
||||
resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.23.27.tgz#b02d554e81ecd80b486f5d27ab50105e65024396"
|
||||
integrity sha512-EAcX8FS8jzZ4tSKpj+1GhwbVY+r1gfamPFwXZAsioPqu/ffRwU2otkKg6GEDCR41FVJv3RoBN7Aqep6drL9Itg==
|
||||
dependencies:
|
||||
motion-dom "^12.23.23"
|
||||
motion-utils "^12.23.6"
|
||||
@@ -4232,11 +4237,11 @@ motion-utils@^12.23.6:
|
||||
integrity sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==
|
||||
|
||||
motion@^12.23.26:
|
||||
version "12.23.26"
|
||||
resolved "https://registry.yarnpkg.com/motion/-/motion-12.23.26.tgz#7309d3f13df43795b774fa98821c6ee5d6fab4f1"
|
||||
integrity sha512-Ll8XhVxY8LXMVYTCfme27WH2GjBrCIzY4+ndr5QKxsK+YwCtOi2B/oBi5jcIbik5doXuWT/4KKDOVAZJkeY5VQ==
|
||||
version "12.23.27"
|
||||
resolved "https://registry.yarnpkg.com/motion/-/motion-12.23.27.tgz#263cf7de4b2b9a1367df1df7b41259f853b4696d"
|
||||
integrity sha512-EDb0hAE6jNX8BHpmQK1GBf9Eizx9bg/Tz2KEAJBOGEnIJp8W77QweRpVb05U8R0L0/LXndHmS1Xv3fwXJh/kcQ==
|
||||
dependencies:
|
||||
framer-motion "^12.23.26"
|
||||
framer-motion "^12.23.27"
|
||||
tslib "^2.4.0"
|
||||
|
||||
ms@^2.1.3:
|
||||
@@ -4716,10 +4721,10 @@ react-dom@^19.2.3:
|
||||
dependencies:
|
||||
scheduler "^0.27.0"
|
||||
|
||||
react-hook-form@^7.69.0:
|
||||
version "7.69.0"
|
||||
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.69.0.tgz#40f5e5ba2a436c2eee12b75ab30da5bb743744e7"
|
||||
integrity sha512-yt6ZGME9f4F6WHwevrvpAjh42HMvocuSnSIHUGycBqXIJdhqGSPQzTpGF+1NLREk/58IdPxEMfPcFCjlMhclGw==
|
||||
react-hook-form@^7.70.0:
|
||||
version "7.70.0"
|
||||
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.70.0.tgz#256fa2ca71633c99f16ca2cd6074628aa52001b2"
|
||||
integrity sha512-COOMajS4FI3Wuwrs3GPpi/Jeef/5W1DRR84Yl5/ShlT3dKVFUfoGiEZ/QE6Uw8P4T2/CLJdcTVYKvWBMQTEpvw==
|
||||
|
||||
react-icons@^5.5.0:
|
||||
version "5.5.0"
|
||||
@@ -4888,34 +4893,37 @@ reusify@^1.0.4:
|
||||
integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
|
||||
|
||||
rollup@^4.43.0:
|
||||
version "4.54.0"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.54.0.tgz#930f4dfc41ff94d720006f9f62503612a6c319b8"
|
||||
integrity sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==
|
||||
version "4.55.1"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.55.1.tgz#4ec182828be440648e7ee6520dc35e9f20e05144"
|
||||
integrity sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==
|
||||
dependencies:
|
||||
"@types/estree" "1.0.8"
|
||||
optionalDependencies:
|
||||
"@rollup/rollup-android-arm-eabi" "4.54.0"
|
||||
"@rollup/rollup-android-arm64" "4.54.0"
|
||||
"@rollup/rollup-darwin-arm64" "4.54.0"
|
||||
"@rollup/rollup-darwin-x64" "4.54.0"
|
||||
"@rollup/rollup-freebsd-arm64" "4.54.0"
|
||||
"@rollup/rollup-freebsd-x64" "4.54.0"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.54.0"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.54.0"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.54.0"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.54.0"
|
||||
"@rollup/rollup-linux-loong64-gnu" "4.54.0"
|
||||
"@rollup/rollup-linux-ppc64-gnu" "4.54.0"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.54.0"
|
||||
"@rollup/rollup-linux-riscv64-musl" "4.54.0"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.54.0"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.54.0"
|
||||
"@rollup/rollup-linux-x64-musl" "4.54.0"
|
||||
"@rollup/rollup-openharmony-arm64" "4.54.0"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.54.0"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.54.0"
|
||||
"@rollup/rollup-win32-x64-gnu" "4.54.0"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.54.0"
|
||||
"@rollup/rollup-android-arm-eabi" "4.55.1"
|
||||
"@rollup/rollup-android-arm64" "4.55.1"
|
||||
"@rollup/rollup-darwin-arm64" "4.55.1"
|
||||
"@rollup/rollup-darwin-x64" "4.55.1"
|
||||
"@rollup/rollup-freebsd-arm64" "4.55.1"
|
||||
"@rollup/rollup-freebsd-x64" "4.55.1"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.55.1"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.55.1"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.55.1"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.55.1"
|
||||
"@rollup/rollup-linux-loong64-gnu" "4.55.1"
|
||||
"@rollup/rollup-linux-loong64-musl" "4.55.1"
|
||||
"@rollup/rollup-linux-ppc64-gnu" "4.55.1"
|
||||
"@rollup/rollup-linux-ppc64-musl" "4.55.1"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.55.1"
|
||||
"@rollup/rollup-linux-riscv64-musl" "4.55.1"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.55.1"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.55.1"
|
||||
"@rollup/rollup-linux-x64-musl" "4.55.1"
|
||||
"@rollup/rollup-openbsd-x64" "4.55.1"
|
||||
"@rollup/rollup-openharmony-arm64" "4.55.1"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.55.1"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.55.1"
|
||||
"@rollup/rollup-win32-x64-gnu" "4.55.1"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.55.1"
|
||||
fsevents "~2.3.2"
|
||||
|
||||
router@^2.2.0:
|
||||
@@ -5323,10 +5331,10 @@ tree-sitter@=0.22.4:
|
||||
node-addon-api "^8.3.0"
|
||||
node-gyp-build "^4.8.4"
|
||||
|
||||
ts-api-utils@^2.1.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.3.0.tgz#9f397ac9d88ac76e8dd6e8bc4af0dbf98af99f73"
|
||||
integrity sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==
|
||||
ts-api-utils@^2.2.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8"
|
||||
integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==
|
||||
|
||||
ts-mixer@^6.0.3, ts-mixer@^6.0.4:
|
||||
version "6.0.4"
|
||||
@@ -5395,15 +5403,15 @@ types-ramda@^0.30.1:
|
||||
dependencies:
|
||||
ts-toolbelt "^9.6.0"
|
||||
|
||||
typescript-eslint@8.50.1:
|
||||
version "8.50.1"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.50.1.tgz#047df900e568757bc791b6b1ab6fa5fbed9b2393"
|
||||
integrity sha512-ytTHO+SoYSbhAH9CrYnMhiLx8To6PSSvqnvXyPUgPETCvB6eBKmTI9w6XMPS3HsBRGkwTVBX+urA8dYQx6bHfQ==
|
||||
typescript-eslint@8.51.0:
|
||||
version "8.51.0"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.51.0.tgz#3cf2ead3d7c5adf940fbac213c043370c0c000b2"
|
||||
integrity sha512-jh8ZuM5oEh2PSdyQG9YAEM1TCGuWenLSuSUhf/irbVUNW9O5FhbFVONviN2TgMTBnUmyHv7E56rYnfLZK6TkiA==
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin" "8.50.1"
|
||||
"@typescript-eslint/parser" "8.50.1"
|
||||
"@typescript-eslint/typescript-estree" "8.50.1"
|
||||
"@typescript-eslint/utils" "8.50.1"
|
||||
"@typescript-eslint/eslint-plugin" "8.51.0"
|
||||
"@typescript-eslint/parser" "8.51.0"
|
||||
"@typescript-eslint/typescript-estree" "8.51.0"
|
||||
"@typescript-eslint/utils" "8.51.0"
|
||||
|
||||
typescript@5.9.3:
|
||||
version "5.9.3"
|
||||
@@ -5579,9 +5587,9 @@ wrappy@1:
|
||||
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
|
||||
|
||||
wsl-utils@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.3.0.tgz#197049b93b34b822703bf4ccde8256660651205f"
|
||||
integrity sha512-3sFIGLiaDP7rTO4xh3g+b3AzhYDIUGGywE/WsmqzJWDxus5aJXVnPTNC/6L+r2WzrwXqVOdD262OaO+cEyPMSQ==
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.3.1.tgz#9479836ddf03be267aad3abfc3cb1f6e0c9f1ed1"
|
||||
integrity sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==
|
||||
dependencies:
|
||||
is-wsl "^3.1.0"
|
||||
powershell-utils "^0.1.0"
|
||||
@@ -5652,6 +5660,6 @@ zod@^3.24.1:
|
||||
integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==
|
||||
|
||||
"zod@^3.25 || ^4.0", "zod@^3.25.0 || ^4.0.0", zod@^4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-4.2.1.tgz#07f0388c7edbfd5f5a2466181cb4adf5b5dbd57b"
|
||||
integrity sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==
|
||||
version "4.3.5"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.5.tgz#aeb269a6f9fc259b1212c348c7c5432aaa474d2a"
|
||||
integrity sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==
|
||||
|
||||
Reference in New Issue
Block a user