diff --git a/front_admin/src/modules/dashboard/components/RunningScrapers/RunningScrapers.tsx b/front_admin/src/modules/dashboard/components/RunningScrapers/RunningScrapers.tsx
index 4d2ad4ca..5758a1b6 100644
--- a/front_admin/src/modules/dashboard/components/RunningScrapers/RunningScrapers.tsx
+++ b/front_admin/src/modules/dashboard/components/RunningScrapers/RunningScrapers.tsx
@@ -5,26 +5,29 @@ interface RunningScrapersProps {
scrapers: ScraperSummary[];
onToggle: (id: string) => void;
onViewAll: () => void;
+ operationalMessage?: string;
}
export function RunningScrapers({
scrapers,
onToggle,
onViewAll,
+ operationalMessage,
}: RunningScrapersProps) {
- const activeCount = scrapers.filter((scraper) => scraper.active).length;
+ const activeCount = scrapers.some((scraper) => scraper.status === "N/D") ? null : scrapers.filter((scraper) => scraper.active).length;
return (
- Scrapers em Execução
+ Processamento em execução
- {activeCount}/{scrapers.length} ativos
+ {activeCount === null ? "N/D" : `${activeCount}/${scrapers.length} ativos`}
+ {operationalMessage &&
{operationalMessage}
}
- Ver todos os scrapers
+ Ver processamento de vagas
);
diff --git a/front_admin/src/modules/dashboard/components/RunningScrapers/ScraperRow.tsx b/front_admin/src/modules/dashboard/components/RunningScrapers/ScraperRow.tsx
index ec55fa22..709f3d6c 100644
--- a/front_admin/src/modules/dashboard/components/RunningScrapers/ScraperRow.tsx
+++ b/front_admin/src/modules/dashboard/components/RunningScrapers/ScraperRow.tsx
@@ -17,18 +17,20 @@ export function ScraperRow({ scraper, onToggle, onConfigure }: ScraperRowProps)
-
{scraper.lastRun}
+
{scraper.lastRun}
+ {scraper.executionDetail && {scraper.executionDetail}
}
+
- {formatNumber(scraper.collected24h)}
+ {scraper.catalogJobs === null ? "N/D" : formatNumber(scraper.catalogJobs)}
onToggle(scraper.id)}
- disabled={scraper.active}
- title={scraper.active ? "Scraper em execução" : "Iniciar Scraper"}
+ disabled={scraper.active || scraper.runDisabled}
+ title={scraper.active ? "Processamento em execução" : "Iniciar processamento"}
className={`p-1.5 rounded-md inline-flex items-center justify-center transition-colors ${
scraper.active
? "cursor-not-allowed text-slate-400 opacity-60"
diff --git a/front_admin/src/modules/dashboard/components/RunningScrapers/ScraperTable.tsx b/front_admin/src/modules/dashboard/components/RunningScrapers/ScraperTable.tsx
index 643c9aed..bd58133d 100644
--- a/front_admin/src/modules/dashboard/components/RunningScrapers/ScraperTable.tsx
+++ b/front_admin/src/modules/dashboard/components/RunningScrapers/ScraperTable.tsx
@@ -11,7 +11,7 @@ export function ScraperTable({ scrapers, onToggle, onConfigure }: ScraperTablePr
if (scrapers.length === 0) {
return (
- Nenhum scraper retornado pelo backend.
+ Nenhum processamento retornado pelo backend.
);
}
@@ -21,10 +21,10 @@ export function ScraperTable({ scrapers, onToggle, onConfigure }: ScraperTablePr
- Scraper
+ Processamento
Status
Última Execução
- Vagas no Índice
+ Vagas no catálogo
Ações
diff --git a/front_admin/src/modules/dashboard/hooks/useDashboard.ts b/front_admin/src/modules/dashboard/hooks/useDashboard.ts
index 90c4a743..88bc08cb 100644
--- a/front_admin/src/modules/dashboard/hooks/useDashboard.ts
+++ b/front_admin/src/modules/dashboard/hooks/useDashboard.ts
@@ -1,42 +1,20 @@
-import { useCallback, useEffect, useRef, useState } from "react";
+import { useEffect, useMemo, useRef, useState } from "react";
import { useNotifications } from "../../../components/notifications/useNotifications";
import { ApiError } from "../../../lib/api/client";
import type {
DashboardChartPoint,
DashboardStats,
- ResourceUsage,
- ScraperSummary,
- ServiceHealth,
} from "../schemas";
+import { useAuth } from "../../auth/hooks/useAuth";
+import { useOperationalSnapshot } from "../../observability/hooks/useOperationalSnapshot";
+import { operationalNotice, withOperationalExecution } from "../../observability/services/operationalPresentation";
+import { createPollingResource } from "../../../lib/polling/pollingResource";
+import { usePollingResource } from "../../../lib/polling/usePollingResource";
import { dashboardService } from "../services/dashboard.service";
const REFRESH_INTERVAL_MS = 10_000;
const MAX_CHART_POINTS = 24;
-type DashboardState = {
- stats: DashboardStats | null;
- resources: ResourceUsage | null;
- services: ServiceHealth[];
- scrapers: ScraperSummary[];
- chartPoints: DashboardChartPoint[];
- lastUpdatedAt: string | null;
- isLoading: boolean;
- isRefreshing: boolean;
- error: string | null;
-};
-
-const INITIAL_STATE: DashboardState = {
- stats: null,
- resources: null,
- services: [],
- scrapers: [],
- chartPoints: [],
- lastUpdatedAt: null,
- isLoading: true,
- isRefreshing: false,
- error: null,
-};
-
function timeLabel(value: string): string {
const date = new Date(value);
if (Number.isNaN(date.getTime())) return "--:--";
@@ -72,103 +50,87 @@ function appendChartPoint(
return nextPoints.slice(-MAX_CHART_POINTS);
}
+function createDashboardResource(sessionKey: string) {
+ void sessionKey; // A new resource isolates each authenticated session.
+ let chartPoints: DashboardChartPoint[] = [];
+ return createPollingResource> & { chartPoints: DashboardChartPoint[] }>({
+ intervalMs: REFRESH_INTERVAL_MS,
+ errorMessage: "Nao foi possivel atualizar as metricas do dashboard.",
+ timestamp: (data) => data.generatedAt,
+ load: async (signal) => {
+ const overview = await dashboardService.getOverview(signal);
+ if (signal.aborted) throw new DOMException("Aborted", "AbortError");
+ chartPoints = appendChartPoint(chartPoints, chartPointFrom(overview.stats, overview.generatedAt));
+ return { ...overview, chartPoints };
+ },
+ });
+}
+
export function useDashboard() {
const { notify } = useNotifications();
- const [state, setState] = useState(INITIAL_STATE);
- const mountedRef = useRef(true);
-
- const refresh = useCallback(async (silent = false) => {
- if (!mountedRef.current) return;
-
- setState((current) => ({
- ...current,
- isRefreshing: silent ? current.isRefreshing : true,
- }));
-
+ const { isLoggedIn } = useAuth();
+ const canReadOperational = isLoggedIn?.role === "admin" || isLoggedIn?.role === "super_admin";
+ const sessionKey = `${isLoggedIn?.id ?? "anonymous"}:${isLoggedIn?.role ?? "none"}`;
+ const operational = useOperationalSnapshot(canReadOperational, REFRESH_INTERVAL_MS, sessionKey);
+ const resource = useMemo(() => createDashboardResource(sessionKey), [sessionKey]);
+ const query = usePollingResource(resource);
+ const mountedRef = useRef(false);
+ const pendingRef = useRef(false);
+ const [startingScraperId, setStartingScraperId] = useState(null);
+ const [triggerForbidden, setTriggerForbidden] = useState(false);
+ useEffect(() => {
+ mountedRef.current = true;
+ return () => { mountedRef.current = false; };
+ }, []);
+ const scrapers = (query.data?.scrapers ?? []).map((scraper) => {
+ const merged = withOperationalExecution(scraper, operational, canReadOperational);
+ return {
+ ...merged,
+ runDisabled: !canReadOperational || triggerForbidden || query.stale || merged.active ||
+ merged.runDisabled || startingScraperId !== null,
+ };
+ });
+ const refresh = async () => { await Promise.all([query.refresh(), operational.refresh()]); };
+
+ const toggleScraper = async (id: string) => {
+ const scraper = scrapers.find((item) => item.id === id);
+ if (!scraper || scraper.runDisabled || pendingRef.current) return;
+ pendingRef.current = true;
+ setStartingScraperId(id);
try {
- const overview = await dashboardService.getOverview();
- const nextPoint = chartPointFrom(overview.stats, overview.generatedAt);
-
+ await dashboardService.toggleScraper(id, true);
if (!mountedRef.current) return;
-
- setState((current) => ({
- stats: overview.stats,
- resources: overview.resources,
- services: overview.services,
- scrapers: overview.scrapers,
- chartPoints: appendChartPoint(current.chartPoints, nextPoint),
- lastUpdatedAt: overview.generatedAt,
- isLoading: false,
- isRefreshing: false,
- error: null,
- }));
- } catch {
+ notify({ tone: "success", title: "Execução solicitada", description: `Solicitação aceita para ${scraper.name}.` });
+ await refresh();
+ } catch (error) {
if (!mountedRef.current) return;
-
- setState((current) => ({
- ...current,
- isLoading: false,
- isRefreshing: false,
- error: "Nao foi possivel atualizar as metricas do dashboard.",
- }));
+ if (error instanceof ApiError && error.status === 409) {
+ notify({ tone: "warning", title: "Processamento já em execução", description: "A execução atual ainda não terminou." });
+ await refresh();
+ } else {
+ if (error instanceof ApiError && [401, 403].includes(error.status)) setTriggerForbidden(true);
+ notify({ tone: "error", title: "Erro ao iniciar processamento", description: `Não foi possível iniciar ${scraper.name}.` });
+ }
+ } finally {
+ pendingRef.current = false;
+ if (mountedRef.current) setStartingScraperId(null);
}
- }, []);
-
- useEffect(() => {
- mountedRef.current = true;
-
- const load = (silent = false) => {
- if (!mountedRef.current) return;
- void refresh(silent);
- };
-
- load();
- const interval = window.setInterval(() => load(true), REFRESH_INTERVAL_MS);
-
- return () => {
- mountedRef.current = false;
- window.clearInterval(interval);
- };
- }, [refresh]);
-
- const toggleScraper = (id: string) => {
- const scraper = state.scrapers.find((item) => item.id === id);
- if (!scraper) return;
-
- void dashboardService
- .toggleScraper(id, !scraper.active)
- .then(async () => {
- notify({
- tone: "success",
- title: "Scraper iniciado",
- description: `${scraper.name} começou a executar.`,
- });
- await refresh(true);
- })
- .catch((error) => {
- if (error instanceof ApiError && error.status === 409) {
- notify({
- tone: "warning",
- title: "Scraper já em execução",
- description: "A execução atual ainda não terminou.",
- });
- void refresh(true);
- return;
- }
-
- notify({
- tone: "error",
- title: scraper.active ? "Pausa indisponível" : "Erro ao iniciar scraper",
- description: scraper.active
- ? "Ainda não existe endpoint real para cancelar uma execução em andamento."
- : `Não foi possível iniciar ${scraper.name}.`,
- });
- });
};
return {
- ...state,
- refresh: () => refresh(false),
+ stats: query.data?.stats ?? null,
+ resources: query.data?.resources ?? null,
+ services: query.data?.services ?? [],
+ scrapers,
+ chartPoints: query.data?.chartPoints ?? [],
+ lastUpdatedAt: query.updatedAt,
+ isLoading: query.loading,
+ isRefreshing: query.refreshing,
+ stale: query.stale,
+ error: query.error,
+ operationalMessage: operationalNotice(operational, canReadOperational),
+ operational,
+ refresh,
toggleScraper,
refreshIntervalMs: REFRESH_INTERVAL_MS,
};
diff --git a/front_admin/src/modules/dashboard/mocks/dashboard.mock.ts b/front_admin/src/modules/dashboard/mocks/dashboard.mock.ts
index a7817e27..dc4136ef 100644
--- a/front_admin/src/modules/dashboard/mocks/dashboard.mock.ts
+++ b/front_admin/src/modules/dashboard/mocks/dashboard.mock.ts
@@ -13,9 +13,9 @@ export const MOCK_STATS: DashboardStats = {
};
export const MOCK_RESOURCES: ResourceUsage = {
- scraper: 99,
- postgres: 100,
- valkey: 100,
+ scraper: "ok",
+ postgres: "ok",
+ valkey: "ok",
};
export const MOCK_SERVICES: ServiceHealth[] = [
@@ -23,42 +23,42 @@ export const MOCK_SERVICES: ServiceHealth[] = [
name: "Backend API",
status: "Operacional",
sla: "99.9%",
- health: 100,
+ health: "ok",
tone: "success",
},
{
name: "PostgreSQL",
status: "Operacional",
sla: "100%",
- health: 100,
+ health: "ok",
tone: "success",
},
{
name: "Valkey (Redis)",
status: "Operacional",
sla: "100%",
- health: 100,
+ health: "ok",
tone: "success",
},
{
name: "Go Scraper",
status: "Operacional",
sla: "98.7%",
- health: 99,
+ health: "ok",
tone: "success",
},
{
name: "Prometheus",
status: "Operacional",
sla: "100%",
- health: 100,
+ health: "ok",
tone: "success",
},
{
name: "Loki",
status: "Operacional",
sla: "100%",
- health: 100,
+ health: "ok",
tone: "success",
},
];
@@ -69,7 +69,7 @@ export const MOCK_SCRAPERS: ScraperSummary[] = [
name: "LinkedIn Scraper",
status: "Executando",
lastRun: "2 min atrás",
- collected24h: 2543,
+ catalogJobs: 2543,
active: true,
},
{
@@ -77,7 +77,7 @@ export const MOCK_SCRAPERS: ScraperSummary[] = [
name: "InfoJobs Scraper",
status: "Executando",
lastRun: "1 min atrás",
- collected24h: 1872,
+ catalogJobs: 1872,
active: true,
},
{
@@ -85,7 +85,7 @@ export const MOCK_SCRAPERS: ScraperSummary[] = [
name: "Glassdoor Scraper",
status: "Executando",
lastRun: "3 min atrás",
- collected24h: 1456,
+ catalogJobs: 1456,
active: true,
},
{
@@ -93,7 +93,7 @@ export const MOCK_SCRAPERS: ScraperSummary[] = [
name: "Indeed Scraper",
status: "Executando",
lastRun: "1 min atrás",
- collected24h: 2850,
+ catalogJobs: 2850,
active: true,
},
];
diff --git a/front_admin/src/modules/dashboard/schemas/metrics.schemas.ts b/front_admin/src/modules/dashboard/schemas/metrics.schemas.ts
index d18b636c..e8056f7b 100644
--- a/front_admin/src/modules/dashboard/schemas/metrics.schemas.ts
+++ b/front_admin/src/modules/dashboard/schemas/metrics.schemas.ts
@@ -13,10 +13,11 @@ export const DashboardStatsSchema = z.object({
jobsToday: MetricValueSchema,
});
+const HealthSchema = z.enum(["ok", "degraded", "down"]).nullable();
export const ResourceUsageSchema = z.object({
- scraper: z.number(),
- postgres: z.number(),
- valkey: z.number(),
+ scraper: HealthSchema,
+ postgres: HealthSchema,
+ valkey: HealthSchema,
});
export const DashboardChartPointSchema = z.object({
diff --git a/front_admin/src/modules/dashboard/schemas/scraper.schemas.ts b/front_admin/src/modules/dashboard/schemas/scraper.schemas.ts
index b8a6f60a..e9050e7c 100644
--- a/front_admin/src/modules/dashboard/schemas/scraper.schemas.ts
+++ b/front_admin/src/modules/dashboard/schemas/scraper.schemas.ts
@@ -5,8 +5,10 @@ export const ScraperSummarySchema = z.object({
name: z.string(),
status: z.string(),
lastRun: z.string(),
- collected24h: z.number().int().nonnegative(),
+ catalogJobs: z.number().int().nonnegative().nullable(),
active: z.boolean(),
+ executionDetail: z.string().optional(),
+ runDisabled: z.boolean().optional(),
});
export type ScraperSummary = z.infer;
diff --git a/front_admin/src/modules/dashboard/schemas/service.schemas.ts b/front_admin/src/modules/dashboard/schemas/service.schemas.ts
index 35aa2e3a..aa2dc458 100644
--- a/front_admin/src/modules/dashboard/schemas/service.schemas.ts
+++ b/front_admin/src/modules/dashboard/schemas/service.schemas.ts
@@ -4,7 +4,7 @@ export const ServiceHealthSchema = z.object({
name: z.string(),
status: z.string(),
sla: z.string(),
- health: z.number().min(0).max(100),
+ health: z.enum(["ok", "degraded", "down"]).nullable(),
tone: z.enum(["success", "warning", "danger", "neutral"]),
});
diff --git a/front_admin/src/modules/dashboard/services/dashboard.service.ts b/front_admin/src/modules/dashboard/services/dashboard.service.ts
index 59df41f6..4604699d 100644
--- a/front_admin/src/modules/dashboard/services/dashboard.service.ts
+++ b/front_admin/src/modules/dashboard/services/dashboard.service.ts
@@ -22,7 +22,7 @@ const SERVICE_LABELS: Record<
> = {
postgres: "Postgres",
valkey: "Valkey",
- scraper: "Scraper",
+ scraper: "Processamento",
};
function statusLabel(status: string): string {
@@ -39,12 +39,6 @@ function statusTone(status: string): ServiceHealth["tone"] {
return "danger";
}
-function healthScore(status: string): number {
- if (status === "ok") return 99;
- if (status === "degraded") return 65;
- return 0;
-}
-
function formatLastRun(value: string | null): string {
if (!value) return "Sem execucao";
@@ -69,7 +63,7 @@ function toViewModel(overview: BackendDashboardOverview): DashboardViewModel {
service.latencyMs !== undefined
? `${service.latencyMs}ms`
: service.error ?? "Sem resposta",
- health: healthScore(service.status),
+ health: service.status,
tone: statusTone(service.status),
}),
);
@@ -83,7 +77,7 @@ function toViewModel(overview: BackendDashboardOverview): DashboardViewModel {
},
activeUsers: {
value: overview.stats.activeUsers,
- trend: "contas ativas",
+ trend: "contas não bloqueadas",
positive: true,
},
totalJobs: {
@@ -93,14 +87,14 @@ function toViewModel(overview: BackendDashboardOverview): DashboardViewModel {
},
jobsToday: {
value: overview.stats.jobsCollectedToday,
- trend: "coletadas hoje",
+ trend: "timestamps do índice hoje",
positive: true,
},
},
resources: {
- scraper: healthScore(overview.services.services.scraper.status),
- postgres: healthScore(overview.services.services.postgres.status),
- valkey: healthScore(overview.services.services.valkey.status),
+ scraper: overview.services.services.scraper.status,
+ postgres: overview.services.services.postgres.status,
+ valkey: overview.services.services.valkey.status,
},
services,
scrapers: overview.scrapers.map((scraper) => ({
@@ -108,15 +102,15 @@ function toViewModel(overview: BackendDashboardOverview): DashboardViewModel {
name: scraper.name,
status: statusLabel(scraper.status),
lastRun: formatLastRun(scraper.lastRunAt),
- collected24h: scraper.jobsCollected ?? 0,
+ catalogJobs: scraper.jobsCollected,
active: scraper.running,
})),
generatedAt: overview.generatedAt,
};
}
-async function getOverview(): Promise {
- return dashboardApi.getOverview().then(toViewModel);
+async function getOverview(signal?: AbortSignal): Promise {
+ return dashboardApi.getOverview(signal).then(toViewModel);
}
export const dashboardService = {
@@ -140,7 +134,7 @@ export const dashboardService = {
async toggleScraper(id: string, active: boolean): Promise {
if (!active) {
- throw new Error("pausar scraper ainda nao esta disponivel");
+ throw new Error("pausar processamento ainda nao esta disponivel");
}
await scrapersApi.triggerOne(id);
diff --git a/front_admin/src/modules/observability/ObservabilityPage.tsx b/front_admin/src/modules/observability/ObservabilityPage.tsx
index 2b9e2490..3349b9a7 100644
--- a/front_admin/src/modules/observability/ObservabilityPage.tsx
+++ b/front_admin/src/modules/observability/ObservabilityPage.tsx
@@ -1,23 +1,21 @@
-import { Folder, RefreshCw } from "lucide-react";
-import { useEffect, useState } from "react";
-import { useNotifications } from "../../components/notifications/useNotifications";
+import "./observability.css";
+import { ApiError } from "../../lib/api/client";
+import { useAuth } from "../auth/hooks/useAuth";
+import { useOperationalSnapshot } from "./hooks/useOperationalSnapshot";
+import { OperationalSnapshotPanels, ProcessorResources } from "./components/OperationalSnapshotPanels";
+import { HealthOverview } from "./components/HealthOverview";
+import { RefreshCw } from "lucide-react";
+import { useMemo, useState } from "react";
+import { createPollingResource } from "../../lib/polling/pollingResource";
+import { usePollingResource } from "../../lib/polling/usePollingResource";
import {
observabilityApi,
type ObservabilityRange,
} from "../../lib/api/observability.api";
import type {
- HealthcheckResponse,
- MetricSnapshot,
ObservabilityDashboard,
} from "../../lib/api/types";
-import { InfrastructureUsage } from "./components/InfrastructureUsage";
-import { MetricSummaryCard } from "./components/MetricSummaryCard";
import { ObservabilityPanelCard } from "./components/ObservabilityPanelCard";
-import type {
- InfraUsage,
- ObservabilityMetric,
-} from "./schemas/observability.schemas";
-
const RANGES: Array<{ label: string; value: ObservabilityRange }> = [
{ label: "5 min", value: "5m" },
{ label: "15 min", value: "15m" },
@@ -169,8 +167,8 @@ const DASHBOARD_SHELLS: ObservabilityDashboard[] = [
},
{
id: "scraper-health",
- title: "Scraper Health",
- description: "Execucoes, erros, duracao e volume por adapter.",
+ title: "Saúde do processamento",
+ description: "Estado e progresso agregado do Processor; leitura operacional independente do Prometheus.",
panels: [
{
id: "adapter-runs",
@@ -218,279 +216,88 @@ const DASHBOARD_SHELLS: ObservabilityDashboard[] = [
},
];
-function formatMetric(value: number | null, suffix = ""): string {
- return value === null ? "N/D" : `${value}${suffix}`;
-}
-
-function metricTone(
- value: number | null,
- limit: number,
-): ObservabilityMetric["tone"] {
- if (value === null) return "warning";
- return value <= limit ? "success" : "danger";
-}
-
-function healthPercentage(status: HealthcheckResponse["status"]): number {
- if (status === "ok") return 100;
- if (status === "degraded") return 65;
- return 0;
-}
-
-function buildMetrics(metrics: MetricSnapshot): ObservabilityMetric[] {
- return [
- {
- label: "Requisicoes por minuto",
- value: formatMetric(metrics.requestRatePerMinute),
- note: "Prometheus - ultimos 5 minutos",
- tone: "success",
- },
- {
- label: "Latencia p95",
- value: formatMetric(metrics.p95LatencyMs, "ms"),
- note: "Limite de atencao: 150ms",
- tone: metricTone(metrics.p95LatencyMs, 150),
- },
- {
- label: "Taxa de erro",
- value: formatMetric(metrics.errorRatePct, "%"),
- note: "Respostas 5xx no periodo",
- tone: metricTone(metrics.errorRatePct, 1),
- },
- ];
-}
-
-function buildInfra(health: HealthcheckResponse): InfraUsage[] {
- return Object.entries(health.services).map(([name, service]) => ({
- label: name,
- valueLabel:
- service.latencyMs !== undefined
- ? `${service.status} - ${service.latencyMs}ms`
- : (service.error ?? service.status),
- percentage: healthPercentage(service.status),
- color:
- service.status === "ok"
- ? "bg-emerald-500"
- : service.status === "degraded"
- ? "bg-amber-500"
- : "bg-rose-500",
- }));
+function createObservabilityResources(sessionKey: string) {
+ void sessionKey;
+ let seriesForbidden = false;
+ return {
+ healthResource: createPollingResource({
+ load: (signal) => observabilityApi.health(signal), intervalMs: 10_000,
+ errorMessage: "Saúde dos serviços indisponível.",
+ }),
+ metricsResource: createPollingResource({
+ load: (signal) => observabilityApi.metrics(signal), intervalMs: 10_000,
+ errorMessage: "Métricas da API indisponíveis.",
+ }),
+ dashboards: (range: ObservabilityRange) => createPollingResource({
+ load: async (signal) => {
+ if (seriesForbidden) throw new ApiError(403, "Sem autorização");
+ try { return await observabilityApi.dashboards(range, signal); }
+ catch (error) {
+ if (error instanceof ApiError && [401, 403].includes(error.status)) seriesForbidden = true;
+ throw error;
+ }
+ }, intervalMs: 10_000,
+ errorMessage: "Sem resposta das series detalhadas. Exibindo a estrutura dos dashboards.",
+ }),
+ };
}
export function ObservabilityPage() {
- const { notify } = useNotifications();
- const [metrics, setMetrics] = useState([]);
- const [infraUsage, setInfraUsage] = useState([]);
- const [dashboards, setDashboards] =
- useState(DASHBOARD_SHELLS);
- const [activeDashboardId, setActiveDashboardId] = useState("api");
+ const { isLoggedIn } = useAuth();
+ const canReadMetrics = isLoggedIn?.role === "admin" || isLoggedIn?.role === "super_admin";
+ const sessionKey = `${isLoggedIn?.id ?? "anonymous"}:${isLoggedIn?.role ?? "none"}`;
+ const operational = useOperationalSnapshot(canReadMetrics, 10_000, sessionKey);
const [range, setRange] = useState("15m");
- const [summaryRefreshKey, setSummaryRefreshKey] = useState(0);
- const [refreshKey, setRefreshKey] = useState(0);
- const [isLoading, setIsLoading] = useState(true);
- const [isDashboardsLoading, setIsDashboardsLoading] = useState(true);
- const [error, setError] = useState(null);
- const [dashboardsError, setDashboardsError] = useState(null);
-
- useEffect(() => {
- let active = true;
-
- Promise.all([observabilityApi.health(), observabilityApi.metrics()])
- .then(([health, snapshot]) => {
- if (!active) return;
- setMetrics(buildMetrics(snapshot));
- setInfraUsage(buildInfra(health));
- setError(null);
- })
- .catch(() => {
- if (!active) return;
- setError("Nao foi possivel carregar a observabilidade.");
- notify({
- tone: "error",
- title: "Erro de observabilidade",
- description:
- "Não foi possível carregar saúde e métricas agregadas do backend.",
- });
- })
- .finally(() => {
- if (active) setIsLoading(false);
- });
-
- return () => {
- active = false;
- };
- }, [summaryRefreshKey, notify]);
-
- useEffect(() => {
- const intervalId = window.setInterval(() => {
- setSummaryRefreshKey((current) => current + 1);
- setRefreshKey((current) => current + 1);
- }, 10000);
-
- return () => window.clearInterval(intervalId);
- }, []);
-
- useEffect(() => {
- let active = true;
-
- observabilityApi
- .dashboards(range)
- .then((result) => {
- if (!active) return;
- setDashboards(result.dashboards);
- setActiveDashboardId((current) =>
- result.dashboards.some((dashboard) => dashboard.id === current)
- ? current
- : (result.dashboards[0]?.id ?? "api"),
- );
- setDashboardsError(null);
- })
- .catch(() => {
- if (active) {
- setDashboards(DASHBOARD_SHELLS);
- setDashboardsError(
- "Sem resposta das series detalhadas. Exibindo a estrutura dos dashboards.",
- );
- notify({
- tone: "warning",
- title: "Séries detalhadas indisponíveis",
- description:
- "A estrutura dos dashboards será exibida, mas as séries do Prometheus não foram carregadas.",
- });
- }
- })
- .finally(() => {
- if (active) setIsDashboardsLoading(false);
- });
-
- return () => {
- active = false;
- };
- }, [range, refreshKey, notify]);
-
- const activeDashboard =
- dashboards.find((dashboard) => dashboard.id === activeDashboardId) ??
- dashboards[0];
+ const resources = useMemo(() => createObservabilityResources(sessionKey), [sessionKey]);
+ const { healthResource, metricsResource } = resources;
+ const dashboardsResource = useMemo(() => resources.dashboards(range), [range, resources]);
+ const health = usePollingResource(healthResource);
+ const metricQuery = usePollingResource(metricsResource, canReadMetrics);
+ const series = usePollingResource(dashboardsResource, canReadMetrics);
+ const dashboards = series.data
+ ? [...series.data.dashboards.filter((item) => item.id !== "scraper-health"), DASHBOARD_SHELLS.find((item) => item.id === "scraper-health")!]
+ : DASHBOARD_SHELLS;
+ const isLoading = health.loading || (canReadMetrics && metricQuery.loading);
+ const isDashboardsLoading = canReadMetrics && series.loading;
+ const error = health.error || (canReadMetrics && metricQuery.error)
+ ? "Nao foi possivel carregar a observabilidade." : null;
+ const dashboardsError = canReadMetrics ? series.error : "Sem permissão para métricas e séries detalhadas.";
+ const infra = dashboards.find((item) => item.id === "infra");
+ const business = dashboards.find((item) => item.id === "business");
+ const history = dashboards.filter((item) => !["infra", "business", "scraper-health"].includes(item.id)).flatMap((item) => item.panels);
+ const refresh = () => Promise.all([health.refresh(), ...(canReadMetrics ? [metricQuery.refresh(), series.refresh(), operational.refresh()] : [])]);
return (
-
-
-
-
-
- Painel de Observabilidade
-
-
- Mapeamento em tempo real do tráfego, latência dos microsserviços e
- consumo geral de hardware
-
-
-
- {RANGES.map((item) => (
- {
- setIsDashboardsLoading(true);
- setRange(item.value);
- }}
- className={`rounded-lg border px-3 py-2 text-xs font-bold transition-colors ${
- range === item.value
- ? "border-emerald-600 bg-emerald-50 text-emerald-700 dark:border-emerald-400 dark:bg-emerald-500/10 dark:text-emerald-300"
- : "border-slate-200 text-slate-500 hover:border-slate-300 dark:border-slate-800 dark:text-slate-400 dark:hover:border-slate-700"
- }`}
- >
- {item.label}
-
- ))}
- {
- setIsDashboardsLoading(true);
- setSummaryRefreshKey((current) => current + 1);
- setRefreshKey((current) => current + 1);
- }}
- className="inline-flex items-center gap-2 rounded-lg border border-slate-200 px-3 py-2 text-xs font-bold text-slate-500 transition-colors hover:border-slate-300 dark:border-slate-800 dark:text-slate-400 dark:hover:border-slate-700"
- >
-
- Atualizar
-
-
-
- {isLoading && (
-
- Carregando metricas...
-
- )}
- {error && (
-
- {error}
-
- )}
-
- {metrics.map((metric) => (
-
- ))}
-
+
+
+
Leitura operacional e histórico • atualização a cada 10s
+
void refresh()} className="inline-flex items-center gap-2 rounded-lg border border-slate-200 px-3 py-2 text-xs font-bold text-slate-500 dark:border-slate-800 dark:text-slate-400"> Atualizar
-
-
-
-
-
-
-
- Dashboards
-
-
- Pastas operacionais com as mesmas leituras do Prometheus usadas no
- Grafana.
-
-
- {isDashboardsLoading && (
-
- Carregando paineis...
-
- )}
-
-
- {dashboardsError && (
-
- {dashboardsError}
-
- )}
-
-
- {dashboards.map((dashboard) => (
- setActiveDashboardId(dashboard.id)}
- className={`inline-flex shrink-0 items-center gap-2 rounded-lg border px-4 py-2.5 text-xs font-bold transition-colors ${
- activeDashboard?.id === dashboard.id
- ? "border-emerald-600 bg-emerald-50 text-emerald-700 dark:border-emerald-400 dark:bg-emerald-500/10 dark:text-emerald-300"
- : "border-slate-200 text-slate-500 hover:border-slate-300 dark:border-slate-800 dark:text-slate-400 dark:hover:border-slate-700"
- }`}
- >
-
- {dashboard.title}
-
- ))}
-
-
- {activeDashboard && (
- <>
-
-
- {activeDashboard.title}
-
-
- {activeDashboard.description}
-
-
-
- {activeDashboard.panels.map((panel) => (
-
- ))}
-
- >
- )}
+ {[["health", "Saúde geral"], ["processor", "Execução atual"], ["pipeline", "Pipeline"], ["infra", "Infraestrutura"], ["business", "Business"], ["history", "Histórico"]].map(([id, label]) => {label} )}
+ {isLoading && Carregando metricas...
}
+ {error && Nao foi possivel carregar a observabilidade.{(health.stale || metricQuery.stale) && " Última leitura desatualizada, quando disponível."}
}
+
+
+
+
Janela dos gráficos • não altera o contexto das métricas de 5 min e 24h
+
{RANGES.map(item => setRange(item.value)} aria-pressed={range === item.value} className={`rounded-lg border px-3 py-2 text-xs font-bold ${range === item.value ? "border-emerald-600 bg-emerald-50 text-emerald-700 dark:border-emerald-400 dark:bg-emerald-500/10 dark:text-emerald-300" : "border-slate-200 text-slate-500 dark:border-slate-800 dark:text-slate-400"}`}>{item.label} )}
+
+ {isDashboardsLoading && Carregando paineis...
}
+ {dashboardsError && {dashboardsError}{series.stale && series.data && " Última leitura desatualizada."}
}
+
+ Infraestrutura
+ {infra?.description ?? "Containers, host, Postgres e Valkey."}{series.stale && " • Histórico desatualizado"}
+
+ {infra?.panels.map(panel => )}
+
+
+ Business
+ Indicadores de negócio; contexto próprio de cada métrica.{series.stale && " • Leitura desatualizada"}
+ {business?.panels.filter(panel => panel.visualization === "stat").map(panel => )}
+
+
+ Histórico Tráfego, latência, erros e cache • janela {RANGES.find(item => item.value === range)?.label}{series.stale && " • Leitura desatualizada"}
Requisições por minuto: {metricQuery.data?.requestRatePerMinute ?? "N/D"} • últimos 5 min
+ {[...history, ...(business?.panels.filter(panel => panel.visualization !== "stat") ?? [])].map(panel => )}
);
diff --git a/front_admin/src/modules/observability/components/HealthOverview.tsx b/front_admin/src/modules/observability/components/HealthOverview.tsx
new file mode 100644
index 00000000..cf8a5405
--- /dev/null
+++ b/front_admin/src/modules/observability/components/HealthOverview.tsx
@@ -0,0 +1,31 @@
+import type { HealthcheckResponse, MetricSnapshot } from "../../../lib/api/types";
+
+const STATUS: Record
= { ok: "Disponível", degraded: "Degradado", down: "Indisponível" };
+export function HealthOverview({ health, metrics, healthStale, metricsStale, canReadMetrics, metricsError }: {
+ health: HealthcheckResponse | null; metrics: MetricSnapshot | null;
+ healthStale: boolean; metricsStale: boolean; canReadMetrics: boolean; metricsError?: string | null;
+}) {
+ const services = [["API", null], ["Postgres", "postgres"], ["Valkey", "valkey"], ["Processor", "scraper"]] as const;
+ return
+ Saúde geral
+
+ {services.map(([name, key]) => {
+ const service = key ? health?.services[key] : null;
+ const status = key ? service?.status : health ? "ok" : undefined;
+ const color = healthStale || status === "degraded" ? "text-amber-600 dark:text-amber-300" : status === "ok" ? "text-emerald-700 dark:text-emerald-300" : status === "down" ? "text-rose-600 dark:text-rose-300" : "text-slate-500 dark:text-slate-400";
+ return
+ {name} {status ? key ? STATUS[status] : "Respondendo" : "N/D"}
+ {healthStale ? "Leitura desatualizada" : key ? service?.error ?? (service?.latencyMs == null ? "Probe do backend" : `${service.latencyMs} ms • probe`) : "Resposta do endpoint de saúde"}
+ ;
+ })}
+ {([
+ ["Taxa de erro", metrics?.errorRatePct, "%", 1, "5xx • últimos 5 min"],
+ ["Latência p95", metrics?.p95LatencyMs, " ms", 150, "Últimos 5 min"],
+ ] as const).map(([name, value, unit, limit, context]) =>
+ {name} limit ? "text-rose-600 dark:text-rose-300" : "text-slate-900 dark:text-white"}`}>{value == null ? "N/D" : `${value}${unit}`}
{!canReadMetrics ? "Sem permissão" : metricsStale ? "Leitura desatualizada" : context}
+ {canReadMetrics && value == null && {metricsError ? "Fonte indisponível" : "Fonte sem valor válido; motivo não informado."}
}
+ {name === "Latência p95" && Atenção > 150 ms • critério local
}
+ )}
+
+ ;
+}
diff --git a/front_admin/src/modules/observability/components/InfrastructureUsage.tsx b/front_admin/src/modules/observability/components/InfrastructureUsage.tsx
index 0ac1098f..26202afc 100644
--- a/front_admin/src/modules/observability/components/InfrastructureUsage.tsx
+++ b/front_admin/src/modules/observability/components/InfrastructureUsage.tsx
@@ -9,7 +9,7 @@ export function InfrastructureUsage({ usage }: InfrastructureUsageProps) {
return (
- Consumo de Infraestrutura Dedicada
+ Saúde atual dos serviços (probes do backend)
{usage.map((item) => (
diff --git a/front_admin/src/modules/observability/components/ObservabilityPanelCard.tsx b/front_admin/src/modules/observability/components/ObservabilityPanelCard.tsx
index 2d6bf1d5..1e28d785 100644
--- a/front_admin/src/modules/observability/components/ObservabilityPanelCard.tsx
+++ b/front_admin/src/modules/observability/components/ObservabilityPanelCard.tsx
@@ -28,6 +28,14 @@ type ChartSeriesEntry = {
index: number;
};
+const BUSINESS_CONTEXT: Record
= {
+ "searches-24h": "Total de buscas • últimas 24h",
+ "jobs-collected": "Estimativa da coleta • últimas 24h; sem dedup. Não é o catálogo.",
+ "business-cache-hit": "Acertos do cache • últimas 24h",
+ "users-total": "Estimativa de linhas vivas • última amostra do Postgres",
+ "saved-jobs": "Estimativa de linhas vivas • última amostra do Postgres",
+};
+
const PALETTE = [
"#73bf69",
"#f2cc0c",
@@ -92,7 +100,7 @@ function formatValue(
value: number | null,
unit: ObservabilityPanel["unit"],
): string {
- if (value === null || !Number.isFinite(value)) return "No data";
+ if (value === null || !Number.isFinite(value)) return "N/D";
if (unit === "percent") return `${value.toFixed(value >= 10 ? 1 : 2)}%`;
if (unit === "ms") return `${Math.round(value)} ms`;
@@ -113,12 +121,7 @@ function formatValue(
return `${nextValue.toFixed(index === 0 ? 0 : 1)} ${units[index]}`;
}
- return value >= 1000
- ? Math.round(value).toLocaleString("pt-BR")
- : value
- .toFixed(value % 1 === 0 ? 0 : 3)
- .replace(/0+$/, "")
- .replace(/\.$/, "");
+ return value.toLocaleString("pt-BR", { maximumFractionDigits: 3 });
}
function formatTime(timestamp: number): string {
@@ -163,21 +166,25 @@ function buildTicks(min: number, max: number, count: number): number[] {
}
function buildPath(
- points: ReturnType,
+ points: ObservabilityPoint[],
minTime: number,
timeSpan: number,
minValue: number,
valueSpan: number,
): string {
- return points
- .map((point, index) => {
- const x =
- PLOT.left + ((point.timestampMs - minTime) / timeSpan) * PLOT_WIDTH;
- const y =
- PLOT.top + (1 - (point.value - minValue) / valueSpan) * PLOT_HEIGHT;
- return `${index === 0 ? "M" : "L"} ${x.toFixed(2)} ${y.toFixed(2)}`;
- })
- .join(" ");
+ let connected = false;
+ return points.map(point => {
+ const timestampMs = new Date(point.timestamp).getTime();
+ if (point.value == null || !Number.isFinite(point.value) || !Number.isFinite(timestampMs)) {
+ connected = false;
+ return "";
+ }
+ const x = PLOT.left + ((timestampMs - minTime) / timeSpan) * PLOT_WIDTH;
+ const y = PLOT.top + (1 - (point.value - minValue) / valueSpan) * PLOT_HEIGHT;
+ const command = connected ? "L" : "M";
+ connected = true;
+ return `${command} ${x.toFixed(2)} ${y.toFixed(2)}`;
+ }).filter(Boolean).join(" ");
}
function nearestPoints(
@@ -235,9 +242,9 @@ function LineChart({
minTime,
minValue,
timeSpan: Math.max(1, maxTime - minTime),
- valueSpan: Math.max(1, maxValue - minValue),
+ valueSpan: Math.max(Number.EPSILON, maxValue - minValue),
xTicks: buildTicks(minTime, maxTime, 4),
- yTicks: buildTicks(minValue, maxValue, 5),
+ yTicks: buildTicks(minValue, maxValue, 3),
};
}, [seriesEntries]);
@@ -262,7 +269,7 @@ function LineChart({
}
return (
-
+
{
const points = finitePoints(serie);
const path = buildPath(
- points,
+ serie.points,
chart.minTime,
chart.timeSpan,
chart.minValue,
@@ -395,7 +402,7 @@ function LineChart({
{!chart.hasData && (
- No data
+ N/D
)}
@@ -440,17 +447,19 @@ export function ObservabilityPanelCard({ panel }: ObservabilityPanelCardProps) {
const [selectedSeriesKey, setSelectedSeriesKey] = useState(
null,
);
+ const [showAll, setShowAll] = useState(false);
+ const duplicatedLabels = new Set(panel.series.filter((serie, index) => panel.series.findIndex(other => other.label === serie.label) !== index).map(serie => serie.label));
const visibleSeries = panel.series
.map((serie, index) => ({
key: seriesKey(serie, index),
- serie,
+ serie: duplicatedLabels.has(serie.label) ? { ...serie, label: `${serie.label} • série ${index + 1}` } : serie,
index,
}))
.filter(({ serie }) => finitePoints(serie).length > 0);
- const selectedEntries = selectedSeriesKey
- ? visibleSeries.filter((entry) => entry.key === selectedSeriesKey)
- : visibleSeries;
- const activeSeries = selectedEntries.length > 0 ? selectedEntries : visibleSeries;
+ const ranked = [...visibleSeries].sort((a, b) => Math.max(...finitePoints(b.serie).map(p => p.value)) - Math.max(...finitePoints(a.serie).map(p => p.value))).map((entry, index) => ({ ...entry, index }));
+ const defaultEntries = showAll ? ranked : ranked.slice(0, 6);
+ const selectedEntries = selectedSeriesKey ? ranked.filter(entry => entry.key === selectedSeriesKey) : defaultEntries;
+ const activeSeries = selectedEntries.length > 0 ? selectedEntries : defaultEntries;
const latest = activeSeries.length > 0 ? latestValueFromEntries(activeSeries) : latestValue(panel);
function toggleSeries(key: string) {
@@ -458,12 +467,12 @@ export function ObservabilityPanelCard({ panel }: ObservabilityPanelCardProps) {
}
return (
-
-
-
+
+
+
- {panel.title}
+ {panel.id === "postgres-connections" ? "Postgres — conexões por grupo" : panel.title}
{panel.description && (
@@ -472,24 +481,26 @@ export function ObservabilityPanelCard({ panel }: ObservabilityPanelCardProps) {
)}
- {panel.visualization === "stat"
- ? "atual"
- : formatValue(latest, panel.unit)}
+ {panel.visualization === "stat" ? "" : activeSeries.length > 1 ? `${activeSeries.length} séries` : formatValue(latest, panel.unit)}
{panel.visualization === "stat" ? (
-
- {formatValue(latest, panel.unit)}
+
+
{formatValue(latest, panel.unit)}
+
{BUSINESS_CONTEXT[panel.id] ?? "Último valor disponível"}
) : (
)}
-
+ {panel.id === "container-cpu" &&
Multicore: 100% equivale a um núcleo; valores acima de 100% são válidos.
}
+ {panel.id === "postgres-connections" && duplicatedLabels.size > 0 &&
Identificação limitada: banco e estado não constam no contrato. Números de série são identificadores locais, não bancos.
}
+ {panel.visualization !== "stat" && visibleSeries.length > 6 &&
{selectedSeriesKey ? "Série selecionada" : showAll ? "Todas as séries" : `6 de ${visibleSeries.length} séries • maiores picos`} { setShowAll(!showAll); setSelectedSeriesKey(null); }}>{showAll ? "Reduzir séries" : `Mostrar todas (${visibleSeries.length})`}
}
+ {panel.visualization !== "stat" &&
- {visibleSeries.map(({ key, serie, index }) => {
+ {(selectedSeriesKey ? activeSeries : defaultEntries).map(({ key, serie, index }) => {
const selected = selectedSeriesKey === key;
const dimmed = selectedSeriesKey !== null && !selected;
@@ -506,6 +517,7 @@ export function ObservabilityPanelCard({ panel }: ObservabilityPanelCardProps) {
: "text-slate-500 hover:bg-slate-50 hover:text-slate-800 dark:text-slate-400 dark:hover:bg-slate-900 dark:hover:text-slate-200"
}`}
title={serie.label}
+ aria-pressed={selected}
>
-
+
}
+ {panel.visualization !== "stat" && visibleSeries.length > 6 &&
Selecionar uma série setSelectedSeriesKey(event.target.value || null)} className="mt-2 w-full rounded border border-slate-200 bg-white p-2 dark:border-slate-700 dark:bg-slate-900">Visão geral {visibleSeries.map(entry => {entry.serie.label} )} }
);
}
diff --git a/front_admin/src/modules/observability/components/OperationalSnapshotPanels.tsx b/front_admin/src/modules/observability/components/OperationalSnapshotPanels.tsx
new file mode 100644
index 00000000..df5887eb
--- /dev/null
+++ b/front_admin/src/modules/observability/components/OperationalSnapshotPanels.tsx
@@ -0,0 +1,89 @@
+import type { ReactNode } from "react";
+import type { useOperationalSnapshot } from "../hooks/useOperationalSnapshot";
+import { EXECUTION_LABELS, STAGE_LABELS } from "../services/operationalPresentation";
+
+const number = (value: number | null | undefined) => value == null ? "N/D" : value.toLocaleString("pt-BR");
+const date = (value?: string | null) => value ? new Date(value).toLocaleString("pt-BR") : "N/D";
+const bytes = (value?: number | null) => value == null ? "N/D" : `${(value / 1024 / 1024).toFixed(1)} MiB`;
+const duration = (value?: number) => value == null ? "N/D" : value >= 60 ? `${Math.floor(value / 60)}m ${Math.floor(value % 60)}s` : `${Math.floor(value)}s`;
+const lockTTL = (value: number) => {
+ const days = Math.floor(value / 86400);
+ const hours = Math.floor(value % 86400 / 3600);
+ const minutes = Math.floor(value % 3600 / 60);
+ const human = days > 0 ? `${days}d ${hours}h` : hours > 0 ? `${hours}h ${minutes}m` : minutes > 0 ? `${minutes}m ${Math.floor(value % 60)}s` : `${number(value)}s`;
+ return
{human} ;
+};
+const shell = "rounded-xl border border-slate-100 bg-white p-5 dark:border-slate-800 dark:bg-[#0f131a]";
+
+function Values({ items }: { items: [string, ReactNode][] }) {
+ return
{items.map(([label, value]) =>
{label} {value} )} ;
+}
+function Detail({ children, title = "Detalhes" }: { children: ReactNode; title?: string }) {
+ return
{title} {children}
;
+}
+
+export function OperationalSnapshotPanels({ operational }: { operational: ReturnType
}) {
+ const p = operational.snapshot?.processor;
+ const c = p?.classification;
+ const s = p?.persistence;
+ const progress = p?.progress;
+ const percentage = progress && progress.tasksTotal > 0 ? progress.tasksCompleted / progress.tasksTotal * 100 : null;
+ const maintenance = p?.index.maintenance;
+ const unavailable = !p || operational.stale || operational.snapshot?.status === "partial";
+ return
+
+
+
Execução atual do Processor
+ Snapshot a cada 10s
+
+
+ {operational.loading ? "Carregando snapshot operacional..." : operational.forbidden ? "Snapshot sem permissão." : operational.error ?? (operational.snapshot?.status === "partial" ? "Snapshot parcial: dados operacionais disponíveis." : "Snapshot operacional do Processor")}
+ {operational.stale && " • Leitura desatualizada"}
+ {p && ` • Processor: ${date(p.timestamp)}`}
+
+
+
+
+
{p ? EXECUTION_LABELS[p.execution.status] : "N/D"}
+
Etapa: {p?.execution.stage ? STAGE_LABELS[p.execution.stage] : "N/D"}
+
+ Run ID: {p?.execution.runId ?? "N/D"}
+
+
+
+
+
+
+
+ Tarefas encerradas
+ {progress ? number(progress.tasksCompleted) : "N/D"}{progress ? ` / ${number(progress.tasksTotal)}` : ""}
+ {percentage == null ? "Percentual N/D" : `${percentage.toFixed(1)}%`}
+
+ Inclui falhas e cancelamentos. Não mede a conclusão do pipeline.
+
+
+
+
+
+ Pipeline
+
+
Coleta
+
Classificação Recebidas incluem inválidas antes do classifier. Durante o processamento, os totais podem não fechar ainda. Após dedup por janela; reclassificações podem repetir uma vaga.
+
Persistência Resultados finais da execução, sem repetir retries.
+
Indexação Buffer: vagas aguardando indexação / capacidade alocada; não é processadas / total. Rebuild não possui total conhecido; não representa percentual.
+
+ Último resumo de manutenção {maintenance ?
:
N/D — retenção de até 24 horas; não indica ausência de manutenção anterior.
}
+
+
;
+}
+
+export function ProcessorResources({ operational }: { operational: ReturnType }) {
+ const p = operational.snapshot?.processor;
+ return
+
Recursos atuais do Processor
+
+
RSS: memória residente do processo; Heap Go: HeapAlloc, objetos alocados ainda não liberados. CPU de processo/container pode superar 100% em ambientes multicore; 100% equivale a um núcleo.
+ {operational.stale &&
Recursos: leitura desatualizada.
}
+
+
;
+}
diff --git a/front_admin/src/modules/observability/hooks/useOperationalSnapshot.ts b/front_admin/src/modules/observability/hooks/useOperationalSnapshot.ts
new file mode 100644
index 00000000..daf05409
--- /dev/null
+++ b/front_admin/src/modules/observability/hooks/useOperationalSnapshot.ts
@@ -0,0 +1,34 @@
+import { useMemo } from "react";
+import { createPollingResource, type PollingResource } from "../../../lib/polling/pollingResource";
+import { usePollingResource } from "../../../lib/polling/usePollingResource";
+import type { OperationalSnapshot } from "../schemas/operationalSnapshot.schema";
+import { operationalSnapshotService } from "../services/operationalSnapshot.service";
+
+const resources = new Map>();
+
+export function useOperationalSnapshot(enabled: boolean, intervalMs = 10_000, sessionKey = "default") {
+ const resource = useMemo(() => {
+ let shared = resources.get(sessionKey);
+ if (!shared) {
+ shared = createPollingResource({
+ load: (signal) => operationalSnapshotService.getSnapshot(signal),
+ intervalMs: 10_000,
+ accept: (snapshot) => snapshot.processor !== null,
+ timestamp: (snapshot) => snapshot.timestamp,
+ unavailableMessage: "Processor indisponível. Última leitura desatualizada, quando disponível.",
+ errorMessage: "Snapshot operacional indisponível. Última leitura desatualizada, quando disponível.",
+ });
+ resources.set(sessionKey, shared);
+ }
+ return shared;
+ }, [sessionKey]);
+ const state = usePollingResource(resource, enabled, intervalMs);
+ return {
+ snapshot: enabled ? state.data : null,
+ stale: enabled && state.stale,
+ loading: enabled && state.loading,
+ forbidden: enabled && state.forbidden,
+ error: enabled ? state.error : "Snapshot operacional disponível apenas para admin e super admin.",
+ refresh: enabled ? state.refresh : async () => {},
+ };
+}
diff --git a/front_admin/src/modules/observability/observability.css b/front_admin/src/modules/observability/observability.css
new file mode 100644
index 00000000..00cbc4c2
--- /dev/null
+++ b/front_admin/src/modules/observability/observability.css
@@ -0,0 +1,23 @@
+/* Only the Observability route gets the compact navigation on small screens.
+ Shared sidebar/header components and other routes retain their layout. */
+@media (max-width: 767px) {
+ body:has([data-observability-page]) aside { width: 64px; }
+ body:has([data-observability-page]) aside nav { padding-inline: 8px; }
+ body:has([data-observability-page]) aside button { padding-inline: 12px; gap: 0; }
+ body:has([data-observability-page]) aside button svg { flex-shrink: 0; }
+ body:has([data-observability-page]) aside button span {
+ position: absolute; width: 1px; height: 1px; overflow: hidden;
+ clip-path: inset(50%); white-space: nowrap;
+ }
+ body:has([data-observability-page]) aside > div > div:first-child { padding: 24px 4px; }
+ body:has([data-observability-page]) aside [aria-label="Cand!Date!"] span { font-size: 9px; }
+ body:has([data-observability-page]) main { min-width: 0; }
+ body:has([data-observability-page]) main > div { padding: 16px; }
+ body:has([data-observability-page]) header { padding: 12px; gap: 8px; flex-wrap: wrap; }
+ body:has([data-observability-page]) header > div:first-child { min-width: 0; gap: 8px; flex-basis: 100%; }
+ body:has([data-observability-page]) header h1 { font-size: 18px; }
+ body:has([data-observability-page]) header > div:first-child > div:nth-child(2) { display: none; }
+ body:has([data-observability-page]) header > div:last-child { gap: 8px; margin-left: auto; }
+ body:has([data-observability-page]) aside > div:last-child { padding: 8px; }
+ [data-observability-page] h2[id] { scroll-margin-top: 160px; }
+}
diff --git a/front_admin/src/modules/observability/schemas/operationalSnapshot.schema.ts b/front_admin/src/modules/observability/schemas/operationalSnapshot.schema.ts
new file mode 100644
index 00000000..3e8cb4db
--- /dev/null
+++ b/front_admin/src/modules/observability/schemas/operationalSnapshot.schema.ts
@@ -0,0 +1,133 @@
+import { z } from "zod";
+
+// Mirror the existing administrative Processor contract.
+const nullableTimestamp = z.string().datetime().nullable();
+const runCount = z.number().int().nonnegative();
+const ProviderStateSchema = z.object({
+ id: z.enum(["linkedin", "adzuna", "themuse", "gupy", "inhire", "jooble", "greenhouse", "lever", "unknown"]),
+ configuredConcurrency: runCount,
+ active: runCount,
+ waiting: runCount,
+ tasksTotal: runCount,
+ tasksCompleted: runCount,
+ tasksFailed: runCount,
+ tasksCanceled: runCount,
+ jobsCollected: runCount,
+ lastTaskStatus: z.enum(["success", "failed", "canceled", "timeout"]).nullable(),
+ lastTaskFinishedAt: nullableTimestamp,
+ lastTaskDurationSeconds: z.number().nonnegative().nullable(),
+ lastErrorType: z.enum(["network", "timeout", "canceled", "rate_limit", "authentication", "parsing", "validation", "unknown"]).nullable(),
+});
+export const ProcessorSnapshotSchema = z.object({
+ status: z.enum(["ok", "partial"]),
+ timestamp: z.string().datetime(),
+ execution: z.object({
+ runId: z.string().min(1).max(128).nullable().optional().default(null),
+ status: z.enum(["idle", "running", "canceling", "failed", "completed"]),
+ source: z.enum(["manual", "cron"]).nullable(),
+ startedAt: nullableTimestamp,
+ durationSeconds: z.number().nonnegative(),
+ finishedAt: nullableTimestamp,
+ lastDurationSeconds: z.number().nonnegative(),
+ lastStatus: z
+ .enum(["success", "failed", "canceled", "skipped", "timeout"])
+ .nullable(),
+ nextRunAt: nullableTimestamp,
+ stage: z
+ .enum(["collection", "classification", "persistence", "indexing"])
+ .nullable(),
+ applicationVersion: z.string().max(128),
+ taxonomyVersion: z.string().max(128),
+ }),
+ providers: z.array(ProviderStateSchema).max(9)
+ .refine((providers) => new Set(providers.map((p) => p.id)).size === providers.length, "Providers duplicados")
+ .nullable().optional().default(null),
+ classification: z.object({ received: runCount, classified: runCount, approved: runCount, rejected: runCount, invalid: runCount }).nullable().optional().default(null),
+ persistence: z.object({ received: runCount, inserted: runCount, updated: runCount, skipped: runCount, failed: runCount, failedBatches: runCount }).nullable().optional().default(null),
+ lock: z.object({ held: z.boolean(), ttlSeconds: z.number().nonnegative() }),
+ concurrency: z.object({
+ configured: z.number().int().nonnegative(),
+ effective: z.number().int().nonnegative(),
+ active: z.number().int().nonnegative(),
+ waiting: z.number().int().nonnegative(),
+ }),
+ progress: z.object({
+ providersTotal: z.number().int().nonnegative(),
+ providersCompleted: z.number().int().nonnegative(),
+ adaptersTotal: z.number().int().nonnegative(),
+ adaptersProcessed: z.number().int().nonnegative(),
+ tasksTotal: z.number().int().nonnegative(),
+ tasksCompleted: z.number().int().nonnegative(),
+ tasksCanceled: z.number().int().nonnegative(),
+ keywordsTotal: z.number().int().nonnegative(),
+ keywordsProcessed: z.number().int().nonnegative(),
+ batchesCompleted: z.number().int().nonnegative(),
+ }),
+ queues: z.object({
+ collection: z.object({ depth: z.number().int().nonnegative(), capacity: z.number().int().nonnegative() }),
+ classification: z.object({ depth: z.number().int().nonnegative(), capacity: z.number().int().nonnegative() }),
+ persistence: z.object({ depth: z.number().int().nonnegative(), capacity: z.number().int().nonnegative() }),
+ indexing: z.object({ depth: z.number().int().nonnegative(), capacity: z.number().int().nonnegative() }),
+ }),
+ resources: z.object({
+ cpuSeconds: z.number().nonnegative(),
+ cpuPercent: z.number().nonnegative().nullable(),
+ memoryBytes: z.number().nonnegative().nullable(),
+ heapBytes: z.number().nonnegative(),
+ goroutines: z.number().int().nonnegative(),
+ gomaxprocs: z.number().int().positive(),
+ gomemlimitBytes: z.number().nonnegative(),
+ }),
+ errors: z.object({
+ total: z.number().int().nonnegative(),
+ timeouts: z.number().int().nonnegative(),
+ }),
+ rejectedTitles: z
+ .array(
+ z.object({
+ title: z.string().max(100),
+ count: z.number().int().nonnegative(),
+ reasonCode: z.enum([
+ "negative_title",
+ "no_family_recognized",
+ "insufficient_title_evidence",
+ ]),
+ }),
+ )
+ .max(10),
+ rejectedTitlesSince: z.string().datetime(),
+ dependencies: z.object({
+ postgres: z.object({ status: z.enum(["ok", "down"]) }),
+ valkey: z.object({ status: z.enum(["ok", "degraded", "down"]) }),
+ }),
+ index: z.object({
+ activeVersion: z.string().max(128),
+ rebuildProgress: z.number().int().nonnegative().nullable(),
+ maintenance: z
+ .object({
+ operation: z.enum([
+ "rebuild",
+ "reconcile",
+ "backfill",
+ "reclassify",
+ "expire",
+ "rollback",
+ ]),
+ status: z.enum(["success", "failed", "canceled"]),
+ durationSeconds: z.number().nonnegative(),
+ finishedAt: z.string().datetime(),
+ processed: z.number().int().nonnegative(),
+ divergences: z.number().int().nonnegative(),
+ })
+ .nullable(),
+ }),
+});
+export type ProcessorSnapshot = z.infer;
+
+export const OperationalSnapshotSchema = z.object({
+ status: z.enum(["ok", "partial"]),
+ timestamp: z.string().datetime(),
+ processor: ProcessorSnapshotSchema.nullable(),
+ availability: z.object({ scraper: z.enum(["ok", "down"]) }),
+});
+export type OperationalSnapshot = z.infer;
diff --git a/front_admin/src/modules/observability/services/operationalPresentation.ts b/front_admin/src/modules/observability/services/operationalPresentation.ts
new file mode 100644
index 00000000..8b6a876f
--- /dev/null
+++ b/front_admin/src/modules/observability/services/operationalPresentation.ts
@@ -0,0 +1,41 @@
+import type { useOperationalSnapshot } from "../hooks/useOperationalSnapshot";
+
+export type OperationalReading = ReturnType;
+export const EXECUTION_LABELS = {
+ idle: "Ocioso", running: "Executando", canceling: "Cancelando",
+ failed: "Falhou", completed: "Concluído",
+};
+export const STAGE_LABELS = {
+ collection: "Coleta", classification: "Classificação",
+ persistence: "Persistência", indexing: "Indexação",
+};
+
+export function operationalNotice(reading: OperationalReading, enabled: boolean) {
+ if (!enabled) return "Scheduler: leitura limitada; snapshot sem permissão para esta role.";
+ if (reading.loading) return "Carregando snapshot operacional...";
+ if (reading.forbidden) return "Snapshot sem permissão.";
+ if (reading.stale) return reading.snapshot ? "Snapshot desatualizado; última leitura válida." : "Snapshot indisponível.";
+ if (reading.snapshot?.status === "partial") return "Snapshot parcial; dados operacionais disponíveis.";
+ return "Snapshot operacional do Processor";
+}
+
+export function withOperationalExecution(
+ scraper: T, reading: OperationalReading, enabled: boolean,
+): T & { executionDetail?: string; runDisabled?: boolean } {
+ // The snapshot describes the Processor, never a provider inferred from jobs.
+ if (!enabled || scraper.id !== "go-scraper") return scraper;
+ const p = reading.snapshot?.processor;
+ if (!p) return { ...scraper, status: "N/D", lastRun: "N/D", active: false,
+ executionDetail: operationalNotice(reading, true), runDisabled: true };
+ const e = p.execution;
+ const active = e.status === "running" || e.status === "canceling";
+ const lastRunAt = e.startedAt ?? e.finishedAt;
+ const stage = e.stage ? STAGE_LABELS[e.stage] : "Etapa N/D";
+ const duration = active ? e.durationSeconds : e.lastDurationSeconds;
+ return {
+ ...scraper, status: EXECUTION_LABELS[e.status], active,
+ lastRun: lastRunAt ? new Date(lastRunAt).toLocaleString("pt-BR") : "Sem execução",
+ runDisabled: active || reading.stale || reading.forbidden,
+ executionDetail: `${stage} • ${e.source ?? "Origem N/D"} • ${duration}s • ${p.progress.tasksCompleted}/${p.progress.tasksTotal} tarefas encerradas • Lock local: ${p.lock.held ? "mantido" : "livre"} • Concorrência: ${p.concurrency.active}/${p.concurrency.effective} (${p.concurrency.waiting} em espera)${e.lastStatus ? ` • Último resultado: ${e.lastStatus}` : ""}`,
+ };
+}
diff --git a/front_admin/src/modules/observability/services/operationalSnapshot.service.ts b/front_admin/src/modules/observability/services/operationalSnapshot.service.ts
new file mode 100644
index 00000000..03ff21bb
--- /dev/null
+++ b/front_admin/src/modules/observability/services/operationalSnapshot.service.ts
@@ -0,0 +1,5 @@
+import { observabilityApi } from "../../../lib/api/observability.api";
+
+export const operationalSnapshotService = {
+ getSnapshot: (signal: AbortSignal) => observabilityApi.getOperationalSnapshot(signal),
+};
diff --git a/front_admin/src/modules/permissions/PermissionsPage.tsx b/front_admin/src/modules/permissions/PermissionsPage.tsx
index 289ddf73..787da4ce 100644
--- a/front_admin/src/modules/permissions/PermissionsPage.tsx
+++ b/front_admin/src/modules/permissions/PermissionsPage.tsx
@@ -49,9 +49,9 @@ const ROLE_LABELS: Record = {
};
const ROLE_DESCRIPTIONS: Record<"support" | "admin" | "super_admin", string> = {
- support: "Opera dashboard, scrapers e healthcheck sem ações sensíveis.",
+ support: "Opera dashboard, processamento e healthcheck sem ações sensíveis.",
admin:
- "Executa scrapers, métricas, auditoria e ações administrativas comuns.",
+ "Executa processamento, métricas, auditoria e ações administrativas comuns.",
super_admin: "Acesso completo, incluindo usuários e mudanças de role.",
};
@@ -70,7 +70,7 @@ const ACTION_LABELS: Record = {
const RESOURCE_LABELS: Record = {
dashboard: "Dashboard",
- scrapers: "Scrapers",
+ scrapers: "Processamento",
observability: "Observabilidade",
audit: "Auditoria",
users: "Usuários",
diff --git a/front_admin/src/modules/scrapers/ScrapersPage.tsx b/front_admin/src/modules/scrapers/ScrapersPage.tsx
index cd3c138c..ed0dbd6c 100644
--- a/front_admin/src/modules/scrapers/ScrapersPage.tsx
+++ b/front_admin/src/modules/scrapers/ScrapersPage.tsx
@@ -9,13 +9,16 @@ import {
ServerCog,
Trash2,
} from "lucide-react";
+import type { CatalogProvider } from "./services/catalogInventory";
+import type { ProcessorSnapshot } from "../observability/schemas/operationalSnapshot.schema";
+import type { OperationalReading } from "../observability/services/operationalPresentation";
+import { EXECUTION_LABELS, STAGE_LABELS } from "../observability/services/operationalPresentation";
import { formatNumber } from "../../utils/formatNumber";
import { useAuth } from "../auth/hooks/useAuth";
import { EventConsole } from "./components/EventConsole/EventConsole";
import { ScraperGrid } from "./components/ScraperGrid/ScraperGrid";
import { useScrapers } from "./hooks/useScrapers";
import type {
- ScraperAdapter,
ScraperJobPreview,
ScraperOverview,
} from "./schemas/scraper.schema";
@@ -63,108 +66,152 @@ function OverviewCard({
);
}
-function OverviewCards({ overview }: { overview: ScraperOverview }) {
+function OverviewCards({ overview, operational, canReadOperational, catalogMessage, catalogInventory = [], inventoryAvailable }: {
+ overview: ScraperOverview;
+ operational?: OperationalReading;
+ canReadOperational?: boolean;
+ catalogMessage?: string;
+ catalogInventory?: CatalogProvider[];
+ inventoryAvailable?: boolean;
+}) {
+ const p = operational?.snapshot?.processor;
+ const useSnapshot = canReadOperational === true;
+ const ratio = (completed?: number, total?: number) => completed === undefined || total === undefined ? "N/D" : `${completed}/${total}`;
+
return (
row.observed).length : "N/D"}
+ helper="Grupos globais por fonte principal; inclui sem fonte"
icon={Globe2}
/>
);
}
-function AdapterPanel({
- adapters,
- sourcesCount,
-}: {
- adapters: ScraperAdapter[];
- sourcesCount: number;
+function AdapterPanel({ inventory = [], available = false, configurationAvailable = false, message, processor, showProviders = false }: {
+ inventory?: CatalogProvider[];
+ available?: boolean;
+ configurationAvailable?: boolean;
+ message?: string;
+ processor?: ProcessorSnapshot | null;
+ showProviders?: boolean;
}) {
return (
+ {showProviders && (
+
+
Providers desta execução
+
Run ID: {processor?.execution.runId ?? "N/D"} • Plano selecionado desta execução; não inventário global.
+ {processor?.providers == null ?
Providers da execução: N/D.
: processor.providers.length === 0 ?
Plano conhecido sem providers.
: (
+
+
+
+ {["Provider", "Tarefas", "Coletadas", "Falhas", "Ativas / espera", "Último resultado"].map((label) => {label} )}
+
+
+
+ {processor.providers.map((provider) => (
+
+ {provider.id}
+ Tarefas {formatNumber(provider.tasksCompleted)} / {formatNumber(provider.tasksTotal)} Encerradas / total
+ Coletadas {formatNumber(provider.jobsCollected)}
+ Falhas 0 ? "font-semibold text-red-600 dark:text-red-400" : "font-semibold text-slate-800 dark:text-slate-200"}>{formatNumber(provider.tasksFailed)}
+ Ativas / espera {formatNumber(provider.active)} / {formatNumber(provider.waiting)}
+
+ Último resultado
+ {provider.lastTaskStatus ?? "N/D"}
+
+ Detalhes de {provider.id}
+
+
Concorrência configurada {formatNumber(provider.configuredConcurrency)}
+
Canceladas / timeouts {formatNumber(provider.tasksCanceled)}
+
Duração da última tarefa {provider.lastTaskDurationSeconds === null ? "N/D" : `${provider.lastTaskDurationSeconds}s`}
+
Fim da última tarefa {provider.lastTaskFinishedAt ? new Date(provider.lastTaskFinishedAt).toLocaleString("pt-BR") : "N/D"}
+
Erro da tarefa {provider.lastErrorType ?? "N/D"}
+
+
+
+
+ ))}
+
+
+ )}
+
Coleta conta resultados das tarefas, sem deduplicação. Tarefas encerradas incluem falhas; canceladas/timeouts contam tarefas iniciadas.
+
+ )}
- Adapters Funcionais
+ Fontes e providers do catálogo
- Fontes encontradas no índice atual de vagas.
+ Catálogo completo por fonte principal; inventário configurado e execução são informações distintas.
+ {message &&
{message}
}
- {adapters.length} adapters • {sourcesCount} fontes observadas
+ {available ? inventory.filter((row) => row.observed).length : "N/D"} observados • {configurationAvailable ? inventory.filter((row) => row.configured).length : "N/D"} configurados
+ {!available && Distribuição global N/D; não inferida da prévia.
}
- {adapters.length === 0 ? (
-
- Nenhum adapter encontrado no payload de vagas.
-
- ) : (
- adapters.map((adapter) => (
-
-
-
- {adapter.name}
-
-
+ {inventory.length === 0 ?
{available ? configurationAvailable ? "Nenhuma fonte configurada ou observada no catálogo." : "Catálogo conhecido sem fontes; inventário configurado N/D." : "Inventário global N/D."}
: inventory.map((row) => {
+ const run = showProviders && row.provider !== "unknown" ? processor?.providers?.find((provider) => provider.id === row.provider) : undefined;
+ const operation = !showProviders ? "Execução: sem permissão" : run ? run.active > 0 ? "Coletando" : run.waiting > 0 ? "Aguardando permissão" : run.lastTaskStatus ? `Última tarefa: ${run.lastTaskStatus}` : "Participa do plano; sem tarefa encerrada" : processor?.providers && row.provider !== "unknown" ? "Fora do plano desta execução" : "Execução: N/D";
+ return
+ {row.name}
+ {row.catalogJobs === null ? "N/D" : formatNumber(row.catalogJobs)}
+ Vagas no catálogo
+
+ Detalhes
+
+
Configurado: {row.configured === null ? "N/D" : row.configured ? "Sim" : "Não"}
+
Observado no catálogo: {row.observed === null ? "N/D" : row.observed ? "Sim" : "Não"}
+
{operation}
+ {run &&
Run: {run.tasksCompleted}/{run.tasksTotal} tarefas encerradas • {run.jobsCollected} vagas coletadas
}
-
- {formatNumber(adapter.jobs)}
-
-
- {adapter.sources}/{adapter.configuredSources} fontes •{" "}
- {adapter.keywords} keywords
-
-
- {adapter.sampleTitle ?? "sem amostra"}
-
-
- ))
- )}
+
+ ;
+ })}
);
}
-function JobsPanel({ jobs }: { jobs: ScraperJobPreview[] }) {
+function JobsPanel({ jobs, unavailable, message }: { jobs: ScraperJobPreview[]; unavailable?: boolean; message?: string }) {
return (
@@ -173,14 +220,15 @@ function JobsPanel({ jobs }: { jobs: ScraperJobPreview[] }) {
Vagas Buscadas
- Últimas vagas carregadas do endpoint administrativo do scraper.
+ Prévia de até 8 vagas da amostra limitada a 200; o limite não interfere nas contagens globais do catálogo.
+ {message &&
{message}
}
{jobs.length === 0 ? (
- Nenhuma vaga carregada do backend ainda.
+ {unavailable ? "Amostra indisponível; quantidade de vagas N/D." : "Nenhuma vaga carregada do backend ainda."}
) : (
@@ -238,7 +286,7 @@ export function ScrapersPage() {
const { isLoggedIn } = useAuth();
const {
scrapers,
- adapterStats,
+ catalogInventory, inventoryAvailable, configurationAvailable, inventoryMessage,
jobPreviews,
overview,
logs,
@@ -252,6 +300,7 @@ export function ScrapersPage() {
clearJobsCache,
clearLogs,
refreshIntervalMs,
+ operational, canReadOperational, operationalMessage, catalogMessage, sampleMessage, sampleUnavailable, listUnavailable,
} = useScrapers();
const canClearJobsCache = isLoggedIn?.role === "super_admin";
@@ -265,13 +314,14 @@ export function ScrapersPage() {
- Operação dos scrapers
+ Operação do processamento de vagas
Atualiza status/contagem a cada {Math.round(refreshIntervalMs / 1000)}s
{" • "}
- último snapshot {formatTimestamp(overview.lastUpdatedAt)}
+ última leitura do scheduler {formatTimestamp(overview.lastUpdatedAt)}
+ {operationalMessage &&
{operationalMessage}
}
@@ -284,7 +334,7 @@ export function ScrapersPage() {
disabled={!canClearJobsCache || isClearingJobsCache}
title={
canClearJobsCache
- ? "Remove vagas e índices do Valkey"
+ ? "Invalida o cache de buscas; sem índice versionado, limpa chaves legadas do Valkey"
: "Disponível apenas para super admin"
}
className="inline-flex h-9 items-center justify-center gap-2 rounded-lg border border-rose-200 px-3 text-xs font-bold text-rose-600 transition-colors hover:border-rose-300 hover:bg-rose-50 disabled:cursor-not-allowed disabled:opacity-60 dark:border-rose-500/30 dark:text-rose-300 dark:hover:border-rose-500/60 dark:hover:bg-rose-500/10"
@@ -295,7 +345,7 @@ export function ScrapersPage() {
/>
{isClearingJobsCache
? "Limpando cache..."
- : "Limpar cache de vagas"}
+ : "Limpar cache de buscas"}
- Carregando scrapers...
+ Carregando processamento de vagas...
)}
{error && (
@@ -324,20 +374,25 @@ export function ScrapersPage() {
)}
-
+
diff --git a/front_admin/src/modules/scrapers/components/EventConsole/EventConsole.tsx b/front_admin/src/modules/scrapers/components/EventConsole/EventConsole.tsx
index cb3536a4..64e9da3d 100644
--- a/front_admin/src/modules/scrapers/components/EventConsole/EventConsole.tsx
+++ b/front_admin/src/modules/scrapers/components/EventConsole/EventConsole.tsx
@@ -31,8 +31,8 @@ export function EventConsole({ logs, onClear }: EventConsoleProps) {
{logs.length === 0 ? (
- Nenhum evento registrado ainda. Execute alguma alteração nos
- scrapers para ver.
+ Nenhum evento registrado ainda. Solicite uma execução de
+ processamento para ver.
) : (
logs.map((log, i) => (
diff --git a/front_admin/src/modules/scrapers/components/ScraperGrid/ScraperCard.tsx b/front_admin/src/modules/scrapers/components/ScraperGrid/ScraperCard.tsx
index f3776525..d82c606b 100644
--- a/front_admin/src/modules/scrapers/components/ScraperGrid/ScraperCard.tsx
+++ b/front_admin/src/modules/scrapers/components/ScraperGrid/ScraperCard.tsx
@@ -8,7 +8,7 @@ interface ScraperCardProps {
}
export function ScraperCard({ scraper, isStarting, onToggle }: ScraperCardProps) {
- const isDisabled = scraper.active || isStarting;
+ const isDisabled = scraper.active || isStarting || scraper.runDisabled;
return (
@@ -18,24 +18,25 @@ export function ScraperCard({ scraper, isStarting, onToggle }: ScraperCardProps)
{scraper.name}
- SLA: {scraper.sla}
+ Disponibilidade: {scraper.availability}
Estado: {scraper.status}
+ {scraper.executionDetail &&
{scraper.executionDetail}
}
- Vagas no índice
+ Vagas no catálogo
- {formatNumber(scraper.indexedJobs)}
+ {scraper.catalogJobs === null ? "N/D" : formatNumber(scraper.catalogJobs)}
Última execução: {scraper.lastRun}
@@ -45,14 +46,14 @@ export function ScraperCard({ scraper, isStarting, onToggle }: ScraperCardProps)
type="button"
onClick={() => onToggle(scraper.id)}
disabled={isDisabled}
- title={scraper.active ? "Scraper em execução" : "Run deste scraper"}
+ title={scraper.active ? "Processamento em execução" : "Iniciar processamento"}
className={`text-xs px-3 py-1.5 font-bold rounded-lg transition-colors ${
scraper.active
? "bg-slate-100 dark:bg-slate-800 text-slate-500 dark:text-slate-300"
: "bg-emerald-50 dark:bg-emerald-500/10 text-emerald-600 dark:text-emerald-300 hover:bg-emerald-100 dark:hover:bg-emerald-500/20"
} disabled:cursor-not-allowed disabled:opacity-60`}
>
- {scraper.active ? "Rodando" : isStarting ? "Iniciando..." : "Run"}
+ {scraper.status === "Cancelando" ? "Cancelando" : scraper.active ? "Rodando" : isStarting ? "Iniciando..." : "Run"}
diff --git a/front_admin/src/modules/scrapers/components/ScraperGrid/ScraperGrid.tsx b/front_admin/src/modules/scrapers/components/ScraperGrid/ScraperGrid.tsx
index 41dbf401..6994093a 100644
--- a/front_admin/src/modules/scrapers/components/ScraperGrid/ScraperGrid.tsx
+++ b/front_admin/src/modules/scrapers/components/ScraperGrid/ScraperGrid.tsx
@@ -3,12 +3,14 @@ import { ScraperCard } from "./ScraperCard";
interface ScraperGridProps {
scrapers: Scraper[];
+ unavailable?: boolean;
startingScraperId: string | null;
onToggle: (id: string) => void;
}
export function ScraperGrid({
scrapers,
+ unavailable = false,
startingScraperId,
onToggle,
}: ScraperGridProps) {
@@ -17,22 +19,22 @@ export function ScraperGrid({
- Status Geral dos Scrapers
+ Status geral do processamento
- Consulte o desempenho, volume de dados e inicie/interrompa o fluxo
- de scraping de vagas
+ Consulte o desempenho, volume de dados e solicite o fluxo
+ de coleta de vagas
- Rode cada scraper pelo card
+ Inicie o processamento pelo card
{scrapers.length === 0 ? (
- Nenhum scraper retornado pelo backend.
+ {unavailable ? "Lista do scheduler indisponível; processamento N/D." : "Nenhum processamento retornado pelo backend."}
) : (
scrapers.map((scraper) => (
diff --git a/front_admin/src/modules/scrapers/hooks/useScrapers.ts b/front_admin/src/modules/scrapers/hooks/useScrapers.ts
index 922a7fef..756639d1 100644
--- a/front_admin/src/modules/scrapers/hooks/useScrapers.ts
+++ b/front_admin/src/modules/scrapers/hooks/useScrapers.ts
@@ -1,5 +1,11 @@
+import { buildCatalogInventory } from "../services/catalogInventory";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { useNotifications } from "../../../components/notifications/useNotifications";
+import { useAuth } from "../../auth/hooks/useAuth";
+import { useOperationalSnapshot } from "../../observability/hooks/useOperationalSnapshot";
+import { operationalNotice, withOperationalExecution } from "../../observability/services/operationalPresentation";
+import { createPollingResource } from "../../../lib/polling/pollingResource";
+import { usePollingResource } from "../../../lib/polling/usePollingResource";
import { ApiError } from "../../../lib/api/client";
import { scrapersApi } from "../../../lib/api/scrapers.api";
import type {
@@ -16,19 +22,6 @@ import type {
const REFRESH_INTERVAL_MS = 15_000;
const JOBS_PREVIEW_LIMIT = 8;
-const CONFIGURED_SOURCE_COUNTS: Record
= {
- "Adzuna": 1,
- "Green House": 32,
- "Jooble": 1,
- "Lever": 34,
- "The Muse": 1,
- "linkedin": 1,
-};
-const CONFIGURED_SOURCES_TOTAL = Object.values(CONFIGURED_SOURCE_COUNTS).reduce(
- (total, count) => total + count,
- 0,
-);
-
function nowTime(): string {
return new Date().toTimeString().split(" ")[0];
}
@@ -50,15 +43,15 @@ function statusLabel(scraper: BackendScraper): string {
return scraper.running ? "Executando" : "Ocioso";
}
-function mapScraper(scraper: BackendScraper, fallbackTotal: number): Scraper {
+function mapScraper(scraper: BackendScraper, catalogTotal: number | null): Scraper {
return {
id: scraper.name,
name: scraper.name,
status: statusLabel(scraper),
lastRun: formatLastRun(scraper.lastRunAt),
- indexedJobs: scraper.jobsCollected ?? fallbackTotal,
+ catalogJobs: catalogTotal,
active: scraper.running,
- sla: scraper.status === "down" ? "Indisponivel" : "Operacional",
+ availability: scraper.status === "down" ? "Indisponivel" : "Operacional",
};
}
@@ -84,32 +77,6 @@ function keywordFrom(job: ScraperJob): string {
return job.keyword || job.keywords[0] || "sem keyword";
}
-function adapterFamilyFrom(source: string): string {
- if (source.startsWith("Adzuna")) return "Adzuna";
- if (source.startsWith("Green House")) return "Green House";
- if (source.startsWith("Lever")) return "Lever";
- if (source.startsWith("The Muse")) return "The Muse";
- if (source.toLowerCase().startsWith("linkedin")) return "linkedin";
- if (source.startsWith("Jooble")) return "Jooble";
- return source;
-}
-
-function configuredSourcesFor(adapterName: string): number {
- const families = new Set(sourceEntriesFromName(adapterName).map(adapterFamilyFrom));
- let total = 0;
-
- for (const family of families) {
- total += CONFIGURED_SOURCE_COUNTS[family] ?? 1;
- }
-
- return total;
-}
-
-function sourceEntriesFromName(value: string): string[] {
- const sources = splitSource(value);
- return sources.length > 0 ? sources : [value];
-}
-
function buildAdapters(jobs: ScraperJob[]): ScraperAdapter[] {
const adapters = new Map<
string,
@@ -131,7 +98,9 @@ function buildAdapters(jobs: ScraperJob[]): ScraperAdapter[] {
};
current.jobs += 1;
- current.keywords.add(keywordFrom(job));
+ for (const keyword of [job.keyword, ...job.keywords]) {
+ if (keyword) current.keywords.add(keyword);
+ }
sourceEntriesFrom(job).forEach((entry) => current.sources.add(entry));
current.sampleTitle ??= job.title;
adapters.set(source, current);
@@ -142,7 +111,6 @@ function buildAdapters(jobs: ScraperJob[]): ScraperAdapter[] {
name,
jobs: adapter.jobs,
sources: adapter.sources.size,
- configuredSources: configuredSourcesFor(name),
keywords: adapter.keywords.size,
sampleTitle: adapter.sampleTitle,
}))
@@ -170,150 +138,136 @@ function buildJobPreviews(jobs: ScraperJob[]): ScraperJobPreview[] {
}));
}
+const EMPTY_JOBS: ScraperJob[] = [];
+function createScraperResources(sessionKey: string) {
+ void sessionKey; // Resource lifetime follows the authenticated session.
+ return {
+ listResource: createPollingResource({
+ load: (signal) => scrapersApi.list(signal), intervalMs: REFRESH_INTERVAL_MS,
+ errorMessage: "Nao foi possivel carregar os dados do processamento.",
+ }),
+ countResource: createPollingResource({
+ load: (signal) => scrapersApi.jobsCount(signal), intervalMs: REFRESH_INTERVAL_MS,
+ errorMessage: "Nao foi possivel carregar a contagem do catálogo.",
+ }),
+ jobsResource: createPollingResource({
+ load: (signal) => scrapersApi.jobs(200, signal), intervalMs: 0,
+ errorMessage: "Amostra do catálogo indisponível.",
+ }),
+ };
+}
+
export function useScrapers() {
const { notify } = useNotifications();
- const previousRunningRef = useRef(null);
- const [scrapers, setScrapers] = useState([]);
- const [jobs, setJobs] = useState([]);
- const [indexedJobs, setIndexedJobs] = useState(0);
+ const { isLoggedIn } = useAuth();
+ const canReadOperational = isLoggedIn?.role === "admin" || isLoggedIn?.role === "super_admin";
+ const sessionKey = `${isLoggedIn?.id ?? "anonymous"}:${isLoggedIn?.role ?? "none"}`;
+ const operational = useOperationalSnapshot(canReadOperational, 10_000, sessionKey);
+ const mountedRef = useRef(false);
+ const pendingRef = useRef(false);
+ const clearingRef = useRef(false);
const [logs, setLogs] = useState([]);
- const [lastUpdatedAt, setLastUpdatedAt] = useState(null);
- const [isLoading, setIsLoading] = useState(true);
- const [isRefreshing, setIsRefreshing] = useState(false);
const [startingScraperId, setStartingScraperId] = useState(null);
const [isClearingJobsCache, setIsClearingJobsCache] = useState(false);
const [error, setError] = useState(null);
-
- const addLog = useCallback((text: string) => {
- setLogs((prev) => [{ time: nowTime(), text }, ...prev].slice(0, 80));
+ const [triggerForbidden, setTriggerForbidden] = useState(false);
+ useEffect(() => {
+ mountedRef.current = true;
+ return () => { mountedRef.current = false; };
}, []);
-
- const refresh = useCallback(
- async ({ silent = false, includeJobs = false } = {}) => {
- if (!silent) setIsRefreshing(true);
-
- try {
- const [listResult, countResult] = await Promise.all([
- scrapersApi.list(),
- scrapersApi.jobsCount(),
- ]);
- const nextTotal = countResult.total;
- const nextScrapers = listResult.scrapers.map((scraper) =>
- mapScraper(scraper, nextTotal),
- );
- const running = nextScrapers.some((scraper) => scraper.active);
-
- if (
- previousRunningRef.current !== null &&
- previousRunningRef.current !== running
- ) {
- addLog(
- running
- ? "Scheduler reportou execução em andamento."
- : "Scheduler reportou scraper ocioso.",
- );
- }
-
- previousRunningRef.current = running;
- setScrapers(nextScrapers);
- setIndexedJobs(nextTotal);
- setLastUpdatedAt(new Date().toISOString());
- setError(null);
-
- if (includeJobs) {
- scrapersApi
- .jobs()
- .then((jobsResult) => {
- setJobs(jobsResult.jobs);
- setLastUpdatedAt(new Date().toISOString());
- })
- .catch(() => {
- addLog("Nao foi possivel carregar a lista detalhada de vagas.");
- });
- }
- } catch {
- setError("Nao foi possivel carregar os dados dos scrapers.");
- notify({
- tone: "error",
- title: "Erro ao carregar scrapers",
- description:
- "Não foi possível consultar status, contagem ou vagas do scraper.",
- });
- } finally {
- setIsLoading(false);
- setIsRefreshing(false);
- }
- },
- [addLog, notify],
- );
-
+ const addLog = useCallback((text: string) => {
+ if (mountedRef.current) setLogs((prev) => [{ time: nowTime(), text }, ...prev].slice(0, 80));
+ }, [setLogs]);
+ const resources = useMemo(() => createScraperResources(sessionKey), [sessionKey]);
+ const { listResource, countResource, jobsResource } = resources;
useEffect(() => {
- void refresh({ includeJobs: true });
- const interval = window.setInterval(
- () => void refresh({ silent: true }),
- REFRESH_INTERVAL_MS,
- );
-
- return () => window.clearInterval(interval);
- }, [refresh]);
-
+ let previousRunning: boolean | null = null;
+ let previousSampleError: string | null = null;
+ const unsubscribeList = listResource.subscribe(() => {
+ const data = listResource.getSnapshot().data;
+ if (!data) return;
+ const running = data.scrapers.some((scraper) => scraper.running);
+ if (previousRunning !== null && previousRunning !== running) {
+ addLog(running ? "Scheduler reportou execução em andamento." : "Scheduler reportou processamento ocioso.");
+ }
+ previousRunning = running;
+ });
+ const unsubscribeJobs = jobsResource.subscribe(() => {
+ const error = jobsResource.getSnapshot().error;
+ if (error && error !== previousSampleError) addLog("Nao foi possivel carregar a lista detalhada de vagas.");
+ previousSampleError = error;
+ });
+ return () => { unsubscribeList(); unsubscribeJobs(); };
+ }, [listResource, jobsResource, addLog]);
+ const list = usePollingResource(listResource);
+ const count = usePollingResource(countResource);
+ const sample = usePollingResource(jobsResource);
+ const catalogJobs = count.data?.total ?? null;
+ const jobs = sample.data?.jobs ?? EMPTY_JOBS;
+ const scrapers = (list.data?.scrapers ?? []).map((item) => {
+ const mapped = mapScraper(item, catalogJobs);
+ const merged = withOperationalExecution(mapped, operational, canReadOperational);
+ return { ...merged,
+ availability: canReadOperational && item.name === "go-scraper"
+ ? operational.snapshot?.processor && !operational.stale ? "Processor acessível" : "N/D"
+ : mapped.availability,
+ runDisabled: !canReadOperational || triggerForbidden || list.stale || merged.runDisabled || merged.active ,
+ };
+ });
+ const refresh = async ({ includeJobs = false } = {}) => {
+ await Promise.all([list.refresh(), count.refresh(), operational.refresh(), ...(includeJobs ? [sample.refresh()] : [])]);
+ };
+ const catalogInventory = useMemo(() => buildCatalogInventory(count.data), [count.data]);
const adapterStats = useMemo(() => buildAdapters(jobs), [jobs]);
const jobPreviews = useMemo(() => buildJobPreviews(jobs), [jobs]);
- const keywordsCount = useMemo(() => {
- const keywords = new Set();
- for (const job of jobs) keywords.add(keywordFrom(job));
- return keywords.size;
- }, [jobs]);
- const sourcesCount = useMemo(() => {
- const sources = new Set();
- for (const job of jobs) {
- sourceEntriesFrom(job).forEach((source) => sources.add(source));
- }
- return sources.size;
- }, [jobs]);
-
+ const keywords = new Set(jobs.flatMap((job) => [job.keyword, ...job.keywords]).filter(Boolean));
+ const sources = new Set(jobs.flatMap(sourceEntriesFrom).filter((source) => source !== "desconhecido"));
const overview: ScraperOverview = {
- indexedJobs,
- loadedJobs: jobs.length,
- adaptersCount: adapterStats.length,
- sourcesCount,
- configuredSourcesCount: CONFIGURED_SOURCES_TOTAL,
- keywordsCount,
- runningCount: scrapers.filter((scraper) => scraper.active).length,
- totalScrapers: scrapers.length,
- lastUpdatedAt,
+ catalogJobs,
+ loadedJobs: sample.data ? jobs.length : null,
+ adaptersCount: sample.data ? adapterStats.length : null,
+ sourcesCount: sample.data ? sources.size : null,
+ configuredSourcesCount: count.data?.configuredProviders?.length ?? null,
+ keywordsCount: sample.data ? keywords.size : null,
+ runningCount: list.data ? scrapers.filter((scraper) => scraper.active).length : null,
+ totalScrapers: list.data ? scrapers.length : null,
+ lastUpdatedAt: list.updatedAt,
};
-
const runScraper = async (id: string) => {
const scraper = scrapers.find((item) => item.id === id);
- if (!scraper) return;
+ if (!scraper || pendingRef.current) return;
if (scraper.active) {
addLog(`${scraper.name} ja esta em execucao.`);
notify({
tone: "warning",
- title: "Scraper já em execução",
+ title: "Processamento já em execução",
description: `${scraper.name} já está rodando neste momento.`,
});
return;
}
+ if (scraper.runDisabled) return;
+ pendingRef.current = true;
setStartingScraperId(id);
try {
const result = await scrapersApi.triggerOne(id);
+ if (!mountedRef.current) return;
addLog(result.message || `${scraper.name} iniciado.`);
notify({
tone: "success",
- title: "Scraper iniciado",
- description: result.message || `${scraper.name} começou a executar.`,
+ title: "Execução solicitada",
+ description: result.message || `Solicitação aceita para ${scraper.name}.`,
});
await refresh({ includeJobs: true });
} catch (error) {
+ if (!mountedRef.current) return;
+ if (error instanceof ApiError && [401, 403].includes(error.status)) setTriggerForbidden(true);
if (error instanceof ApiError && error.status === 409) {
addLog(`${scraper.name} ja esta em execucao.`);
notify({
tone: "warning",
- title: "Scraper já em execução",
+ title: "Processamento já em execução",
description: "A execução atual ainda não terminou.",
});
await refresh({ includeJobs: true });
@@ -324,83 +278,97 @@ export function useScrapers() {
addLog(`Falha ao solicitar execucao de ${scraper.name}.`);
notify({
tone: "error",
- title: "Erro ao iniciar scraper",
+ title: "Erro ao iniciar processamento",
description: `O backend não conseguiu disparar ${scraper.name}.`,
});
} finally {
- setStartingScraperId(null);
+ pendingRef.current = false;
+ if (mountedRef.current) setStartingScraperId(null);
}
};
const startAll = async () => {
+ if (!canReadOperational || triggerForbidden || pendingRef.current || !operational.snapshot || operational.stale || ["running", "canceling"].includes(operational.snapshot.processor?.execution.status ?? "")) return;
+ pendingRef.current = true;
setStartingScraperId("__all__");
try {
const result = await scrapersApi.trigger();
- addLog(result.message || "Execucao dos scrapers iniciada.");
+ if (!mountedRef.current) return;
+ addLog(result.message || "Execucao do processamento iniciada.");
notify({
tone: "success",
- title: "Scrapers iniciados",
- description: result.message || "A execução dos scrapers foi solicitada.",
+ title: "Execução solicitada",
+ description: result.message || "A execução do processamento foi solicitada.",
});
await refresh({ includeJobs: true });
} catch (error) {
+ if (!mountedRef.current) return;
+ if (error instanceof ApiError && [401, 403].includes(error.status)) setTriggerForbidden(true);
if (error instanceof ApiError && error.status === 409) {
- addLog("Scraper ja esta em execucao.");
+ addLog("Processamento ja esta em execucao.");
notify({
tone: "warning",
- title: "Scraper já em execução",
+ title: "Processamento já em execução",
description: "A execução atual ainda não terminou.",
});
await refresh({ includeJobs: true });
return;
}
- setError("Nao foi possivel iniciar os scrapers.");
- addLog("Falha ao solicitar execucao dos scrapers.");
+ setError("Nao foi possivel iniciar o processamento.");
+ addLog("Falha ao solicitar execucao do processamento.");
notify({
tone: "error",
- title: "Erro ao iniciar scrapers",
+ title: "Erro ao iniciar processamento",
description:
- "O backend não conseguiu disparar a execução dos scrapers.",
+ "O backend não conseguiu disparar a execução do processamento.",
});
} finally {
- setStartingScraperId(null);
+ pendingRef.current = false;
+ if (mountedRef.current) setStartingScraperId(null);
}
};
const pauseAll = () => {
- addLog("Pausar scrapers ainda nao esta disponivel no backend.");
+ addLog("Pausar processamento ainda nao esta disponivel no backend.");
notify({
tone: "warning",
title: "Pausa indisponível",
- description: "Ainda não existe endpoint para pausar todos os scrapers.",
+ description: "Ainda não existe endpoint para pausar o processamento.",
});
};
const clearJobsCache = async () => {
+ if (clearingRef.current || isLoggedIn?.role !== "super_admin") return;
+ clearingRef.current = true;
setIsClearingJobsCache(true);
try {
const result = await scrapersApi.clearJobsCache();
- setJobs([]);
- setIndexedJobs(0);
- addLog(`Cache de vagas limpo no Valkey: ${result.deleted} chaves removidas.`);
+ if (!mountedRef.current) return;
+ const versioned = result.patterns.includes("jobs:search:generation");
+ const description = versioned
+ ? "Cache de buscas invalidado. Catálogo e índice ativo preservados."
+ : `Cache legado: ${result.deleted} chaves removidas do Valkey (${result.patterns.join(", ")}). Catálogo PostgreSQL preservado.`;
+ addLog(description);
notify({
tone: "success",
- title: "Cache de vagas limpo",
- description: `${result.deleted} chaves de vagas foram removidas do Valkey.`,
+ title: "Cache atualizado",
+ description,
});
await refresh({ includeJobs: true });
} catch {
+ if (!mountedRef.current) return;
setError("Nao foi possivel limpar o cache de vagas.");
addLog("Falha ao limpar cache de vagas no Valkey.");
notify({
tone: "error",
title: "Erro ao limpar cache",
description:
- "A API administrativa não conseguiu limpar as vagas do Valkey.",
+ "A API administrativa não conseguiu atualizar o cache de buscas.",
});
} finally {
- setIsClearingJobsCache(false);
+ clearingRef.current = false;
+ if (mountedRef.current) setIsClearingJobsCache(false);
}
};
@@ -408,27 +376,23 @@ export function useScrapers() {
await refresh({ includeJobs: true });
addLog("Lista de vagas e adapters recarregada a partir do backend.");
};
-
const clearLogs = () => setLogs([]);
-
return {
- scrapers,
- adapterStats,
- jobPreviews,
- overview,
- logs,
- isLoading,
- isRefreshing,
- isStarting: startingScraperId !== null,
- startingScraperId,
- isClearingJobsCache,
- error,
- refresh: reloadJobs,
- toggleScraper: runScraper,
- startAll,
- pauseAll,
- clearJobsCache,
- clearLogs,
- refreshIntervalMs: REFRESH_INTERVAL_MS,
+ scrapers, adapterStats, catalogInventory, jobPreviews, overview, logs,
+ inventoryMessage: count.stale ? "Inventário/contagens desatualizados; última leitura válida." : count.data?.sources == null ? "Distribuição global N/D; não inferida da prévia." : "Contagens globais do catálogo ativo por fonte principal; cada vaga conta uma vez.",
+ inventoryAvailable: count.data?.sources != null,
+ configurationAvailable: count.data?.configuredProviders != null,
+ isLoading: list.loading || count.loading,
+ isRefreshing: list.refreshing || count.refreshing || sample.refreshing,
+ isStarting: startingScraperId !== null, startingScraperId, isClearingJobsCache,
+ error: error ?? list.error ?? count.error,
+ catalogMessage: count.stale ? "Catálogo desatualizado ou indisponível." : count.data ? "Catálogo ativo PostgreSQL" : "Catálogo N/D",
+ sampleMessage: sample.error ?? (sample.stale ? "Amostra desatualizada." : sample.updatedAt ? `Amostra consultada em ${new Date(sample.updatedAt).toLocaleTimeString("pt-BR")}` : "Amostra N/D"),
+ sampleUnavailable: sample.data === null,
+ listUnavailable: list.data === null,
+ operational, canReadOperational,
+ operationalMessage: operationalNotice(operational, canReadOperational),
+ refresh: reloadJobs, toggleScraper: runScraper, startAll, pauseAll,
+ clearJobsCache, clearLogs, refreshIntervalMs: REFRESH_INTERVAL_MS,
};
}
diff --git a/front_admin/src/modules/scrapers/mocks/scrapers.mock.ts b/front_admin/src/modules/scrapers/mocks/scrapers.mock.ts
index 9f80a09b..98246b15 100644
--- a/front_admin/src/modules/scrapers/mocks/scrapers.mock.ts
+++ b/front_admin/src/modules/scrapers/mocks/scrapers.mock.ts
@@ -1,8 +1,8 @@
import type { Scraper } from "../schemas/scraper.schema";
export const MOCK_SCRAPERS: Scraper[] = [
- { id: "linkedin", name: "LinkedIn Scraper", status: "Executando", lastRun: "2 min atrás", indexedJobs: 2543, active: true, sla: "99.9%" },
- { id: "infojobs", name: "InfoJobs Scraper", status: "Executando", lastRun: "1 min atrás", indexedJobs: 1872, active: true, sla: "100%" },
- { id: "glassdoor", name: "Glassdoor Scraper", status: "Executando", lastRun: "3 min atrás", indexedJobs: 1456, active: true, sla: "100%" },
- { id: "indeed", name: "Indeed Scraper", status: "Executando", lastRun: "1 min atrás", indexedJobs: 2850, active: true, sla: "100%" },
+ { id: "linkedin", name: "LinkedIn Scraper", status: "Executando", lastRun: "2 min atrás", catalogJobs: 2543, active: true, availability: "99.9%" },
+ { id: "infojobs", name: "InfoJobs Scraper", status: "Executando", lastRun: "1 min atrás", catalogJobs: 1872, active: true, availability: "100%" },
+ { id: "glassdoor", name: "Glassdoor Scraper", status: "Executando", lastRun: "3 min atrás", catalogJobs: 1456, active: true, availability: "100%" },
+ { id: "indeed", name: "Indeed Scraper", status: "Executando", lastRun: "1 min atrás", catalogJobs: 2850, active: true, availability: "100%" },
];
diff --git a/front_admin/src/modules/scrapers/schemas/scraper.schema.ts b/front_admin/src/modules/scrapers/schemas/scraper.schema.ts
index 4344e9a8..ee3972d4 100644
--- a/front_admin/src/modules/scrapers/schemas/scraper.schema.ts
+++ b/front_admin/src/modules/scrapers/schemas/scraper.schema.ts
@@ -5,16 +5,17 @@ export const ScraperSchema = z.object({
name: z.string(),
status: z.string(),
lastRun: z.string(),
- indexedJobs: z.number().int().nonnegative(),
+ catalogJobs: z.number().int().nonnegative().nullable(),
active: z.boolean(),
- sla: z.string(),
+ executionDetail: z.string().optional(),
+ runDisabled: z.boolean().optional(),
+ availability: z.string(),
});
export const ScraperAdapterSchema = z.object({
name: z.string(),
jobs: z.number().int().nonnegative(),
sources: z.number().int().nonnegative(),
- configuredSources: z.number().int().nonnegative(),
keywords: z.number().int().nonnegative(),
sampleTitle: z.string().optional(),
});
@@ -31,14 +32,14 @@ export const ScraperJobPreviewSchema = z.object({
});
export const ScraperOverviewSchema = z.object({
- indexedJobs: z.number().int().nonnegative(),
- loadedJobs: z.number().int().nonnegative(),
- adaptersCount: z.number().int().nonnegative(),
- sourcesCount: z.number().int().nonnegative(),
- configuredSourcesCount: z.number().int().nonnegative(),
- keywordsCount: z.number().int().nonnegative(),
- runningCount: z.number().int().nonnegative(),
- totalScrapers: z.number().int().nonnegative(),
+ catalogJobs: z.number().int().nonnegative().nullable(),
+ loadedJobs: z.number().int().nonnegative().nullable(),
+ adaptersCount: z.number().int().nonnegative().nullable(),
+ sourcesCount: z.number().int().nonnegative().nullable(),
+ configuredSourcesCount: z.number().int().nonnegative().nullable(),
+ keywordsCount: z.number().int().nonnegative().nullable(),
+ runningCount: z.number().int().nonnegative().nullable(),
+ totalScrapers: z.number().int().nonnegative().nullable(),
lastUpdatedAt: z.string().nullable(),
});
diff --git a/front_admin/src/modules/scrapers/services/catalogInventory.ts b/front_admin/src/modules/scrapers/services/catalogInventory.ts
new file mode 100644
index 00000000..7ed1aedc
--- /dev/null
+++ b/front_admin/src/modules/scrapers/services/catalogInventory.ts
@@ -0,0 +1,61 @@
+import type { ScraperJobsCountResponse } from "../../../lib/api/types";
+
+const NAMES: Record = {
+ linkedin: "LinkedIn", adzuna: "Adzuna", themuse: "The Muse", gupy: "Gupy",
+ inhire: "InHire", jooble: "Jooble", greenhouse: "Greenhouse", lever: "Lever",
+ unknown: "Provider não reconhecido",
+};
+export interface CatalogProvider {
+ id: string; name: string; provider: string; configured: boolean | null;
+ catalogJobs: number | null; observed: boolean | null;
+}
+
+function normalizeSource(source: string | null, provider: string) {
+ const parts = new Map();
+ for (const value of (source ?? "").split(",")) {
+ const name = value.trim();
+ if (!name) continue;
+ // Match the existing provider mapping: case, spaces and provider qualifiers.
+ const candidate = name.toLowerCase().split(":")[0].replace(/\s/g, "");
+ const known = candidate !== "unknown" && Object.hasOwn(NAMES, candidate);
+ const id = known ? candidate : `source:value:${name.toLowerCase()}`;
+ parts.set(id, known ? NAMES[candidate] : name);
+ }
+ const entries = [...parts.entries()].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
+ if (entries.length === 0) return { id: "source:null", name: "Sem fonte principal", provider: "unknown" };
+ if (entries.length === 1) {
+ const [key, name] = entries[0];
+ const id = provider !== "unknown" ? provider : key;
+ return { id, name: NAMES[id] ?? name, provider: Object.hasOwn(NAMES, id) ? id : "unknown" };
+ }
+ return {
+ id: `source:combination:${JSON.stringify(entries.map(([id]) => id))}`,
+ name: entries.map(([, name]) => name).join(" + "),
+ provider: "unknown",
+ };
+}
+
+// Preview is deliberately not an input. Equivalent provenance groups merge;
+// a catalog entry still belongs to exactly one group, never to each member.
+export function buildCatalogInventory(count: ScraperJobsCountResponse | null): CatalogProvider[] {
+ if (!count) return [];
+ const rows = new Map();
+ const configured = count.configuredProviders;
+ for (const id of configured ?? []) {
+ rows.set(id, { id, name: NAMES[id] ?? id, provider: id, configured: true, catalogJobs: count.sources == null ? null : 0, observed: count.sources == null ? null : false });
+ }
+ for (const source of count.sources ?? []) {
+ const normalized = normalizeSource(source.source, source.provider);
+ const row = rows.get(normalized.id) ?? {
+ ...normalized,
+ configured: normalized.id === "source:null" || configured == null || (normalized.provider === "unknown" && configured.includes("unknown"))
+ ? null : normalized.provider !== "unknown" && configured.some(id => id === normalized.provider),
+ catalogJobs: 0,
+ observed: false,
+ };
+ row.catalogJobs = (row.catalogJobs ?? 0) + source.total;
+ row.observed = row.catalogJobs > 0;
+ rows.set(row.id, row);
+ }
+ return [...rows.values()].sort((a, b) => a.name.localeCompare(b.name));
+}
diff --git a/front_admin/src/modules/users/components/UserEditModal.tsx b/front_admin/src/modules/users/components/UserEditModal.tsx
index ea04e40b..276e2bc6 100644
--- a/front_admin/src/modules/users/components/UserEditModal.tsx
+++ b/front_admin/src/modules/users/components/UserEditModal.tsx
@@ -18,12 +18,12 @@ const ROLE_OPTIONS: Array<{
{
value: "super_admin",
label: "Super Admin",
- description: "Acesso completo a usuários, auditoria, scrapers e métricas.",
+ description: "Acesso completo a usuários, auditoria, processamento e métricas.",
},
{
value: "admin",
label: "Admin",
- description: "Pode operar scrapers, observabilidade e ações administrativas.",
+ description: "Pode operar processamento, observabilidade e ações administrativas.",
},
{
value: "support",
diff --git a/front_admin/tests/app/layouts/MainLayout.test.tsx b/front_admin/tests/app/layouts/MainLayout.test.tsx
index 59a7246e..3703e60c 100644
--- a/front_admin/tests/app/layouts/MainLayout.test.tsx
+++ b/front_admin/tests/app/layouts/MainLayout.test.tsx
@@ -71,6 +71,7 @@ describe("MainLayout", () => {
}>
Conteúdo dashboard } />
Conteúdo usuários } />
+
Conteúdo processamento } />
Login route } />
,
@@ -80,11 +81,17 @@ describe("MainLayout", () => {
expect(screen.getAllByText("Dashboard")).toHaveLength(2);
expect(screen.getByText("Conteúdo dashboard")).toBeInTheDocument();
- fireEvent.change(screen.getByPlaceholderText("Buscar vagas, scrapers, logs..."), {
+ fireEvent.change(screen.getByPlaceholderText("Buscar vagas, processamento, logs..."), {
target: { value: "logs" },
});
expect(screen.getByDisplayValue("logs")).toBeInTheDocument();
+ fireEvent.click(screen.getByRole("button", { name: "Processamento" }));
+ expect(screen.getByText("Conteúdo processamento")).toBeInTheDocument();
+ expect(screen.getByRole("heading", { name: "Processamento de Vagas" })).toBeInTheDocument();
+ expect(screen.getByText("Controle de fontes, providers e execuções automatizadas")).toBeInTheDocument();
+ expect(screen.queryByRole("button", { name: "Scrapers" })).not.toBeInTheDocument();
+
fireEvent.click(screen.getByRole("button", { name: /últimas 24 horas/i }));
expect(screen.getByRole("button", { name: /últimos 7 dias/i })).toBeInTheDocument();
@@ -93,7 +100,7 @@ describe("MainLayout", () => {
expect(await screen.findByText("go-scraper em execução")).toBeInTheDocument();
fireEvent.click(screen.getByText("go-scraper em execução"));
expect(
- await screen.findAllByText("O scraper está rodando neste momento."),
+ await screen.findAllByText("O processamento está em execução neste momento."),
).toHaveLength(2);
fireEvent.click(screen.getByText("Ada Lovelace"));
diff --git a/front_admin/tests/app/layouts/NotificationButton.test.tsx b/front_admin/tests/app/layouts/NotificationButton.test.tsx
index 602150af..61ecf798 100644
--- a/front_admin/tests/app/layouts/NotificationButton.test.tsx
+++ b/front_admin/tests/app/layouts/NotificationButton.test.tsx
@@ -103,7 +103,7 @@ describe("NotificationButton", () => {
expect(screen.getByText("Latência atual: 88ms.")).not.toBeNull();
expect(screen.getByText("Lever em execução")).not.toBeNull();
expect(screen.getByText("Adzuna indisponível")).not.toBeNull();
- expect(screen.queryByText("Scraper indisponível")).toBeNull();
+ expect(screen.queryByText("Processamento indisponível")).toBeNull();
});
it("limits notifications to five and routes a selected item to the provider", async () => {
diff --git a/front_admin/tests/components/ui/ui.test.tsx b/front_admin/tests/components/ui/ui.test.tsx
index 87f1376f..e274dbd4 100644
--- a/front_admin/tests/components/ui/ui.test.tsx
+++ b/front_admin/tests/components/ui/ui.test.tsx
@@ -48,7 +48,7 @@ describe("shared ui components", () => {
percentage={42}
color="bg-blue-500"
/>
-
+
>,
);
diff --git a/front_admin/tests/fixtures/operationalSnapshot.ts b/front_admin/tests/fixtures/operationalSnapshot.ts
new file mode 100644
index 00000000..1478d176
--- /dev/null
+++ b/front_admin/tests/fixtures/operationalSnapshot.ts
@@ -0,0 +1,61 @@
+import type { OperationalSnapshot } from "../../src/modules/observability/schemas/operationalSnapshot.schema";
+const now = "2026-10-07T00:00:00.000Z";
+export const processorFixture = {
+ status: "ok",
+ timestamp: now,
+ execution: {
+ status: "idle",
+ source: null,
+ startedAt: null,
+ durationSeconds: 0,
+ finishedAt: null,
+ lastDurationSeconds: 0,
+ lastStatus: null,
+ nextRunAt: null,
+ stage: null,
+ applicationVersion: "test",
+ taxonomyVersion: "v1",
+ },
+ lock: { held: false, ttlSeconds: 0 },
+ concurrency: { configured: 12, effective: 0, active: 0, waiting: 0 },
+ progress: Object.fromEntries(
+ [
+ "providersTotal",
+ "providersCompleted",
+ "adaptersTotal",
+ "adaptersProcessed",
+ "tasksTotal",
+ "tasksCompleted",
+ "tasksCanceled",
+ "keywordsTotal",
+ "keywordsProcessed",
+ "batchesCompleted",
+ ].map((k) => [k, 0]),
+ ),
+ queues: Object.fromEntries(
+ ["collection", "classification", "persistence", "indexing"].map((k) => [
+ k,
+ { depth: 0, capacity: 0 },
+ ]),
+ ),
+ resources: {
+ cpuSeconds: 0,
+ cpuPercent: null,
+ memoryBytes: null,
+ heapBytes: 0,
+ goroutines: 1,
+ gomaxprocs: 2,
+ gomemlimitBytes: 1500,
+ },
+ errors: { total: 0, timeouts: 0 },
+ rejectedTitles: [],
+ rejectedTitlesSince: now,
+ dependencies: { postgres: { status: "ok" }, valkey: { status: "ok" } },
+ index: {
+ activeVersion: "bootstrap",
+ rebuildProgress: null,
+ maintenance: null,
+ },
+};
+
+export const operationalFixture = { status: "ok", timestamp: now, processor: processorFixture, availability: { scraper: "ok" } } as OperationalSnapshot;
diff --git a/front_admin/tests/lib/api/resources.test.ts b/front_admin/tests/lib/api/resources.test.ts
index ba23f6b3..506af898 100644
--- a/front_admin/tests/lib/api/resources.test.ts
+++ b/front_admin/tests/lib/api/resources.test.ts
@@ -41,7 +41,7 @@ describe("api resources", () => {
it("calls dashboard overview endpoint", () => {
dashboardApi.getOverview();
- expect(mockedApi.get).toHaveBeenCalledWith("/admin/dashboard");
+ expect(mockedApi.get).toHaveBeenCalledWith("/admin/dashboard", { signal: undefined });
});
it("calls observability endpoints with expected options", () => {
@@ -52,15 +52,15 @@ describe("api resources", () => {
expect(mockedApi.get).toHaveBeenNthCalledWith(
1,
"/admin/observability/health",
- { acceptedStatuses: [503] },
+ { acceptedStatuses: [503], signal: undefined },
);
expect(mockedApi.get).toHaveBeenNthCalledWith(
2,
- "/admin/observability/metrics",
+ "/admin/observability/metrics", { signal: undefined },
);
expect(mockedApi.get).toHaveBeenNthCalledWith(
3,
- "/admin/observability/dashboards?range=1h",
+ "/admin/observability/dashboards?range=1h", { signal: undefined },
);
});
@@ -79,23 +79,24 @@ describe("api resources", () => {
);
});
- it("calls scraper endpoints", () => {
+ it("calls scraper endpoints", async () => {
scrapersApi.list();
scrapersApi.status();
scrapersApi.jobs();
- scrapersApi.jobsCount();
+ mockedApi.get.mockResolvedValueOnce({ total: 0 });
+ await expect(scrapersApi.jobsCount()).resolves.toEqual({ total: 0 });
scrapersApi.trigger();
scrapersApi.clearJobsCache();
- expect(mockedApi.get).toHaveBeenNthCalledWith(1, "/admin/scrapers");
+ expect(mockedApi.get).toHaveBeenNthCalledWith(1, "/admin/scrapers", { signal: undefined });
expect(mockedApi.get).toHaveBeenNthCalledWith(2, "/admin/scrapers/status");
expect(mockedApi.get).toHaveBeenNthCalledWith(
3,
- "/admin/scrapers/jobs?limit=200",
+ "/admin/scrapers/jobs?limit=200", { signal: undefined },
);
expect(mockedApi.get).toHaveBeenNthCalledWith(
4,
- "/admin/scrapers/jobs/count",
+ "/admin/scrapers/jobs/count", { signal: undefined },
);
expect(mockedApi.post).toHaveBeenCalledWith("/admin/scrapers/run");
expect(mockedApi.delete).toHaveBeenCalledWith("/admin/jobs/cache");
diff --git a/front_admin/tests/lib/polling/pollingResource.test.ts b/front_admin/tests/lib/polling/pollingResource.test.ts
new file mode 100644
index 00000000..e333e0f2
--- /dev/null
+++ b/front_admin/tests/lib/polling/pollingResource.test.ts
@@ -0,0 +1,67 @@
+import { act, renderHook } from "@testing-library/react";
+import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
+import { ApiError } from "../../../src/lib/api/client";
+import { createPollingResource } from "../../../src/lib/polling/pollingResource";
+import { usePollingResource } from "../../../src/lib/polling/usePollingResource";
+
+const flush = () => act(async () => { await Promise.resolve(); });
+beforeEach(() => vi.useFakeTimers());
+afterEach(() => vi.useRealTimers());
+
+describe("resource lifecycle", () => {
+ it("shares one timer and request, aborting only when the final consumer leaves", async () => {
+ let resolve!: (value: number) => void;
+ const load = vi.fn(() => new Promise
((r) => { resolve = r; }));
+ const resource = createPollingResource({ load, intervalMs: 10_000, errorMessage: "failed" });
+ const first = renderHook(() => usePollingResource(resource));
+ const second = renderHook(() => usePollingResource(resource));
+ await flush();
+ act(() => { void first.result.current.refresh(); void second.result.current.refresh(); });
+ expect(load).toHaveBeenCalledTimes(1);
+ const signal = load.mock.calls[0][0] as AbortSignal;
+ first.unmount();
+ expect(signal.aborted).toBe(false);
+ second.unmount();
+ expect(signal.aborted).toBe(true);
+ await act(async () => { resolve(7); });
+ expect(resource.getSnapshot().data).toBeNull();
+ expect(vi.getTimerCount()).toBe(0);
+ });
+ it("stops all future requests after 403, even manual refresh", async () => {
+ const load = vi.fn().mockRejectedValue(new ApiError(403, {}));
+ const resource = createPollingResource({ load, intervalMs: 10_000, errorMessage: "failed" });
+ const { result } = renderHook(() => usePollingResource(resource));
+ await flush();
+ await act(async () => { await vi.advanceTimersByTimeAsync(60_000); await result.current.refresh(); });
+ expect(load).toHaveBeenCalledTimes(1);
+ expect(result.current.forbidden).toBe(true);
+ expect(result.current.data).toBeNull();
+ });
+ it("keeps real zero distinct from missing and stale values", async () => {
+ const load = vi.fn().mockResolvedValueOnce(0).mockRejectedValueOnce(new Error("down")).mockResolvedValueOnce(2);
+ const resource = createPollingResource({ load, intervalMs: 10_000, errorMessage: "failed" });
+ const { result } = renderHook(() => usePollingResource(resource));
+ expect(result.current.data).toBeNull();
+ await flush();
+ expect(result.current.data).toBe(0);
+ await act(async () => { await result.current.refresh(); });
+ expect(result.current.data).toBe(0);
+ expect(result.current.stale).toBe(true);
+ await act(async () => { await result.current.refresh(); });
+ expect(result.current.data).toBe(2);
+ expect(result.current.stale).toBe(false);
+ });
+ it("aborts timed out requests and ignores an old result after recovery", async () => {
+ let resolve!: (value: number) => void;
+ const load = vi.fn().mockReturnValueOnce(new Promise((r) => { resolve = r; })).mockResolvedValueOnce(2);
+ const resource = createPollingResource({ load, intervalMs: 10_000, errorMessage: "failed" });
+ const { result } = renderHook(() => usePollingResource(resource));
+ await flush();
+ await act(async () => { await vi.advanceTimersByTimeAsync(8_000); });
+ expect(load.mock.calls[0][0].aborted).toBe(true);
+ expect(result.current.stale).toBe(true);
+ await act(async () => { await result.current.refresh(); });
+ await act(async () => { resolve(1); });
+ expect(result.current.data).toBe(2);
+ });
+});
diff --git a/front_admin/tests/modules/dashboard/DashboardPage.test.tsx b/front_admin/tests/modules/dashboard/DashboardPage.test.tsx
index e71e1409..8449503e 100644
--- a/front_admin/tests/modules/dashboard/DashboardPage.test.tsx
+++ b/front_admin/tests/modules/dashboard/DashboardPage.test.tsx
@@ -15,10 +15,10 @@ const dashboardState = {
totalJobs: { value: 12345, trend: "índice Valkey", positive: true },
jobsToday: { value: 99, trend: "coletadas hoje", positive: false },
},
- resources: { scraper: 99, postgres: 65, valkey: 0 },
+ resources: { scraper: "ok", postgres: "degraded", valkey: "down" },
services: [
- { name: "Postgres", status: "Online", sla: "10ms", health: 99, tone: "success" as const },
- { name: "Valkey", status: "Instavel", sla: "slow", health: 65, tone: "warning" as const },
+ { name: "Postgres", status: "Online", sla: "10ms", health: "ok", tone: "success" as const },
+ { name: "Valkey", status: "Instavel", sla: "slow", health: "degraded", tone: "warning" as const },
],
scrapers: [
{
@@ -26,7 +26,7 @@ const dashboardState = {
name: "Adzuna",
status: "Disponivel",
lastRun: "Hoje",
- collected24h: 1540,
+ catalogJobs: 1540,
active: false,
},
],
@@ -69,7 +69,7 @@ describe("DashboardPage", () => {
fireEvent.click(screen.getByRole("button", { name: "Atualizar" }));
expect(dashboardState.refresh).toHaveBeenCalledTimes(1);
- fireEvent.click(screen.getByTitle("Iniciar Scraper"));
+ fireEvent.click(screen.getByTitle("Iniciar processamento"));
expect(dashboardState.toggleScraper).toHaveBeenCalledWith("adzuna");
});
diff --git a/front_admin/tests/modules/dashboard/components/PlatformChart.test.tsx b/front_admin/tests/modules/dashboard/components/PlatformChart.test.tsx
index 6f17dc37..16a40b0d 100644
--- a/front_admin/tests/modules/dashboard/components/PlatformChart.test.tsx
+++ b/front_admin/tests/modules/dashboard/components/PlatformChart.test.tsx
@@ -52,7 +52,7 @@ describe("PlatformChart", () => {
/>,
);
expect(screen.getAllByText("0").length).toBeGreaterThan(0);
- expect(screen.getByText("Todos os intervalos ficaram em 0. O scraper não alterou o total indexado durante esta janela.")).toBeInTheDocument();
+ expect(screen.getByText("Todos os intervalos ficaram em 0. Sem variação líquida do total nas leituras locais.")).toBeInTheDocument();
rerender(
{
,
);
- expect(screen.getByText("Nenhum scraper retornado pelo backend.")).toBeInTheDocument();
+ expect(screen.getByText("Nenhum processamento retornado pelo backend.")).toBeInTheDocument();
rerender(
@@ -28,7 +28,7 @@ describe("ScraperTable", () => {
name: "Scraper",
status: "Online",
lastRun: "Hoje",
- collected24h: 100,
+ catalogJobs: 100,
active: false,
},
]}
@@ -38,7 +38,7 @@ describe("ScraperTable", () => {
,
);
- fireEvent.click(screen.getByTitle("Iniciar Scraper"));
+ fireEvent.click(screen.getByTitle("Iniciar processamento"));
expect(onToggle).toHaveBeenCalledWith("s1");
fireEvent.click(screen.getByTitle("Ver detalhes de Scraper"));
diff --git a/front_admin/tests/modules/dashboard/hooks/dashboard-hooks.test.tsx b/front_admin/tests/modules/dashboard/hooks/dashboard-hooks.test.tsx
index 0e704675..613154d7 100644
--- a/front_admin/tests/modules/dashboard/hooks/dashboard-hooks.test.tsx
+++ b/front_admin/tests/modules/dashboard/hooks/dashboard-hooks.test.tsx
@@ -1,3 +1,4 @@
+import { operationalFixture } from "../../../fixtures/operationalSnapshot";
import { act, renderHook, screen, waitFor } from "@testing-library/react";
import type { ReactNode } from "react";
import { beforeEach, describe, expect, it, vi } from "vitest";
@@ -20,15 +21,22 @@ vi.mock("../../../../src/modules/dashboard/services/dashboard.service", () => ({
},
}));
+vi.mock("../../../../src/modules/auth/hooks/useAuth", () => ({
+ useAuth: () => ({ isLoggedIn: { id: "test-admin", role: "super_admin" } }),
+}));
+vi.mock("../../../../src/modules/observability/hooks/useOperationalSnapshot", () => ({
+ useOperationalSnapshot: () => ({ snapshot: operationalFixture, stale: false, loading: false, forbidden: false, error: null, refresh: async () => {} }),
+}));
+
const stats = {
totalUsers: { value: 10, trend: "ok", positive: true },
activeUsers: { value: 8, trend: "ok", positive: true },
totalJobs: { value: 100, trend: "ok", positive: true },
jobsToday: { value: 5, trend: "ok", positive: true },
};
-const resources = { scraper: 99, postgres: 99, valkey: 65 };
+const resources = { scraper: "ok", postgres: "ok", valkey: "degraded" };
const services = [
- { name: "Postgres", status: "Online", sla: "10ms", health: 99, tone: "success" as const },
+ { name: "Postgres", status: "Online", sla: "10ms", health: "ok", tone: "success" as const },
];
const scrapers = [
{
@@ -36,8 +44,8 @@ const scrapers = [
name: "Adzuna",
status: "Online",
lastRun: "Hoje",
- collected24h: 2,
- active: true,
+ catalogJobs: 2,
+ active: false,
},
];
@@ -69,13 +77,13 @@ describe("dashboard hooks", () => {
expect(result.current.chartPoints).toHaveLength(1);
expect(result.current.stats?.totalJobs.value).toBe(100);
- result.current.toggleScraper("adzuna");
- expect(dashboardService.toggleScraper).toHaveBeenCalledWith("adzuna", false);
+ await act(async () => { await result.current.toggleScraper("adzuna"); });
+ expect(dashboardService.toggleScraper).toHaveBeenCalledWith("adzuna", true);
await waitFor(() =>
expect(dashboardService.getOverview).toHaveBeenCalledTimes(2),
);
- result.current.toggleScraper("missing");
+ await act(async () => { await result.current.toggleScraper("missing"); });
expect(dashboardService.toggleScraper).toHaveBeenCalledTimes(1);
vi.mocked(dashboardService.getOverview).mockResolvedValue({
@@ -142,8 +150,8 @@ describe("dashboard hooks", () => {
vi.mocked(dashboardService.toggleScraper).mockRejectedValueOnce(
new ApiError(409, { message: "already running" }),
);
- act(() => result.current.toggleScraper("adzuna"));
- expect(await screen.findByText("Scraper já em execução")).toBeInTheDocument();
+ await act(async () => { await result.current.toggleScraper("adzuna"); });
+ expect(await screen.findByText("Processamento já em execução")).toBeInTheDocument();
await waitFor(() =>
expect(dashboardService.getOverview).toHaveBeenCalledTimes(2),
);
@@ -151,8 +159,8 @@ describe("dashboard hooks", () => {
vi.mocked(dashboardService.toggleScraper).mockRejectedValueOnce(
new Error("backend unavailable"),
);
- act(() => result.current.toggleScraper("adzuna"));
- expect(await screen.findByText("Pausa indisponível")).toBeInTheDocument();
+ await act(async () => { await result.current.toggleScraper("adzuna"); });
+ expect(await screen.findByText("Erro ao iniciar processamento")).toBeInTheDocument();
});
it("reports a failed start distinctly for an idle scraper", async () => {
@@ -169,9 +177,9 @@ describe("dashboard hooks", () => {
new Error("cannot start"),
);
- act(() => result.current.toggleScraper("adzuna"));
+ await act(async () => { await result.current.toggleScraper("adzuna"); });
- expect(await screen.findByText("Erro ao iniciar scraper")).toBeInTheDocument();
+ expect(await screen.findByText("Erro ao iniciar processamento")).toBeInTheDocument();
expect(screen.getByText("Não foi possível iniciar Adzuna.")).toBeInTheDocument();
});
@@ -186,7 +194,7 @@ describe("dashboard hooks", () => {
const scraperHook = renderHook(() => useDashboardScrapers());
await waitFor(() => expect(scraperHook.result.current.scrapers).toEqual(scrapers));
scraperHook.result.current.toggleScraper("adzuna");
- expect(dashboardService.toggleScraper).toHaveBeenCalledWith("adzuna", false);
+ expect(dashboardService.toggleScraper).toHaveBeenCalledWith("adzuna", true);
});
it("falls back to empty segmented hook states on errors", async () => {
diff --git a/front_admin/tests/modules/dashboard/schemas/dashboard.schema.test.ts b/front_admin/tests/modules/dashboard/schemas/dashboard.schema.test.ts
index c8eefdc9..582828f5 100644
--- a/front_admin/tests/modules/dashboard/schemas/dashboard.schema.test.ts
+++ b/front_admin/tests/modules/dashboard/schemas/dashboard.schema.test.ts
@@ -17,9 +17,9 @@ describe("dashboard schemas", () => {
jobsToday: { value: 7, trend: "today", positive: false },
});
const resources = ResourceUsageSchema.parse({
- scraper: 99,
- postgres: 65,
- valkey: 0,
+ scraper: "ok",
+ postgres: "degraded",
+ valkey: "down",
});
const parsed = DashboardOverviewSchema.parse({
@@ -31,7 +31,7 @@ describe("dashboard schemas", () => {
name: "Adzuna",
status: "Online",
lastRun: "Hoje",
- collected24h: 12,
+ catalogJobs: 12,
active: true,
}),
],
@@ -40,14 +40,14 @@ describe("dashboard schemas", () => {
name: "Postgres",
status: "Online",
sla: "10ms",
- health: 99,
+ health: "ok",
tone: "success",
}),
],
});
expect(parsed.chartPoints).toEqual([]);
- expect(parsed.resources.postgres).toBe(65);
+ expect(parsed.resources.postgres).toBe("degraded");
});
it("rejects invalid chart and service values", () => {
diff --git a/front_admin/tests/modules/dashboard/services/dashboard.service.test.ts b/front_admin/tests/modules/dashboard/services/dashboard.service.test.ts
index 7679d166..6f4bb7d4 100644
--- a/front_admin/tests/modules/dashboard/services/dashboard.service.test.ts
+++ b/front_admin/tests/modules/dashboard/services/dashboard.service.test.ts
@@ -65,20 +65,20 @@ describe("dashboardService", () => {
expect(overview.stats.totalJobs.value).toBe(1234);
expect(overview.resources).toEqual({
- scraper: 0,
- postgres: 99,
- valkey: 65,
+ scraper: "down",
+ postgres: "ok",
+ valkey: "degraded",
});
expect(overview.services).toEqual([
- { name: "Postgres", status: "Online", sla: "10ms", health: 99, tone: "success" },
- { name: "Valkey", status: "Instavel", sla: "slow", health: 65, tone: "warning" },
- { name: "Scraper", status: "Indisponivel", sla: "Sem resposta", health: 0, tone: "danger" },
+ { name: "Postgres", status: "Online", sla: "10ms", health: "ok", tone: "success" },
+ { name: "Valkey", status: "Instavel", sla: "slow", health: "degraded", tone: "warning" },
+ { name: "Processamento", status: "Indisponivel", sla: "Sem resposta", health: "down", tone: "danger" },
]);
expect(overview.scrapers[1]).toMatchObject({
name: "Lever",
status: "Indisponivel",
lastRun: "not-a-date",
- collected24h: 0,
+ catalogJobs: null,
active: false,
});
});
@@ -88,14 +88,14 @@ describe("dashboardService", () => {
activeUsers: { value: 8 },
});
await expect(dashboardService.getResources()).resolves.toMatchObject({
- postgres: 99,
+ postgres: "ok",
});
await expect(dashboardService.getServices()).resolves.toHaveLength(3);
await expect(dashboardService.getScrapersSummary()).resolves.toHaveLength(2);
await expect(dashboardService.toggleScraper("x", true)).resolves.toBeUndefined();
expect(scrapersApi.triggerOne).toHaveBeenCalledWith("x");
await expect(dashboardService.toggleScraper("x", false)).rejects.toThrow(
- "pausar scraper",
+ "pausar processamento",
);
});
});
diff --git a/front_admin/tests/modules/observability/ObservabilityPage.test.tsx b/front_admin/tests/modules/observability/ObservabilityPage.test.tsx
index a930e9ed..b184506b 100644
--- a/front_admin/tests/modules/observability/ObservabilityPage.test.tsx
+++ b/front_admin/tests/modules/observability/ObservabilityPage.test.tsx
@@ -1,4 +1,6 @@
-import { fireEvent, screen, waitFor } from "@testing-library/react";
+import { ApiError } from "../../../src/lib/api/client";
+import { operationalFixture } from "../../fixtures/operationalSnapshot";
+import { fireEvent, screen, waitFor, within } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { observabilityApi } from "../../../src/lib/api/observability.api";
import { ObservabilityPage } from "../../../src/modules/observability/ObservabilityPage";
@@ -6,12 +8,17 @@ import { renderWithProviders } from "../../test-utils";
vi.mock("../../../src/lib/api/observability.api", () => ({
observabilityApi: {
+ getOperationalSnapshot: vi.fn(),
health: vi.fn(),
metrics: vi.fn(),
dashboards: vi.fn(),
},
}));
+vi.mock("../../../src/modules/auth/hooks/useAuth", () => ({
+ useAuth: () => ({ isLoggedIn: { role: "admin" } }),
+}));
+
const dashboardsPayload = {
range: "15m",
step: "1m",
@@ -64,6 +71,7 @@ const dashboardsPayload = {
describe("ObservabilityPage", () => {
beforeEach(() => {
vi.clearAllMocks();
+ vi.mocked(observabilityApi.getOperationalSnapshot).mockResolvedValue(operationalFixture);
vi.mocked(observabilityApi.health).mockResolvedValue({
status: "ok",
timestamp: "2026-01-01T10:00:00.000Z",
@@ -87,21 +95,42 @@ describe("ObservabilityPage", () => {
renderWithProviders( );
expect(screen.getByText("Carregando metricas...")).toBeInTheDocument();
- await screen.findByText("Requisicoes por minuto");
+ await screen.findByRole("heading", { name: "Saúde geral" });
await screen.findByText("Requests/sec");
- expect(screen.getByText("Latencia p95")).toBeInTheDocument();
- expect(screen.getByText("postgres")).toBeInTheDocument();
+ expect(screen.getByText("Latência p95")).toBeInTheDocument();
+ expect(screen.getByRole("heading", { name: "Postgres" })).toBeInTheDocument();
- fireEvent.click(screen.getByRole("button", { name: "Infraestrutura" }));
expect(screen.getByText("Host")).toBeInTheDocument();
fireEvent.click(screen.getByRole("button", { name: "1 h" }));
await waitFor(() =>
- expect(observabilityApi.dashboards).toHaveBeenCalledWith("1h"),
+ expect(observabilityApi.dashboards).toHaveBeenCalledWith("1h", expect.any(AbortSignal)),
);
});
+ it("keeps health, execution and pipeline before infrastructure, business and history", async () => {
+ renderWithProviders( );
+ await screen.findByText("Requests/sec");
+ const headings = screen.getAllByRole("heading", { level: 2 }).map(h => h.textContent);
+ expect(headings).toEqual(["Saúde geral", "Execução atual do Processor", "Pipeline", "Infraestrutura", "Business", "Histórico"]);
+ const health = screen.getByRole("region", { name: "Saúde geral" });
+ expect(within(health).getAllByRole("article")).toHaveLength(6);
+ expect(health.querySelector("svg")).toBeNull();
+ });
+
+ it("does not retry forbidden series when the range or refresh changes", async () => {
+ vi.mocked(observabilityApi.dashboards).mockRejectedValueOnce(new ApiError(403, {}));
+ renderWithProviders( );
+ await screen.findByText("Sem autorização para consultar este recurso.");
+ fireEvent.click(screen.getByRole("button", { name: "1 h" }));
+ await screen.findByText("Sem autorização para consultar este recurso.");
+ fireEvent.click(screen.getByRole("button", { name: "Atualizar" }));
+ await waitFor(() => expect(observabilityApi.health).toHaveBeenCalledTimes(2));
+ expect(observabilityApi.dashboards).toHaveBeenCalledTimes(1);
+ expect(screen.getByRole("heading", { name: "Postgres" })).toBeInTheDocument();
+ });
+
it("shows errors and dashboard shells when APIs fail", async () => {
vi.mocked(observabilityApi.health).mockRejectedValueOnce(new Error("fail"));
vi.mocked(observabilityApi.metrics).mockRejectedValueOnce(new Error("fail"));
@@ -110,7 +139,7 @@ describe("ObservabilityPage", () => {
renderWithProviders( );
expect(
- await screen.findByText("Nao foi possivel carregar a observabilidade."),
+ await screen.findByText(/Nao foi possivel carregar a observabilidade\./),
).toBeInTheDocument();
expect(
await screen.findByText(/Sem resposta das series detalhadas/),
@@ -141,9 +170,10 @@ describe("ObservabilityPage", () => {
renderWithProviders( );
- expect(await screen.findAllByText("N/D")).toHaveLength(3);
- expect(screen.getByText("connection refused")).toBeInTheDocument();
- expect(screen.getByText("degraded")).toBeInTheDocument();
+ await screen.findByRole("heading", { name: "Saúde geral" });
+ expect(screen.getAllByText("N/D").length).toBeGreaterThan(3);
+ expect(await screen.findByText("connection refused")).toBeInTheDocument();
+ expect(screen.getByText("Degradado")).toBeInTheDocument();
expect(screen.queryByText("Requests/sec")).not.toBeInTheDocument();
fireEvent.click(screen.getByRole("button", { name: "Atualizar" }));
@@ -165,16 +195,36 @@ describe("ObservabilityPage", () => {
renderWithProviders( );
- await screen.findByText("Requisicoes por minuto");
- const latencyCard = screen.getByText("Latencia p95").parentElement;
- const errorCard = screen.getByText("Taxa de erro").parentElement;
- expect(latencyCard).toHaveTextContent("200ms");
- expect(latencyCard?.querySelector("span.text-rose-600")).not.toBeNull();
+ await screen.findByRole("heading", { name: "Saúde geral" });
+ const latencyCard = await screen.findByRole("article", { name: "Latência p95" });
+ await waitFor(() => expect(latencyCard).toHaveTextContent("200 ms"));
+ const errorCard = screen.getByRole("article", { name: "Taxa de erro" });
+ expect(latencyCard.querySelector("p.text-rose-600")).not.toBeNull();
expect(errorCard).toHaveTextContent("5%");
- expect(errorCard?.querySelector("span.text-rose-600")).not.toBeNull();
+ expect(errorCard.querySelector("p.text-rose-600")).not.toBeNull();
+ });
+
+ it("renders operational data despite Prometheus failure, preserving partial execution", async () => {
+ const processor = operationalFixture.processor!;
+ vi.mocked(observabilityApi.getOperationalSnapshot).mockResolvedValueOnce({
+ ...operationalFixture, status: "partial", processor: {
+ ...processor, status: "partial", execution: { ...processor.execution, status: "canceling", stage: "persistence" },
+ resources: { ...processor.resources, cpuPercent: 230 },
+ },
+ });
+ vi.mocked(observabilityApi.dashboards).mockRejectedValueOnce(new Error("Prometheus down"));
+ vi.mocked(observabilityApi.metrics).mockRejectedValueOnce(new Error("Prometheus down"));
+ renderWithProviders( );
+ await screen.findByText(/Sem resposta das series detalhadas/);
+ expect(await screen.findByText("Cancelando")).toBeInTheDocument();
+ expect(screen.getByText(/Etapa: Persistência/)).toBeInTheDocument();
+ expect(screen.getByText("230.0%")).toBeInTheDocument();
+ expect(screen.getByText(/Snapshot parcial/)).toBeInTheDocument();
+ expect(screen.getByRole("heading", { name: "Postgres" })).toBeInTheDocument();
+ expect(screen.queryByText("Vagas por rodada (apos dedup)")).not.toBeInTheDocument();
});
- it("selects the first available dashboard when the prior selection is absent", async () => {
+ it("keeps sections and range controls when API history is absent", async () => {
vi.mocked(observabilityApi.dashboards).mockResolvedValueOnce({
...dashboardsPayload,
dashboards: [dashboardsPayload.dashboards[1]],
@@ -182,9 +232,9 @@ describe("ObservabilityPage", () => {
renderWithProviders( );
- expect(await screen.findByText("Infraestrutura")).toBeInTheDocument();
+ expect(await screen.findByRole("heading", { name: "Infraestrutura" })).toBeInTheDocument();
expect(screen.getByText("Host")).toBeInTheDocument();
- expect(screen.queryByText("API Overview")).not.toBeInTheDocument();
+ expect(screen.queryByText("Requests/sec")).not.toBeInTheDocument();
for (const [label, range] of [
["5 min", "5m"],
@@ -194,7 +244,7 @@ describe("ObservabilityPage", () => {
]) {
fireEvent.click(screen.getByRole("button", { name: label }));
await waitFor(() => {
- expect(observabilityApi.dashboards).toHaveBeenCalledWith(range);
+ expect(observabilityApi.dashboards).toHaveBeenCalledWith(range, expect.any(AbortSignal));
});
}
});
diff --git a/front_admin/tests/modules/observability/OperationalSnapshotPanels.test.tsx b/front_admin/tests/modules/observability/OperationalSnapshotPanels.test.tsx
new file mode 100644
index 00000000..9e0bf9f0
--- /dev/null
+++ b/front_admin/tests/modules/observability/OperationalSnapshotPanels.test.tsx
@@ -0,0 +1,63 @@
+import { render, screen, within } from "@testing-library/react";
+import { describe, expect, it, vi } from "vitest";
+import { OperationalSnapshotPanels, ProcessorResources } from "../../../src/modules/observability/components/OperationalSnapshotPanels";
+import { OperationalSnapshotSchema } from "../../../src/modules/observability/schemas/operationalSnapshot.schema";
+import { operationalFixture } from "../../fixtures/operationalSnapshot";
+
+function reading(snapshot = OperationalSnapshotSchema.parse(operationalFixture), stale = false) {
+ return { snapshot, stale, loading: false, forbidden: false, error: null, refresh: vi.fn() };
+}
+describe("run data in existing operational cards", () => {
+ it("keeps aggregate execution progress without rendering provider details", () => {
+ const p = operationalFixture.processor!;
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...p, providers: [{ id: "gupy", configuredConcurrency: 1, active: 0, waiting: 0, tasksTotal: 1, tasksCompleted: 1, tasksFailed: 0, tasksCanceled: 0, jobsCollected: 3, lastTaskStatus: "success", lastTaskFinishedAt: null, lastTaskDurationSeconds: 0, lastErrorType: null }] } });
+ render( );
+ const progress = within(screen.getByRole("article", { name: "Progresso da execução" }));
+ expect(progress.getByText("Providers encerrados").nextElementSibling).toHaveTextContent(`${p.progress.providersCompleted} / ${p.progress.providersTotal}`);
+ expect(screen.getByText("Concorrência ativa / efetiva")).toBeInTheDocument();
+ expect(screen.getByText("Em espera")).toBeInTheDocument();
+ expect(screen.queryByRole("table")).not.toBeInTheDocument();
+ expect(screen.queryByText(/Providers desta execução/)).not.toBeInTheDocument();
+ expect(screen.queryByText("gupy")).not.toBeInTheDocument();
+ });
+ it("describes invalid classifications and indexing buffer without inventing a remainder", () => {
+ const p = operationalFixture.processor!;
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...p, classification: { received: 3, classified: 2, approved: 1, rejected: 1, invalid: 1 } } });
+ render( );
+ const classification = within(screen.getByRole("article", { name: "Classificação" }));
+ expect(classification.getByText("Inválidas")).toBeInTheDocument();
+ expect(classification.getByText(/Recebidas incluem inválidas/)).toBeInTheDocument();
+ expect(screen.queryByText("Pendentes")).not.toBeInTheDocument();
+ expect(screen.getByText("Buffer ocupado / capacidade")).toBeInTheDocument();
+ });
+ it.each([[0, "0s"], [93900, "1d 2h"], [110.045362548, "1m 50s"]])("formats lock TTL %s with raw seconds retained", (ttl, display) => {
+ const p = operationalFixture.processor!;
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...p, lock: { ...p.lock, ttlSeconds: ttl } } });
+ render( );
+ expect(screen.getByTitle(`${ttl} segundos`)).toHaveTextContent(display);
+ });
+ it("identifies RSS and HeapAlloc while preserving multicore CPU", () => {
+ const p = operationalFixture.processor!;
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...p, resources: { ...p.resources, cpuPercent: 230 } } });
+ render( );
+ expect(screen.getByText("230.0%")).toBeInTheDocument();
+ expect(screen.getByText("Heap Go alocado")).toBeInTheDocument();
+ expect(screen.getByText(/HeapAlloc/)).toBeInTheDocument();
+ });
+ it("renders an older backend with unavailable run totals", () => {
+ render( );
+ expect(screen.getByText(/Run ID: N\/D/)).toBeInTheDocument();
+ expect(within(screen.getByRole("article", { name: "Classificação" })).getAllByText("N/D").length).toBeGreaterThan(0);
+ expect(within(screen.getByRole("article", { name: "Persistência" })).getAllByText("N/D").length).toBeGreaterThan(0);
+ });
+ it("keeps real zero visible and retains run identity in a stale partial snapshot", () => {
+ const p = operationalFixture.processor!;
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, status: "partial", processor: { ...p, execution: { ...p.execution, status: "running", runId: "real-run-id" }, classification: { received: 0, classified: 0, approved: 0, rejected: 0, invalid: 0 }, persistence: { received: 0, inserted: 0, updated: 0, skipped: 0, failed: 0, failedBatches: 0 } } });
+ render( );
+ expect(screen.getByText(/Run ID: real-run-id/)).toBeInTheDocument();
+ expect(within(screen.getByRole("article", { name: "Classificação" })).getAllByText("0")).toHaveLength(5);
+ expect(within(screen.getByRole("article", { name: "Persistência" })).getAllByText("0")).toHaveLength(6);
+ expect(screen.getByRole("status")).toHaveTextContent("Leitura desatualizada");
+ expect(screen.getByRole("status")).toHaveTextContent("Snapshot parcial");
+ });
+});
diff --git a/front_admin/tests/modules/observability/components/HealthOverview.test.tsx b/front_admin/tests/modules/observability/components/HealthOverview.test.tsx
new file mode 100644
index 00000000..866ebcb1
--- /dev/null
+++ b/front_admin/tests/modules/observability/components/HealthOverview.test.tsx
@@ -0,0 +1,25 @@
+import { render, screen, within } from "@testing-library/react";
+import { describe, expect, it } from "vitest";
+import { HealthOverview } from "../../../../src/modules/observability/components/HealthOverview";
+import type { MetricSnapshot } from "../../../../src/lib/api/types";
+
+const metrics: MetricSnapshot = { requestRatePerMinute: 0, errorRatePct: 0, p95LatencyMs: 200, cacheHitRatePct: null, activeSessionsCount: 0 };
+const props = { health: null, metrics, healthStale: false, metricsStale: false, canReadMetrics: true };
+describe("compact health context", () => {
+ it("preserves numeric zero and exposes the existing p95 threshold", () => {
+ render( );
+ expect(within(screen.getByRole("article", { name: "Taxa de erro" })).getByText("0%")).toBeInTheDocument();
+ expect(within(screen.getByRole("article", { name: "Latência p95" })).getByText(/Atenção > 150 ms/)).toBeInTheDocument();
+ });
+ it("keeps an unknown rate unknown without guessing the cause", () => {
+ render( );
+ const card = within(screen.getByRole("article", { name: "Taxa de erro" }));
+ expect(card.getByText("N/D")).toBeInTheDocument();
+ expect(card.getByText(/motivo não informado/)).toBeInTheDocument();
+ expect(card.queryByText("0%")).not.toBeInTheDocument();
+ });
+ it("uses a request failure as evidence of source unavailability", () => {
+ render( );
+ expect(within(screen.getByRole("article", { name: "Taxa de erro" })).getByText("Fonte indisponível")).toBeInTheDocument();
+ });
+});
diff --git a/front_admin/tests/modules/observability/components/ObservabilityPanelCard.test.tsx b/front_admin/tests/modules/observability/components/ObservabilityPanelCard.test.tsx
index 00d05921..0778e3bb 100644
--- a/front_admin/tests/modules/observability/components/ObservabilityPanelCard.test.tsx
+++ b/front_admin/tests/modules/observability/components/ObservabilityPanelCard.test.tsx
@@ -48,6 +48,42 @@ describe("ObservabilityPanelCard", () => {
expect(screen.getByText("66 B")).toBeInTheDocument();
});
+ it.each([0, 10, 100])("preserves integer count %s without trimming zeros", value => {
+ render( );
+ expect(screen.getByText(String(value))).toBeInTheDocument();
+ });
+
+ it("limits duplicate technical labels visually while allowing every original series", () => {
+ const series = Array.from({ length: 12 }, (_, index) => ({ label: "postgres", points: [{ timestamp: "2026-01-01T10:00:00.000Z", value: index }] }));
+ const { container } = render( );
+ expect(container.querySelectorAll("path")).toHaveLength(6);
+ expect(screen.getByText(/Identificação limitada/)).toBeInTheDocument();
+ expect(screen.getByRole("button", { name: "postgres • série 12" })).toBeInTheDocument();
+ fireEvent.click(screen.getByRole("button", { name: "Mostrar todas (12)" }));
+ expect(container.querySelectorAll("path")).toHaveLength(12);
+ fireEvent.change(screen.getByRole("combobox", { name: "Série de Postgres" }), { target: { value: "postgres-0" } });
+ expect(container.querySelectorAll("path")).toHaveLength(1);
+ expect(screen.getAllByText("0").length).toBeGreaterThan(0);
+ expect(series.every(s => s.label === "postgres")).toBe(true);
+ });
+
+ it("keeps multicore CPU values above 100 percent", () => {
+ render( );
+ expect(screen.getByText("230.0%")).toBeInTheDocument();
+ expect(screen.getByText(/valores acima de 100% são válidos/)).toBeInTheDocument();
+ });
+
+ it("does not connect time series across unavailable samples", () => {
+ const { container } = render( );
+ const path = container.querySelector("path")?.getAttribute("d");
+ expect(path?.match(/M /g)).toHaveLength(2);
+ expect(path).not.toContain("L ");
+ });
+
it("renders line charts, filters series and shows no data", () => {
const { rerender, container } = render(
,
@@ -69,7 +105,7 @@ describe("ObservabilityPanelCard", () => {
}}
/>,
);
- expect(screen.getAllByText("No data")).toHaveLength(2);
+ expect(screen.getAllByText("N/D")).toHaveLength(2);
});
it("formats count, bytes, seconds, and missing values at their boundaries", () => {
@@ -94,7 +130,7 @@ describe("ObservabilityPanelCard", () => {
expect(screen.getByText("1.250")).toBeInTheDocument();
rerender( );
- expect(screen.getByText("12.346")).toBeInTheDocument();
+ expect(screen.getByText("12,346")).toBeInTheDocument();
rerender( );
expect(screen.getByText("2.0 KiB")).toBeInTheDocument();
rerender(
@@ -108,7 +144,7 @@ describe("ObservabilityPanelCard", () => {
rerender( );
expect(screen.getByText("60.0 s")).toBeInTheDocument();
rerender( );
- expect(screen.getByText("No data")).toBeInTheDocument();
+ expect(screen.getByText("N/D")).toBeInTheDocument();
rerender(
,
);
@@ -205,7 +241,7 @@ describe("ObservabilityPanelCard", () => {
/>,
);
- expect(screen.getAllByText("No data")).toHaveLength(2);
+ expect(screen.getAllByText("N/D")).toHaveLength(2);
expect(screen.queryByRole("button", { name: "Invalid" })).not.toBeInTheDocument();
});
});
diff --git a/front_admin/tests/modules/observability/hooks/useOperationalSnapshot.test.tsx b/front_admin/tests/modules/observability/hooks/useOperationalSnapshot.test.tsx
new file mode 100644
index 00000000..350d74fb
--- /dev/null
+++ b/front_admin/tests/modules/observability/hooks/useOperationalSnapshot.test.tsx
@@ -0,0 +1,66 @@
+import { act, renderHook } from "@testing-library/react";
+import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
+import { ApiError } from "../../../../src/lib/api/client";
+import { useOperationalSnapshot } from "../../../../src/modules/observability/hooks/useOperationalSnapshot";
+import { operationalSnapshotService } from "../../../../src/modules/observability/services/operationalSnapshot.service";
+import { operationalFixture } from "../../../fixtures/operationalSnapshot";
+
+vi.mock("../../../../src/modules/observability/services/operationalSnapshot.service", () => ({ operationalSnapshotService: { getSnapshot: vi.fn() } }));
+const flush = async () => { await act(async () => { await Promise.resolve(); }); };
+
+let sessionNumber = 0;
+let sessionKey = "";
+describe("operational polling", () => {
+ beforeEach(() => {
+ sessionKey = `test-session-${++sessionNumber}`;
+ vi.useFakeTimers();
+ vi.resetAllMocks();
+ vi.mocked(operationalSnapshotService.getSnapshot).mockResolvedValue(operationalFixture);
+ });
+ afterEach(() => { vi.useRealTimers(); vi.restoreAllMocks(); });
+ it("does not request known unauthorized snapshots", async () => {
+ const { result } = renderHook(() => useOperationalSnapshot(false, 10_000, sessionKey));
+ await act(async () => { await result.current.refresh(); vi.advanceTimersByTime(30_000); });
+ expect(operationalSnapshotService.getSnapshot).not.toHaveBeenCalled();
+ });
+ it("preserves a last valid reading as stale on Processor down and recovers", async () => {
+ const { result } = renderHook(() => useOperationalSnapshot(true, 10_000, sessionKey));
+ await flush();
+ vi.mocked(operationalSnapshotService.getSnapshot).mockResolvedValueOnce({ ...operationalFixture, status: "partial", processor: null, availability: { scraper: "down" } });
+ await act(async () => { await result.current.refresh(); });
+ expect(result.current.snapshot?.processor?.execution.status).toBe("idle");
+ expect(result.current.stale).toBe(true);
+ await act(async () => { await result.current.refresh(); });
+ expect(result.current.stale).toBe(false);
+ });
+ it("stops polling and manual requests after 403", async () => {
+ vi.mocked(operationalSnapshotService.getSnapshot).mockRejectedValueOnce(new ApiError(403, {}));
+ const { result } = renderHook(() => useOperationalSnapshot(true, 10_000, sessionKey));
+ await flush();
+ await act(async () => { vi.advanceTimersByTime(30_000); await result.current.refresh(); });
+ expect(operationalSnapshotService.getSnapshot).toHaveBeenCalledTimes(1);
+ expect(result.current.snapshot).toBeNull();
+ expect(result.current.error).toContain("autorização");
+ });
+ it("coordinates manual requests, aborts on unmount and ignores late results", async () => {
+ let resolve!: (value: typeof operationalFixture) => void;
+ vi.mocked(operationalSnapshotService.getSnapshot).mockReturnValueOnce(new Promise((r) => { resolve = r; }));
+ const { result, unmount } = renderHook(() => useOperationalSnapshot(true, 10_000, sessionKey));
+ act(() => { void result.current.refresh(); void result.current.refresh(); vi.advanceTimersByTime(1000); });
+ expect(operationalSnapshotService.getSnapshot).toHaveBeenCalledTimes(1);
+ const signal = vi.mocked(operationalSnapshotService.getSnapshot).mock.calls[0][0];
+ unmount();
+ expect(signal.aborted).toBe(true);
+ await act(async () => { resolve(operationalFixture); });
+ });
+ it("pauses while hidden and refreshes when visible", async () => {
+ const hidden = vi.spyOn(document, "hidden", "get").mockReturnValue(true);
+ renderHook(() => useOperationalSnapshot(true, 10_000, sessionKey));
+ act(() => { vi.advanceTimersByTime(10_000); });
+ expect(operationalSnapshotService.getSnapshot).not.toHaveBeenCalled();
+ hidden.mockReturnValue(false);
+ act(() => { document.dispatchEvent(new Event("visibilitychange")); });
+ await flush();
+ expect(operationalSnapshotService.getSnapshot).toHaveBeenCalledTimes(1);
+ });
+});
diff --git a/front_admin/tests/modules/observability/operationalSnapshot.api.test.ts b/front_admin/tests/modules/observability/operationalSnapshot.api.test.ts
new file mode 100644
index 00000000..00a0914d
--- /dev/null
+++ b/front_admin/tests/modules/observability/operationalSnapshot.api.test.ts
@@ -0,0 +1,19 @@
+import { afterEach, expect, it, vi } from "vitest";
+import { OperationalSnapshotSchema } from "../../../src/modules/observability/schemas/operationalSnapshot.schema";
+import { observabilityApi } from "../../../src/lib/api/observability.api";
+import { operationalFixture } from "../../fixtures/operationalSnapshot";
+
+afterEach(() => vi.unstubAllGlobals());
+
+it("requests the administrative snapshot with cookies, no-store and cancellation", async () => {
+ const fetch = vi.fn().mockResolvedValue({ ok: true, status: 200, json: async () => operationalFixture });
+ vi.stubGlobal("fetch", fetch);
+ const signal = new AbortController().signal;
+ expect(await observabilityApi.getOperationalSnapshot(signal)).toEqual(OperationalSnapshotSchema.parse(operationalFixture));
+ expect(fetch).toHaveBeenCalledWith(expect.stringMatching(/\/admin\/observability$/), expect.objectContaining({ signal, cache: "no-store", credentials: "include" }));
+});
+
+it("validates payloads at the client boundary", async () => {
+ vi.stubGlobal("fetch", vi.fn().mockResolvedValue({ ok: true, status: 200, json: async () => ({ status: "ok" }) }));
+ await expect(observabilityApi.getOperationalSnapshot()).rejects.toThrow();
+});
diff --git a/front_admin/tests/modules/observability/schemas/operationalSnapshot.schema.test.ts b/front_admin/tests/modules/observability/schemas/operationalSnapshot.schema.test.ts
new file mode 100644
index 00000000..24953485
--- /dev/null
+++ b/front_admin/tests/modules/observability/schemas/operationalSnapshot.schema.test.ts
@@ -0,0 +1,55 @@
+import { describe, expect, it } from "vitest";
+import { OperationalSnapshotSchema } from "../../../../src/modules/observability/schemas/operationalSnapshot.schema";
+import { operationalFixture } from "../../../fixtures/operationalSnapshot";
+
+describe("existing operational contract", () => {
+ it("accepts idle, nullable values, zero totals and strips unknown fields", () => {
+ const parsed = OperationalSnapshotSchema.parse({ ...operationalFixture, run_id: "unavailable", processor: { ...operationalFixture.processor, token: "secret" } });
+ expect(parsed.processor?.execution.status).toBe("idle");
+ expect(parsed.processor?.resources.cpuPercent).toBeNull();
+ expect(parsed.processor?.progress.tasksTotal).toBe(0);
+ expect(JSON.stringify(parsed)).not.toContain("secret");
+ expect(parsed).not.toHaveProperty("run_id");
+ });
+ it("accepts partial with valid processor and multicore CPU, or processor down", () => {
+ const processor = structuredClone(operationalFixture.processor!);
+ processor.status = "partial";
+ processor.resources.cpuPercent = 230;
+ expect(OperationalSnapshotSchema.parse({ ...operationalFixture, status: "partial", processor }).processor?.resources.cpuPercent).toBe(230);
+ expect(OperationalSnapshotSchema.parse({ ...operationalFixture, status: "partial", processor: null, availability: { scraper: "down" } }).processor).toBeNull();
+ });
+ it.each(["running", "canceling", "completed", "failed"])("preserves %s", (status) => {
+ const processor = operationalFixture.processor!;
+ expect(OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...processor, execution: { ...processor.execution, status } } }).processor?.execution.status).toBe(status);
+ });
+ it.each([
+ { timestamp: "invalid" },
+ { processor: {} },
+ { availability: { scraper: "unknown" } },
+ ])("rejects malformed payload %j", (patch) => {
+ expect(OperationalSnapshotSchema.safeParse({ ...operationalFixture, ...patch }).success).toBe(false);
+ });
+});
+
+describe("per-execution fields", () => {
+ it("accepts an older backend with absent fields", () => {
+ const result = OperationalSnapshotSchema.parse(operationalFixture).processor!;
+ expect(result.execution.runId).toBeNull();
+ expect(result.providers).toBeNull();
+ expect(result.classification).toBeNull();
+ expect(result.persistence).toBeNull();
+ });
+ it("preserves real identity, empty provider plan and zero versus null", () => {
+ const p = operationalFixture.processor!;
+ const result = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...p, execution: { ...p.execution, runId: "real-run", status: "running" }, providers: [], classification: { received: 0, classified: 0, approved: 0, rejected: 0, invalid: 0 }, persistence: null } }).processor!;
+ expect(result.execution.runId).toBe("real-run");
+ expect(result.providers).toEqual([]);
+ expect(result.classification?.classified).toBe(0);
+ expect(result.persistence).toBeNull();
+ });
+ it("rejects arbitrary provider names and unbounded totals", () => {
+ const p = operationalFixture.processor!;
+ expect(OperationalSnapshotSchema.safeParse({ ...operationalFixture, processor: { ...p, providers: [{ id: "secret-company" }] } }).success).toBe(false);
+ expect(OperationalSnapshotSchema.safeParse({ ...operationalFixture, processor: { ...p, persistence: { received: -1, inserted: 0, updated: 0, skipped: 0, failed: 0, failedBatches: 0 } } }).success).toBe(false);
+ });
+});
diff --git a/front_admin/tests/modules/observability/sharedOperationalSnapshot.test.tsx b/front_admin/tests/modules/observability/sharedOperationalSnapshot.test.tsx
new file mode 100644
index 00000000..29707b55
--- /dev/null
+++ b/front_admin/tests/modules/observability/sharedOperationalSnapshot.test.tsx
@@ -0,0 +1,118 @@
+import { act, renderHook } from "@testing-library/react";
+import type { ReactNode } from "react";
+import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
+import { NotificationProvider } from "../../../src/components/notifications/NotificationProvider";
+import { ApiError } from "../../../src/lib/api/client";
+import { scrapersApi } from "../../../src/lib/api/scrapers.api";
+import { useDashboard } from "../../../src/modules/dashboard/hooks/useDashboard";
+import { dashboardService } from "../../../src/modules/dashboard/services/dashboard.service";
+import { useScrapers } from "../../../src/modules/scrapers/hooks/useScrapers";
+import { useOperationalSnapshot } from "../../../src/modules/observability/hooks/useOperationalSnapshot";
+import { operationalSnapshotService } from "../../../src/modules/observability/services/operationalSnapshot.service";
+import { operationalFixture } from "../../fixtures/operationalSnapshot";
+
+const session = vi.hoisted(() => ({ id: "", role: "admin" }));
+vi.mock("../../../src/modules/auth/hooks/useAuth", () => ({ useAuth: () => ({ isLoggedIn: session }) }));
+vi.mock("../../../src/modules/dashboard/services/dashboard.service", () => ({ dashboardService: { getOverview: vi.fn(), toggleScraper: vi.fn() } }));
+vi.mock("../../../src/lib/api/scrapers.api", () => ({ scrapersApi: { list: vi.fn(), jobsCount: vi.fn(), jobs: vi.fn(), triggerOne: vi.fn(), trigger: vi.fn(), clearJobsCache: vi.fn() } }));
+vi.mock("../../../src/modules/observability/services/operationalSnapshot.service", () => ({ operationalSnapshotService: { getSnapshot: vi.fn() } }));
+
+let testSession = 0;
+const overview = {
+ stats: { totalUsers: { value: 2, trend: "Postgres", positive: true }, activeUsers: { value: 1, trend: "Contas", positive: true }, totalJobs: { value: 100, trend: "índice Valkey", positive: true }, jobsToday: { value: 0, trend: "índice", positive: true } },
+ resources: { scraper: "ok", postgres: "ok", valkey: "ok" }, services: [],
+ scrapers: [{ id: "go-scraper", name: "go-scraper", status: "Ocioso", lastRun: "Sem execução", catalogJobs: 2, active: false }],
+ generatedAt: "2026-10-10T20:00:00.000Z",
+};
+function wrapper({ children }: { children: ReactNode }) { return {children} ; }
+function useAll() {
+ const dashboard = useDashboard();
+ const scrapers = useScrapers();
+ const observability = useOperationalSnapshot(session.role !== "support", 10_000, `${session.id}:${session.role}`);
+ return { dashboard, scrapers, observability };
+}
+const flush = () => act(async () => { await Promise.resolve(); });
+beforeEach(() => {
+ vi.useFakeTimers(); vi.resetAllMocks();
+ session.id = `integration-${++testSession}`; session.role = "admin";
+ vi.mocked(dashboardService.getOverview).mockResolvedValue(overview as Awaited>);
+ vi.mocked(scrapersApi.list).mockResolvedValue({ scrapers: [{ name: "go-scraper", status: "idle", running: false, lastRunAt: null, jobsCollected: 2 }] });
+ vi.mocked(scrapersApi.jobsCount).mockResolvedValue({ total: 2 });
+ vi.mocked(scrapersApi.jobs).mockResolvedValue({ total: 0, jobs: [] });
+ vi.mocked(operationalSnapshotService.getSnapshot).mockResolvedValue(operationalFixture);
+});
+afterEach(() => vi.useRealTimers());
+
+describe("shared Processor state in all three consumers", () => {
+ it("uses one snapshot request and timer with partial execution, preserving catalog versus index", async () => {
+ const p = operationalFixture.processor!;
+ vi.mocked(operationalSnapshotService.getSnapshot).mockResolvedValue({ ...operationalFixture, status: "partial", processor: { ...p, status: "partial", execution: { ...p.execution, status: "canceling", stage: "indexing" } } });
+ const { result } = renderHook(useAll, { wrapper });
+ await flush();
+ expect(operationalSnapshotService.getSnapshot).toHaveBeenCalledTimes(1);
+ expect(result.current.dashboard.scrapers[0].status).toBe("Cancelando");
+ expect(result.current.scrapers.scrapers[0].status).toBe("Cancelando");
+ expect(result.current.dashboard.scrapers[0].runDisabled).toBe(true);
+ expect(result.current.scrapers.scrapers[0].executionDetail).toContain("Indexação");
+ expect(result.current.dashboard.operationalMessage).toContain("parcial");
+ expect(result.current.dashboard.stats?.totalJobs.value).toBe(100);
+ expect(result.current.scrapers.overview.catalogJobs).toBe(2);
+ expect(result.current.scrapers.overview.loadedJobs).toBe(0);
+ expect(result.current.observability.snapshot).toBe(result.current.dashboard.operational.snapshot);
+ await act(async () => { await vi.advanceTimersByTimeAsync(10_000); });
+ expect(operationalSnapshotService.getSnapshot).toHaveBeenCalledTimes(2);
+ });
+ it("preserves independent data when the Processor becomes unavailable and recovers", async () => {
+ const { result } = renderHook(useAll, { wrapper }); await flush();
+ vi.mocked(operationalSnapshotService.getSnapshot).mockResolvedValueOnce({ ...operationalFixture, status: "partial", processor: null, availability: { scraper: "down" } });
+ await act(async () => { await result.current.dashboard.refresh(); });
+ expect(result.current.dashboard.operational.stale).toBe(true);
+ expect(result.current.scrapers.operationalMessage).toContain("desatualizado");
+ expect(result.current.scrapers.scrapers[0].runDisabled).toBe(true);
+ expect(result.current.dashboard.stats?.totalJobs.value).toBe(100);
+ expect(result.current.scrapers.overview.catalogJobs).toBe(2);
+ await act(async () => { await result.current.scrapers.refresh(); });
+ expect(result.current.dashboard.operational.stale).toBe(false);
+ });
+ it("shares 403 and stops snapshot polling, keeping allowed data", async () => {
+ vi.mocked(operationalSnapshotService.getSnapshot).mockRejectedValueOnce(new ApiError(403, {}));
+ const { result } = renderHook(useAll, { wrapper }); await flush();
+ expect(result.current.scrapers.scrapers[0].status).toBe("N/D");
+ expect(result.current.dashboard.scrapers[0].lastRun).toBe("N/D");
+ expect(result.current.dashboard.stats?.totalUsers.value).toBe(2);
+ expect(result.current.scrapers.overview.catalogJobs).toBe(2);
+ await act(async () => { await vi.advanceTimersByTimeAsync(30_000); await result.current.scrapers.refresh(); });
+ expect(operationalSnapshotService.getSnapshot).toHaveBeenCalledTimes(1);
+ });
+ it("uses the permitted scheduler fallback for support without requesting the snapshot", async () => {
+ session.role = "support";
+ const { result } = renderHook(useAll, { wrapper }); await flush();
+ expect(operationalSnapshotService.getSnapshot).not.toHaveBeenCalled();
+ expect(result.current.scrapers.scrapers[0].status).toBe("Ocioso");
+ expect(result.current.dashboard.scrapers[0].runDisabled).toBe(true);
+ expect(result.current.scrapers.operationalMessage).toContain("Scheduler");
+ });
+ it("separates zero, missing count and unavailable sample, with independent errors", async () => {
+ vi.mocked(scrapersApi.jobsCount).mockRejectedValueOnce(new Error("count down"));
+ vi.mocked(scrapersApi.jobs).mockRejectedValueOnce(new Error("jobs down"));
+ const { result } = renderHook(useAll, { wrapper }); await flush();
+ expect(result.current.scrapers.overview.catalogJobs).toBeNull();
+ expect(result.current.scrapers.overview.loadedJobs).toBeNull();
+ expect(result.current.scrapers.scrapers).toHaveLength(1);
+ expect(result.current.dashboard.stats?.jobsToday.value).toBe(0);
+ vi.mocked(scrapersApi.jobsCount).mockResolvedValueOnce({ total: 0 });
+ await act(async () => { await result.current.scrapers.refresh(); });
+ expect(result.current.scrapers.overview.catalogJobs).toBe(0);
+ expect(result.current.scrapers.overview.loadedJobs).toBe(0);
+ });
+ it("does not share state between sessions", async () => {
+ const { result, rerender } = renderHook(useAll, { wrapper }); await flush();
+ const previous = result.current.observability.snapshot;
+ session.id = "other-session";
+ vi.mocked(operationalSnapshotService.getSnapshot).mockRejectedValueOnce(new ApiError(403, {}));
+ rerender(); await flush();
+ expect(result.current.observability.snapshot).toBeNull();
+ expect(previous).not.toBeNull();
+ expect(result.current.dashboard.scrapers[0].status).toBe("N/D");
+ });
+});
diff --git a/front_admin/tests/modules/scrapers/ScrapersPage.test.tsx b/front_admin/tests/modules/scrapers/ScrapersPage.test.tsx
index d189bf9f..95193999 100644
--- a/front_admin/tests/modules/scrapers/ScrapersPage.test.tsx
+++ b/front_admin/tests/modules/scrapers/ScrapersPage.test.tsx
@@ -1,9 +1,13 @@
-import { fireEvent, screen } from "@testing-library/react";
+import { fireEvent, screen, within } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { useAuth } from "../../../src/modules/auth/hooks/useAuth";
import { useScrapers } from "../../../src/modules/scrapers/hooks/useScrapers";
import { ScrapersPage } from "../../../src/modules/scrapers/ScrapersPage";
+import { OperationalSnapshotSchema } from "../../../src/modules/observability/schemas/operationalSnapshot.schema";
+import { operationalFixture } from "../../fixtures/operationalSnapshot";
import { renderWithProviders } from "../../test-utils";
+import { buildCatalogInventory } from "../../../src/modules/scrapers/services/catalogInventory";
+import { ScraperJobsCountResponseSchema } from "../../../src/lib/api/types";
vi.mock("../../../src/modules/scrapers/hooks/useScrapers", () => ({
useScrapers: vi.fn(),
@@ -20,9 +24,9 @@ const scraperState = {
name: "Lever",
status: "Ocioso",
lastRun: "Hoje",
- indexedJobs: 1500,
+ catalogJobs: 1500,
active: false,
- sla: "Operacional",
+ availability: "Operacional",
},
],
adapterStats: [
@@ -30,7 +34,6 @@ const scraperState = {
name: "Lever",
jobs: 4,
sources: 2,
- configuredSources: 34,
keywords: 3,
sampleTitle: "Frontend Engineer",
},
@@ -48,11 +51,11 @@ const scraperState = {
},
],
overview: {
- indexedJobs: 12345,
+ catalogJobs: 12345,
loadedJobs: 8,
adaptersCount: 1,
sourcesCount: 2,
- configuredSourcesCount: 70,
+ configuredSourcesCount: null,
keywordsCount: 3,
runningCount: 0,
totalScrapers: 1,
@@ -96,15 +99,160 @@ describe("ScrapersPage", () => {
});
});
+ it("uses global inventory even when the preview is unavailable", () => {
+ vi.mocked(useScrapers).mockReturnValue({ ...scraperState, sampleUnavailable:true, adapterStats:[], jobPreviews:[], catalogInventory:[{id:"themuse",name:"The Muse",provider:"themuse",configured:true,catalogJobs:0,observed:false},{id:"linkedin",name:"LinkedIn",provider:"linkedin",configured:false,catalogJobs:9000,observed:true}], inventoryAvailable:true, configurationAvailable:true });
+ renderWithProviders( );
+ expect(screen.getByText("The Muse")).toBeInTheDocument();
+ expect(screen.getByText("9.000")).toBeInTheDocument();
+ expect(screen.getAllByText("Configurado: Sim").length).toBeGreaterThan(0);
+ expect(screen.getByText("Amostra indisponível; quantidade de vagas N/D.")).toBeInTheDocument();
+ });
+ it.each([true, false])("renders every configured provider from the global contract, with preview available: %s", (previewAvailable) => {
+ const count = ScraperJobsCountResponseSchema.parse({
+ total: 501,
+ configuredProviders: ["adzuna", "greenhouse", "gupy", "inhire", "jooble", "lever", "linkedin", "themuse"],
+ sources: [
+ { source: "Green House", provider: "greenhouse", total: 300 },
+ { source: "LinkedIn", provider: "linkedin", total: 200 },
+ { source: null, provider: "unknown", total: 1 },
+ ],
+ });
+ const inventory = buildCatalogInventory(count);
+ vi.mocked(useScrapers).mockReturnValue({
+ ...scraperState,
+ overview: { ...scraperState.overview, catalogJobs: count.total, loadedJobs: previewAvailable ? 200 : 0 },
+ catalogInventory: inventory,
+ inventoryAvailable: true,
+ configurationAvailable: true,
+ jobPreviews: previewAvailable ? scraperState.jobPreviews : [],
+ sampleUnavailable: !previewAvailable,
+ });
+ renderWithProviders( );
+
+ expect(screen.getAllByRole("article")).toHaveLength(9);
+ for (const row of inventory) {
+ const card = within(screen.getByRole("article", { name: `Fonte: ${row.name}` }));
+ expect(card.getByText(String(row.catalogJobs))).toBeInTheDocument();
+ expect(card.getByText("Vagas no catálogo")).toBeInTheDocument();
+ expect(card.getByText(`Configurado: ${row.configured === null ? "N/D" : "Sim"}`)).toBeInTheDocument();
+ }
+ const renderedTotal = screen.getAllByRole("article").reduce((total, card) => {
+ const label = within(card).getByText("Vagas no catálogo");
+ return total + Number(label.previousElementSibling?.textContent);
+ }, 0);
+ expect(renderedTotal).toBe(count.total);
+ expect(within(screen.getByRole("article", { name: "Fonte: The Muse" })).getByText("0")).toBeInTheDocument();
+ expect(within(screen.getByRole("article", { name: "Fonte: Sem fonte principal" })).getByText("1")).toBeInTheDocument();
+ });
+
+ it("renders an unavailable count as N/D even for a configured provider", () => {
+ vi.mocked(useScrapers).mockReturnValue({
+ ...scraperState,
+ catalogInventory: buildCatalogInventory({ total: 501, sources: null, configuredProviders: ["themuse"] }),
+ inventoryAvailable: false,
+ configurationAvailable: true,
+ });
+ renderWithProviders( );
+ const card = within(screen.getByRole("article", { name: "Fonte: The Muse" }));
+ expect(card.getByText("N/D")).toBeInTheDocument();
+ expect(card.queryByText("0")).not.toBeInTheDocument();
+ expect(card.getByText("Configurado: Sim")).toBeInTheDocument();
+ });
+
+ it("renders one readable catalog card for equivalent provenance combinations", () => {
+ const catalogInventory = buildCatalogInventory({ total: 42, configuredProviders: ["adzuna", "gupy"], sources: [
+ { source: "Adzuna, Gupy", provider: "unknown", total: 17 },
+ { source: "Gupy, Adzuna, Gupy", provider: "unknown", total: 23 },
+ { source: "Adzuna", provider: "adzuna", total: 2 },
+ ] });
+ vi.mocked(useScrapers).mockReturnValue({ ...scraperState, catalogInventory, inventoryAvailable: true, configurationAvailable: true });
+ renderWithProviders( );
+ const card = screen.getByRole("article", { name: "Fonte: Adzuna + Gupy" });
+ expect(within(card).getByText("40")).toBeInTheDocument();
+ expect(within(card).getByTitle("Adzuna + Gupy")).toBeInTheDocument();
+ expect(within(card).getByText("Observado no catálogo: Sim")).toBeInTheDocument();
+ expect(screen.getAllByRole("article")).toHaveLength(3);
+ expect(within(screen.getByRole("article", { name: "Fonte: Gupy" })).getByText("0")).toBeInTheDocument();
+ });
+ it("shows unknown counts instead of replacing them with sample counts",()=>{
+ vi.mocked(useScrapers).mockReturnValue({...scraperState,catalogInventory:[{id:"lever",name:"Lever",provider:"lever",configured:true,catalogJobs:null,observed:null}],inventoryAvailable:false,configurationAvailable:true});
+ renderWithProviders( );
+ expect(screen.getByText("Observado no catálogo: N/D")).toBeInTheDocument();
+ expect(screen.getByText("Distribuição global N/D; não inferida da prévia.")).toBeInTheDocument();
+ });
+
+ it("keeps catalog counts prominent while operational details start collapsed", () => {
+ const p = operationalFixture.processor!;
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...p, providers: [{ id: "gupy", configuredConcurrency: 1, active: 0, waiting: 0, tasksTotal: 9, tasksCompleted: 8, tasksFailed: 1, tasksCanceled: 0, jobsCollected: 321, lastTaskStatus: "failed", lastTaskFinishedAt: null, lastTaskDurationSeconds: 0, lastErrorType: "network" }] } });
+ vi.mocked(useScrapers).mockReturnValue({ ...scraperState, catalogInventory: buildCatalogInventory({ total: 72, configuredProviders: ["gupy"], sources: [{ source: "Gupy", provider: "gupy", total: 72 }] }), inventoryAvailable: true, configurationAvailable: true, canReadOperational: true, operational: { snapshot, stale: false, loading: false, forbidden: false, error: null, refresh: vi.fn() } });
+ renderWithProviders( );
+ const card = within(screen.getByRole("article", { name: "Fonte: Gupy" }));
+ expect(card.getByText("Gupy")).toBeVisible();
+ expect(card.getByText("72")).toBeVisible();
+ expect(card.getByText("Vagas no catálogo")).toBeVisible();
+ const configured = card.getByText("Configurado: Sim");
+ const observed = card.getByText("Observado no catálogo: Sim");
+ const status = card.getByText("Última tarefa: failed");
+ const run = card.getByText("Run: 8/9 tarefas encerradas • 321 vagas coletadas");
+ for (const detail of [configured, observed, status, run]) expect(detail).not.toBeVisible();
+ fireEvent.click(card.getByText("Detalhes"));
+ for (const detail of [configured, observed, status, run]) expect(detail).toBeVisible();
+ expect(card.getByText("72")).toBeVisible();
+ fireEvent.click(card.getByText("Detalhes"));
+ expect(run).not.toBeVisible();
+ });
+
+ it("shows real providers separately from observed sample sources", () => {
+ const p = operationalFixture.processor!;
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...p, execution: { ...p.execution, runId: "provider-run" }, providers: [{ id: "gupy", configuredConcurrency: 2, active: 0, waiting: 1, tasksTotal: 3, tasksCompleted: 2, tasksFailed: 1, tasksCanceled: 0, jobsCollected: 0, lastTaskStatus: "failed", lastTaskFinishedAt: null, lastTaskDurationSeconds: 0, lastErrorType: "network" }] } });
+ vi.mocked(useScrapers).mockReturnValue({ ...scraperState, canReadOperational: true, operational: { snapshot, stale: false, loading: false, forbidden: false, error: null, refresh: vi.fn() } });
+ renderWithProviders( );
+ expect(screen.getByText("Providers desta execução")).toBeInTheDocument();
+ expect(screen.getByText(/Run ID: provider-run/)).toBeInTheDocument();
+ const table = screen.getByRole("table", { name: "Providers desta execução" });
+ const row = within(table).getByRole("row", { name: /gupy/ });
+ const cells = within(row).getAllByRole("cell");
+ expect(cells[0]).toHaveTextContent("2 / 3");
+ expect(within(cells[1]).getByText("0")).toBeInTheDocument();
+ expect(within(cells[2]).getByText("1")).toBeInTheDocument();
+ expect(cells[3]).toHaveTextContent("0 / 1");
+ expect(cells[4]).toHaveTextContent("failed");
+ fireEvent.click(within(row).getByText("Detalhes"));
+ expect(within(row).getByText("network")).toBeVisible();
+ expect(within(row).getByText("0s")).toBeVisible();
+ expect(within(row).getAllByText("N/D")).toHaveLength(1);
+ expect(table.compareDocumentPosition(screen.getByText("Fontes e providers do catálogo")) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
+ });
+
+ it("keeps every run provider and distinguishes zero from unavailable task details", () => {
+ const provider = { configuredConcurrency: 1, active: 0, waiting: 0, tasksTotal: 0, tasksCompleted: 0, tasksFailed: 0, tasksCanceled: 0, jobsCollected: 0, lastTaskStatus: null, lastTaskFinishedAt: null, lastTaskDurationSeconds: null, lastErrorType: null };
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...operationalFixture.processor!, providers: [{ ...provider, id: "gupy" }, { ...provider, id: "lever", jobsCollected: 1200, tasksTotal: 2, tasksCompleted: 2, lastTaskStatus: "success" }] } });
+ vi.mocked(useScrapers).mockReturnValue({ ...scraperState, canReadOperational: true, operational: { snapshot, stale: false, loading: false, forbidden: false, error: null, refresh: vi.fn() } });
+ renderWithProviders( );
+ const table = within(screen.getByRole("table", { name: "Providers desta execução" }));
+ expect(table.getAllByRole("row")).toHaveLength(3);
+ const gupy = within(table.getByRole("row", { name: /gupy/ }));
+ expect(within(gupy.getAllByRole("cell")[1]).getByText("0")).toBeInTheDocument();
+ expect(gupy.getAllByText("N/D")).toHaveLength(4);
+ expect(within(table.getByRole("row", { name: /lever/ })).getByText("1.200")).toBeInTheDocument();
+ });
+
+ it.each([null, []])("distinguishes unavailable and empty provider plan: %j", (providers) => {
+ const snapshot = OperationalSnapshotSchema.parse({ ...operationalFixture, processor: { ...operationalFixture.processor!, providers } });
+ vi.mocked(useScrapers).mockReturnValue({ ...scraperState, canReadOperational: true, operational: { snapshot, stale: false, loading: false, forbidden: false, error: null, refresh: vi.fn() } });
+ renderWithProviders( );
+ expect(screen.getByText(providers === null ? "Providers da execução: N/D." : "Plano conhecido sem providers.")).toBeInTheDocument();
+ });
+
it("renders scraper overview and delegates actions", () => {
renderWithProviders( );
- expect(screen.getByText("Operação dos scrapers")).toBeInTheDocument();
- expect(screen.getByText("Adapters Funcionais")).toBeInTheDocument();
- expect(screen.getAllByText("Frontend Engineer")).toHaveLength(2);
+ expect(screen.getByText("Operação do processamento de vagas")).toBeInTheDocument();
+ expect(screen.getByText("Fontes e providers do catálogo")).toBeInTheDocument();
+ expect(screen.getAllByText("Frontend Engineer")).toHaveLength(1);
fireEvent.click(screen.getByRole("button", { name: "Recarregar dados" }));
- fireEvent.click(screen.getByRole("button", { name: /limpar cache de vagas/i }));
+ fireEvent.click(screen.getByRole("button", { name: /limpar cache de buscas/i }));
fireEvent.click(screen.getByRole("button", { name: "Run" }));
fireEvent.click(screen.getByRole("button", { name: /limpar logs/i }));
@@ -137,7 +285,7 @@ describe("ScrapersPage", () => {
renderWithProviders( );
const clearCacheButton = screen.getByRole("button", {
- name: /limpar cache de vagas/i,
+ name: /limpar cache de buscas/i,
});
expect(clearCacheButton).toBeDisabled();
@@ -158,7 +306,7 @@ describe("ScrapersPage", () => {
renderWithProviders( );
- expect(screen.getByText("Carregando scrapers...")).toBeInTheDocument();
+ expect(screen.getByText("Carregando processamento de vagas...")).toBeInTheDocument();
expect(screen.getByText("falha")).toBeInTheDocument();
});
@@ -178,9 +326,9 @@ describe("ScrapersPage", () => {
renderWithProviders( );
- expect(screen.getByText(/último snapshot Sem atualização/)).toBeInTheDocument();
+ expect(screen.getByText(/última leitura do scheduler Sem atualização/)).toBeInTheDocument();
expect(
- screen.getByText("Nenhum adapter encontrado no payload de vagas."),
+ screen.getByText("Inventário global N/D."),
).toBeInTheDocument();
expect(
screen.getByText("Nenhuma vaga carregada do backend ainda."),
diff --git a/front_admin/tests/modules/scrapers/catalogInventory.test.ts b/front_admin/tests/modules/scrapers/catalogInventory.test.ts
new file mode 100644
index 00000000..5161f1dc
--- /dev/null
+++ b/front_admin/tests/modules/scrapers/catalogInventory.test.ts
@@ -0,0 +1,73 @@
+import {describe,it,expect} from "vitest";
+import {buildCatalogInventory} from "../../../src/modules/scrapers/services/catalogInventory";
+import {ScraperJobsCountResponseSchema} from "../../../src/lib/api/types";
+describe("global inventory independent of preview",()=>{
+ it("keeps configured zero and aggregates primary-source aliases exactly once",()=>{
+ const rows=buildCatalogInventory({total:205,configuredProviders:["greenhouse","themuse"],sources:[{source:"Green House",provider:"greenhouse",total:200},{source:"LinkedIn",provider:"linkedin",total:4},{source:null,provider:"unknown",total:1}]});
+ expect(rows.find(r=>r.id==="themuse")).toMatchObject({configured:true,catalogJobs:0,observed:false});
+ expect(rows.find(r=>r.id==="linkedin")).toMatchObject({configured:false,catalogJobs:4,observed:true});
+ expect(rows.find(r=>r.id==="source:null")).toMatchObject({catalogJobs:1,name:"Sem fonte principal"});
+ expect(rows.reduce((n,r)=>n+(r.catalogJobs??0),0)).toBe(205);
+ });
+ it("retains unknown literal source and merges known aliases",()=>{
+ const rows=buildCatalogInventory({total:7,configuredProviders:null,sources:[{source:"Green House",provider:"greenhouse",total:2},{source:"Greenhouse",provider:"greenhouse",total:3},{source:"Indeed",provider:"unknown",total:2}]});
+ expect(rows.find(r=>r.id==="greenhouse")).toMatchObject({catalogJobs:5,configured:null});
+ expect(rows.find(r=>r.name==="Indeed")).toMatchObject({catalogJobs:2,configured:null});
+ });
+ it("keeps a literal null source distinct from missing attribution",()=>{
+ const rows=buildCatalogInventory({total:2,configuredProviders:[],sources:[{source:null,provider:"unknown",total:1},{source:"null",provider:"unknown",total:1}]});expect(rows).toHaveLength(2);expect(rows.reduce((sum,row)=>sum+(row.catalogJobs??0),0)).toBe(2);
+ });
+ it("does not turn missing aggregation into zero",()=>{
+ expect(buildCatalogInventory({total:10,sources:null,configuredProviders:["gupy"]})).toEqual([expect.objectContaining({id:"gupy",catalogJobs:null,configured:true,observed:null})]);
+ expect(buildCatalogInventory({total:10})).toEqual([]);
+ expect(buildCatalogInventory(null)).toEqual([]);
+ });
+ it("distinguishes known empty catalog from unknown inventory",()=>{
+ expect(buildCatalogInventory({total:0,sources:[],configuredProviders:["gupy"]})[0].catalogJobs).toBe(0);
+ expect(ScraperJobsCountResponseSchema.parse({total:0}).sources).toBeUndefined();
+ expect(ScraperJobsCountResponseSchema.safeParse({total:4,sources:[{source:"Gupy",provider:"gupy",total:3}]}).success).toBe(false);
+ });
+});
+
+describe("normalized catalog provenance", () => {
+ it("consolidates order, repetition, whitespace and aliases without mixing combinations", () => {
+ const sources = [
+ { source: "Adzuna, Gupy", provider: "unknown" as const, total: 7 },
+ { source: " gupy , ADZUNA , ", provider: "unknown" as const, total: 11 },
+ { source: "Adzuna, Gupy, Adzuna", provider: "unknown" as const, total: 5 },
+ { source: "Adzuna, Jooble", provider: "unknown" as const, total: 13 },
+ { source: "Jooble, Adzuna, Jooble", provider: "unknown" as const, total: 17 },
+ { source: "Adzuna", provider: "adzuna" as const, total: 19 },
+ { source: "Jooble, Gupy, Adzuna", provider: "unknown" as const, total: 23 },
+ { source: "Adzuna, Jooble, Gupy, Gupy", provider: "unknown" as const, total: 29 },
+ { source: "Green House, greenHOUSE, Gupy", provider: "unknown" as const, total: 31 },
+ ];
+ const total = sources.reduce((sum, source) => sum + source.total, 0);
+ const rows = buildCatalogInventory(ScraperJobsCountResponseSchema.parse({ total, configuredProviders: ["adzuna", "themuse"], sources }));
+ expect(rows).toHaveLength(6);
+ expect(rows.find(row => row.name === "Adzuna + Gupy")).toMatchObject({ catalogJobs: 23, observed: true });
+ expect(rows.find(row => row.name === "Adzuna + Jooble")).toMatchObject({ catalogJobs: 30 });
+ expect(rows.find(row => row.name === "Adzuna + Gupy + Jooble")).toMatchObject({ catalogJobs: 52 });
+ expect(rows.find(row => row.id === "adzuna")).toMatchObject({ catalogJobs: 19, configured: true });
+ expect(rows.find(row => row.name === "Greenhouse + Gupy")).toMatchObject({ catalogJobs: 31 });
+ expect(rows.find(row => row.id === "themuse")).toMatchObject({ catalogJobs: 0, configured: true });
+ expect(rows.reduce((sum, row) => sum + (row.catalogJobs ?? 0), 0)).toBe(total);
+ expect(buildCatalogInventory({ total, configuredProviders: ["adzuna", "themuse"], sources: [...sources].reverse() })).toEqual(rows);
+ });
+
+ it("does not create empty providers or merge distinct unrecognized sources", () => {
+ const rows = buildCatalogInventory({ total: 47, configuredProviders: [], sources: [
+ { source: null, provider: "unknown", total: 3 },
+ { source: " , , ", provider: "unknown", total: 7 },
+ { source: " Gupy, , Gupy ", provider: "unknown", total: 11 },
+ { source: "Indeed, Adzuna", provider: "unknown", total: 13 },
+ { source: "Another source, Adzuna", provider: "unknown", total: 13 },
+ ] });
+ expect(rows).toHaveLength(4);
+ expect(rows.find(row => row.id === "source:null")).toMatchObject({ catalogJobs: 10, configured: null });
+ expect(rows.find(row => row.id === "gupy")).toMatchObject({ name: "Gupy", catalogJobs: 11 });
+ expect(rows.filter(row => row.name.includes(" + "))).toHaveLength(2);
+ expect(rows.every(row => row.name.trim().length > 0)).toBe(true);
+ expect(rows.reduce((sum, row) => sum + (row.catalogJobs ?? 0), 0)).toBe(47);
+ });
+});
diff --git a/front_admin/tests/modules/scrapers/components/ScraperGrid.test.tsx b/front_admin/tests/modules/scrapers/components/ScraperGrid.test.tsx
index 852c4597..044a70bb 100644
--- a/front_admin/tests/modules/scrapers/components/ScraperGrid.test.tsx
+++ b/front_admin/tests/modules/scrapers/components/ScraperGrid.test.tsx
@@ -12,8 +12,8 @@ describe("ScraperGrid", () => {
onToggle={onToggle}
/>,
);
- expect(screen.getByText("Nenhum scraper retornado pelo backend.")).toBeInTheDocument();
- expect(screen.getByText("Rode cada scraper pelo card")).toBeInTheDocument();
+ expect(screen.getByText("Nenhum processamento retornado pelo backend.")).toBeInTheDocument();
+ expect(screen.getByText("Inicie o processamento pelo card")).toBeInTheDocument();
rerender(
{
name: "Ativo",
status: "Executando",
lastRun: "Agora",
- indexedJobs: 1000,
+ catalogJobs: 1000,
active: true,
- sla: "Operacional",
+ availability: "Operacional",
},
{
id: "b",
name: "Inativo",
status: "Ocioso",
lastRun: "Nunca",
- indexedJobs: 0,
+ catalogJobs: 0,
active: false,
- sla: "Indisponivel",
+ availability: "Indisponivel",
},
]}
startingScraperId={null}
diff --git a/front_admin/tests/modules/scrapers/hooks/useScrapers.test.tsx b/front_admin/tests/modules/scrapers/hooks/useScrapers.test.tsx
index bd139a46..81f8c544 100644
--- a/front_admin/tests/modules/scrapers/hooks/useScrapers.test.tsx
+++ b/front_admin/tests/modules/scrapers/hooks/useScrapers.test.tsx
@@ -1,3 +1,4 @@
+import { operationalFixture } from "../../../fixtures/operationalSnapshot";
import { act, renderHook, screen, waitFor } from "@testing-library/react";
import type { ReactNode } from "react";
import { beforeEach, describe, expect, it, vi } from "vitest";
@@ -17,6 +18,13 @@ vi.mock("../../../../src/lib/api/scrapers.api", () => ({
},
}));
+vi.mock("../../../../src/modules/auth/hooks/useAuth", () => ({
+ useAuth: () => ({ isLoggedIn: { id: "test-admin", role: "super_admin" } }),
+}));
+vi.mock("../../../../src/modules/observability/hooks/useOperationalSnapshot", () => ({
+ useOperationalSnapshot: () => ({ snapshot: operationalFixture, stale: false, loading: false, forbidden: false, error: null, refresh: async () => {} }),
+}));
+
function wrapper({ children }: { children: ReactNode }) {
return {children} ;
}
@@ -70,6 +78,18 @@ const jobsPayload = {
};
describe("useScrapers", () => {
+ it("uses global counts even with a smaller unrelated preview", async () => {
+ vi.mocked(scrapersApi.jobsCount).mockResolvedValue({total:205,configuredProviders:["greenhouse","themuse"],sources:[{source:"Green House",provider:"greenhouse",total:200},{source:"LinkedIn",provider:"linkedin",total:4},{source:null,provider:"unknown",total:1}]});
+ const {result}=renderHook(()=>useScrapers(),{wrapper});
+ await waitFor(()=>expect(result.current.isLoading).toBe(false));
+ await waitFor(()=>expect(result.current.overview.loadedJobs).toBe(2));
+ expect(result.current.catalogInventory.find(row=>row.id==="greenhouse")?.catalogJobs).toBe(200);
+ expect(result.current.catalogInventory.find(row=>row.id==="themuse")?.catalogJobs).toBe(0);
+ expect(result.current.catalogInventory.some(row=>row.id==="lever")).toBe(false);
+ expect(result.current.overview.configuredSourcesCount).toBe(2);
+ expect(result.current.catalogInventory.reduce((sum,row)=>sum+(row.catalogJobs??0),0)).toBe(result.current.overview.catalogJobs);
+ });
+
beforeEach(() => {
vi.clearAllMocks();
vi.mocked(scrapersApi.list).mockResolvedValue(scraperList);
@@ -99,7 +119,7 @@ describe("useScrapers", () => {
expect(result.current.scrapers[0]).toMatchObject({
id: "Adzuna",
- indexedJobs: 2,
+ catalogJobs: 2,
status: "Ocioso",
});
expect(result.current.adapterStats[0].jobs).toBeGreaterThan(0);
@@ -112,7 +132,7 @@ describe("useScrapers", () => {
expect(result.current.logs[0].text).toBe("Execução individual iniciada");
act(() => result.current.pauseAll());
- expect(result.current.logs[0].text).toContain("Pausar scrapers");
+ expect(result.current.logs[0].text).toContain("Pausar processamento");
act(() => result.current.clearLogs());
expect(result.current.logs).toEqual([]);
@@ -139,7 +159,7 @@ describe("useScrapers", () => {
});
expect(scrapersApi.clearJobsCache).toHaveBeenCalledTimes(1);
- expect(result.current.logs[0].text).toContain("Cache de vagas limpo");
+ expect(result.current.logs[0].text).toContain("Cache legado: 4 chaves removidas");
});
it("handles list and trigger failures", async () => {
@@ -147,14 +167,14 @@ describe("useScrapers", () => {
const { result } = renderHook(() => useScrapers(), { wrapper });
await waitFor(() => expect(result.current.isLoading).toBe(false));
- expect(result.current.error).toBe("Nao foi possivel carregar os dados dos scrapers.");
+ expect(result.current.error).toBe("Nao foi possivel carregar os dados do processamento.");
vi.mocked(scrapersApi.trigger).mockRejectedValueOnce(new Error("fail"));
await act(async () => {
await result.current.startAll();
});
- expect(result.current.error).toBe("Nao foi possivel iniciar os scrapers.");
+ expect(result.current.error).toBe("Nao foi possivel iniciar o processamento.");
});
it("handles individual scraper trigger failures", async () => {
@@ -182,7 +202,7 @@ describe("useScrapers", () => {
});
expect(result.current.error).toBeNull();
- expect(result.current.logs[0].text).toContain("Scraper ja esta em execucao");
+ expect(result.current.logs[0].text).toContain("Processamento ja esta em execucao");
});
it("does not trigger an active scraper and reports its running state", async () => {
@@ -198,7 +218,7 @@ describe("useScrapers", () => {
expect(scrapersApi.triggerOne).not.toHaveBeenCalled();
expect(result.current.logs[0].text).toBe("Adzuna ja esta em execucao.");
- expect(await screen.findByText("Scraper já em execução")).toBeInTheDocument();
+ expect(await screen.findByText("Processamento já em execução")).toBeInTheDocument();
});
it("treats an individual 409 as recoverable and clears the starting state", async () => {
@@ -308,7 +328,7 @@ describe("useScrapers", () => {
});
expect(result.current.logs.map((entry) => entry.text)).toContain(
- "Execucao dos scrapers iniciada.",
+ "Execucao do processamento iniciada.",
);
expect(result.current.logs.map((entry) => entry.text)).toContain(
"Adzuna iniciado.",
@@ -328,6 +348,21 @@ describe("useScrapers", () => {
expect(result.current.error).toBe("Nao foi possivel limpar o cache de vagas.");
});
+ it("invalidates versioned search cache without clearing catalog or previews while refreshing", async () => {
+ const { result } = renderHook(() => useScrapers(), { wrapper });
+ await waitFor(() => expect(result.current.overview.loadedJobs).toBe(2));
+ vi.mocked(scrapersApi.clearJobsCache).mockResolvedValueOnce({ ok: true, deleted: 0, patterns: ["jobs:search:generation"] });
+ let resolve!: (value: typeof scraperList) => void;
+ vi.mocked(scrapersApi.list).mockReturnValueOnce(new Promise((r) => { resolve = r; }));
+ let clearing!: Promise;
+ await act(async () => { clearing = result.current.clearJobsCache(); await Promise.resolve(); });
+ expect(result.current.overview.catalogJobs).toBe(2);
+ expect(result.current.jobPreviews).toHaveLength(2);
+ expect(result.current.logs[0].text).toBe("Cache de buscas invalidado. Catálogo e índice ativo preservados.");
+ await act(async () => { resolve(scraperList); await clearing; });
+ expect(result.current.isClearingJobsCache).toBe(false);
+ });
+
it("logs running state changes and job loading failures", async () => {
vi.mocked(scrapersApi.jobs).mockRejectedValueOnce(new Error("jobs fail"));
const { result } = renderHook(() => useScrapers(), { wrapper });
@@ -364,7 +399,7 @@ describe("useScrapers", () => {
});
expect(result.current.logs.map((entry) => entry.text)).toContain(
- "Scheduler reportou scraper ocioso.",
+ "Scheduler reportou processamento ocioso.",
);
});
});
diff --git a/front_admin/tests/modules/scrapers/schemas/scraper.schema.test.ts b/front_admin/tests/modules/scrapers/schemas/scraper.schema.test.ts
index 2d8ac184..80e19c2e 100644
--- a/front_admin/tests/modules/scrapers/schemas/scraper.schema.test.ts
+++ b/front_admin/tests/modules/scrapers/schemas/scraper.schema.test.ts
@@ -15,9 +15,9 @@ describe("scraper schemas", () => {
name: "Lever",
status: "Ocioso",
lastRun: "Sem execucao",
- indexedJobs: 20,
+ catalogJobs: 20,
active: false,
- sla: "Operacional",
+ availability: "Operacional",
});
expect(
@@ -34,7 +34,6 @@ describe("scraper schemas", () => {
name: "Adzuna",
jobs: 1,
sources: 1,
- configuredSources: 1,
keywords: 1,
sampleTitle: "Frontend",
}).sampleTitle,
@@ -54,7 +53,7 @@ describe("scraper schemas", () => {
expect(() =>
ScraperOverviewSchema.parse({
- indexedJobs: -1,
+ catalogJobs: -1,
loadedJobs: 1,
adaptersCount: 1,
sourcesCount: 1,
diff --git a/frontend/package.json b/frontend/package.json
index 6dd6a3bf..1f5df010 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -13,45 +13,46 @@
"test:watch": "vitest --watch"
},
"dependencies": {
- "@fontsource-variable/geist": "^5.2.9",
- "@lottiefiles/dotlottie-react": "^0.19.4",
+ "@fontsource-variable/geist": "^5.3.0",
+ "@lottiefiles/dotlottie-react": "^0.20.0",
"@unpic/react": "^1.0.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"framer-motion": "^12.40.0",
- "lottie-react": "^2.4.1",
- "lucide-react": "^0.577.0",
+ "lottie-react": "^3.1.2",
+ "lucide-react": "^1.52.0",
"motion": "^12.40.0",
- "radix-ui": "^1.4.3",
- "react": "^19.2.7",
- "react-dom": "^19.2.7",
+ "radix-ui": "^1.7.0",
+ "react": "^19.3.0",
+ "react-dom": "^19.3.0",
"react-icons": "^5.6.0",
- "react-router-dom": "^7.17.0",
- "rolldown": "^1.1.0",
- "shadcn": "^4.10.0",
+ "react-router-dom": "^7.18.4",
+ "rolldown": "^1.2.13",
+ "shadcn": "^4.21.4",
"swiper": "^12.2.0",
- "tailwind-merge": "^3.6.0",
+ "tailwind-merge": "^3.7.0",
"tw-animate-css": "^1.4.0",
- "zod": "^4.4.3"
+ "zod": "^4.6.5"
},
"devDependencies": {
"@eslint/js": "^9.39.4",
- "@testing-library/jest-dom": "^6.9.1",
- "@testing-library/react": "^16.3.2",
- "@types/react": "^19.2.16",
- "@types/react-dom": "^19.2.3",
- "@vitejs/plugin-react": "^6.0.2",
- "@vitest/coverage-v8": "^4.1.8",
+ "@testing-library/jest-dom": "^7.0.1",
+ "@testing-library/react": "^16.3.3",
+ "@types/react": "^19.3.0",
+ "@types/react-dom": "^19.3.0",
+ "@vitejs/plugin-react": "^6.1.2",
+ "@vitest/coverage-v8": "5.0.3",
"autoprefixer": "^10.5.0",
- "eslint": "^9.39.4",
+ "eslint": "^10.12.0",
"eslint-plugin-react-hooks": "^7.1.1",
- "eslint-plugin-react-refresh": "^0.5.2",
- "globals": "^17.6.0",
+ "eslint-plugin-react-refresh": "^0.5.7",
+ "globals": "^17.13.0",
"jsdom": "^25.0.1",
"postcss": "^8.5.15",
"tailwindcss": "^3.4.19",
- "typescript": "^5.9.3",
+ "typescript": "~5.9.3",
"typescript-eslint": "^8.60.1",
- "vite": "^8.0.16"
+ "vite": "^8.0.16",
+ "vitest": "5.0.3"
}
}
diff --git a/frontend/src/domains/auth/presentation/components/AuthVisualPanel.tsx b/frontend/src/domains/auth/presentation/components/AuthVisualPanel.tsx
index 0023d736..be0bd338 100644
--- a/frontend/src/domains/auth/presentation/components/AuthVisualPanel.tsx
+++ b/frontend/src/domains/auth/presentation/components/AuthVisualPanel.tsx
@@ -1,5 +1,6 @@
import { Image } from "@unpic/react";
-import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";
+import { Bell, Search, TrendingUp } from "lucide-react";
+import { FaInstagram as Instagram, FaLinkedin as Linkedin } from "react-icons/fa";
export default function LeftSide() {
return (
diff --git a/frontend/src/domains/marketing/presentation/components/Footer.tsx b/frontend/src/domains/marketing/presentation/components/Footer.tsx
index 127af8f8..68edc025 100644
--- a/frontend/src/domains/marketing/presentation/components/Footer.tsx
+++ b/frontend/src/domains/marketing/presentation/components/Footer.tsx
@@ -1,4 +1,4 @@
-import { Github } from "lucide-react";
+import { FaGithub as Github } from "react-icons/fa";
import LogoWhite from "@/shared/assets/logo-painel-vagas.svg";
import LogoBlack from "@/shared/assets/black.svg";
import { Link } from "react-router-dom";
diff --git a/frontend/src/domains/marketing/presentation/components/TeamSection.tsx b/frontend/src/domains/marketing/presentation/components/TeamSection.tsx
index a1c0cdf5..fc345525 100644
--- a/frontend/src/domains/marketing/presentation/components/TeamSection.tsx
+++ b/frontend/src/domains/marketing/presentation/components/TeamSection.tsx
@@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
import { Autoplay, Pagination } from "swiper/modules";
import { Swiper, SwiperSlide } from "swiper/react";
-import { Github } from "lucide-react";
+import { FaGithub as Github } from "react-icons/fa";
import "swiper/css";
import "swiper/css/pagination";
diff --git a/package-lock.json b/package-lock.json
index b6d149cf..80642a48 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,42 +13,44 @@
"front_admin"
],
"dependencies": {
- "@vitest/coverage-v8": "4.1.8",
- "axios": "^1.17.0",
+ "@vitest/coverage-v8": "5.0.3",
+ "axios": "^1.20.0",
"cheerio": "^1.2.0",
"cors": "^2.8.6",
"dotenv": "^17.4.2",
- "drizzle-orm": "^0.45.2",
+ "drizzle-orm": "^0.45.4",
"express": "^5.2.1",
- "openid-client": "^6.8.4",
- "pdfkit": "^0.18.0",
- "pg": "^8.21.0",
- "pino": "^10.3.1",
- "react-phone-number-input": "^3.4.17",
+ "openid-client": "^6.8.8",
+ "pdfkit": "^0.20.2",
+ "pg": "^8.23.1",
+ "pino": "^10.4.0",
+ "react-phone-number-input": "^3.4.18",
"swagger-jsdoc": "^6.3.0",
"swagger-ui-express": "^5.0.1",
- "tar": "^7.5.16",
+ "tar": "^7.5.22",
"xlsx": "^0.18.5"
},
"devDependencies": {
- "@commitlint/cli": "^21.0.2",
+ "@commitlint/cli": "^21.2.3",
"@commitlint/config-conventional": "^21.0.2",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
- "@types/node": "^25.9.5",
+ "@types/node": "^26.6.4",
"@types/pdfkit": "^0.17.6",
- "@types/pg": "^8.20.0",
+ "@types/pg": "^8.23.1",
"@types/pino": "^7.0.5",
"@types/swagger-jsdoc": "^6.0.4",
"@types/swagger-ui-express": "^4.1.8",
+ "@vitest/coverage-v8": "5.0.3",
"concurrently": "^9.2.1",
- "drizzle-kit": "^0.18.1",
+ "drizzle-kit": "^0.31.11",
"electron": "^42.3.3",
"electron-builder": "^26.15.0",
"husky": "^9.1.7",
"lint-staged": "^17.0.7",
"tsx": "^4.23.1",
- "typescript": "^5.9.3"
+ "typescript": "~5.9.3",
+ "vitest": "5.0.3"
}
},
"backend": {
@@ -56,265 +58,127 @@
"license": "ISC",
"dependencies": {
"@react-email/render": "^2.1.0",
- "argon2": "^0.44.0",
- "axios": "^1.17.0",
- "bullmq": "^5.81.2",
+ "argon2": "^0.45.1",
+ "axios": "^1.20.0",
+ "bullmq": "^6.3.11",
"cheerio": "^1.2.0",
"cors": "^2.8.6",
"dotenv": "^17.4.2",
- "drizzle-orm": "^0.45.2",
+ "drizzle-orm": "^0.45.4",
"express": "^5.2.1",
"ioredis": "^5.11.1",
"iron-session": "^8.0.4",
- "pdfkit": "^0.18.0",
+ "pdfkit": "^0.20.2",
"prom-client": "^15.1.3",
"react": "^19.2.8",
"react-dom": "^19.2.8",
- "redis": "^5.12.1",
+ "redis": "^6.3.0",
"resend": "^6.18.0",
"swagger-jsdoc": "^6.3.0",
"swagger-ui-express": "^5.0.1",
"xlsx": "^0.18.5",
- "zod": "^4.4.3"
+ "zod": "^4.6.5"
},
"devDependencies": {
- "@types/node": "^25.9.1",
+ "@types/node": "^26.6.4",
"@types/pg": "^8.20.0",
"@types/react": "^19.2.17",
"@types/supertest": "^7.2.0",
- "@vitest/coverage-v8": "^4.1.8",
+ "@vitest/coverage-v8": "5.0.3",
"drizzle-kit": "^0.31.10",
"supertest": "^7.2.2",
"tsx": "^4.22.4",
- "typescript": "^6.0.3",
- "vitest": "^4.1.8"
+ "typescript": "~5.9.3",
+ "vitest": "5.0.3"
},
"engines": {
"node": ">=22.0.0"
}
},
- "backend/node_modules/@esbuild/android-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
- "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "backend/node_modules/@esbuild/linux-loong64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
- "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "backend/node_modules/@esbuild/win32-x64": {
- "version": "0.25.12",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "backend/node_modules/drizzle-kit": {
- "version": "0.31.10",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@drizzle-team/brocli": "^0.10.2",
- "@esbuild-kit/esm-loader": "^2.5.5",
- "esbuild": "^0.25.4",
- "tsx": "^4.21.0"
- },
- "bin": {
- "drizzle-kit": "bin.cjs"
- }
- },
- "backend/node_modules/esbuild": {
- "version": "0.25.12",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.12",
- "@esbuild/android-arm": "0.25.12",
- "@esbuild/android-arm64": "0.25.12",
- "@esbuild/android-x64": "0.25.12",
- "@esbuild/darwin-arm64": "0.25.12",
- "@esbuild/darwin-x64": "0.25.12",
- "@esbuild/freebsd-arm64": "0.25.12",
- "@esbuild/freebsd-x64": "0.25.12",
- "@esbuild/linux-arm": "0.25.12",
- "@esbuild/linux-arm64": "0.25.12",
- "@esbuild/linux-ia32": "0.25.12",
- "@esbuild/linux-loong64": "0.25.12",
- "@esbuild/linux-mips64el": "0.25.12",
- "@esbuild/linux-ppc64": "0.25.12",
- "@esbuild/linux-riscv64": "0.25.12",
- "@esbuild/linux-s390x": "0.25.12",
- "@esbuild/linux-x64": "0.25.12",
- "@esbuild/netbsd-arm64": "0.25.12",
- "@esbuild/netbsd-x64": "0.25.12",
- "@esbuild/openbsd-arm64": "0.25.12",
- "@esbuild/openbsd-x64": "0.25.12",
- "@esbuild/openharmony-arm64": "0.25.12",
- "@esbuild/sunos-x64": "0.25.12",
- "@esbuild/win32-arm64": "0.25.12",
- "@esbuild/win32-ia32": "0.25.12",
- "@esbuild/win32-x64": "0.25.12"
- }
- },
- "backend/node_modules/typescript": {
- "version": "6.0.3",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
"front_admin": {
"version": "0.0.0",
"dependencies": {
"clsx": "^2.1.1",
- "lucide-react": "^1.23.0",
- "react": "^19.2.7",
- "react-dom": "^19.2.7",
- "tailwind-merge": "^3.6.0",
- "zod": "^4.4.3"
+ "lucide-react": "^1.53.0",
+ "react": "^19.3.0",
+ "react-dom": "^19.3.0",
+ "tailwind-merge": "^3.7.0",
+ "zod": "^4.6.5"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
- "@tailwindcss/vite": "^4.3.2",
- "@testing-library/jest-dom": "^6.9.1",
+ "@tailwindcss/vite": "^4.3.3",
+ "@testing-library/jest-dom": "^7.0.1",
"@testing-library/react": "^16.3.2",
- "@types/node": "^24.13.2",
+ "@types/node": "^26.6.4",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.3",
- "@vitest/coverage-v8": "^4.1.8",
+ "@vitest/coverage-v8": "5.0.3",
"autoprefixer": "^10.5.2",
- "eslint": "^10.6.0",
+ "eslint": "^10.12.0",
"eslint-plugin-react-hooks": "^7.1.1",
- "eslint-plugin-react-refresh": "^0.5.3",
- "globals": "^17.7.0",
+ "eslint-plugin-react-refresh": "^0.5.7",
+ "globals": "^17.13.0",
"jsdom": "^25.0.1",
"postcss": "^8.5.16",
"tailwindcss": "^4.3.2",
- "typescript": "~6.0.2",
+ "typescript": "~5.9.3",
"typescript-eslint": "^8.62.0",
"vite": "^8.1.1",
- "vitest": "^4.1.8"
- }
- },
- "front_admin/node_modules/@types/node": {
- "version": "24.13.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz",
- "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.18.0"
- }
- },
- "front_admin/node_modules/typescript": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
- "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
+ "vitest": "5.0.3"
}
},
"frontend": {
"version": "0.0.0",
"dependencies": {
- "@fontsource-variable/geist": "^5.2.9",
- "@lottiefiles/dotlottie-react": "^0.19.4",
+ "@fontsource-variable/geist": "^5.3.0",
+ "@lottiefiles/dotlottie-react": "^0.20.0",
"@unpic/react": "^1.0.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"framer-motion": "^12.40.0",
- "lottie-react": "^2.4.1",
- "lucide-react": "^0.577.0",
+ "lottie-react": "^3.1.2",
+ "lucide-react": "^1.52.0",
"motion": "^12.40.0",
- "radix-ui": "^1.4.3",
- "react": "^19.2.7",
- "react-dom": "^19.2.7",
+ "radix-ui": "^1.7.0",
+ "react": "^19.3.0",
+ "react-dom": "^19.3.0",
"react-icons": "^5.6.0",
- "react-router-dom": "^7.17.0",
- "rolldown": "^1.1.0",
- "shadcn": "^4.10.0",
+ "react-router-dom": "^7.18.4",
+ "rolldown": "^1.2.13",
+ "shadcn": "^4.21.4",
"swiper": "^12.2.0",
- "tailwind-merge": "^3.6.0",
+ "tailwind-merge": "^3.7.0",
"tw-animate-css": "^1.4.0",
- "zod": "^4.4.3"
+ "zod": "^4.6.5"
},
"devDependencies": {
"@eslint/js": "^9.39.4",
- "@testing-library/jest-dom": "^6.9.1",
- "@testing-library/react": "^16.3.2",
- "@types/react": "^19.2.16",
- "@types/react-dom": "^19.2.3",
- "@vitejs/plugin-react": "^6.0.2",
- "@vitest/coverage-v8": "^4.1.8",
+ "@testing-library/jest-dom": "^7.0.1",
+ "@testing-library/react": "^16.3.3",
+ "@types/react": "^19.3.0",
+ "@types/react-dom": "^19.3.0",
+ "@vitejs/plugin-react": "^6.1.2",
+ "@vitest/coverage-v8": "5.0.3",
"autoprefixer": "^10.5.0",
- "eslint": "^9.39.4",
+ "eslint": "^10.12.0",
"eslint-plugin-react-hooks": "^7.1.1",
- "eslint-plugin-react-refresh": "^0.5.2",
- "globals": "^17.6.0",
+ "eslint-plugin-react-refresh": "^0.5.7",
+ "globals": "^17.13.0",
"jsdom": "^25.0.1",
"postcss": "^8.5.15",
"tailwindcss": "^3.4.19",
- "typescript": "^5.9.3",
+ "typescript": "~5.9.3",
"typescript-eslint": "^8.60.1",
- "vite": "^8.0.16"
+ "vite": "^8.0.16",
+ "vitest": "5.0.3"
}
},
"frontend/node_modules/@eslint/js": {
- "version": "9.39.4",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz",
- "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==",
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
+ "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -324,73 +188,14 @@
"url": "https://eslint.org/donate"
}
},
- "frontend/node_modules/eslint": {
- "version": "9.39.4",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz",
- "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==",
+ "frontend/node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.8.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.2",
- "@eslint/config-helpers": "^0.4.2",
- "@eslint/core": "^0.17.0",
- "@eslint/eslintrc": "^3.3.5",
- "@eslint/js": "9.39.4",
- "@eslint/plugin-kit": "^0.4.1",
- "@humanfs/node": "^0.16.6",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.2",
- "@types/estree": "^1.0.6",
- "ajv": "^6.14.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.6",
- "debug": "^4.3.2",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.4.0",
- "eslint-visitor-keys": "^4.2.1",
- "espree": "^10.4.0",
- "esquery": "^1.5.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.5",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3"
- },
"bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- },
- "peerDependencies": {
- "jiti": "*"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- }
- }
- },
- "frontend/node_modules/lucide-react": {
- "version": "0.577.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.577.0.tgz",
- "integrity": "sha512-4LjoFv2eEPwYDPg/CUdBJQSDfPyzXCRrVW1X7jrx/trgxnxkHFjnVZINbzvzxjN70dxychOfg+FTYwBiS3pQ5A==",
- "license": "ISC",
- "peerDependencies": {
- "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ "jiti": "bin/jiti.js"
}
},
"frontend/node_modules/tailwindcss": {
@@ -439,9 +244,9 @@
"license": "MIT"
},
"node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.3.0.tgz",
+ "integrity": "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -499,47 +304,11 @@
"openapi-types": ">=7"
}
},
- "node_modules/@apidevtools/swagger-parser/node_modules/ajv": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
- "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@apidevtools/swagger-parser/node_modules/ajv-draft-04": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
- "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^8.5.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
- "node_modules/@apidevtools/swagger-parser/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
"node_modules/@asamuzakjp/css-color": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz",
"integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"@csstools/css-calc": "^2.1.3",
@@ -553,7 +322,7 @@
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "devOptional": true,
+ "dev": true,
"license": "ISC"
},
"node_modules/@babel/code-frame": {
@@ -570,6 +339,12 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/code-frame/node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
"node_modules/@babel/compat-data": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
@@ -619,13 +394,13 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.29.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz",
- "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
+ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.29.7",
- "@babel/types": "^7.29.7",
+ "@babel/parser": "^7.29.8",
+ "@babel/types": "^7.29.8",
"@jridgewell/gen-mapping": "^0.3.12",
"@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
@@ -662,6 +437,15 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -671,6 +455,12 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "license": "ISC"
+ },
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz",
@@ -832,25 +622,25 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.29.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
- "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
+ "version": "7.29.10",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz",
+ "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==",
"license": "MIT",
"dependencies": {
"@babel/template": "^7.29.7",
- "@babel/types": "^7.29.7"
+ "@babel/types": "^7.29.8"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.29.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
- "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+ "version": "7.29.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz",
+ "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.29.7"
+ "@babel/types": "^7.29.8"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -906,9 +696,9 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.29.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz",
- "integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==",
+ "version": "7.29.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.9.tgz",
+ "integrity": "sha512-FFwIwzU+7SCOuxxV4YtJql6T9981ZVTm+FHO5GhVsRqCTdy0WwrEZh3l42ARpXruJUDGOptdduHW6Zr7pNPLNg==",
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.29.7",
@@ -944,9 +734,9 @@
}
},
"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==",
+ "version": "7.29.10",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.10.tgz",
+ "integrity": "sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -968,17 +758,17 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.29.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz",
- "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==",
+ "version": "7.29.10",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz",
+ "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.29.7",
- "@babel/generator": "^7.29.7",
+ "@babel/generator": "^7.29.8",
"@babel/helper-globals": "^7.29.7",
- "@babel/parser": "^7.29.7",
+ "@babel/parser": "^7.29.9",
"@babel/template": "^7.29.7",
- "@babel/types": "^7.29.7",
+ "@babel/types": "^7.29.8",
"debug": "^4.3.1"
},
"engines": {
@@ -986,9 +776,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.29.7",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
- "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.29.7",
@@ -1002,94 +792,132 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz",
"integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
}
},
- "node_modules/@commitlint/cli": {
- "version": "21.2.1",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-21.2.1.tgz",
- "integrity": "sha512-blsZGe29hJ72VGEFVl72IVYX+1vsfINpjA9yWQA6i7OKD/McGEOXg08sKIRKjFk4JvzhV/9n0l3i6NooPLTNfg==",
+ "node_modules/@cacheable/memory": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz",
+ "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/config-conventional": "^21.2.0",
- "@commitlint/format": "^21.2.0",
- "@commitlint/lint": "^21.2.0",
- "@commitlint/load": "^21.2.0",
- "@commitlint/read": "^21.2.1",
- "@commitlint/types": "^21.2.0",
- "tinyexec": "^1.0.0",
- "yargs": "^18.0.0"
- },
- "bin": {
- "commitlint": "cli.js"
- },
- "engines": {
- "node": ">=22.12.0"
+ "@cacheable/utils": "^2.5.0",
+ "@keyv/bigmap": "^1.3.1",
+ "hookified": "^1.15.1",
+ "keyv": "^5.6.0"
}
},
- "node_modules/@commitlint/config-conventional": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-21.2.0.tgz",
- "integrity": "sha512-Qf8WRDVcyVd14if6VTWenebxFbKnVnbzPUJjlzjkyJGeHK2xCGd63Dr1XZzj0plXKQb9P0BfOxoc1HVeCo2BWQ==",
+ "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz",
+ "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^21.2.0",
- "conventional-changelog-conventionalcommits": "^10.0.0"
+ "hashery": "^1.4.0",
+ "hookified": "^1.15.0"
},
"engines": {
- "node": ">=22.12.0"
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "keyv": "^5.6.0"
}
},
- "node_modules/@commitlint/config-validator": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-21.2.0.tgz",
- "integrity": "sha512-t7AzNHAKeIdo/3NRGwzpufKHsKkPHmFs/56N2Fnsh0/r0rGtnQzTxk6vnFgjaGr4hdSQKNB50/KAhR9Yk4LJKA==",
+ "node_modules/@cacheable/memory/node_modules/keyv": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+ "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^21.2.0",
- "ajv": "^8.11.0"
+ "@keyv/serialize": "^1.1.1"
+ }
+ },
+ "node_modules/@cacheable/utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz",
+ "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hashery": "^1.5.1",
+ "keyv": "^5.6.0"
+ }
+ },
+ "node_modules/@cacheable/utils/node_modules/keyv": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+ "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@keyv/serialize": "^1.1.1"
+ }
+ },
+ "node_modules/@commitlint/cli": {
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-21.2.3.tgz",
+ "integrity": "sha512-5yOX6IRjcrIReCxpyAd04hgI/yhUMpVBJ/ouwFV0wk9yx5+fYRDWZWJ5h55Tbedgfol+5m2mU5nqzbB8g3v0vQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/config-conventional": "^21.2.3",
+ "@commitlint/format": "^21.2.3",
+ "@commitlint/lint": "^21.2.3",
+ "@commitlint/load": "^21.2.3",
+ "@commitlint/read": "^21.2.3",
+ "@commitlint/types": "^21.2.3",
+ "tinyexec": "^1.0.0",
+ "yargs": "^18.0.0"
+ },
+ "bin": {
+ "commitlint": "cli.js"
},
"engines": {
"node": ">=22.12.0"
}
},
- "node_modules/@commitlint/config-validator/node_modules/ajv": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
- "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "node_modules/@commitlint/config-conventional": {
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-21.2.3.tgz",
+ "integrity": "sha512-EP2n5DN2GwRWNVrLX0Jx3mpQlW5PfFi9HnD9OJ8hN/H0xFqpCFyHeGDhg+0P8/21iMMcdkcQgbNqmVklebqYsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
+ "@commitlint/types": "^21.2.3",
+ "conventional-changelog-conventionalcommits": "^10.0.0"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "engines": {
+ "node": ">=22.12.0"
}
},
- "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "node_modules/@commitlint/config-validator": {
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-21.2.3.tgz",
+ "integrity": "sha512-JQ13v0GafSM4fBYX8UowSy++07Was20auq0NcTdnzSEq6/05Cq5GBUMIfKkqjzyBwC9sJFmPpKWgLLhH7cygkw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/types": "^21.2.3",
+ "ajv": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ }
},
"node_modules/@commitlint/ensure": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-21.2.0.tgz",
- "integrity": "sha512-76IF9vDNS13lAzEEik9eKwzt8f9hYhWiwVXZ2AnyLCz5/f511FsEQ3pw1X3/zSQpdRLQU7i5qDMVKyXi1GWjSg==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-21.2.3.tgz",
+ "integrity": "sha512-gEjNKgRocbODI5/sMx2Qc9XOf2/zFTNV2aEK1QZ4gKDKxDC/VR7us3QtIX1C5d5xxHxx0I/tEbYbdSP1Am2LwA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^21.2.0",
+ "@commitlint/types": "^21.2.3",
"es-toolkit": "^1.46.0"
},
"engines": {
@@ -1107,13 +935,13 @@
}
},
"node_modules/@commitlint/format": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-21.2.0.tgz",
- "integrity": "sha512-c4q64xaav2U83t7k7RyzJerBZurPer7FxUOY0RL5L/6CZijZ7K+s6HIBGIghj0ey1P2+seRX0J9XQYtDued6tg==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-21.2.3.tgz",
+ "integrity": "sha512-KKwCjXYqA8r295uhLnulDXL9yekdXmj2yp2Q0XsBPhxQ2iPuvRE8F43j7g7yexo69wTdmUQmFz15jpderluzUQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^21.2.0",
+ "@commitlint/types": "^21.2.3",
"picocolors": "^1.1.1"
},
"engines": {
@@ -1121,13 +949,13 @@
}
},
"node_modules/@commitlint/is-ignored": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-21.2.0.tgz",
- "integrity": "sha512-4/eB0vBN7L88O/oC4ajAEqi7j2ZfNgxl/+11RfAV9YosejZgDXhY2C9VcHnHJhOzPLoSy5P3Mg/46kqeyJfXKw==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-21.2.3.tgz",
+ "integrity": "sha512-Ng4nRj/LBAOvc+GQu7bsFW4/fL89LvZ14OOC/ERLbUpnG6QBwWRzY/1oXGwPs3C8YHWjJObin4kLYo2YeEn70w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^21.2.0",
+ "@commitlint/types": "^21.2.3",
"semver": "^7.6.0"
},
"engines": {
@@ -1135,32 +963,32 @@
}
},
"node_modules/@commitlint/lint": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-21.2.0.tgz",
- "integrity": "sha512-ceO5dp9pLjEZ6y6qbq/uXWXDPykqqlTsyzoQ0NzecpisSJhK3kTy9qzQoPeJuWG/IMNdV1lO0RgmzqoAlSi1uw==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-21.2.3.tgz",
+ "integrity": "sha512-lUZcSuVLLEDkhge9ERk8Rp+FXQtrUhCK+h328BFnzKXrTuXGdqiYMEpTlNWdZaOrjyMhMJaz354ZaWEGJxcLeg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/is-ignored": "^21.2.0",
- "@commitlint/parse": "^21.2.0",
- "@commitlint/rules": "^21.2.0",
- "@commitlint/types": "^21.2.0"
+ "@commitlint/is-ignored": "^21.2.3",
+ "@commitlint/parse": "^21.2.3",
+ "@commitlint/rules": "^21.2.3",
+ "@commitlint/types": "^21.2.3"
},
"engines": {
"node": ">=22.12.0"
}
},
"node_modules/@commitlint/load": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-21.2.0.tgz",
- "integrity": "sha512-RjlzWQqruRwIenJEfZtq7kG97co97nKoHpflE5YnF61tDLXxHPrdWImgzw6VL6MlFyaOcVlk74eBV8ZQmc3oIA==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-21.2.3.tgz",
+ "integrity": "sha512-cDrL8lOo23Lk7knGzQdjbFcq7z2JgvjwV6PhbESVvEc+Fe21MeLjPKBJi8nKjg7j+jh79CVbVSUbZc104thXRw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/config-validator": "^21.2.0",
+ "@commitlint/config-validator": "^21.2.3",
"@commitlint/execute-rule": "^21.0.1",
- "@commitlint/resolve-extends": "^21.2.0",
- "@commitlint/types": "^21.2.0",
+ "@commitlint/resolve-extends": "^21.2.3",
+ "@commitlint/types": "^21.2.3",
"cosmiconfig": "^9.0.1",
"cosmiconfig-typescript-loader": "^6.1.0",
"es-toolkit": "^1.46.0",
@@ -1182,13 +1010,13 @@
}
},
"node_modules/@commitlint/parse": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-21.2.0.tgz",
- "integrity": "sha512-QHWxG4d0PLTF634/AdyZ0MQS+CLn5YOuJlCFhMMlSGKFxzYGUetkHBj18xgBD+6fVzUrA2lrCdi/vlS2f/oYXg==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-21.2.3.tgz",
+ "integrity": "sha512-Jt61QpF1xA88damCELe8I0FlDZPSpXNc8IhN7z5kZ0EcDYPjdZ+ZHPvsSXl69r2MIlLnNKeHhOn2cmVpziFE9w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^21.2.0",
+ "@commitlint/types": "^21.2.3",
"conventional-changelog-angular": "^9.0.0",
"conventional-commits-parser": "^7.0.0"
},
@@ -1197,14 +1025,14 @@
}
},
"node_modules/@commitlint/read": {
- "version": "21.2.1",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-21.2.1.tgz",
- "integrity": "sha512-hUW7EJQnNTL0vPOmVMNK4CrnrNBN0nN+JJHReFkdHO5y4iyHeEmTBwuC15OCqUTjxWo7idnH1LftfpWVIaPWIA==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-21.2.3.tgz",
+ "integrity": "sha512-szAepuLA1vTTr7fuudEg7jYyVHudf+FH+vptU91bhxE1WnE8TKrfTAi44HVllz8XpI8Pvp4GjR/iP5Nshgh+og==",
"dev": true,
"license": "MIT",
"dependencies": {
"@commitlint/top-level": "^21.2.0",
- "@commitlint/types": "^21.2.0",
+ "@commitlint/types": "^21.2.3",
"@conventional-changelog/git-client": "^3.0.0",
"tinyexec": "^1.0.0"
},
@@ -1213,14 +1041,14 @@
}
},
"node_modules/@commitlint/resolve-extends": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-21.2.0.tgz",
- "integrity": "sha512-4O/1j51+79Wth9s/MGxt/5gs0XYLDgNlYpltQfhAvLE0itusLKs9zruxbiNg1oOkmkb9L9L4USYGjEj7n87NxA==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-21.2.3.tgz",
+ "integrity": "sha512-bqJdmAtXgAQel+l02uIsF7rHgKgx1AGZdGBjam7uK4XW54ZAQtB6XAIUXezYprQiCcRMpBh4fHs5JodXK4mVZA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/config-validator": "^21.2.0",
- "@commitlint/types": "^21.2.0",
+ "@commitlint/config-validator": "^21.2.3",
+ "@commitlint/types": "^21.2.3",
"es-toolkit": "^1.46.0",
"global-directory": "^5.0.0",
"resolve-from": "^5.0.0"
@@ -1230,16 +1058,16 @@
}
},
"node_modules/@commitlint/rules": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-21.2.0.tgz",
- "integrity": "sha512-C2yXMNpiB8ETZKfx5JD8+ExgF8vTU1VQMKPSUUYwqKpw9oJWQBrlXBpdU038mj2WPjof7o9UzFpmTyBeGMZwZg==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-21.2.3.tgz",
+ "integrity": "sha512-5+YnI/LuTx3JDl9GjqfP2z9x96M8KKDrd+4jOel/T0L1BB3oAmBlSN8xppf63QsudiVEgR8C0gRoAMrPVrms6g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/ensure": "^21.2.0",
+ "@commitlint/ensure": "^21.2.3",
"@commitlint/message": "^21.2.0",
"@commitlint/to-lines": "^21.0.1",
- "@commitlint/types": "^21.2.0"
+ "@commitlint/types": "^21.2.3"
},
"engines": {
"node": ">=22.12.0"
@@ -1269,9 +1097,9 @@
}
},
"node_modules/@commitlint/types": {
- "version": "21.2.0",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-21.2.0.tgz",
- "integrity": "sha512-7zVFCDB2reMvJH5dmbKnOQPjZEvjdJTH8jc0U/PIPU1r3/+vf5pD1HlfitV2MWsWXrvu7u39iY1lyLUPOaN0Gw==",
+ "version": "21.2.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-21.2.3.tgz",
+ "integrity": "sha512-sGEA473TlCvhCGNoTBY9OXZVWdscIXdGt0dm8EpB+2MRfmt8LNh/X56P/T3nCtEB+eH5qGEa3odphSAoUxSfSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1283,22 +1111,22 @@
}
},
"node_modules/@conventional-changelog/git-client": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-3.1.0.tgz",
- "integrity": "sha512-Tqa/gHco2WJWa740NRjOrfKVvzIqxkZpecb8bemaQ8sKM5PXb1UK4uTyTb/1wIqNuOVaDOFxyBdhTIQZn6gdjQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-3.2.0.tgz",
+ "integrity": "sha512-sD/E0vzpkoDz/dqM1Hhv0ihC4KBw6RXjefeO8SG1XrX+wGkMxe1pKeedkKDPCtr2JjuhbuS9aJNgOvnT8hbeBw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@simple-libs/child-process-utils": "^2.0.0",
"@simple-libs/stream-utils": "^2.0.0",
- "semver": "^7.5.2"
+ "verkit": "^0.5.0"
},
"engines": {
"node": ">=22"
},
"peerDependencies": {
"conventional-commits-filter": "^6.0.1",
- "conventional-commits-parser": "^7.0.1"
+ "conventional-commits-parser": "^7.1.3"
},
"peerDependenciesMeta": {
"conventional-commits-filter": {
@@ -1310,9 +1138,9 @@
}
},
"node_modules/@conventional-changelog/template": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@conventional-changelog/template/-/template-1.2.1.tgz",
- "integrity": "sha512-TzlTVpKPjaqW6qOYjQcYUDuGsLCNsvFHVBXkYGTAnf5V37jCWrE5haKNXzz0WZUtVHjrpV76L1buANjwXMfT8w==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@conventional-changelog/template/-/template-1.4.0.tgz",
+ "integrity": "sha512-aalGyl7dbB5PArRebDIX43ZvBlXrYm9uWzGJ26t+4SzJVPsOuvfILGGbw5X4yX7i50YEmJ8zvbiWnqH/AAnZqg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1323,7 +1151,7 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
"integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==",
- "devOptional": true,
+ "dev": true,
"funding": [
{
"type": "github",
@@ -1343,7 +1171,7 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz",
"integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==",
- "devOptional": true,
+ "dev": true,
"funding": [
{
"type": "github",
@@ -1367,7 +1195,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz",
"integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==",
- "devOptional": true,
+ "dev": true,
"funding": [
{
"type": "github",
@@ -1395,7 +1223,7 @@
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
"integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
- "devOptional": true,
+ "dev": true,
"funding": [
{
"type": "github",
@@ -1418,7 +1246,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
"integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
- "devOptional": true,
+ "dev": true,
"funding": [
{
"type": "github",
@@ -1505,23 +1333,6 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/@dotenvx/dotenvx/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
"node_modules/@dotenvx/dotenvx/node_modules/get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
@@ -1582,24 +1393,6 @@
"node": ">=8"
}
},
- "node_modules/@dotenvx/dotenvx/node_modules/isexe": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
- "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/@dotenvx/dotenvx/node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -1612,21 +1405,6 @@
"node": ">=8"
}
},
- "node_modules/@dotenvx/dotenvx/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@dotenvx/dotenvx/node_modules/open": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
@@ -1644,18 +1422,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@dotenvx/dotenvx/node_modules/picomatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
- "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/@dotenvx/dotenvx/node_modules/strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -1686,10 +1452,17 @@
"integrity": "sha512-VYJy0uhFm9zTJ1TxBaW/pA8bjbOM/OttaNMwZ1RHG4JKyRG7DhSdiqD1ipQoAyoD22olUtxbP78W9xY3Wd11bg==",
"license": "BSD-3-Clause"
},
+ "node_modules/@drizzle-team/brocli": {
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz",
+ "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/@electron-internal/extract-zip": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.4.tgz",
- "integrity": "sha512-Zr1Vs7E9tpCNhZHDAbFVXc2gEVCG9RqPDjrno5+bdgB6LRAuvgyMHJut4NCVyYwtAieapMzc3fiQ3CSTi75ARg==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.5.tgz",
+ "integrity": "sha512-+bqFCP98pLI0Tt0XQo1TmlXtwjWchISndDOxCkEcIuUgXWpBnLyRI+2DU+mesvnMMX6L1XDqYNA0lXNDHd/yiA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -1714,36 +1487,35 @@
"node": ">=10.12.0"
}
},
- "node_modules/@electron/asar/node_modules/commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
+ "node_modules/@electron/asar/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@electron/asar/node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 6"
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "node_modules/@electron/asar/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "node_modules/@electron/asar/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"license": "ISC",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@electron/fuses": {
@@ -1778,9 +1550,9 @@
}
},
"node_modules/@electron/get": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.0.0.tgz",
- "integrity": "sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.1.0.tgz",
+ "integrity": "sha512-3kSBtG8ObcTVfXanm5vVJ6UnBLEVmVsRk1M+vGqCuMBV+XLCbJYuWQful+yIy0GQDsSlK0kHEriEHn7SPk4EnA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1878,9 +1650,9 @@
}
},
"node_modules/@electron/rebuild": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.2.0.tgz",
- "integrity": "sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.2.1.tgz",
+ "integrity": "sha512-IS4pG3BysRrCLJ8xTAfvg+IQDbiUoAzdJy2SfjcYKnLDy5DpCdjnPdhS5Zf5UMfrkB24xu0KC+TqcOxg+eG+6w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1917,10 +1689,17 @@
"node": ">=16.4"
}
},
+ "node_modules/@electron/universal/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@electron/universal/node_modules/brace-expansion": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
- "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz",
+ "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1928,9 +1707,9 @@
}
},
"node_modules/@electron/universal/node_modules/fs-extra": {
- "version": "11.3.6",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.6.tgz",
- "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==",
+ "version": "11.4.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.1.tgz",
+ "integrity": "sha512-KYAb4c9BJQI6QqGKthV68OHe0badztdXJWKo0WtBA9IuCFPTKvE5ZdUBglP833aMjhaSPNO4A5j/EkzZtGlKjA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1981,9 +1760,9 @@
}
},
"node_modules/@electron/windows-sign/node_modules/fs-extra": {
- "version": "11.3.6",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.6.tgz",
- "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==",
+ "version": "11.4.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.1.tgz",
+ "integrity": "sha512-KYAb4c9BJQI6QqGKthV68OHe0badztdXJWKo0WtBA9IuCFPTKvE5ZdUBglP833aMjhaSPNO4A5j/EkzZtGlKjA==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -1997,80 +1776,45 @@
"node": ">=14.14"
}
},
- "node_modules/@emnapi/core": {
- "version": "1.11.3",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz",
- "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.2.3",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.11.3",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
- "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz",
- "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
"node_modules/@epic-web/invariant": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
"integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==",
"license": "MIT"
},
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
- "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
- "cpu": [
- "ppc64"
- ],
+ "node_modules/@esbuild-kit/core-utils": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz",
+ "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==",
+ "deprecated": "Merged into tsx: https://tsx.hirok.io",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "esbuild": "~0.18.20",
+ "source-map-support": "^0.5.21"
}
},
- "node_modules/@esbuild/android-arm": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz",
- "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
- "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
"cpu": [
"arm64"
],
@@ -2081,13 +1825,13 @@
"android"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
- "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
"cpu": [
"x64"
],
@@ -2098,13 +1842,13 @@
"android"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
- "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
"cpu": [
"arm64"
],
@@ -2115,13 +1859,13 @@
"darwin"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
- "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
"cpu": [
"x64"
],
@@ -2132,13 +1876,13 @@
"darwin"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
- "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
"cpu": [
"arm64"
],
@@ -2149,13 +1893,13 @@
"freebsd"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
- "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
"cpu": [
"x64"
],
@@ -2166,13 +1910,13 @@
"freebsd"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
- "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
"cpu": [
"arm"
],
@@ -2183,13 +1927,13 @@
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
- "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
"cpu": [
"arm64"
],
@@ -2200,13 +1944,13 @@
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
- "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
"cpu": [
"ia32"
],
@@ -2217,29 +1961,30 @@
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz",
- "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
"cpu": [
"loong64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
- "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
"cpu": [
"mips64el"
],
@@ -2250,13 +1995,13 @@
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
- "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
"cpu": [
"ppc64"
],
@@ -2267,13 +2012,13 @@
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
- "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
"cpu": [
"riscv64"
],
@@ -2284,13 +2029,13 @@
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
- "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
"cpu": [
"s390x"
],
@@ -2301,13 +2046,13 @@
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
- "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
"cpu": [
"x64"
],
@@ -2318,15 +2063,15 @@
"linux"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
"cpu": [
- "arm64"
+ "x64"
],
"dev": true,
"license": "MIT",
@@ -2335,13 +2080,13 @@
"netbsd"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
- "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
"cpu": [
"x64"
],
@@ -2349,67 +2094,67 @@
"license": "MIT",
"optional": true,
"os": [
- "netbsd"
+ "openbsd"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
"cpu": [
- "arm64"
+ "x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
- "openbsd"
+ "sunos"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
- "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
"cpu": [
- "x64"
+ "arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
- "openbsd"
+ "win32"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
- "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
"cpu": [
- "arm64"
+ "ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
- "openharmony"
+ "win32"
],
"engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
- "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
"cpu": [
"x64"
],
@@ -2417,356 +2162,761 @@
"license": "MIT",
"optional": true,
"os": [
- "sunos"
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "node_modules/@esbuild-kit/esm-loader": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz",
+ "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==",
+ "deprecated": "Merged into tsx: https://tsx.hirok.io",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@esbuild-kit/core-utils": "^3.3.2",
+ "get-tsconfig": "^4.7.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
+ "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
],
"engines": {
"node": ">=18"
}
},
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
- "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
+ "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
"cpu": [
- "arm64"
+ "arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
- "win32"
+ "android"
],
"engines": {
"node": ">=18"
}
},
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
- "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
+ "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
"cpu": [
- "ia32"
+ "arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
- "win32"
+ "android"
],
"engines": {
"node": ">=18"
}
},
- "node_modules/@esbuild/win32-x64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz",
- "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==",
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
+ "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
- "win32"
+ "android"
],
"engines": {
"node": ">=18"
}
},
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
- "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
+ "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
+ "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=18"
}
},
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
- "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint/config-array": {
- "version": "0.21.2",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
- "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
+ "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/object-schema": "^2.1.7",
- "debug": "^4.3.1",
- "minimatch": "^3.1.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint/config-helpers": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
- "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
+ "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^0.17.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint/core": {
- "version": "0.17.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
- "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
+ "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz",
- "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==",
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
+ "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "ajv": "^6.14.0",
- "debug": "^4.3.2",
- "espree": "^10.0.1",
- "globals": "^14.0.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.1",
- "minimatch": "^3.1.5",
- "strip-json-comments": "^3.1.1"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=18"
}
},
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
+ "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
+ "cpu": [
+ "loong64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
"node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@eslint/js": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz",
- "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==",
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
+ "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
+ "cpu": [
+ "mips64el"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- },
- "peerDependencies": {
- "eslint": "^10.0.0"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/@eslint/object-schema": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
- "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
+ "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=18"
}
},
- "node_modules/@eslint/plugin-kit": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
- "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
+ "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
+ "cpu": [
+ "riscv64"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^0.17.0",
- "levn": "^0.4.1"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": ">=18"
}
},
- "node_modules/@floating-ui/core": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
- "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==",
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
+ "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@floating-ui/utils": "^0.2.11"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@floating-ui/dom": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz",
- "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==",
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
+ "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@floating-ui/core": "^1.7.5",
- "@floating-ui/utils": "^0.2.11"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@floating-ui/react-dom": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz",
- "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==",
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@floating-ui/dom": "^1.7.6"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@floating-ui/utils": {
- "version": "0.2.11",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz",
- "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
- "license": "MIT"
- },
- "node_modules/@fontsource-variable/geist": {
- "version": "5.2.9",
- "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.2.9.tgz",
- "integrity": "sha512-TP+QSBG3wxKGPE33CbMy/L0Nu3qvJ6Fy81Yc4LnQ95xH+i+cfEp8fyU8/kfV14YwszxIFPhnoMTbjL71waVpyQ==",
- "license": "OFL-1.1",
- "funding": {
- "url": "https://github.com/sponsors/ayuhito"
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@hono/node-server": {
- "version": "1.19.14",
- "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz",
- "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==",
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
+ "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "node": ">=18.14.1"
- },
- "peerDependencies": {
- "hono": "^4"
+ "node": ">=18"
}
},
- "node_modules/@humanfs/core": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
- "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
+ "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanfs/types": "^0.15.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "node": ">=18.18.0"
+ "node": ">=18"
}
},
- "node_modules/@humanfs/node": {
- "version": "0.16.8",
- "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
- "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
+ "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanfs/core": "^0.19.2",
- "@humanfs/types": "^0.15.0",
- "@humanwhocodes/retry": "^0.4.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
"engines": {
- "node": ">=18.18.0"
+ "node": ">=18"
}
},
- "node_modules/@humanfs/types": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
- "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
+ "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
"engines": {
- "node": ">=18.18.0"
+ "node": ">=18"
}
},
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
+ "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
+ "node": ">=18"
}
},
- "node_modules/@humanwhocodes/retry": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
- "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
+ "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
+ "node": ">=18"
}
},
- "node_modules/@ioredis/commands": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.10.0.tgz",
- "integrity": "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==",
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
+ "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
+ "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.23.5",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz",
+ "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^3.0.5",
+ "debug": "^4.3.1",
+ "minimatch": "^10.2.4"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz",
+ "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^1.2.1"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz",
+ "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz",
+ "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "eslint": "^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz",
+ "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.3.tgz",
+ "integrity": "sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^1.2.1",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz",
+ "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.12"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz",
+ "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.8.0",
+ "@floating-ui/utils": "^0.2.12"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz",
+ "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/dom": "^1.8.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz",
+ "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==",
+ "license": "MIT"
+ },
+ "node_modules/@fontsource-variable/geist": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.3.0.tgz",
+ "integrity": "sha512-j0m+vLQuG5XAYoHtGCVu0spvlGreR3EzpECUVzkFmI1mTVnAO38l/NEPDCFgZ177JxzYJCLSmTQibIiYPilGrA==",
+ "license": "OFL-1.1",
+ "funding": {
+ "url": "https://github.com/sponsors/ayuhito"
+ }
+ },
+ "node_modules/@hono/node-server": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.4.tgz",
+ "integrity": "sha512-2g1qeHl4BduwDn6L8nkAvDrPUWPMlkQ//a5NhP/zIyaXKMjZNRV+cG9Csu+BiJFf6+68pqzjf4Hi5sJGKHuS1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "hono": "^4 || ^5.0.0-0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.2",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
+ "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/types": "^0.15.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
+ "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.2",
+ "@humanfs/types": "^0.15.0",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/types": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
+ "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@ioredis/commands": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.10.0.tgz",
+ "integrity": "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==",
"license": "MIT"
},
"node_modules/@isaacs/cliui": {
@@ -2820,9 +2970,9 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
+ "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
@@ -2835,13 +2985,20 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@keyv/serialize": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
+ "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@lottiefiles/dotlottie-react": {
- "version": "0.19.8",
- "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.19.8.tgz",
- "integrity": "sha512-It12ar9uJLU3yzf645JW83Y5jnizyQDj/f2nT5w0k5NcsuambANgoWqD8QHgNdV2fgU59mWQXlrbQllHJleryg==",
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.20.0.tgz",
+ "integrity": "sha512-M4HLo6RxNTbYwByZw7ns2zaGgPx0PpGZU1xfyMdj8VEoTasSJ1uhsJZjl+l55TPQ7g0soF7JVHEJLTOv1TIeMA==",
"license": "MIT",
"dependencies": {
- "@lottiefiles/dotlottie-web": "0.77.0"
+ "@lottiefiles/dotlottie-web": "0.81.0"
},
"engines": {
"node": ">=18.17.0",
@@ -2852,9 +3009,9 @@
}
},
"node_modules/@lottiefiles/dotlottie-web": {
- "version": "0.77.0",
- "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.77.0.tgz",
- "integrity": "sha512-gK53ZSOMkulpdXrImxUD/9673KBwHShfC7h30eHC74v33koTmDGgGCqWNtJK3yUxNx07fzp1vnmTBVA2RNQO9w==",
+ "version": "0.81.0",
+ "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.81.0.tgz",
+ "integrity": "sha512-BmX/+0eaK2unVexuB0VZLvBsax2BS8fLwwIdUqF4AO9C7tFw97eTi90C//20QVK4q08SDhnnszysCGX0Qt7XPA==",
"license": "MIT",
"engines": {
"node": ">=18.17.0",
@@ -2917,12 +3074,12 @@
}
},
"node_modules/@modelcontextprotocol/sdk": {
- "version": "1.29.0",
- "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz",
- "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==",
+ "version": "1.32.1",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.32.1.tgz",
+ "integrity": "sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==",
"license": "MIT",
"dependencies": {
- "@hono/node-server": "^1.19.9",
+ "@hono/node-server": "^1.19.9 || ^2.0.5",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"content-type": "^1.0.5",
@@ -2956,28 +3113,15 @@
}
}
},
- "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
- "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "node_modules/@modelcontextprotocol/sdk/node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "engines": {
+ "node": ">= 0.6"
}
},
- "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz",
@@ -3056,24 +3200,6 @@
"win32"
]
},
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
- "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@tybys/wasm-util": "^0.10.3"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- },
- "peerDependencies": {
- "@emnapi/core": "^1.7.1",
- "@emnapi/runtime": "^1.7.1"
- }
- },
"node_modules/@noble/ciphers": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz",
@@ -3087,9 +3213,9 @@
}
},
"node_modules/@noble/hashes": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz",
- "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.4.0.tgz",
+ "integrity": "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3144,12 +3270,12 @@
}
},
"node_modules/@oxc-project/types": {
- "version": "0.139.0",
- "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz",
- "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==",
+ "version": "0.153.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.153.0.tgz",
+ "integrity": "sha512-jSNrRIyvPVLL5E1z/tS5zLAprosGz/FuI1PWwEOz59j3E4TTTzSpqKb/RDGqJhhW0QHYISGXxq582wGx6T11Tw==",
"license": "MIT",
"funding": {
- "url": "https://github.com/sponsors/Boshen"
+ "url": "https://github.com/sponsors/oxc-project"
}
},
"node_modules/@paralleldrive/cuid2": {
@@ -3176,15 +3302,18 @@
}
},
"node_modules/@peculiar/asn1-schema": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz",
- "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.10.0.tgz",
+ "integrity": "sha512-GhokD41lV4gQrrLYm3wCkHfBOnJrnhDMgt4XeMW8gzfE1UdJqIuSwsE+ggf82XBjUXRJylcm+KIGQFa4utIVLw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@peculiar/utils": "^2.0.2",
"asn1js": "^3.0.10",
"tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=14"
}
},
"node_modules/@peculiar/json-schema": {
@@ -3243,24 +3372,24 @@
"license": "MIT"
},
"node_modules/@radix-ui/number": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.2.tgz",
- "integrity": "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.3.tgz",
+ "integrity": "sha512-Road2bidD0uu/1BGDOWNdPI06g0lIRy6IF9GZcIrDK2KGItfor8IQwQa+yM2ERgHM1MmHxaxpTzk0/Jp42lNfA==",
"license": "MIT"
},
"node_modules/@radix-ui/primitive": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.5.tgz",
- "integrity": "sha512-d86WIWFYNtGA0H/d8exstrTRTp7eWJYlYJbtNofxr/3ljupZYn6EFDG/Qgu/0Kc8v7yMUxySagqJsL1+PdYjWg==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.7.tgz",
+ "integrity": "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==",
"license": "MIT"
},
"node_modules/@radix-ui/react-accessible-icon": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.11.tgz",
- "integrity": "sha512-HQDOFTKwSnmUij6l54wYJJtxTAnxI71+YJLOrjm2ladFB8HAV5Jt7hwaZPhWTGBkYoW4+ZAOfNZrLDh/qvxSYA==",
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.16.tgz",
+ "integrity": "sha512-I+T/Hc6SY3WbFVZ9Ne1o0DJbpjQpTpLIBZcVzYiHCQ9z1yGUd/G88u5SKyM6eJ223txAOS7bp7bb9k0Ocfkjwg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-visually-hidden": "1.2.7"
+ "@radix-ui/react-visually-hidden": "1.2.12"
},
"peerDependencies": {
"@types/react": "*",
@@ -3278,20 +3407,20 @@
}
},
"node_modules/@radix-ui/react-accordion": {
- "version": "1.2.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.16.tgz",
- "integrity": "sha512-BpZJNmetujnGgUI6OX0jEhEmlA46WPqgub8Rv09Kyquwd0cc1ndMKpiPYCjmBU6KSSRPAMtgLpEoZSG/tdNIWQ==",
+ "version": "1.2.21",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.21.tgz",
+ "integrity": "sha512-2fmc6COuKLq2k3P7JZrOt9Zf8HT9nTQhHN5V+A3ih7ftqoyDcoEUrPoLq8ngr7QwTd7hpQ2xoUKWtvy1Xw9RAQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collapsible": "1.1.16",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collapsible": "1.1.21",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6"
},
"peerDependencies": {
"@types/react": "*",
@@ -3309,16 +3438,16 @@
}
},
"node_modules/@radix-ui/react-alert-dialog": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.19.tgz",
- "integrity": "sha512-FA7n1f6D/DwGE0+AWxiY5LacNbbExQuEgMubeG06idEaH+mSLuf9dp/qBNqOnvbTQ+4gZ2ue1RATF1Ub91Mg5g==",
+ "version": "1.1.24",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.24.tgz",
+ "integrity": "sha512-dRvB59HhcjIWcCPKzK5Px1yQ8pIULQQrxqgyepCqin7tNXi/xvmC86WkyMOKhuCbjz3+v9Q6oE7/tUN5NQ9dCg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-dialog": "1.1.19",
- "@radix-ui/react-primitive": "2.1.7"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-dialog": "1.2.0",
+ "@radix-ui/react-primitive": "2.1.11"
},
"peerDependencies": {
"@types/react": "*",
@@ -3336,12 +3465,12 @@
}
},
"node_modules/@radix-ui/react-arrow": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.11.tgz",
- "integrity": "sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==",
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.16.tgz",
+ "integrity": "sha512-nXPI1tzJsnQw8oXvB2r49rO9TIbbJ8VFeaWDiBsqY8+iwO5xb7WjUsrXDagjAgPKTdhW8WODQnAltUhBx8I+sg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.7"
+ "@radix-ui/react-primitive": "2.1.11"
},
"peerDependencies": {
"@types/react": "*",
@@ -3359,12 +3488,12 @@
}
},
"node_modules/@radix-ui/react-aspect-ratio": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.11.tgz",
- "integrity": "sha512-IUAhIVpBUvP5NNICjlaB1OFmtRLGqQqTF3ZOSGPoq3XeLXRFtHiWTRxSVEULgOd9GQR2c7tsYqDnhUennapZnw==",
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.16.tgz",
+ "integrity": "sha512-w2u6oiTzb7WkWwV3ZClX/llYYlTbilUOkHIKkwb+PWWytQ/IdEVRNLIChjbcXy/mkqcKKM3wEhrOilJW+uPHDg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.7"
+ "@radix-ui/react-primitive": "2.1.11"
},
"peerDependencies": {
"@types/react": "*",
@@ -3382,16 +3511,17 @@
}
},
"node_modules/@radix-ui/react-avatar": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.2.tgz",
- "integrity": "sha512-sST0qh8GzOB7besQ3tMLWLyngnRuSk0gc/Hm+667KYKQFCt6Y6ZXv25WlqM7dIDK54ULCh5+CHmk4LIolzfz+A==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.7.tgz",
+ "integrity": "sha512-6AizCpbU3Zngojp9vQak8Lt4AXwdKJ2lkRYAfpoETraT+qKVNeRqytiADzneHetFEB0Wu4+qeSfmZEq0PiVDmQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-is-hydrated": "0.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-is-hydrated": "0.1.3",
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -3409,19 +3539,18 @@
}
},
"node_modules/@radix-ui/react-checkbox": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.7.tgz",
- "integrity": "sha512-JroKHfQBfh+fDuzpPsBC+pESkhuq8ql4hljTguz8MWnS35cISr3d/Jhl9kYrB44FlDtxCArYdDvTx+BSsJ64rQ==",
+ "version": "1.3.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.12.tgz",
+ "integrity": "sha512-gNOS2lLrpQxNLWHhCX0sayfVRiyB5gQp7nQIzpl+PM1Hkab52utsKtD27alAr78uqhpvX51kwqDp71hM5hNSwg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-previous": "1.1.2",
- "@radix-ui/react-use-size": "1.1.2"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-size": "1.1.5"
},
"peerDependencies": {
"@types/react": "*",
@@ -3439,19 +3568,19 @@
}
},
"node_modules/@radix-ui/react-collapsible": {
- "version": "1.1.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.16.tgz",
- "integrity": "sha512-opfXRe6nnzyGmCDPx+l1Aqo/RbqWtQal2FnsBqF9hhePp6j0LsRoBaRxcMOlTv+uYTJVtWYZKg9t9wTe+BA/ZA==",
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.21.tgz",
+ "integrity": "sha512-IzkusZHCZBnED5skW+b+syl8d+e3+zelvxZ2Ed9lfawqEBfa5osPj53sTJ+q/uNmGAj9e7wMYgyzwPu/luWJ4Q==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -3469,15 +3598,15 @@
}
},
"node_modules/@radix-ui/react-collection": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.12.tgz",
- "integrity": "sha512-nb67INpE0IahJKN7EYPp9m9YGwYeKlnzxT3MwXVkgCskaSJia97kG4T0ywpjNUSSnoJk/uvk12V8vbrEHEj+/Q==",
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.16.tgz",
+ "integrity": "sha512-yEQrjfI5eBbeYEJXOASpm+gs9eNHY8+UjkZ81GzcuwdLrSMOlEM8jnGoGdeGo92oiBMkuwZUhHTsnsrDiJLcyA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-slot": "1.3.0"
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-slot": "1.4.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -3495,9 +3624,9 @@
}
},
"node_modules/@radix-ui/react-compose-refs": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz",
- "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.5.tgz",
+ "integrity": "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -3510,9 +3639,9 @@
}
},
"node_modules/@radix-ui/react-context": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.0.tgz",
- "integrity": "sha512-fOE+JtN9rygNZkCnHRBEP0TAvLldlhyOxMsbwFvTP4nAs+nBmfnna+o/Zski2wkmY1YMrFC0aSzsHoLY47iLrg==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.2.2.tgz",
+ "integrity": "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -3525,16 +3654,16 @@
}
},
"node_modules/@radix-ui/react-context-menu": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.3.tgz",
- "integrity": "sha512-PS+gKE0z2prJ74Y0sM+brAGK4mYOHIR7TlcV5EJgUQ6E0xMvyswkK2X4yRqyganrzsRL+WCSKAPu0NQITICRWg==",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.8.tgz",
+ "integrity": "sha512-s8ABBkEuAOyhDub0Y99f8lVRlVsd28mUnOHtuqGg8LuHnefkmPN5rYzA2g8MAPLjAZMisnDHhN4dBHUM7ZF7Rg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-menu": "2.1.20",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-menu": "2.1.25",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6"
},
"peerDependencies": {
"@types/react": "*",
@@ -3552,23 +3681,24 @@
}
},
"node_modules/@radix-ui/react-dialog": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.19.tgz",
- "integrity": "sha512-+HhbN2+YtkRgVirjZ2afMeutQRuGOrdkWR5+EFC58SJojGmtyNQwYzgi6tHBpOxvFHefMtPeHdgtjz0BOGxFQg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.12",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-slot": "1.3.0",
- "@radix-ui/react-use-controllable-state": "1.2.3",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.2.0.tgz",
+ "integrity": "sha512-l5CX8HdNL+9cc4s7HkNyplumSA3FIx68sg9dttBHKr286fRBwq1MBniDVTeI/tkof92/APntMQvC1YG1Khb0Cg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-focus-guards": "1.1.6",
+ "@radix-ui/react-focus-scope": "1.2.0",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-portal": "1.1.18",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-slot": "1.4.0",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
"aria-hidden": "^1.2.4",
"react-remove-scroll": "^2.7.2"
},
@@ -3588,9 +3718,9 @@
}
},
"node_modules/@radix-ui/react-direction": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.2.tgz",
- "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.5.tgz",
+ "integrity": "sha512-/NlO/rOqQabmg+GGr86vCmbJVhqTv85NfM9g6Gknf/JVygXeZ6e6HM/RW1omerW9HsFtecwNqgEAKV6UqDsvpA==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -3603,16 +3733,16 @@
}
},
"node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.15.tgz",
- "integrity": "sha512-b0XaRlzn2QKuo10XyNgi2DAJDf5XC9d1nD3FJcuvCjbR7+4Ad28zmZsLsqx+hvDEzMnRuZaZxZm9gYObV6RmRA==",
+ "version": "1.1.20",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.20.tgz",
+ "integrity": "sha512-35WHRrycfnj2m4LvPiKMKHGLM3Y2WvUA744CkRdxjs1BGDX1c8PVMfmiSGTUwnHRbqdtIoxveYTXvcJSt7VfgQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-effect-event": "0.0.3"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-effect-event": "0.0.5"
},
"peerDependencies": {
"@types/react": "*",
@@ -3630,18 +3760,18 @@
}
},
"node_modules/@radix-ui/react-dropdown-menu": {
- "version": "2.1.20",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.20.tgz",
- "integrity": "sha512-slfm+rRaZRuQBvHq60lXvSVUPhid0IPtjSZzIuUlWZMUs01iYZNlGS3mJgRD3ChLQVBAYlKiL/tFyWGX+dz8Xw==",
+ "version": "2.1.25",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.25.tgz",
+ "integrity": "sha512-45QO76jn/a+cRl6OPgZKCKnIMdfYZaOa6SuAJeKHFiM3orX6bnscuFQJDx3qS4Agp/RE+eKv+9gmUL8t3Ma7bw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-menu": "2.1.20",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-menu": "2.1.25",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6"
},
"peerDependencies": {
"@types/react": "*",
@@ -3659,9 +3789,9 @@
}
},
"node_modules/@radix-ui/react-focus-guards": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.4.tgz",
- "integrity": "sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.6.tgz",
+ "integrity": "sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -3674,14 +3804,14 @@
}
},
"node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.12.tgz",
- "integrity": "sha512-jjk/lqTeNL0azUx5ZYzVrl4NgaDIrdzTNE4mABV9yBFI7FQqN7pIgzV1bTleUezP2QiTGA1BFTqY8MegDgWX9A==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.2.0.tgz",
+ "integrity": "sha512-I5S7vsAOozx2lWSBAyuXjWIJ/A8qx4fjbv6115WoaRYQSb1yZDaeNHonUAQzXyE8oD+0whJHbQRl4HIE2gQ0Xw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2"
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-callback-ref": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -3699,17 +3829,17 @@
}
},
"node_modules/@radix-ui/react-form": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.12.tgz",
- "integrity": "sha512-JTX94E4LDL91rzLg7X0mHPdxr0A8JEdVwZEmeOwZJSMDHCGW5DFtSlTSJozUyUs807IQmnvbfzKZFVCK5DmkqQ==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.2.0.tgz",
+ "integrity": "sha512-5ELeC+bQUHXEjU51svw11DynjGFlaUjo5QOUCr5hptvLLtBiqWtva2O3IWdjrFWQwitw6k6KpHHEyI61/kCVeg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-label": "2.1.11",
- "@radix-ui/react-primitive": "2.1.7"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-label": "2.1.16",
+ "@radix-ui/react-primitive": "2.1.11"
},
"peerDependencies": {
"@types/react": "*",
@@ -3727,20 +3857,21 @@
}
},
"node_modules/@radix-ui/react-hover-card": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.19.tgz",
- "integrity": "sha512-2KTgMLQtKvicznQgbindEI2RZ3QbDIwU5gabjUPwFJsormjGDz+rUvO4NANmYwzEEpTcTONUt33vBHIfTIVSfw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-popper": "1.3.3",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "version": "1.1.24",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.24.tgz",
+ "integrity": "sha512-0w/tZHRo1fv4WsfcyaOdi5eDftFA8wQkr8WCOOuxw7fx9S2ERfshQioM269aFZsmyAHd0X1LWoZ2BQTlA/JYUw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-focus-scope": "1.2.0",
+ "@radix-ui/react-popper": "1.3.8",
+ "@radix-ui/react-portal": "1.1.18",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6"
},
"peerDependencies": {
"@types/react": "*",
@@ -3758,12 +3889,12 @@
}
},
"node_modules/@radix-ui/react-id": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.2.tgz",
- "integrity": "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.4.tgz",
+ "integrity": "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -3776,12 +3907,12 @@
}
},
"node_modules/@radix-ui/react-label": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.11.tgz",
- "integrity": "sha512-3PKvDDxOn62k0oV1n4QtNtD2vpu+zYjXR7ojLBPaO6SPvhy53yg0vAmgNeBQeJW5rV3dffoRG+HYfLBZuzw0CQ==",
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.16.tgz",
+ "integrity": "sha512-2vTQj72YFmeoTxWKJEMbO/9uQt6zzLgbzi0+nWBffq49oo6KhIDP/D+fA2im0wsxBCAX7QfaF3xgsYBVdDbNFQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.7"
+ "@radix-ui/react-primitive": "2.1.11"
},
"peerDependencies": {
"@types/react": "*",
@@ -3799,27 +3930,27 @@
}
},
"node_modules/@radix-ui/react-menu": {
- "version": "2.1.20",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.20.tgz",
- "integrity": "sha512-VsUrXxFe9d2ScbZF0fR/oPR1+qjyeLs5p0jzG8h90puMoA9bq4SirYlXbE+USRg9Q2qTeJSFNqjw2nts8jJe4w==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.12",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-popper": "1.3.3",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.15",
- "@radix-ui/react-slot": "1.3.0",
- "@radix-ui/react-use-callback-ref": "1.1.2",
+ "version": "2.1.25",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.25.tgz",
+ "integrity": "sha512-e8JaQc0ijBbTx37YVI09Nfq8ThUWJ4L1rvZ3Hvaufehco9/ug9+U3PHz9ue6w3gKd91UcKf9fgDWejeSO+VSKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-focus-guards": "1.1.6",
+ "@radix-ui/react-focus-scope": "1.2.0",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-popper": "1.3.8",
+ "@radix-ui/react-portal": "1.1.18",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-roving-focus": "1.1.20",
+ "@radix-ui/react-slot": "1.4.0",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
"aria-hidden": "^1.2.4",
"react-remove-scroll": "^2.7.2"
},
@@ -3839,21 +3970,21 @@
}
},
"node_modules/@radix-ui/react-menubar": {
- "version": "1.1.20",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.20.tgz",
- "integrity": "sha512-gzFZvybgmwYsFBWDqanycIoEYnhyk8MMnuLamdFVHUZYGp4COM+sqXiwbnn0VMWqGLeeU7GV7jm+dXRa+Wufag==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-menu": "2.1.20",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.15",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "version": "1.1.25",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.25.tgz",
+ "integrity": "sha512-JIQiKcXsgl6BtwcMe7BMLvCGH2p9Czgcmxl6Ie9Zoi+MW1mmitkcm5We01m/ndLYVI8PpRJnM/RcLV0eOCxaJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-menu": "2.1.25",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-roving-focus": "1.1.20",
+ "@radix-ui/react-use-controllable-state": "1.2.6"
},
"peerDependencies": {
"@types/react": "*",
@@ -3871,25 +4002,26 @@
}
},
"node_modules/@radix-ui/react-navigation-menu": {
- "version": "1.2.18",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.18.tgz",
- "integrity": "sha512-K9HiuxZ6xCwSaHcIuUpxyhy4w5gpwzWjh9dHTSbMN3Ix4qAyVObS9RlU3zMycb0PO3v9Tpk0BXMwWvXOUbVXew==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-layout-effect": "1.1.2",
- "@radix-ui/react-use-previous": "1.1.2",
- "@radix-ui/react-visually-hidden": "1.2.7"
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.3.0.tgz",
+ "integrity": "sha512-hZqTqDwc8Z5aI4rGIyPqCSJ2JoSNorqX/F1/gqNHkZzWJO6JuYzL7hn5sWOZJjpkfT+cbxWWRbKVU/IeiOM9ag==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-slot": "1.4.0",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
+ "@radix-ui/react-use-previous": "1.1.4",
+ "@radix-ui/react-visually-hidden": "1.2.12"
},
"peerDependencies": {
"@types/react": "*",
@@ -3907,23 +4039,23 @@
}
},
"node_modules/@radix-ui/react-one-time-password-field": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.12.tgz",
- "integrity": "sha512-nQLu5OAcORDQp1EHAv6k3mJGV1hjMTw2NTGVAsGE1g/mWeNqAd1R5jyaAs3U+A8ZD/W8XNPY2yKT0ZdQnqo3NA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/number": "1.1.2",
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.15",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-effect-event": "0.0.3",
- "@radix-ui/react-use-is-hydrated": "0.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.17.tgz",
+ "integrity": "sha512-+6jmOqjSNBr7F1uSc7HSDqD3XL54A2qA99I9rIH4JoOD/jDScw8tUmDz6HCAkjytbrE/cdL66i+QkeDyZ0WNyw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.3",
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-roving-focus": "1.1.20",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-effect-event": "0.0.5",
+ "@radix-ui/react-use-is-hydrated": "0.1.3",
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -3941,19 +4073,19 @@
}
},
"node_modules/@radix-ui/react-password-toggle-field": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.7.tgz",
- "integrity": "sha512-gB1Mr8vzdv1XzDjrtJTXmL0JORRs1B4g7ngUs0F+H2VvMOwXTZMTmLCl0wZZ3m7ylX8TssI7NCvgiSHmLuTm/A==",
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.12.tgz",
+ "integrity": "sha512-+SWSgf3HRpE4zUira+p6t5KUR473PSqewtQgj9qzl3znZPRWPCGycwXNTfHwkiRTD3tEXwNIXJg0i1NTteiULw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-effect-event": "0.0.3",
- "@radix-ui/react-use-is-hydrated": "0.1.1"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-effect-event": "0.0.5",
+ "@radix-ui/react-use-is-hydrated": "0.1.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -3971,24 +4103,25 @@
}
},
"node_modules/@radix-ui/react-popover": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.19.tgz",
- "integrity": "sha512-jkrTdQVxnIB8fpn0NyyxW9CTB5aCXZZelVz5z+Xmii6g5WxMqS3fInNslZ63puP39+Puu4jYohUK31y3dT87gQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.12",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-popper": "1.3.3",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-slot": "1.3.0",
- "@radix-ui/react-use-controllable-state": "1.2.3",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.2.0.tgz",
+ "integrity": "sha512-e70Nh+0iQ+hRAIM2nAGib5BhaDL2Rjlzxw9kIzsU2nz+t3/t82Z5qtPhY5nTnfj8FbmrU6RRIKH8RF3ynCe+vw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-focus-guards": "1.1.6",
+ "@radix-ui/react-focus-scope": "1.2.0",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-popper": "1.3.8",
+ "@radix-ui/react-portal": "1.1.18",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-slot": "1.4.0",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
"aria-hidden": "^1.2.4",
"react-remove-scroll": "^2.7.2"
},
@@ -4008,21 +4141,21 @@
}
},
"node_modules/@radix-ui/react-popper": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.3.tgz",
- "integrity": "sha512-mS7dGpyjv6b+gsDjLF7e0ia1W4Im1B1hSCy2yuXlHuvnZxHKagfDaobt/KAKt27EpZMit2pss8eJBVyVjEWM+g==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.8.tgz",
+ "integrity": "sha512-y92/9iIdG1FyNvow0Y0qP5WJZ7oRTAKDVKCy9kJnhZfItwIKYtt0KKQeOhBKfXz0ETizduKwDRbrQHrTQScs5A==",
"license": "MIT",
"dependencies": {
"@floating-ui/react-dom": "^2.0.0",
- "@radix-ui/react-arrow": "1.1.11",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-layout-effect": "1.1.2",
- "@radix-ui/react-use-rect": "1.1.2",
- "@radix-ui/react-use-size": "1.1.2",
- "@radix-ui/rect": "1.1.2"
+ "@radix-ui/react-arrow": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
+ "@radix-ui/react-use-rect": "1.1.4",
+ "@radix-ui/react-use-size": "1.1.5",
+ "@radix-ui/rect": "1.1.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -4040,13 +4173,13 @@
}
},
"node_modules/@radix-ui/react-portal": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.13.tgz",
- "integrity": "sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==",
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.18.tgz",
+ "integrity": "sha512-ygFIJ+QXNKf72AAq8x3hd22+ws7pYpmc1S0E4kW0Je+qD4qEb3FvxeKVQRGrVDMOkQaYfsB+Qs+KDh81a1gAOw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -4064,12 +4197,12 @@
}
},
"node_modules/@radix-ui/react-presence": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.7.tgz",
- "integrity": "sha512-zBZ4QM5XG3JRanDmqXYf3MD6th4AFXFmgU6KNMFzUaV6F3uw9I5/zjMUvFriSEn5ewo1nxuibvyxJdmLlDcslA==",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.11.tgz",
+ "integrity": "sha512-Z7/atlkab36Z8hm+V8zYc79r0W+tiOB1o0tun1By94JyadkekLQmtEAnBSP9XKXBNQsStoStS4+gX10JpS5akA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -4087,12 +4220,12 @@
}
},
"node_modules/@radix-ui/react-primitive": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.7.tgz",
- "integrity": "sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==",
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.11.tgz",
+ "integrity": "sha512-RzcaSw5aKl0OPhBJ1wbolKSF6nVvN+0o/QLeIVq+09npiPdnCkPggy2k6gI6yetxl4ZyrlBPYFgCB8BQJZwXcQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-slot": "1.3.0"
+ "@radix-ui/react-slot": "1.4.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4110,13 +4243,13 @@
}
},
"node_modules/@radix-ui/react-progress": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.12.tgz",
- "integrity": "sha512-ZPHyI0JyzoH/rP0tq2uRaIZTj/4s8+kAbqPz+e2N8+ejHvwPJ889dHhqn+vh7PNvNeq+boAoH9yzqeoShzwF2w==",
+ "version": "1.1.17",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.17.tgz",
+ "integrity": "sha512-A+RfMARd9u+UaVbLQDmysGlAGuaFQrF+uxF3v+7+xU8tkKoYxtCSs+6HHnIKJVgam2sGZ7c0hLRPWSnmnFyGJQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-primitive": "2.1.7"
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-primitive": "2.1.11"
},
"peerDependencies": {
"@types/react": "*",
@@ -4134,21 +4267,20 @@
}
},
"node_modules/@radix-ui/react-radio-group": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.3.tgz",
- "integrity": "sha512-WwZFjWV4s3aC1QtR3k04R+oANHtX2q6fgKlc7MCEiDNlnTxCZ3H8k3mHtEgVlOejystwk1WQgarQhNOQZ2bK1g==",
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.8.tgz",
+ "integrity": "sha512-MaOOZ1TlaYoOeSDnHeVIONss0rp5ngOTY5HJY+Xkq16PAopnj21iU9r9m0O/77cBYu8Ksaq3BcjlaOdpbfbzzg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.15",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-previous": "1.1.2",
- "@radix-ui/react-use-size": "1.1.2"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-roving-focus": "1.1.20",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-size": "1.1.5"
},
"peerDependencies": {
"@types/react": "*",
@@ -4166,22 +4298,22 @@
}
},
"node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.15.tgz",
- "integrity": "sha512-40svmmugfM3mUN7VUDGVE1tQGOhyi8enlGD0CNJEcMM36C1f71PKM21DFgNHUfem0XnA+d8H8oN3Z9ZpJjSslg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-is-hydrated": "0.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "version": "1.1.20",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.20.tgz",
+ "integrity": "sha512-+ZjbkU21fTSJdn4nq/IFKUdKS+JSZHORBZ8ma1f6YpOMNzRt0xf3sVAWVK/+ktHCajPy4HYDsyHXZIZmOMxzIA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-is-hydrated": "0.1.3",
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -4199,20 +4331,21 @@
}
},
"node_modules/@radix-ui/react-scroll-area": {
- "version": "1.2.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.14.tgz",
- "integrity": "sha512-bBODCWZK7JTbQLHs0uIP4f73wIWatakK4OS33UzkR1x897wu0PuO658a3f+6P2GEGyDzGYMuHRatMVoAk9WZTw==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.3.0.tgz",
+ "integrity": "sha512-1WSuAXaahfeLmFX/dfYo/ftg1filMfaWjVye2d40VlgtWMMq/NOVocfukZEXkG+dwrAoNI+qpo9bjhNSJ/XC8g==",
"license": "MIT",
"dependencies": {
- "@radix-ui/number": "1.1.2",
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/number": "1.1.3",
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-slot": "1.4.0",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -4230,31 +4363,31 @@
}
},
"node_modules/@radix-ui/react-select": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.3.tgz",
- "integrity": "sha512-L5RQTXz6Anxsf9CCv+pTgiAsUpyVj7rJxsGtmhFaEOJ++cVfXucv4qWfsIO0AIB4NAhi3yovWGVMKKS1Xf1Wrg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/number": "1.1.2",
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.12",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-popper": "1.3.3",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-slot": "1.3.0",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-layout-effect": "1.1.2",
- "@radix-ui/react-use-previous": "1.1.2",
- "@radix-ui/react-visually-hidden": "1.2.7",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.8.tgz",
+ "integrity": "sha512-Tz9xOpV9Rbca5WTk7pzmfAECV3zb++uScT9mP3Px7ziAhH7SlK53b0uwMw8VubPhRK4x7uDKCy5fwevT8I0fAg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.3",
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-focus-guards": "1.1.6",
+ "@radix-ui/react-focus-scope": "1.2.0",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-popper": "1.3.8",
+ "@radix-ui/react-portal": "1.1.18",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-slot": "1.4.0",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
+ "@radix-ui/react-use-previous": "1.1.4",
+ "@radix-ui/react-visually-hidden": "1.2.12",
"aria-hidden": "^1.2.4",
"react-remove-scroll": "^2.7.2"
},
@@ -4274,12 +4407,12 @@
}
},
"node_modules/@radix-ui/react-separator": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.11.tgz",
- "integrity": "sha512-jRhe86+8PF7VZ1u14eOWVOuh2BuAhALg/FT1VcMC4OHedMTRUazDnDlKTt+yxo5cRNKHMfmvZ4sSQtWDeMV4CQ==",
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.16.tgz",
+ "integrity": "sha512-vugPjGQBXbJVVkftKqv/BVeZ108SyRGT3FR1oa14az6qyLgX8jPhnZYHgdSB7Gw8UJusqwb9eaK6mluOnsn/Vg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.7"
+ "@radix-ui/react-primitive": "2.1.11"
},
"peerDependencies": {
"@types/react": "*",
@@ -4297,22 +4430,22 @@
}
},
"node_modules/@radix-ui/react-slider": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.3.tgz",
- "integrity": "sha512-CWVVj+XaTom0SKCqw1EUgb0NuiLwS+N3OFG73mVEezKEjgNIvZiu0EevMelSSU+CbX3owbqJweG2gPU31WGC5A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/number": "1.1.2",
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-layout-effect": "1.1.2",
- "@radix-ui/react-use-previous": "1.1.2",
- "@radix-ui/react-use-size": "1.1.2"
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.5.0.tgz",
+ "integrity": "sha512-ZOBLK7KZvGL02V+4VwVbj8NYM4vPrAtyZdrgHSv+AMS9VL+5yAdnQF3DZT4Y8cbCp1Yn4xdp92orvez8fJa77w==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.3",
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
+ "@radix-ui/react-use-previous": "1.1.4",
+ "@radix-ui/react-use-size": "1.1.5"
},
"peerDependencies": {
"@types/react": "*",
@@ -4330,12 +4463,12 @@
}
},
"node_modules/@radix-ui/react-slot": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.0.tgz",
- "integrity": "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.4.0.tgz",
+ "integrity": "sha512-IuMVHZ+Ah5fkctu3X3qeFrV/ZrBcuWuDTFUUPfS/L5hvoTjzhp/HdWGE14CsQombPdEidsa33HVlYZXi49PZ1Q==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.3"
+ "@radix-ui/react-compose-refs": "1.1.5"
},
"peerDependencies": {
"@types/react": "*",
@@ -4348,18 +4481,17 @@
}
},
"node_modules/@radix-ui/react-switch": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.3.tgz",
- "integrity": "sha512-1+mlB4/lxJfk5tgJ4g+R5mUCbRpPE1T9+UsEyeLYbGgMtwiMgmuTnfKz4Mw1nHALHjuwyxw4MLd4cSHn6pNSlQ==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.8.tgz",
+ "integrity": "sha512-rr+zuoAeHWK3m6H4HgjOUiu3VsrQ/9JkjwY/uMnTgHJGPe9WNzDP/MOuIV7S+65p42DIxjGL0hAHktqBq82+2A==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-previous": "1.1.2",
- "@radix-ui/react-use-size": "1.1.2"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-size": "1.1.5"
},
"peerDependencies": {
"@types/react": "*",
@@ -4377,19 +4509,19 @@
}
},
"node_modules/@radix-ui/react-tabs": {
- "version": "1.1.17",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.17.tgz",
- "integrity": "sha512-nRyXnrAVCwjeXcHbvEbLS6ndbTeKHG1RqCP4A8Gw5L4cemDzPXdD8rAmr6wet0v57R69wGvuIIsFjHSVkZiMzQ==",
+ "version": "1.1.22",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.22.tgz",
+ "integrity": "sha512-GmVH+P3wx1ZPMuH7WajQzygZIbqgnsb5h8z4Ow3sQMuDqgcqISSBNom6MLVNJvfrkuJTtqfXc3ZolHjX+w0CHg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.15",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-roving-focus": "1.1.20",
+ "@radix-ui/react-use-controllable-state": "1.2.6"
},
"peerDependencies": {
"@types/react": "*",
@@ -4407,23 +4539,23 @@
}
},
"node_modules/@radix-ui/react-toast": {
- "version": "1.2.19",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.19.tgz",
- "integrity": "sha512-SxfVZfVOibWKWdkf0Xx1awW2d09fQu4V4PXDY1j5hi4MVf7MWdJZqTBJMa1KWtOr1S6GGtCk02nniZ0Iia+dHw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-layout-effect": "1.1.2",
- "@radix-ui/react-visually-hidden": "1.2.7"
+ "version": "1.2.24",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.24.tgz",
+ "integrity": "sha512-XR9pDEz9CH0ez98zPXQZOpF46anvbarkoOpjXpPSX7gm21vEl5Tzoe1PSQd3EY1OTOHac4lNq+TPx/2Z7jObdQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-portal": "1.1.18",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
+ "@radix-ui/react-visually-hidden": "1.2.12"
},
"peerDependencies": {
"@types/react": "*",
@@ -4441,14 +4573,14 @@
}
},
"node_modules/@radix-ui/react-toggle": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.14.tgz",
- "integrity": "sha512-QI/hB65XKWACA66P64A+aHxtLUgHJeJLkaQa+awUNXT6T3swndtY5DojeHA+vldrTspMTtFBd7HfZ9QGbM1Qrw==",
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.19.tgz",
+ "integrity": "sha512-l7FQHtuZjUJ0vKLdhKu5LzZ8Jw6K60QEC1tC22QNLuXN2PkydSoqEhKTCqwxBFZJ52NTCjzudDvl9sUsZeUbPw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.6"
},
"peerDependencies": {
"@types/react": "*",
@@ -4466,18 +4598,18 @@
}
},
"node_modules/@radix-ui/react-toggle-group": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.15.tgz",
- "integrity": "sha512-gIC5Q+Xljg7lmUdzSuDoy0t97yZn1sZl00Ra37ZvKrYdWnQLU6sWLd09yG8cIB9jUAlQfHgJ2ACAG00MFwsqSQ==",
+ "version": "1.1.20",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.20.tgz",
+ "integrity": "sha512-O+Sjiv64DfnByHYtnKEXmn63uUskU/X61vjf69X1v8JFn/ZvuNNLdJTBfYurVTSDv4/RJnJGtGgb/uvuS/rRJw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.15",
- "@radix-ui/react-toggle": "1.1.14",
- "@radix-ui/react-use-controllable-state": "1.2.3"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-roving-focus": "1.1.20",
+ "@radix-ui/react-toggle": "1.1.19",
+ "@radix-ui/react-use-controllable-state": "1.2.6"
},
"peerDependencies": {
"@types/react": "*",
@@ -4495,18 +4627,18 @@
}
},
"node_modules/@radix-ui/react-toolbar": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.15.tgz",
- "integrity": "sha512-t/iEuVjUnXXtrsGK40AA43uIx37sn3AqZ7oAVnPICK6lFJP6dzMzWR3U9b6eCfFjb6wtSEqkJ9Rn9xDjiOx20g==",
+ "version": "1.1.20",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.20.tgz",
+ "integrity": "sha512-5gyzL6B5/zjBwU3ATBWAVZ4xXQC5F8E9CB4BmYC1UvZ08pN2OJQoooeIwJtZZ/2rz4sTiQmbGfdDvmU73wRJCQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-roving-focus": "1.1.15",
- "@radix-ui/react-separator": "1.1.11",
- "@radix-ui/react-toggle-group": "1.1.15"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-roving-focus": "1.1.20",
+ "@radix-ui/react-separator": "1.1.16",
+ "@radix-ui/react-toggle-group": "1.1.20"
},
"peerDependencies": {
"@types/react": "*",
@@ -4524,23 +4656,24 @@
}
},
"node_modules/@radix-ui/react-tooltip": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.12.tgz",
- "integrity": "sha512-U3HoftgWnmla78vzQbLvKKb7bUYJxoiiqYFzp1wu/TBMyDqMZSuCl3aRICsD6EfVEwcJD2mumGDGUXLFVqQHKA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-popper": "1.3.3",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-slot": "1.3.0",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-visually-hidden": "1.2.7"
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.3.0.tgz",
+ "integrity": "sha512-4HM4b1Cft1CBXCGDRDG3S/fh8GedBuVOMNh145wMIfTbVqcuv+tyj03nZqYgFevWJMYo58H0s+8P6s6NaUHWtA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-id": "1.1.4",
+ "@radix-ui/react-popper": "1.3.8",
+ "@radix-ui/react-portal": "1.1.18",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-slot": "1.4.0",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
+ "@radix-ui/react-visually-hidden": "1.2.12"
},
"peerDependencies": {
"@types/react": "*",
@@ -4558,9 +4691,9 @@
}
},
"node_modules/@radix-ui/react-use-callback-ref": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.2.tgz",
- "integrity": "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.4.tgz",
+ "integrity": "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -4573,13 +4706,14 @@
}
},
"node_modules/@radix-ui/react-use-controllable-state": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.3.tgz",
- "integrity": "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==",
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.6.tgz",
+ "integrity": "sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-use-effect-event": "0.0.3",
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-use-effect-event": "0.0.5",
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -4592,12 +4726,12 @@
}
},
"node_modules/@radix-ui/react-use-effect-event": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.3.tgz",
- "integrity": "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==",
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.5.tgz",
+ "integrity": "sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -4610,12 +4744,12 @@
}
},
"node_modules/@radix-ui/react-use-escape-keydown": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.3.tgz",
- "integrity": "sha512-3wEkMiPHXha/2VadZ68rYBcmYnPINVGl4Y3gtcM7fKRjANk0OscK+cdqBgUWdozb7YJxsh0vefM7vgAMHXOjqg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.5.tgz",
+ "integrity": "sha512-ge3ipobwSXTj4JyVtswQ7qZj0ZHdtbGuOno/LrgAAeSxtsJ6Vs4Gz5IkPH2bmqpjcLUFoqGhA/mueuIf63UXlA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-use-callback-ref": "1.1.2"
+ "@radix-ui/react-use-callback-ref": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -4628,9 +4762,9 @@
}
},
"node_modules/@radix-ui/react-use-is-hydrated": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.1.tgz",
- "integrity": "sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==",
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.3.tgz",
+ "integrity": "sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -4643,9 +4777,9 @@
}
},
"node_modules/@radix-ui/react-use-layout-effect": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz",
- "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.4.tgz",
+ "integrity": "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -4658,9 +4792,9 @@
}
},
"node_modules/@radix-ui/react-use-previous": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.2.tgz",
- "integrity": "sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.4.tgz",
+ "integrity": "sha512-XoSLhbRbqxFtgJoi2fNHA3C6pDlY34x508vUpUGoFZfvePfHXHbE1lC4FYFMnJWgiCRroSTw6fOsXQoVS9RwZg==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -4673,12 +4807,12 @@
}
},
"node_modules/@radix-ui/react-use-rect": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.2.tgz",
- "integrity": "sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.4.tgz",
+ "integrity": "sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/rect": "1.1.2"
+ "@radix-ui/rect": "1.1.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -4691,12 +4825,12 @@
}
},
"node_modules/@radix-ui/react-use-size": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.2.tgz",
- "integrity": "sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.5.tgz",
+ "integrity": "sha512-V1McDQkMGzgivwqdu7u96APs7oi0Jvj9LTzgq3WWrDZqxWdAqU9yZnZQqk5OizGFR8badUQwZsrlao7MOlWYOA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.2"
+ "@radix-ui/react-use-layout-effect": "1.1.4"
},
"peerDependencies": {
"@types/react": "*",
@@ -4709,12 +4843,12 @@
}
},
"node_modules/@radix-ui/react-visually-hidden": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.7.tgz",
- "integrity": "sha512-1wNZBggTDK3GRuuQ6nP4k2yi7a6l7I5qbMPbZcRsrGsGVead/f/d5FhEzUvqFs0bcrDLx7n1zKQ3JvLR6whaaw==",
+ "version": "1.2.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.12.tgz",
+ "integrity": "sha512-/iPLVHRBzKWvekN+5xaDmXw80f+nleYYceomVORrGjuJe0LF2SCbSH4f/LG4hu32q92QSuPZx4hmSACYBVBfzQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.7"
+ "@radix-ui/react-primitive": "2.1.11"
},
"peerDependencies": {
"@types/react": "*",
@@ -4732,9 +4866,9 @@
}
},
"node_modules/@radix-ui/rect": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.2.tgz",
- "integrity": "sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.3.tgz",
+ "integrity": "sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw==",
"license": "MIT"
},
"node_modules/@react-email/render": {
@@ -4757,27 +4891,24 @@
}
},
"node_modules/@redis/bloom": {
- "version": "5.12.1",
- "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.12.1.tgz",
- "integrity": "sha512-PUUfv+ms7jgPSBVoo/DN4AkPHj4D5TZSd6SbJX7egzBplkYUcKmHRE8RKia7UtZ8bSQbLguLvxVO+asKtQfZWA==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-6.3.0.tgz",
+ "integrity": "sha512-NQ5poYpZr0jv6zazN1cy6JY5kIipKFZ3R9GTL4kOUTX3a9YAfY29U8bsE4lWhVQEM+G4V0BXVC57mubIdDijeA==",
"license": "MIT",
"engines": {
- "node": ">= 18.19.0"
+ "node": ">= 20.0.0"
},
"peerDependencies": {
- "@redis/client": "^5.12.1"
+ "@redis/client": "^6.3.0"
}
},
"node_modules/@redis/client": {
- "version": "5.12.1",
- "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.12.1.tgz",
- "integrity": "sha512-7aPGWeqA3uFm43o19umzdl16CEjK/JQGtSXVPevplTaOU3VJA/rseBC1QvYUz9lLDIMBimc4SW/zrW4S89BaCA==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/@redis/client/-/client-6.3.0.tgz",
+ "integrity": "sha512-fHrjwGCBvAANGi+TuRuwKi83sIOzgHr8eh+Uf48w3fSX7Hhrz174NrWqfJhAC2vnN0d/tfaZpdr6+o6JC3QHwg==",
"license": "MIT",
- "dependencies": {
- "cluster-key-slot": "1.1.2"
- },
"engines": {
- "node": ">= 18.19.0"
+ "node": ">= 20.0.0"
},
"peerDependencies": {
"@node-rs/xxhash": "^1.1.0",
@@ -4793,45 +4924,61 @@
}
},
"node_modules/@redis/json": {
- "version": "5.12.1",
- "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.12.1.tgz",
- "integrity": "sha512-eOze75esLve4vfqDel7aMX08CNaiLLQS2fV8mpRN9NxPe1rVR4vQyYiW/OgtGUysF6QOr9ANhfxABKNOJfXdKg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/@redis/json/-/json-6.3.0.tgz",
+ "integrity": "sha512-yt6vRfPBXtW/3qm53cF81TSQpLMjWdW4/2E9WQ2GgbvsKkuCKCFQIcMiKlil1ZMnezK+IQuS795xKU5psbaegw==",
"license": "MIT",
"engines": {
- "node": ">= 18.19.0"
+ "node": ">= 20.0.0"
},
"peerDependencies": {
- "@redis/client": "^5.12.1"
+ "@redis/client": "^6.3.0"
}
},
"node_modules/@redis/search": {
- "version": "5.12.1",
- "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.12.1.tgz",
- "integrity": "sha512-ItlxbxC9cKI6IU1TLWoczwJCRb6TdmkEpWv05UrPawqaAnWGRu3rcIqsc5vN483T2fSociuyV1UkWIL5I4//2w==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/@redis/search/-/search-6.3.0.tgz",
+ "integrity": "sha512-RPXAZmKjZZG7Tm7m1w9keFdXzbL91PiSHQBfQRe9xwW40jNsTRbG0FwhIz4QlHPU4gKDAsCy8IQHj4yZl4H9rw==",
"license": "MIT",
"engines": {
- "node": ">= 18.19.0"
+ "node": ">= 20.0.0"
},
"peerDependencies": {
- "@redis/client": "^5.12.1"
+ "@redis/client": "^6.3.0"
}
},
"node_modules/@redis/time-series": {
- "version": "5.12.1",
- "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.12.1.tgz",
- "integrity": "sha512-c6JL6E3EcZJuNqKFz+KM+l9l5mpcQiKvTwgA3blt5glWJ8hjDk0yeHN3beE/MpqYIQ8UEX44ItQzgkE/gCBELQ==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-6.3.0.tgz",
+ "integrity": "sha512-+fJOB8mN1z5WRakCJNh5lVdz1KqvHGSOistsKeitD24QsCtPwyRQXWC0iq6T/i/ubLE/YcguZqPm8F598MKk4A==",
"license": "MIT",
"engines": {
- "node": ">= 18.19.0"
+ "node": ">= 20.0.0"
},
"peerDependencies": {
- "@redis/client": "^5.12.1"
+ "@redis/client": "^6.3.0"
+ }
+ },
+ "node_modules/@rolldown/binding-android-arm-eabi": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.13.tgz",
+ "integrity": "sha512-Vu/NICrgdRvUOeaJZIyB2FP63s6fO/4ud5l8dXmxDx9yDyn+mN0y+gsvsVviSli+T361Aqo0h46EuMoobrwawA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-android-arm64": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz",
- "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.13.tgz",
+ "integrity": "sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==",
"cpu": [
"arm64"
],
@@ -4845,9 +4992,9 @@
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz",
- "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.13.tgz",
+ "integrity": "sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==",
"cpu": [
"arm64"
],
@@ -4861,9 +5008,9 @@
}
},
"node_modules/@rolldown/binding-darwin-x64": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz",
- "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.13.tgz",
+ "integrity": "sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==",
"cpu": [
"x64"
],
@@ -4877,9 +5024,9 @@
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz",
- "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.13.tgz",
+ "integrity": "sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==",
"cpu": [
"x64"
],
@@ -4893,9 +5040,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz",
- "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.13.tgz",
+ "integrity": "sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==",
"cpu": [
"arm"
],
@@ -4909,9 +5056,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz",
- "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.13.tgz",
+ "integrity": "sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==",
"cpu": [
"arm64"
],
@@ -4925,9 +5072,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz",
- "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.13.tgz",
+ "integrity": "sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==",
"cpu": [
"arm64"
],
@@ -4941,9 +5088,9 @@
}
},
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz",
- "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.13.tgz",
+ "integrity": "sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==",
"cpu": [
"ppc64"
],
@@ -4957,9 +5104,9 @@
}
},
"node_modules/@rolldown/binding-linux-s390x-gnu": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz",
- "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.13.tgz",
+ "integrity": "sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==",
"cpu": [
"s390x"
],
@@ -4973,9 +5120,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz",
- "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.13.tgz",
+ "integrity": "sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==",
"cpu": [
"x64"
],
@@ -4989,9 +5136,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz",
- "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.13.tgz",
+ "integrity": "sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==",
"cpu": [
"x64"
],
@@ -5005,9 +5152,9 @@
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz",
- "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.13.tgz",
+ "integrity": "sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==",
"cpu": [
"arm64"
],
@@ -5020,59 +5167,10 @@
"node": "^20.19.0 || >=22.12.0"
}
},
- "node_modules/@rolldown/binding-wasm32-wasi": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz",
- "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==",
- "cpu": [
- "wasm32"
- ],
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "1.11.1",
- "@emnapi/runtime": "1.11.1",
- "@napi-rs/wasm-runtime": "^1.1.6"
- },
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- }
- },
- "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
- "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.2.2",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
- "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
- "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
"node_modules/@rolldown/binding-win32-arm64-msvc": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz",
- "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.13.tgz",
+ "integrity": "sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==",
"cpu": [
"arm64"
],
@@ -5086,9 +5184,9 @@
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz",
- "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.13.tgz",
+ "integrity": "sha512-UKhFaZTeTcbKrb3iU82m17jVcPEAoqDkCN5MBqgPyZSwp/cQmib21crTS0DdH7T1B7wZRWEI89YQAOJMet5yhg==",
"cpu": [
"x64"
],
@@ -5133,6 +5231,75 @@
"url": "https://ko-fi.com/killymxi"
}
},
+ "node_modules/@shadcn/registry": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@shadcn/registry/-/registry-0.1.3.tgz",
+ "integrity": "sha512-82/OmKAVM9pChDHFVAsDP9PcimPGSKZGdbcdwdGGGcSI69ImpN4ZnqsfZ4hkOFEMal92t3y9djYJHMjO4PcVZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.28.0",
+ "@babel/parser": "^7.28.0",
+ "@babel/plugin-transform-typescript": "^7.28.0",
+ "@babel/preset-typescript": "^7.27.1",
+ "@dotenvx/dotenvx": "^1.48.4",
+ "cn": "^0.2.4",
+ "code-block-writer": "^13.0.3",
+ "deepmerge": "^4.3.1",
+ "execa": "^9.6.0",
+ "fast-glob": "^3.3.3",
+ "fs-extra": "^11.3.1",
+ "fuzzysort": "^3.1.0",
+ "kleur": "^4.1.5",
+ "ora": "^8.2.0",
+ "postcss": "^8.5.23",
+ "prompts": "^2.4.2",
+ "recast": "^0.23.11",
+ "socks": "^2.8.8",
+ "stringify-object": "^5.0.0",
+ "tsconfig-paths": "^4.2.0",
+ "type-fest": "^4.41.0",
+ "undici": "^7.29.0",
+ "zod": "^3.24.1"
+ },
+ "engines": {
+ "node": ">=20.18.1"
+ }
+ },
+ "node_modules/@shadcn/registry/node_modules/fs-extra": {
+ "version": "11.4.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.1.tgz",
+ "integrity": "sha512-KYAb4c9BJQI6QqGKthV68OHe0badztdXJWKo0WtBA9IuCFPTKvE5ZdUBglP833aMjhaSPNO4A5j/EkzZtGlKjA==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/@shadcn/registry/node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@shadcn/registry/node_modules/zod": {
+ "version": "3.25.76",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
"node_modules/@simple-libs/child-process-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-2.0.0.tgz",
@@ -5193,12 +5360,6 @@
"integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==",
"license": "MIT"
},
- "node_modules/@standard-schema/spec": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
- "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
- "license": "MIT"
- },
"node_modules/@swc/helpers": {
"version": "0.5.23",
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz",
@@ -5222,19 +5383,19 @@
}
},
"node_modules/@tailwindcss/node": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.2.tgz",
- "integrity": "sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz",
+ "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/remapping": "^2.3.5",
- "enhanced-resolve": "5.21.6",
+ "enhanced-resolve": "^5.24.1",
"jiti": "^2.7.0",
"lightningcss": "1.32.0",
"magic-string": "^0.30.21",
"source-map-js": "^1.2.1",
- "tailwindcss": "4.3.2"
+ "tailwindcss": "4.3.3"
}
},
"node_modules/@tailwindcss/node/node_modules/jiti": {
@@ -5247,319 +5408,599 @@
"jiti": "lib/jiti-cli.mjs"
}
},
- "node_modules/@tailwindcss/oxide": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.2.tgz",
- "integrity": "sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.3.2",
- "@tailwindcss/oxide-darwin-arm64": "4.3.2",
- "@tailwindcss/oxide-darwin-x64": "4.3.2",
- "@tailwindcss/oxide-freebsd-x64": "4.3.2",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.2",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.3.2",
- "@tailwindcss/oxide-linux-arm64-musl": "4.3.2",
- "@tailwindcss/oxide-linux-x64-gnu": "4.3.2",
- "@tailwindcss/oxide-linux-x64-musl": "4.3.2",
- "@tailwindcss/oxide-wasm32-wasi": "4.3.2",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.3.2",
- "@tailwindcss/oxide-win32-x64-msvc": "4.3.2"
+ "lightningcss-android-arm64": "1.32.0",
+ "lightningcss-darwin-arm64": "1.32.0",
+ "lightningcss-darwin-x64": "1.32.0",
+ "lightningcss-freebsd-x64": "1.32.0",
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
+ "lightningcss-linux-arm64-gnu": "1.32.0",
+ "lightningcss-linux-arm64-musl": "1.32.0",
+ "lightningcss-linux-x64-gnu": "1.32.0",
+ "lightningcss-linux-x64-musl": "1.32.0",
+ "lightningcss-win32-arm64-msvc": "1.32.0",
+ "lightningcss-win32-x64-msvc": "1.32.0"
}
},
- "node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.2.tgz",
- "integrity": "sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-android-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
"cpu": [
"arm64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.2.tgz",
- "integrity": "sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
"cpu": [
"arm64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.2.tgz",
- "integrity": "sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
"cpu": [
"x64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.2.tgz",
- "integrity": "sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-freebsd-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
"cpu": [
"x64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"freebsd"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.2.tgz",
- "integrity": "sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
"cpu": [
"arm"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.2.tgz",
- "integrity": "sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
"cpu": [
"arm64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.2.tgz",
- "integrity": "sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
"cpu": [
"arm64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.2.tgz",
- "integrity": "sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
"cpu": [
"x64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.2.tgz",
- "integrity": "sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
"cpu": [
"x64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 20"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.2.tgz",
- "integrity": "sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==",
- "bundleDependencies": [
- "@napi-rs/wasm-runtime",
- "@emnapi/core",
- "@emnapi/runtime",
- "@tybys/wasm-util",
- "@emnapi/wasi-threads",
- "tslib"
- ],
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.11.1",
- "@emnapi/runtime": "^1.11.1",
- "@emnapi/wasi-threads": "^1.2.2",
- "@napi-rs/wasm-runtime": "^1.1.4",
- "@tybys/wasm-util": "^0.10.2",
- "tslib": "^2.8.1"
+ "node": ">= 12.0.0"
},
- "engines": {
- "node": ">=14.0.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.2.tgz",
- "integrity": "sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
"cpu": [
"arm64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.2.tgz",
- "integrity": "sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==",
+ "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
"cpu": [
"x64"
],
"dev": true,
- "license": "MIT",
+ "license": "MPL-2.0",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">= 20"
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@tailwindcss/vite": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.2.tgz",
- "integrity": "sha512-eHpMeX4JXfVNJDEcsouTeCBubJBTcTLigeaw/NTUW6PB5ATKKXdyonnXgTBX2VuRbjz1hjfz6C5XAhr52ImQXA==",
+ "node_modules/@tailwindcss/node/node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tailwindcss/node": "4.3.2",
- "@tailwindcss/oxide": "4.3.2",
- "tailwindcss": "4.3.2"
- },
- "peerDependencies": {
- "vite": "^5.2.0 || ^6 || ^7 || ^8"
+ "@jridgewell/sourcemap-codec": "^1.5.5"
}
},
- "node_modules/@testing-library/dom": {
- "version": "10.4.1",
- "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
- "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz",
+ "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==",
"dev": true,
"license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/runtime": "^7.12.5",
- "@types/aria-query": "^5.0.1",
- "aria-query": "5.3.0",
- "dom-accessibility-api": "^0.5.9",
- "lz-string": "^1.5.0",
- "picocolors": "1.1.1",
- "pretty-format": "^27.0.2"
- },
"engines": {
- "node": ">=18"
+ "node": ">= 20"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.3.3",
+ "@tailwindcss/oxide-darwin-arm64": "4.3.3",
+ "@tailwindcss/oxide-darwin-x64": "4.3.3",
+ "@tailwindcss/oxide-freebsd-x64": "4.3.3",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.3.3",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.3.3",
+ "@tailwindcss/oxide-linux-x64-musl": "4.3.3",
+ "@tailwindcss/oxide-wasm32-wasi": "4.3.3",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.3.3"
}
},
- "node_modules/@testing-library/jest-dom": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz",
- "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==",
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz",
+ "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "@adobe/css-tools": "^4.4.0",
- "aria-query": "^5.0.0",
- "css.escape": "^1.5.1",
- "dom-accessibility-api": "^0.6.3",
- "picocolors": "^1.1.1",
- "redent": "^3.0.0"
- },
+ "optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=14",
- "npm": ">=6",
- "yarn": ">=1"
+ "node": ">= 20"
}
},
- "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
- "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz",
+ "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
},
- "node_modules/@testing-library/react": {
- "version": "16.3.2",
- "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz",
- "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==",
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz",
+ "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.12.5"
- },
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz",
+ "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz",
+ "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz",
+ "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz",
+ "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz",
+ "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz",
+ "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz",
+ "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==",
+ "bundleDependencies": [
+ "@napi-rs/wasm-runtime",
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util",
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.11.1",
+ "@emnapi/runtime": "^1.11.1",
+ "@emnapi/wasi-threads": "^1.2.2",
+ "@napi-rs/wasm-runtime": "^1.1.4",
+ "@tybys/wasm-util": "^0.10.2",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz",
+ "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz",
+ "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/@tailwindcss/vite": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz",
+ "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tailwindcss/node": "4.3.3",
+ "@tailwindcss/oxide": "4.3.3",
+ "tailwindcss": "4.3.3"
+ },
+ "peerDependencies": {
+ "vite": "^5.2.0 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.2.tgz",
+ "integrity": "sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "picocolors": "1.1.1",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/jest-dom": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-7.0.1.tgz",
+ "integrity": "sha512-oMDTC3oA+6CXSO2JZnvOI7CA6oVub6kij5ggk9ohwye5slmkwxYDXcPOVxgMw/RQlticjtO0C1RZkR97HgrWMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@adobe/css-tools": "^4.4.0",
+ "aria-query": "^5.0.0",
+ "css.escape": "^1.5.1",
+ "dom-accessibility-api": "^0.6.3",
+ "picocolors": "^1.1.1",
+ "redent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=22",
+ "npm": ">=6",
+ "yarn": ">=1"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": ">=10 <11",
+ "vitest": ">= 0.32"
+ },
+ "peerDependenciesMeta": {
+ "vitest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
+ "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@testing-library/react": {
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.3.tgz",
+ "integrity": "sha512-Uo193NgQbPMz6lrrhtRQQFcMC6Re/ELLFbbuVL30WDlZxlpZf9/lMHTAVxPRLw1q1iu9OJmR1c2BLiENRstdBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5"
+ },
"engines": {
"node": ">=18"
},
@@ -5590,52 +6031,6 @@
"path-browserify": "^1.0.1"
}
},
- "node_modules/@ts-morph/common/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@ts-morph/common/node_modules/brace-expansion": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
- "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@ts-morph/common/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.5"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
- "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
"node_modules/@types/aria-query": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
@@ -5672,6 +6067,7 @@
"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": "*",
@@ -5719,6 +6115,7 @@
"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/esrecurse": {
@@ -5732,6 +6129,7 @@
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
"integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/@types/express": {
@@ -5747,9 +6145,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.2.tgz",
- "integrity": "sha512-d3KvEXBSo/lOAMc2u6fkyDHBvetBHeqD7wm/AcXfLpSOQwlmG9D/aQ0SFswVjv05p7ullQS7Mjohj6/VdbZuTg==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.3.tgz",
+ "integrity": "sha512-dPfW8NFiOF4wOHc7+N/QSxlY9cfSsenewGbAz8C8U/MULPd/YZ27LvJUIlzaXie7e6Ove9YunJGgC9tbHD2cKw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5814,22 +6212,15 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "25.9.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.5.tgz",
- "integrity": "sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==",
+ "version": "26.6.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz",
+ "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==",
"devOptional": true,
"license": "MIT",
"dependencies": {
- "undici-types": ">=7.24.0 <7.24.7"
+ "undici-types": "~8.9.0"
}
},
- "node_modules/@types/node/node_modules/undici-types": {
- "version": "7.24.6",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz",
- "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
- "devOptional": true,
- "license": "MIT"
- },
"node_modules/@types/pdfkit": {
"version": "0.17.6",
"resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.17.6.tgz",
@@ -5841,9 +6232,9 @@
}
},
"node_modules/@types/pg": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz",
- "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==",
+ "version": "8.23.1",
+ "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.23.1.tgz",
+ "integrity": "sha512-fKVHpikPdg4GKks3JuLEhvwSyvwzF23hnabPy6DD8ljVbC7+6J5dQzdv4arV6jqq57djnMgs1HKBxX4P8aBI3A==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -5878,9 +6269,9 @@
"license": "MIT"
},
"node_modules/@types/react": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz",
- "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==",
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz",
+ "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -5888,13 +6279,13 @@
}
},
"node_modules/@types/react-dom": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
- "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz",
+ "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==",
"devOptional": true,
"license": "MIT",
"peerDependencies": {
- "@types/react": "^19.2.0"
+ "@types/react": "^19.3.0"
}
},
"node_modules/@types/responselike": {
@@ -5929,9 +6320,9 @@
}
},
"node_modules/@types/superagent": {
- "version": "8.1.10",
- "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.10.tgz",
- "integrity": "sha512-nbt4IWXABhW0jGmmpRzCFNlbmwCTzZ2gTUsNIr+X+ItdqPms+PAJZbWsNzpS2USqXjcoNLQcO6nXo60zcPQiIg==",
+ "version": "8.1.11",
+ "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.11.tgz",
+ "integrity": "sha512-KA7srSW/HENDtOw9DOqaFLgWuMqN9WgjEw62lh9dpvRaZDkhdOkazASd7X7i2eMUYLHa1U37ZttnePsH5zTDHw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5942,9 +6333,9 @@
}
},
"node_modules/@types/supertest": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-7.2.0.tgz",
- "integrity": "sha512-uh2Lv57xvggst6lCqNdFAmDSvoMG7M/HDtX4iUCquxQ5EGPtaPM5PL5Hmi7LCvOG8db7YaCPNJEeoI8s/WzIQw==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-7.2.1.tgz",
+ "integrity": "sha512-4CbBvoYVLHL7+yhbYrZET0vsvuyXTC05aRe7dNQkwMzm56auceoy6Yu3K50uZmwfHna1os3CMSgM/3QVkUtPTw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5977,17 +6368,17 @@
"license": "MIT"
},
"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",
- "integrity": "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.1.tgz",
+ "integrity": "sha512-nNlBf6HuotqMgZvSkWD5hNdemiBIxQ2NmrlgfcUIeZRs+BbakjscCQRq/Hb74EFVnFiSWWdL12JruqwBy3ERDw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.63.0",
- "@typescript-eslint/type-utils": "8.63.0",
- "@typescript-eslint/utils": "8.63.0",
- "@typescript-eslint/visitor-keys": "8.63.0",
+ "@typescript-eslint/scope-manager": "8.71.1",
+ "@typescript-eslint/type-utils": "8.71.1",
+ "@typescript-eslint/utils": "8.71.1",
+ "@typescript-eslint/visitor-keys": "8.71.1",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.5.0"
@@ -6000,15 +6391,15 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.63.0",
+ "@typescript-eslint/parser": "^8.71.1",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz",
+ "integrity": "sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6016,16 +6407,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.63.0.tgz",
- "integrity": "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.1.tgz",
+ "integrity": "sha512-oM/5sAqz/l1v/zYK1qTOPrn2+JIrBGC1V6uNYucRO5gh6eT9vWJ/RhPbGE59byvZEUQ4VP6XkLBaS5Jti5jpvw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.63.0",
- "@typescript-eslint/types": "8.63.0",
- "@typescript-eslint/typescript-estree": "8.63.0",
- "@typescript-eslint/visitor-keys": "8.63.0",
+ "@typescript-eslint/scope-manager": "8.71.1",
+ "@typescript-eslint/types": "8.71.1",
+ "@typescript-eslint/typescript-estree": "8.71.1",
+ "@typescript-eslint/visitor-keys": "8.71.1",
"debug": "^4.4.3"
},
"engines": {
@@ -6041,14 +6432,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.63.0.tgz",
- "integrity": "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.1.tgz",
+ "integrity": "sha512-Oijc9RUsohHjncg6iGi7gCtjnEjYt9FWv9u6ygK8uKcHK5eLjLAkqERQ9BaytbpceOFdk6kifPCS/zAZE+A99g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.63.0",
- "@typescript-eslint/types": "^8.63.0",
+ "@typescript-eslint/tsconfig-utils": "^8.71.1",
+ "@typescript-eslint/types": "^8.71.1",
"debug": "^4.4.3"
},
"engines": {
@@ -6063,14 +6454,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.63.0.tgz",
- "integrity": "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.1.tgz",
+ "integrity": "sha512-1YUDZXdTnXLlob03SFHBipdyMBsDVm7zoSz0ytTJ39dk5J1TgsTK03VlR/dLXG/RLLUrPcYbD4rp23BmHxHP0w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.63.0",
- "@typescript-eslint/visitor-keys": "8.63.0"
+ "@typescript-eslint/types": "8.71.1",
+ "@typescript-eslint/visitor-keys": "8.71.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -6081,9 +6472,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.63.0.tgz",
- "integrity": "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.1.tgz",
+ "integrity": "sha512-oTvkml5SxXhgg+WWKhod5qWQICDXtOB+/Hi9VdPKFAANJ2b7YOgMffgvzXuqog7R6A/JtrzRf128dsxummyWhg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6098,15 +6489,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.63.0.tgz",
- "integrity": "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.1.tgz",
+ "integrity": "sha512-kH3t3jZCYv2PZSBEWPKTariLrCaoF1CLoPitYFBJOhAGEwWnSRAtGEifrfrpBa4K9JlwWNZotgA5w3/wLSk/FQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.63.0",
- "@typescript-eslint/typescript-estree": "8.63.0",
- "@typescript-eslint/utils": "8.63.0",
+ "@typescript-eslint/types": "8.71.1",
+ "@typescript-eslint/typescript-estree": "8.71.1",
+ "@typescript-eslint/utils": "8.71.1",
"debug": "^4.4.3",
"ts-api-utils": "^2.5.0"
},
@@ -6123,9 +6514,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.63.0.tgz",
- "integrity": "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.1.tgz",
+ "integrity": "sha512-ybYnPTUwg3VQQOFEiBPLs8Jxl1ry2vXdn1kVKguomBbvxpetdu3MKTNDqFNUrlG8ylP9MpZosmXMFYlGQHk1oQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6137,16 +6528,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.63.0.tgz",
- "integrity": "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.1.tgz",
+ "integrity": "sha512-pSKSEK1JJpHs6KiKVtABCE4iJK5d7FLFzDXQNBQ2oRY7LEd3UwOt3TZemTgu9syTIf56dJWlTn/pdmrO9oKUXQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.63.0",
- "@typescript-eslint/tsconfig-utils": "8.63.0",
- "@typescript-eslint/types": "8.63.0",
- "@typescript-eslint/visitor-keys": "8.63.0",
+ "@typescript-eslint/project-service": "8.71.1",
+ "@typescript-eslint/tsconfig-utils": "8.71.1",
+ "@typescript-eslint/types": "8.71.1",
+ "@typescript-eslint/visitor-keys": "8.71.1",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
@@ -6164,56 +6555,17 @@
"typescript": ">=4.8.4 <6.1.0"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
- "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.5"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/@typescript-eslint/utils": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz",
- "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.1.tgz",
+ "integrity": "sha512-CBjT6gfAz3DW2j9Q4moFnqt208Aq+506sVGXfpRcyAeqn0EpayL0mjdWoCO2t3RC7GewNrFxdeehuEaPg6DMzQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.63.0",
- "@typescript-eslint/types": "8.63.0",
- "@typescript-eslint/typescript-estree": "8.63.0"
+ "@typescript-eslint/scope-manager": "8.71.1",
+ "@typescript-eslint/types": "8.71.1",
+ "@typescript-eslint/typescript-estree": "8.71.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -6228,13 +6580,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz",
- "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.1.tgz",
+ "integrity": "sha512-0GxiUGqMU0qXJt58cBsiG3DP8lUmBaFo2vChtUX+CT7PnR3v/VGLLrzVP4K9r1lNiZXjHYefMBbPunplr09v6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.63.0",
+ "@typescript-eslint/types": "8.71.1",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -6245,19 +6597,6 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
- "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
"node_modules/@unpic/core": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@unpic/core/-/core-1.0.3.tgz",
@@ -6287,9 +6626,9 @@
}
},
"node_modules/@vitejs/plugin-react": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.3.tgz",
- "integrity": "sha512-vmFvco5/QuC2f9Oj+wTk0+9XeDFkHxSamwZKYc7MxYwKICfvUvlMhqKI0VuICPltGqh1neqBKDvO4kes1ya8vg==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz",
+ "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6301,6 +6640,7 @@
"peerDependencies": {
"@rolldown/plugin-babel": "^0.1.7 || ^0.2.0",
"babel-plugin-react-compiler": "^1.0.0",
+ "oxc-transform-react": "^0.152.0",
"vite": "^8.0.0"
},
"peerDependenciesMeta": {
@@ -6309,32 +6649,34 @@
},
"babel-plugin-react-compiler": {
"optional": true
+ },
+ "oxc-transform-react": {
+ "optional": true
}
}
},
"node_modules/@vitest/coverage-v8": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.8.tgz",
- "integrity": "sha512-lt3kovsyHwYe00wq4D1ti0Z974fWj4NLp6siqiyEufUpyFwK9Yhi7rBhac9JL5aA0zoMrJqc4vYPZRUnI7l7nw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-5.0.3.tgz",
+ "integrity": "sha512-+klsyz7BvT1vCU28Zkfzms1Ia78XD0V41U3FUtRaa3S+vOr/EXvK1O6BvVD7l1RzEjm6SONR2aybOvDDf9u0mQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@bcoe/v8-coverage": "^1.0.2",
- "@vitest/utils": "4.1.8",
- "ast-v8-to-istanbul": "^1.0.0",
- "istanbul-lib-coverage": "^3.2.2",
- "istanbul-lib-report": "^3.0.1",
- "istanbul-reports": "^3.2.0",
- "magicast": "^0.5.2",
- "obug": "^2.1.1",
- "std-env": "^4.0.0-rc.1",
- "tinyrainbow": "^3.1.0"
+ "@vitest/istanbul-lib-coverage": "^1.0.0",
+ "@vitest/istanbul-lib-report": "^1.0.0",
+ "ast-v8-to-istanbul": "^1.0.5",
+ "magicast": "^0.5.4",
+ "obug": "^2.1.4",
+ "std-env": "^4.2.0",
+ "tinyrainbow": "^3.1.1"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "@vitest/browser": "4.1.8",
- "vitest": "4.1.8"
+ "@vitest/browser": "5.0.3",
+ "vitest": "5.0.3"
},
"peerDependenciesMeta": {
"@vitest/browser": {
@@ -6342,32 +6684,40 @@
}
}
},
- "node_modules/@vitest/expect": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.8.tgz",
- "integrity": "sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==",
+ "node_modules/@vitest/istanbul-lib-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.2.tgz",
+ "integrity": "sha512-9J/JMwOf9AoJhAywhrn7ScKTL38hsWQP/qPG60OtaAFcQ5OXPwKsxZFlbnuCKmZ61m8/lGgHYnFpdyQZUvG/iA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=22"
+ }
+ },
+ "node_modules/@vitest/istanbul-lib-report": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@vitest/istanbul-lib-report/-/istanbul-lib-report-1.0.2.tgz",
+ "integrity": "sha512-gUsfXZJbzPamoIY5TvHFiMMoXESBrUMo+xqaj+rYrWI69+EnvRlYBlP96ZnHPY4vX8kyUpgAnFUCg5wZG/HkDQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@standard-schema/spec": "^1.1.0",
- "@types/chai": "^5.2.2",
- "@vitest/spy": "4.1.8",
- "@vitest/utils": "4.1.8",
- "chai": "^6.2.2",
- "tinyrainbow": "^3.1.0"
+ "@vitest/istanbul-lib-coverage": "1.0.2"
},
- "funding": {
- "url": "https://opencollective.com/vitest"
+ "engines": {
+ "node": ">=22"
}
},
"node_modules/@vitest/mocker": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.8.tgz",
- "integrity": "sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.3.tgz",
+ "integrity": "sha512-T8sWAIbkSyAjkwTcaEc3Iu0o9A27X1/kdXrizhZkGuSKScRQtRzclfAMpOTcGdXCsqxeWlpGy3XjqaW8CpLORg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "4.1.8",
+ "@jridgewell/trace-mapping": "0.3.31",
+ "@vitest/spy": "5.0.3",
"estree-walker": "^3.0.3",
- "magic-string": "^0.30.21"
+ "magic-string": "^1.2.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
@@ -6385,73 +6735,20 @@
}
}
},
- "node_modules/@vitest/pretty-format": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.8.tgz",
- "integrity": "sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==",
- "license": "MIT",
- "dependencies": {
- "tinyrainbow": "^3.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/runner": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.8.tgz",
- "integrity": "sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==",
- "license": "MIT",
- "dependencies": {
- "@vitest/utils": "4.1.8",
- "pathe": "^2.0.3"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/snapshot": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.8.tgz",
- "integrity": "sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==",
- "license": "MIT",
- "dependencies": {
- "@vitest/pretty-format": "4.1.8",
- "@vitest/utils": "4.1.8",
- "magic-string": "^0.30.21",
- "pathe": "^2.0.3"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
"node_modules/@vitest/spy": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.8.tgz",
- "integrity": "sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==",
- "license": "MIT",
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/utils": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.8.tgz",
- "integrity": "sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.3.tgz",
+ "integrity": "sha512-XhFysQTB8AZ+P4gMi+Lpo99vg2AZi0qKpaB9yXQl37+CaMEAPO3iH/wGVnSyL5MPERiLezpqTVtrR6UZH5GCXg==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@vitest/pretty-format": "4.1.8",
- "convert-source-map": "^2.0.0",
- "tinyrainbow": "^3.1.0"
- },
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@xmldom/xmldom": {
- "version": "0.8.13",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz",
- "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==",
+ "version": "0.8.15",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.15.tgz",
+ "integrity": "sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6482,9 +6779,9 @@
}
},
"node_modules/acorn": {
- "version": "8.17.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
- "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz",
+ "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==",
"dev": true,
"license": "MIT",
"bin": {
@@ -6517,29 +6814,42 @@
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
"integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 14"
}
},
"node_modules/ajv": {
- "version": "6.15.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
- "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
- "dev": true,
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
"license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ajv-draft-04": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
+ "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^8.5.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
"node_modules/ajv-formats": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
@@ -6557,28 +6867,6 @@
}
}
},
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
- "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
"node_modules/ansi-colors": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
@@ -6588,29 +6876,16 @@
"node": ">=6"
}
},
- "node_modules/ansi-escapes": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz",
- "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==",
- "dev": true,
+ "node_modules/ansi-regex": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz",
+ "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==",
"license": "MIT",
- "dependencies": {
- "environment": "^1.0.0"
- },
"engines": {
- "node": ">=18"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/ansi-styles": {
@@ -6650,6 +6925,19 @@
"node": ">= 8"
}
},
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/app-builder-lib": {
"version": "26.15.3",
"resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.3.tgz",
@@ -6754,46 +7042,6 @@
"semver": "bin/semver.js"
}
},
- "node_modules/app-builder-lib/node_modules/ajv": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
- "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/app-builder-lib/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/app-builder-lib/node_modules/brace-expansion": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
- "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
"node_modules/app-builder-lib/node_modules/ci-info": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
@@ -6823,33 +7071,6 @@
"url": "https://dotenvx.com"
}
},
- "node_modules/app-builder-lib/node_modules/isexe": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
- "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/app-builder-lib/node_modules/jiti": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
- "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jiti": "lib/jiti-cli.mjs"
- }
- },
- "node_modules/app-builder-lib/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/app-builder-lib/node_modules/jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -6860,22 +7081,6 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/app-builder-lib/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.5"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/app-builder-lib/node_modules/semver": {
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
@@ -6899,22 +7104,6 @@
"node": ">= 4.0.0"
}
},
- "node_modules/app-builder-lib/node_modules/which": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
- "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^3.1.1"
- },
- "bin": {
- "node-which": "bin/which.js"
- },
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
@@ -6923,15 +7112,15 @@
"license": "MIT"
},
"node_modules/argon2": {
- "version": "0.44.0",
- "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.44.0.tgz",
- "integrity": "sha512-zHPGN3S55sihSQo0dBbK0A5qpi2R31z7HZDZnry3ifOyj8bZZnpZND2gpmhnRGO1V/d555RwBqIK5W4Mrmv3ig==",
+ "version": "0.45.1",
+ "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.45.1.tgz",
+ "integrity": "sha512-skm+/WCjkGqCQxF7FG1LuZXM5yvbFjgbfiCGsud2oLgaDhh6b6dbH0b1EkghbM+xx4Bj8Ape+KKgixoIlWZicQ==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@phc/format": "^1.0.0",
- "cross-env": "^10.0.0",
- "node-addon-api": "^8.5.0",
+ "cross-env": "^10.1.0",
+ "node-addon-api": "^8.9.0",
"node-gyp-build": "^4.8.4"
},
"engines": {
@@ -6945,9 +7134,9 @@
"license": "Python-2.0"
},
"node_modules/argue-cli": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/argue-cli/-/argue-cli-3.1.0.tgz",
- "integrity": "sha512-DhBpBfXL4SS2uC0N922MMajKR3CdrTG0u2or1PNYgXMsrSzViJrbtvT0nCLlLGUI0plam/ZZCs7aAauHtW9thw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/argue-cli/-/argue-cli-3.2.0.tgz",
+ "integrity": "sha512-VipTB0gXgGIFO2Rg9yEVN5wLt2AurJcZqDbgmYSwPwsykhLrQhs240/bfceev4w68lI8JshoOJIk9uW7tFzROw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7005,15 +7194,16 @@
"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/ast-types": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
- "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
+ "version": "0.16.3",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.3.tgz",
+ "integrity": "sha512-FvWoWYfSCM6kRxCSH+MGLHIKKGRL6A6AW7Zek2O32REPQRdg131428uRTKMBYAeRd3XXAaHDS60Wpri7CdKDrA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.0.1"
@@ -7023,9 +7213,10 @@
}
},
"node_modules/ast-v8-to-istanbul": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.4.tgz",
- "integrity": "sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.7.tgz",
+ "integrity": "sha512-kFL68AG6ajd8fg248zwM9GQrUWEp79gsmjum34OEXjs4yHuUMZfYKwOLW9GMmB4oNvVrj+EAGxsP7ye2UR9UlA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.31",
@@ -7033,12 +7224,6 @@
"js-tokens": "^10.0.0"
}
},
- "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz",
- "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==",
- "license": "MIT"
- },
"node_modules/async": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
@@ -7091,9 +7276,9 @@
}
},
"node_modules/autoprefixer": {
- "version": "10.5.2",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.2.tgz",
- "integrity": "sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q==",
+ "version": "10.6.1",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.6.1.tgz",
+ "integrity": "sha512-cL1Qz6ADZhcEbny/8HPfe99J6HhNoYtpX2LFLIbhgGE7Q1hlQVkYFdetDN7Id3KiQxhDrHwzlHr/YQCnZ8+xSA==",
"dev": true,
"funding": [
{
@@ -7111,8 +7296,8 @@
],
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.4",
- "caniuse-lite": "^1.0.30001799",
+ "browserslist": "^4.28.9",
+ "caniuse-lite": "^1.0.30001810",
"fraction.js": "^5.3.4",
"picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0"
@@ -7135,13 +7320,13 @@
"license": "MIT"
},
"node_modules/axios": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz",
- "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.20.0.tgz",
+ "integrity": "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.16.0",
- "form-data": "^4.0.5",
+ "form-data": "^4.0.6",
"https-proxy-agent": "^5.0.1",
"proxy-from-env": "^2.1.0"
}
@@ -7151,11 +7336,13 @@
"link": true
},
"node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
},
"node_modules/base64-js": {
"version": "1.5.1",
@@ -7178,9 +7365,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.10.42",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz",
- "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==",
+ "version": "2.11.28",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.28.tgz",
+ "integrity": "sha512-br0LOmjJqr6Rt4AEkadbcNf67Zpo7EPwKsWbjnRrJIa1QYFHQBqM4C7F2WTbV8ahTEcg1Eo+Y0aWjjORInYFyA==",
"license": "Apache-2.0",
"bin": {
"baseline-browser-mapping": "dist/cli.cjs"
@@ -7239,19 +7426,6 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/body-parser/node_modules/content-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
- "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
"node_modules/body-parser/node_modules/iconv-lite": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",
@@ -7284,14 +7458,15 @@
"optional": true
},
"node_modules/brace-expansion": {
- "version": "1.1.16",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz",
- "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==",
- "dev": true,
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
+ "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
}
},
"node_modules/braces": {
@@ -7315,19 +7490,10 @@
"base64-js": "^1.1.2"
}
},
- "node_modules/browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "license": "MIT",
- "dependencies": {
- "pako": "~1.0.5"
- }
- },
"node_modules/browserslist": {
- "version": "4.28.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz",
- "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==",
+ "version": "4.29.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz",
+ "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==",
"funding": [
{
"type": "opencollective",
@@ -7344,11 +7510,11 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.10.42",
- "caniuse-lite": "^1.0.30001800",
- "electron-to-chromium": "^1.5.387",
- "node-releases": "^2.0.50",
- "update-browserslist-db": "^1.2.3"
+ "baseline-browser-mapping": "^2.11.26",
+ "caniuse-lite": "^1.0.30001813",
+ "electron-to-chromium": "^1.5.439",
+ "node-releases": "^2.0.57",
+ "update-browserslist-db": "^1.3.3"
},
"bin": {
"browserslist": "cli.js"
@@ -7419,34 +7585,45 @@
}
},
"node_modules/bullmq": {
- "version": "5.81.2",
- "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.81.2.tgz",
- "integrity": "sha512-Hi9GaVCC6HE9bQP65j/FNv1aL1fcEukTF99ezS5pl1Ud+joCFpNWiPCV45mWdkEmpuacS0XJdMMFGKPIHCwoPg==",
+ "version": "6.3.12",
+ "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-6.3.12.tgz",
+ "integrity": "sha512-zuPU+RbyiTzRtxVeokO0EotJ+PkHyAEXugEAYYyP+pm7bbJAbrvQR1SHW6MCUgA0e4C23/07dcOCymEe+GNGHw==",
"license": "MIT",
"dependencies": {
- "cron-parser": "4.9.0",
- "ioredis": "5.11.1",
- "msgpackr": "2.0.4",
+ "cron-parser": "5.10.1",
+ "msgpackr": "2.1.0",
"node-abort-controller": "3.1.1",
"semver": "7.8.5",
"tslib": "2.8.1"
},
"engines": {
- "node": ">=12.22.0"
+ "node": ">=14.17.0"
},
"peerDependencies": {
+ "bullmq-otel": ">=2.0.0",
+ "ioredis": ">=5.0.0",
+ "pg": ">=8.0.0",
"redis": ">=5.0.0"
},
"peerDependenciesMeta": {
+ "bullmq-otel": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "pg": {
+ "optional": true
+ },
"redis": {
"optional": true
}
}
},
"node_modules/bundle-name": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
- "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.1.tgz",
+ "integrity": "sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA==",
"license": "MIT",
"dependencies": {
"run-applescript": "^7.0.0"
@@ -7477,6 +7654,20 @@
"node": ">=6.0.0"
}
},
+ "node_modules/cacheable": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz",
+ "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cacheable/memory": "^2.2.0",
+ "@cacheable/utils": "^2.5.0",
+ "hookified": "^1.15.0",
+ "keyv": "^5.6.0",
+ "qified": "^0.10.1"
+ }
+ },
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -7506,20 +7697,14 @@
"node": ">=8"
}
},
- "node_modules/cacheable-request/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "node_modules/cacheable/node_modules/keyv": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+ "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "@keyv/serialize": "^1.1.1"
}
},
"node_modules/call-bind-apply-helpers": {
@@ -7561,22 +7746,10 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
- "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=6"
}
},
"node_modules/camelcase-css": {
@@ -7590,9 +7763,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001803",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz",
- "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==",
+ "version": "1.0.30001815",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001815.tgz",
+ "integrity": "sha512-uDybUEyfgbyJJ93J1vikTylBX31AkdVYeVPeffMQpf8XN7hSfr0oZOn4VFOIMNvtU5+rHvC5Udg2TgtJKHm23Q==",
"funding": [
{
"type": "opencollective",
@@ -7623,9 +7796,10 @@
}
},
"node_modules/chai": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
- "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz",
+ "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
@@ -7648,6 +7822,19 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/cheerio": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz",
@@ -7778,23 +7965,6 @@
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
"license": "MIT"
},
- "node_modules/cli-color": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz",
- "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "d": "^1.0.1",
- "es5-ext": "^0.10.64",
- "es6-iterator": "^2.0.3",
- "memoizee": "^0.4.15",
- "timers-ext": "^0.1.7"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/cli-cursor": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
@@ -7822,23 +7992,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cli-truncate": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
- "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "slice-ansi": "^8.0.0",
- "string-width": "^8.2.0"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cliui": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz",
@@ -7854,19 +8007,6 @@
"node": ">=20"
}
},
- "node_modules/cliui/node_modules/ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/cliui/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
@@ -7885,24 +8025,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cliui/node_modules/wrap-ansi": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
- "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.2.1",
- "string-width": "^7.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@@ -7935,14 +8057,26 @@
}
},
"node_modules/cluster-key-slot": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
- "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz",
+ "integrity": "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==",
"license": "Apache-2.0",
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/cn": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/cn/-/cn-0.2.6.tgz",
+ "integrity": "sha512-+i4L0zUGgRcEnhsxueVrP7iBGxBx5iD0WOTYg1MwFEu2ZyCmH5Ov2V1cul2Ht5UchRQQgftCf4be/RxspuW6QQ==",
+ "license": "MIT",
+ "bin": {
+ "cn": "bin/cn.mjs"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/code-block-writer": {
"version": "13.0.3",
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz",
@@ -7991,13 +8125,13 @@
}
},
"node_modules/commander": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
- "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
+ "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^12.20.0 || >=14"
+ "node": ">= 6"
}
},
"node_modules/compare-version": {
@@ -8028,15 +8162,15 @@
"license": "MIT"
},
"node_modules/concurrently": {
- "version": "9.2.3",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.3.tgz",
- "integrity": "sha512-ihjs0E2SxvDgq/MK418hX6YycQgKhsqxpbZuZbHo0yKfqDWdymWMjWYIpCIzqDDLLKClHlXev8whW/8WXmJ0BA==",
+ "version": "9.2.5",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.5.tgz",
+ "integrity": "sha512-YMZlvWrTPQEhjKp60XSmMGt60+pffbv6DyRnOMvVO98+J7aF8w8Ui9FhdcOwvSixc/kyR6SoVvmejcn/2lZBqg==",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "4.1.2",
"rxjs": "7.8.2",
- "shell-quote": "1.8.4",
+ "shell-quote": "1.12.0",
"supports-color": "8.1.1",
"tree-kill": "1.2.2",
"yargs": "17.7.2"
@@ -8052,6 +8186,16 @@
"url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
}
},
+ "node_modules/concurrently/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/concurrently/node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@@ -8074,16 +8218,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/concurrently/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/concurrently/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -8112,22 +8246,6 @@
"node": ">=8"
}
},
- "node_modules/concurrently/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
"node_modules/concurrently/node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -8199,22 +8317,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/conf/node_modules/ajv": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
- "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
"node_modules/conf/node_modules/ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
@@ -8232,46 +8334,29 @@
}
}
},
- "node_modules/conf/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
"node_modules/conf/node_modules/json-schema-typed": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz",
"integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==",
"license": "BSD-2-Clause"
},
- "node_modules/conf/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/conf/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "node_modules/content-disposition": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-2.0.1.tgz",
+ "integrity": "sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog==",
"license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
"engines": {
- "node": ">=6"
+ "node": ">=18"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
- "node_modules/content-disposition": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz",
- "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==",
+ "node_modules/content-type": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz",
+ "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -8281,45 +8366,36 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/conventional-changelog-angular": {
- "version": "9.2.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-9.2.1.tgz",
- "integrity": "sha512-oWSL6ZhnXbYraOFTK3PgRAQJ8fADDAEv5K6AdeyQPLvjFmhG8+ejL0jZZp/R7vTmGJaBvZEE+sE7dB4bCv7sAw==",
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-9.4.0.tgz",
+ "integrity": "sha512-HdxRxuS8bBXVIuo4V82gvSwAXT0vYQUizrjs/izmPg5JdDstr8v8I5hduGL3iQbG+o310dUDxC4+LetuS5hu9w==",
"dev": true,
"license": "ISC",
"dependencies": {
- "@conventional-changelog/template": "^1.2.1"
+ "@conventional-changelog/template": "^1.4.0"
},
"engines": {
"node": ">=22"
}
},
"node_modules/conventional-changelog-conventionalcommits": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-10.2.1.tgz",
- "integrity": "sha512-n4Kr1HFMTf3iMbES0TMxKIcYtUUv4rKqyQQp2JwfOEfFCOfGT3Tq4mCyJ8S9/YPyWhydjfKrrvnyl+gCjA+mJQ==",
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-10.4.1.tgz",
+ "integrity": "sha512-jS1LRFSbRoAr6JbhhRy1JYfNNUj5LM3+v49hRE03CgccsiYqgdVj/RTmrw4J1rylrqijHwdOlJWiJa61JHOgHg==",
"dev": true,
"license": "ISC",
"dependencies": {
- "@conventional-changelog/template": "^1.2.1"
+ "@conventional-changelog/template": "^1.4.0"
},
"engines": {
"node": ">=22"
}
},
"node_modules/conventional-commits-parser": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-7.1.0.tgz",
- "integrity": "sha512-DPp6hkUjvwIivxbkrTiLXeRswNv1A/4GFA2X6scXma0AMa9632V3TwxmrlkUIEtUktiM3Ln+RrSH2xlP3/jUTw==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-7.1.3.tgz",
+ "integrity": "sha512-Q9oWm1o9uy/oEsZQIraoFMZ4RuPD+79KgwWj6mJVP356tazolCB0piRLZ5Kz9te9p027uSEcUW+Gu44Eh+X79g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8392,6 +8468,7 @@
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz",
"integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"env-paths": "^2.2.1",
@@ -8432,16 +8509,6 @@
"typescript": ">=5"
}
},
- "node_modules/cosmiconfig-typescript-loader/node_modules/jiti": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
- "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jiti": "lib/jiti-cli.mjs"
- }
- },
"node_modules/country-flag-icons": {
"version": "1.6.20",
"resolved": "https://registry.npmjs.org/country-flag-icons/-/country-flag-icons-1.6.20.tgz",
@@ -8461,15 +8528,15 @@
}
},
"node_modules/cron-parser": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz",
- "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==",
+ "version": "5.10.1",
+ "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-5.10.1.tgz",
+ "integrity": "sha512-pKRrRagItwk9rGIStcUyMxFX34x56zoX3KDf9HJ4ttwkXIK1qxK63EvXvEDmlxI9AdPJ+Y7TEKRftRlW5eSS7A==",
"license": "MIT",
"dependencies": {
- "luxon": "^3.2.1"
+ "luxon": "^3.7.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=18"
}
},
"node_modules/cross-dirname": {
@@ -8512,6 +8579,27 @@
"node": ">= 8"
}
},
+ "node_modules/cross-spawn/node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/cross-spawn/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/css-select": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
@@ -8563,7 +8651,7 @@
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz",
"integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"@asamuzakjp/css-color": "^3.2.0",
@@ -8577,7 +8665,7 @@
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
"integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/csstype": {
@@ -8587,25 +8675,11 @@
"devOptional": true,
"license": "MIT"
},
- "node_modules/d": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
- "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "es5-ext": "^0.10.64",
- "type": "^2.7.2"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
"node_modules/data-urls": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
"integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"whatwg-mimetype": "^4.0.0",
@@ -8651,7 +8725,7 @@
"version": "10.6.0",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
"integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/decompress-response": {
@@ -8714,9 +8788,9 @@
}
},
"node_modules/default-browser": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
- "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz",
+ "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==",
"license": "MIT",
"dependencies": {
"bundle-name": "^4.1.0",
@@ -8842,6 +8916,7 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": ">=8"
@@ -8894,18 +8969,6 @@
"node": ">=0.3.1"
}
},
- "node_modules/difflib": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz",
- "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==",
- "dev": true,
- "dependencies": {
- "heap": ">= 0.2.0"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/dir-compare": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz",
@@ -8917,6 +8980,37 @@
"p-limit": "^3.1.0 "
}
},
+ "node_modules/dir-compare/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dir-compare/node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/dir-compare/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
@@ -9068,44 +9162,43 @@
"url": "https://dotenvx.com"
}
},
- "node_modules/dreamopt": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz",
- "integrity": "sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==",
+ "node_modules/drizzle-kit": {
+ "version": "0.31.11",
+ "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.11.tgz",
+ "integrity": "sha512-YCYqxTLIB2OCqf6w9/Vef13baBVbwQIPcbT4Y56AfO6B9ajZhDhD8Jkveg/hJvT/iuMloKD/IYYkyMMNhr7Kqg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "wordwrap": ">=0.0.2"
+ "@drizzle-team/brocli": "^0.10.2",
+ "@esbuild-kit/esm-loader": "^2.5.5",
+ "esbuild": "^0.25.4",
+ "tsx": "^4.21.0"
},
- "engines": {
- "node": ">=0.4.0"
+ "bin": {
+ "drizzle-kit": "bin.cjs"
}
},
- "node_modules/drizzle-kit": {
- "version": "0.18.1",
- "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.18.1.tgz",
- "integrity": "sha512-Oqie227W2Dd7FuqX4pvQWeClSvnoPCIn2cO9JueeLWZqj3tpdBhnbgt4nLHhBbOdWRlTLYwXnkTDW3hYym/gGQ==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "camelcase": "^7.0.1",
- "chalk": "^5.2.0",
- "commander": "^9.4.1",
- "esbuild": "^0.15.18",
- "esbuild-register": "^3.4.2",
- "glob": "^8.1.0",
- "hanji": "^0.0.5",
- "json-diff": "0.9.0",
- "minimatch": "^7.4.3",
- "zod": "^3.20.2"
- },
- "bin": {
- "drizzle-kit": "index.js"
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/drizzle-kit/node_modules/@esbuild/android-arm": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
- "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
"cpu": [
"arm"
],
@@ -9116,1557 +9209,1137 @@
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
- "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
- "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
"cpu": [
- "loong64"
+ "arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
- "linux"
+ "android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
- "node_modules/drizzle-kit/node_modules/brace-expansion": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
- "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/drizzle-kit/node_modules/chalk": {
- "version": "5.6.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
- "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": ">=18"
}
},
- "node_modules/drizzle-kit/node_modules/esbuild": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
- "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "hasInstallScript": true,
"license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/android-arm": "0.15.18",
- "@esbuild/linux-loong64": "0.15.18",
- "esbuild-android-64": "0.15.18",
- "esbuild-android-arm64": "0.15.18",
- "esbuild-darwin-64": "0.15.18",
- "esbuild-darwin-arm64": "0.15.18",
- "esbuild-freebsd-64": "0.15.18",
- "esbuild-freebsd-arm64": "0.15.18",
- "esbuild-linux-32": "0.15.18",
- "esbuild-linux-64": "0.15.18",
- "esbuild-linux-arm": "0.15.18",
- "esbuild-linux-arm64": "0.15.18",
- "esbuild-linux-mips64le": "0.15.18",
- "esbuild-linux-ppc64le": "0.15.18",
- "esbuild-linux-riscv64": "0.15.18",
- "esbuild-linux-s390x": "0.15.18",
- "esbuild-netbsd-64": "0.15.18",
- "esbuild-openbsd-64": "0.15.18",
- "esbuild-sunos-64": "0.15.18",
- "esbuild-windows-32": "0.15.18",
- "esbuild-windows-64": "0.15.18",
- "esbuild-windows-arm64": "0.15.18"
- }
- },
- "node_modules/drizzle-kit/node_modules/minimatch": {
- "version": "7.4.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.9.tgz",
- "integrity": "sha512-Brg/fp/iAVDOQoHxkuN5bEYhyQlZhxddI78yWsCbeEwTHXQjlNLtiJDUsp1GIptVqMI7/gkJMz4vVAc01mpoBw==",
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.2"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=18"
}
},
- "node_modules/drizzle-kit/node_modules/zod": {
- "version": "3.25.76",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/drizzle-orm": {
- "version": "0.45.2",
- "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.2.tgz",
- "integrity": "sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@aws-sdk/client-rds-data": ">=3",
- "@cloudflare/workers-types": ">=4",
- "@electric-sql/pglite": ">=0.2.0",
- "@libsql/client": ">=0.10.0",
- "@libsql/client-wasm": ">=0.10.0",
- "@neondatabase/serverless": ">=0.10.0",
- "@op-engineering/op-sqlite": ">=2",
- "@opentelemetry/api": "^1.4.1",
- "@planetscale/database": ">=1.13",
- "@prisma/client": "*",
- "@tidbcloud/serverless": "*",
- "@types/better-sqlite3": "*",
- "@types/pg": "*",
- "@types/sql.js": "*",
- "@upstash/redis": ">=1.34.7",
- "@vercel/postgres": ">=0.8.0",
- "@xata.io/client": "*",
- "better-sqlite3": ">=7",
- "bun-types": "*",
- "expo-sqlite": ">=14.0.0",
- "gel": ">=2",
- "knex": "*",
- "kysely": "*",
- "mysql2": ">=2",
- "pg": ">=8",
- "postgres": ">=3",
- "sql.js": ">=1",
- "sqlite3": ">=5"
- },
- "peerDependenciesMeta": {
- "@aws-sdk/client-rds-data": {
- "optional": true
- },
- "@cloudflare/workers-types": {
- "optional": true
- },
- "@electric-sql/pglite": {
- "optional": true
- },
- "@libsql/client": {
- "optional": true
- },
- "@libsql/client-wasm": {
- "optional": true
- },
- "@neondatabase/serverless": {
- "optional": true
- },
- "@op-engineering/op-sqlite": {
- "optional": true
- },
- "@opentelemetry/api": {
- "optional": true
- },
- "@planetscale/database": {
- "optional": true
- },
- "@prisma/client": {
- "optional": true
- },
- "@tidbcloud/serverless": {
- "optional": true
- },
- "@types/better-sqlite3": {
- "optional": true
- },
- "@types/pg": {
- "optional": true
- },
- "@types/sql.js": {
- "optional": true
- },
- "@upstash/redis": {
- "optional": true
- },
- "@vercel/postgres": {
- "optional": true
- },
- "@xata.io/client": {
- "optional": true
- },
- "better-sqlite3": {
- "optional": true
- },
- "bun-types": {
- "optional": true
- },
- "expo-sqlite": {
- "optional": true
- },
- "gel": {
- "optional": true
- },
- "knex": {
- "optional": true
- },
- "kysely": {
- "optional": true
- },
- "mysql2": {
- "optional": true
- },
- "pg": {
- "optional": true
- },
- "postgres": {
- "optional": true
- },
- "prisma": {
- "optional": true
- },
- "sql.js": {
- "optional": true
- },
- "sqlite3": {
- "optional": true
- }
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "readable-stream": "^2.0.2"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "license": "MIT"
- },
- "node_modules/ejs": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
- "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "jake": "^10.8.5"
- },
- "bin": {
- "ejs": "bin/cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/electron": {
- "version": "42.6.1",
- "resolved": "https://registry.npmjs.org/electron/-/electron-42.6.1.tgz",
- "integrity": "sha512-HR9yiOyl+kZpSAugjOpBNvKpoh1wNpTK4wl6geD9W9Xmo6L6IgEzVB/JKlbEUDdXYeqRaaEhTUSSfyQ/g9iXvQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@electron-internal/extract-zip": "^1.0.1",
- "@electron/get": "^5.0.0",
- "@types/node": "^24.9.0"
- },
- "bin": {
- "electron": "cli.js",
- "install-electron": "install.js"
- },
- "engines": {
- "node": ">= 22.12.0"
- }
- },
- "node_modules/electron-builder": {
- "version": "26.15.3",
- "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.3.tgz",
- "integrity": "sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "app-builder-lib": "26.15.3",
- "builder-util": "26.15.3",
- "builder-util-runtime": "9.7.0",
- "chalk": "^4.1.2",
- "ci-info": "^4.2.0",
- "dmg-builder": "26.15.3",
- "fs-extra": "^10.1.0",
- "lazy-val": "^1.0.5",
- "simple-update-notifier": "2.0.0",
- "yargs": "^17.6.2"
- },
- "bin": {
- "electron-builder": "cli.js",
- "install-app-deps": "install-app-deps.js"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/electron-builder-squirrel-windows": {
- "version": "26.15.3",
- "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz",
- "integrity": "sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "app-builder-lib": "26.15.3",
- "builder-util": "26.15.3",
- "electron-winstaller": "5.4.0"
- }
- },
- "node_modules/electron-builder/node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/electron-builder/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/electron-builder/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/electron-builder/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/electron-builder/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/electron-builder/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/electron-builder/node_modules/yargs": {
- "version": "17.7.3",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz",
- "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/electron-builder/node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/electron-publish": {
- "version": "26.15.3",
- "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.3.tgz",
- "integrity": "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "@types/fs-extra": "^9.0.11",
- "aws4": "^1.13.2",
- "builder-util": "26.15.3",
- "builder-util-runtime": "9.7.0",
- "chalk": "^4.1.2",
- "form-data": "^4.0.5",
- "fs-extra": "^10.1.0",
- "lazy-val": "^1.0.5",
- "mime": "^2.5.2"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/electron-to-chromium": {
- "version": "1.5.389",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz",
- "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==",
- "license": "ISC"
- },
- "node_modules/electron-winstaller": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz",
- "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "hasInstallScript": true,
"license": "MIT",
- "peer": true,
- "dependencies": {
- "@electron/asar": "^3.2.1",
- "debug": "^4.1.1",
- "fs-extra": "^7.0.1",
- "lodash": "^4.17.21",
- "temp": "^0.9.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=8.0.0"
- },
- "optionalDependencies": {
- "@electron/windows-sign": "^1.1.2"
+ "node": ">=18"
}
},
- "node_modules/electron-winstaller/node_modules/fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
"license": "MIT",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=6 <7 || >=8"
+ "node": ">=18"
}
},
- "node_modules/electron-winstaller/node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
+ ],
"dev": true,
"license": "MIT",
- "peer": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/electron-winstaller/node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
"dev": true,
"license": "MIT",
- "peer": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 4.0.0"
+ "node": ">=18"
}
},
- "node_modules/electron/node_modules/@types/node": {
- "version": "24.13.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz",
- "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "undici-types": "~7.18.0"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/emoji-regex": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
- "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
- "license": "MIT"
- },
- "node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 0.8"
+ "node": ">=18"
}
},
- "node_modules/encoding-sniffer": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
- "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "iconv-lite": "^0.6.3",
- "whatwg-encoding": "^3.1.1"
- },
- "funding": {
- "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/end-of-stream": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
- "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/enhanced-resolve": {
- "version": "5.21.6",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz",
- "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.3.3"
- },
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
"engines": {
- "node": ">=10.13.0"
+ "node": ">=18"
}
},
- "node_modules/enquirer": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
- "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "ansi-colors": "^4.1.1",
- "strip-ansi": "^6.0.1"
- },
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
"engines": {
- "node": ">=8.6"
+ "node": ">=18"
}
},
- "node_modules/enquirer/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "license": "BSD-2-Clause",
+ "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
"engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
+ "node": ">=18"
}
},
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
"engines": {
- "node": ">=6"
+ "node": ">=18"
}
},
- "node_modules/environment": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
- "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
"engines": {
"node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "license": "MIT"
- },
- "node_modules/error-ex": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
- "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
"license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.2.1"
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">= 0.4"
+ "node": ">=18"
}
},
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">= 0.4"
+ "node": ">=18"
}
},
- "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==",
- "license": "MIT"
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
- "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+ "node_modules/drizzle-kit/node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+ "dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
+ "bin": {
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
+ }
+ },
+ "node_modules/drizzle-orm": {
+ "version": "0.45.4",
+ "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.4.tgz",
+ "integrity": "sha512-NiM1YZpJ2UxyeE67DpDDZ+Tsw4YLX3trSlkNT7Tm9eKoUNb1LvaAaQzXgYQsWs+AQ9TUmmwMmBOCXuqqxUWKKQ==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "@aws-sdk/client-rds-data": ">=3",
+ "@cloudflare/workers-types": ">=4",
+ "@electric-sql/pglite": ">=0.2.0",
+ "@libsql/client": ">=0.10.0",
+ "@libsql/client-wasm": ">=0.10.0",
+ "@neondatabase/serverless": ">=0.10.0",
+ "@netlify/db": ">=0.4.0",
+ "@op-engineering/op-sqlite": ">=2",
+ "@opentelemetry/api": "^1.4.1",
+ "@planetscale/database": ">=1.13",
+ "@prisma/client": "*",
+ "@tidbcloud/serverless": "*",
+ "@types/better-sqlite3": "*",
+ "@types/pg": "*",
+ "@types/sql.js": "*",
+ "@upstash/redis": ">=1.34.7",
+ "@vercel/postgres": ">=0.8.0",
+ "@xata.io/client": "*",
+ "better-sqlite3": ">=7",
+ "bun-types": "*",
+ "expo-sqlite": ">=14.0.0",
+ "gel": ">=2",
+ "knex": "*",
+ "kysely": "*",
+ "mysql2": ">=2",
+ "pg": ">=8",
+ "postgres": ">=3",
+ "sql.js": ">=1",
+ "sqlite3": ">=5"
+ },
+ "peerDependenciesMeta": {
+ "@aws-sdk/client-rds-data": {
+ "optional": true
+ },
+ "@cloudflare/workers-types": {
+ "optional": true
+ },
+ "@electric-sql/pglite": {
+ "optional": true
+ },
+ "@libsql/client": {
+ "optional": true
+ },
+ "@libsql/client-wasm": {
+ "optional": true
+ },
+ "@neondatabase/serverless": {
+ "optional": true
+ },
+ "@netlify/db": {
+ "optional": true
+ },
+ "@op-engineering/op-sqlite": {
+ "optional": true
+ },
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@planetscale/database": {
+ "optional": true
+ },
+ "@prisma/client": {
+ "optional": true
+ },
+ "@tidbcloud/serverless": {
+ "optional": true
+ },
+ "@types/better-sqlite3": {
+ "optional": true
+ },
+ "@types/pg": {
+ "optional": true
+ },
+ "@types/sql.js": {
+ "optional": true
+ },
+ "@upstash/redis": {
+ "optional": true
+ },
+ "@vercel/postgres": {
+ "optional": true
+ },
+ "@xata.io/client": {
+ "optional": true
+ },
+ "better-sqlite3": {
+ "optional": true
+ },
+ "bun-types": {
+ "optional": true
+ },
+ "expo-sqlite": {
+ "optional": true
+ },
+ "gel": {
+ "optional": true
+ },
+ "knex": {
+ "optional": true
+ },
+ "kysely": {
+ "optional": true
+ },
+ "mysql2": {
+ "optional": true
+ },
+ "pg": {
+ "optional": true
+ },
+ "postgres": {
+ "optional": true
+ },
+ "prisma": {
+ "optional": true
+ },
+ "sql.js": {
+ "optional": true
+ },
+ "sqlite3": {
+ "optional": true
+ }
}
},
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
+ "gopd": "^1.2.0"
},
"engines": {
"node": ">= 0.4"
}
},
- "node_modules/es-toolkit": {
- "version": "1.49.0",
- "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.49.0.tgz",
- "integrity": "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==",
- "dev": true,
- "license": "MIT",
- "workspaces": [
- "docs",
- "benchmarks"
- ]
- },
- "node_modules/es5-ext": {
- "version": "0.10.64",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
- "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+ "node_modules/duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
"dev": true,
- "hasInstallScript": true,
- "license": "ISC",
+ "license": "BSD-3-Clause",
"dependencies": {
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.3",
- "esniff": "^2.0.1",
- "next-tick": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10"
+ "readable-stream": "^2.0.2"
}
},
- "node_modules/es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
},
- "node_modules/es6-symbol": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
- "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
"dev": true,
- "license": "ISC",
+ "license": "Apache-2.0",
"dependencies": {
- "d": "^1.0.2",
- "ext": "^1.7.0"
+ "jake": "^10.8.5"
},
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/es6-weak-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
- "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.1"
- }
- },
- "node_modules/esbuild": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
- "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
- "devOptional": true,
- "hasInstallScript": true,
- "license": "MIT",
"bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
+ "ejs": "bin/cli.js"
},
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.28.1",
- "@esbuild/android-arm": "0.28.1",
- "@esbuild/android-arm64": "0.28.1",
- "@esbuild/android-x64": "0.28.1",
- "@esbuild/darwin-arm64": "0.28.1",
- "@esbuild/darwin-x64": "0.28.1",
- "@esbuild/freebsd-arm64": "0.28.1",
- "@esbuild/freebsd-x64": "0.28.1",
- "@esbuild/linux-arm": "0.28.1",
- "@esbuild/linux-arm64": "0.28.1",
- "@esbuild/linux-ia32": "0.28.1",
- "@esbuild/linux-loong64": "0.28.1",
- "@esbuild/linux-mips64el": "0.28.1",
- "@esbuild/linux-ppc64": "0.28.1",
- "@esbuild/linux-riscv64": "0.28.1",
- "@esbuild/linux-s390x": "0.28.1",
- "@esbuild/linux-x64": "0.28.1",
- "@esbuild/netbsd-arm64": "0.28.1",
- "@esbuild/netbsd-x64": "0.28.1",
- "@esbuild/openbsd-arm64": "0.28.1",
- "@esbuild/openbsd-x64": "0.28.1",
- "@esbuild/openharmony-arm64": "0.28.1",
- "@esbuild/sunos-x64": "0.28.1",
- "@esbuild/win32-arm64": "0.28.1",
- "@esbuild/win32-ia32": "0.28.1",
- "@esbuild/win32-x64": "0.28.1"
- }
- },
- "node_modules/esbuild-android-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
- "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-android-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
- "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-darwin-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
- "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-darwin-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
- "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-freebsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
- "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-freebsd-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
- "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-32": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
- "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
- "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-arm": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
- "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
- "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
"engines": {
- "node": ">=12"
+ "node": ">=0.10.0"
}
},
- "node_modules/esbuild-linux-mips64le": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
- "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
- "cpu": [
- "mips64el"
- ],
+ "node_modules/electron": {
+ "version": "42.11.12",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-42.11.12.tgz",
+ "integrity": "sha512-fHlCHh1uqfvWykQUq8eoSoB5q1gej7z/KKd3m7rqEEhHhihm7qz/EvBIkDat7vQoIq3kGTJcrskLbJ6UFkYGyg==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "@electron-internal/extract-zip": "^1.0.1",
+ "@electron/get": "^5.0.0",
+ "@types/node": "^24.9.0"
+ },
+ "bin": {
+ "electron": "cli.js",
+ "install-electron": "install.js"
+ },
"engines": {
- "node": ">=12"
+ "node": ">= 22.12.0"
}
},
- "node_modules/esbuild-linux-ppc64le": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
- "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
- "cpu": [
- "ppc64"
- ],
+ "node_modules/electron-builder": {
+ "version": "26.15.3",
+ "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.3.tgz",
+ "integrity": "sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "app-builder-lib": "26.15.3",
+ "builder-util": "26.15.3",
+ "builder-util-runtime": "9.7.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "dmg-builder": "26.15.3",
+ "fs-extra": "^10.1.0",
+ "lazy-val": "^1.0.5",
+ "simple-update-notifier": "2.0.0",
+ "yargs": "^17.6.2"
+ },
+ "bin": {
+ "electron-builder": "cli.js",
+ "install-app-deps": "install-app-deps.js"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=14.0.0"
}
},
- "node_modules/esbuild-linux-riscv64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
- "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
- "cpu": [
- "riscv64"
- ],
+ "node_modules/electron-builder-squirrel-windows": {
+ "version": "26.15.3",
+ "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz",
+ "integrity": "sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
+ "peer": true,
+ "dependencies": {
+ "app-builder-lib": "26.15.3",
+ "builder-util": "26.15.3",
+ "electron-winstaller": "5.4.0"
}
},
- "node_modules/esbuild-linux-s390x": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
- "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
- "cpu": [
- "s390x"
- ],
+ "node_modules/electron-builder/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
"engines": {
- "node": ">=12"
+ "node": ">=8"
}
},
- "node_modules/esbuild-netbsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
- "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/electron-builder/node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
"engines": {
"node": ">=12"
}
},
- "node_modules/esbuild-openbsd-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
- "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
- "cpu": [
- "x64"
- ],
+ "node_modules/electron-builder/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
+ "license": "MIT"
},
- "node_modules/esbuild-register": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz",
- "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==",
+ "node_modules/electron-builder/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "debug": "^4.3.4"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
- "peerDependencies": {
- "esbuild": ">=0.12 <1"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/esbuild-sunos-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
- "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
- "cpu": [
- "x64"
- ],
+ "node_modules/electron-builder/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=8"
}
},
- "node_modules/esbuild-windows-32": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
- "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
- "cpu": [
- "ia32"
- ],
+ "node_modules/electron-builder/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/esbuild-windows-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
- "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
- "cpu": [
- "x64"
- ],
+ "node_modules/electron-builder/node_modules/yargs": {
+ "version": "17.7.3",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz",
+ "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==",
"dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
"engines": {
"node": ">=12"
}
},
- "node_modules/esbuild-windows-arm64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
- "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/electron-builder/node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "license": "ISC",
"engines": {
"node": ">=12"
}
},
- "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz",
- "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==",
- "cpu": [
- "ppc64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/esbuild/node_modules/@esbuild/android-arm64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz",
- "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/electron-publish": {
+ "version": "26.15.3",
+ "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.3.tgz",
+ "integrity": "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "@types/fs-extra": "^9.0.11",
+ "aws4": "^1.13.2",
+ "builder-util": "26.15.3",
+ "builder-util-runtime": "9.7.0",
+ "chalk": "^4.1.2",
+ "form-data": "^4.0.5",
+ "fs-extra": "^10.1.0",
+ "lazy-val": "^1.0.5",
+ "mime": "^2.5.2"
}
},
- "node_modules/esbuild/node_modules/@esbuild/android-x64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz",
- "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.452",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.452.tgz",
+ "integrity": "sha512-cVvk1YBSj6571VmV6hdJTqj94Y79xSu8cj6Y9t6ae4Y4431z8/7EJFvu3rVp90xhfuv9BpPKUmaLfTo4+FOGBg==",
+ "license": "ISC"
},
- "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz",
- "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/electron-winstaller": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz",
+ "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==",
+ "dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
+ "peer": true,
+ "dependencies": {
+ "@electron/asar": "^3.2.1",
+ "debug": "^4.1.1",
+ "fs-extra": "^7.0.1",
+ "lodash": "^4.17.21",
+ "temp": "^0.9.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@electron/windows-sign": "^1.1.2"
}
},
- "node_modules/esbuild/node_modules/@esbuild/darwin-x64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz",
- "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==",
- "cpu": [
- "x64"
- ],
+ "node_modules/electron-winstaller/node_modules/fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6 <7 || >=8"
}
},
- "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz",
- "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/electron-winstaller/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
+ "peer": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
}
},
- "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz",
- "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==",
- "cpu": [
- "x64"
- ],
+ "node_modules/electron-winstaller/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
+ "peer": true,
"engines": {
- "node": ">=18"
+ "node": ">= 4.0.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-arm": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz",
- "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==",
- "cpu": [
- "arm"
- ],
+ "node_modules/electron/node_modules/@types/node": {
+ "version": "24.19.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.2.tgz",
+ "integrity": "sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "undici-types": ">=7.24.0 <7.24.7"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-arm64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz",
- "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/electron/node_modules/undici-types": {
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz",
+ "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 0.8"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-ia32": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz",
- "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==",
- "cpu": [
- "ia32"
- ],
+ "node_modules/encoding-sniffer": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
+ "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "iconv-lite": "^0.6.3",
+ "whatwg-encoding": "^3.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz",
- "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==",
- "cpu": [
- "mips64el"
- ],
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "once": "^1.4.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz",
- "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==",
- "cpu": [
- "ppc64"
- ],
+ "node_modules/enhanced-resolve": {
+ "version": "5.26.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz",
+ "integrity": "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.3.3"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=10.13.0"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz",
- "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==",
- "cpu": [
- "riscv64"
- ],
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=8.6"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-s390x": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz",
- "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==",
- "cpu": [
- "s390x"
- ],
+ "node_modules/enquirer/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
"engines": {
- "node": ">=18"
+ "node": ">=8"
}
},
- "node_modules/esbuild/node_modules/@esbuild/linux-x64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz",
- "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==",
- "cpu": [
- "x64"
- ],
+ "node_modules/enquirer/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=8"
}
},
- "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz",
- "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
"engines": {
- "node": ">=18"
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz",
- "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==",
- "cpu": [
- "x64"
- ],
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
"engines": {
- "node": ">=18"
+ "node": ">=6"
}
},
- "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz",
- "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
}
},
- "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz",
- "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==",
- "cpu": [
- "x64"
- ],
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/openharmony-arm64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz",
- "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/sunos-x64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz",
- "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==",
- "cpu": [
- "x64"
- ],
+ "node_modules/es-module-lexer": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz",
+ "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
"license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/win32-arm64": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz",
- "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==",
- "cpu": [
- "arm64"
- ],
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
"engines": {
- "node": ">=18"
+ "node": ">= 0.4"
}
},
- "node_modules/esbuild/node_modules/@esbuild/win32-ia32": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz",
- "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==",
- "cpu": [
- "ia32"
- ],
+ "node_modules/es-toolkit": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.52.0.tgz",
+ "integrity": "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==",
+ "dev": true,
"license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
+ "workspaces": [
+ "docs",
+ "benchmarks",
+ "tests/types",
+ "tests/browser-compat"
+ ]
+ },
+ "node_modules/es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.28.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
+ "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
"engines": {
"node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.28.2",
+ "@esbuild/android-arm": "0.28.2",
+ "@esbuild/android-arm64": "0.28.2",
+ "@esbuild/android-x64": "0.28.2",
+ "@esbuild/darwin-arm64": "0.28.2",
+ "@esbuild/darwin-x64": "0.28.2",
+ "@esbuild/freebsd-arm64": "0.28.2",
+ "@esbuild/freebsd-x64": "0.28.2",
+ "@esbuild/linux-arm": "0.28.2",
+ "@esbuild/linux-arm64": "0.28.2",
+ "@esbuild/linux-ia32": "0.28.2",
+ "@esbuild/linux-loong64": "0.28.2",
+ "@esbuild/linux-mips64el": "0.28.2",
+ "@esbuild/linux-ppc64": "0.28.2",
+ "@esbuild/linux-riscv64": "0.28.2",
+ "@esbuild/linux-s390x": "0.28.2",
+ "@esbuild/linux-x64": "0.28.2",
+ "@esbuild/netbsd-arm64": "0.28.2",
+ "@esbuild/netbsd-x64": "0.28.2",
+ "@esbuild/openbsd-arm64": "0.28.2",
+ "@esbuild/openbsd-x64": "0.28.2",
+ "@esbuild/openharmony-arm64": "0.28.2",
+ "@esbuild/sunos-x64": "0.28.2",
+ "@esbuild/win32-arm64": "0.28.2",
+ "@esbuild/win32-ia32": "0.28.2",
+ "@esbuild/win32-x64": "0.28.2"
}
},
"node_modules/escalade": {
@@ -10698,9 +10371,9 @@
}
},
"node_modules/eslint": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.6.0.tgz",
- "integrity": "sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==",
+ "version": "10.12.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.12.0.tgz",
+ "integrity": "sha512-npHjrHb2o4ehH3mE+YuxABR+0gyb0aVWCIolgJDArwCiHEIsonBm3ZKjel5b0U5+a+MbEvIyRCGCzD3eKKK2NA==",
"dev": true,
"license": "MIT",
"workspaces": [
@@ -10710,9 +10383,9 @@
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.2",
"@eslint/config-array": "^0.23.5",
- "@eslint/config-helpers": "^0.6.0",
+ "@eslint/config-helpers": "^0.7.0",
"@eslint/core": "^1.2.1",
- "@eslint/plugin-kit": "^0.7.2",
+ "@eslint/plugin-kit": "^0.7.3",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
@@ -10727,14 +10400,14 @@
"esquery": "^1.7.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
+ "file-entry-cache": "11.1.5 || >11.1.6 <12",
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"ignore": "^5.2.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
- "minimatch": "^10.2.4",
+ "minimatch": "^10.2.5",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3"
},
@@ -10777,9 +10450,9 @@
}
},
"node_modules/eslint-plugin-react-refresh": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.3.tgz",
- "integrity": "sha512-5EMmLCV98Pi4o/f/3DP/v/tNqLHMIc9I8LKClNDWhZ9JTho89/kQcitCXQBMG7sAfVRK0Ie3T2EDOzp1YXYiVA==",
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.7.tgz",
+ "integrity": "sha512-XhJSzLljuYD4UjNuFGJu2v7aD3sqNVK12w5/DCUfrNfHWegZo2+TsavNx8MuxMwEquuFAzNbNfXKU0WoZ+YUIg==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -10787,124 +10460,6 @@
}
},
"node_modules/eslint-scope": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
- "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/@eslint/config-array": {
- "version": "0.23.5",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz",
- "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/object-schema": "^3.0.5",
- "debug": "^4.3.1",
- "minimatch": "^10.2.4"
- },
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- }
- },
- "node_modules/eslint/node_modules/@eslint/config-helpers": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz",
- "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^1.2.1"
- },
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- }
- },
- "node_modules/eslint/node_modules/@eslint/core": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz",
- "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- }
- },
- "node_modules/eslint/node_modules/@eslint/object-schema": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz",
- "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- }
- },
- "node_modules/eslint/node_modules/@eslint/plugin-kit": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz",
- "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^1.2.1",
- "levn": "^0.4.1"
- },
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- }
- },
- "node_modules/eslint/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/eslint/node_modules/brace-expansion": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
- "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/eslint/node_modules/eslint-scope": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz",
"integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==",
@@ -10923,7 +10478,7 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "node_modules/eslint-visitor-keys": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
"integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
@@ -10936,69 +10491,43 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/espree": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
- "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.16.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^5.0.1"
- },
- "engines": {
- "node": "^20.19.0 || ^22.13.0 || >=24"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
+ "node_modules/eslint/node_modules/ajv": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
"dev": true,
- "license": "BlueOak-1.0.0",
+ "license": "MIT",
"dependencies": {
- "brace-expansion": "^5.0.5"
- },
- "engines": {
- "node": "18 || 20 || >=22"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/esniff": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
- "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+ "node_modules/eslint/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
- "license": "ISC",
- "dependencies": {
- "d": "^1.0.1",
- "es5-ext": "^0.10.62",
- "event-emitter": "^0.3.5",
- "type": "^2.7.2"
- },
- "engines": {
- "node": ">=0.10"
- }
+ "license": "MIT"
},
"node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
+ "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.15.0",
+ "acorn": "^8.16.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
+ "eslint-visitor-keys": "^5.0.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -11057,6 +10586,7 @@
"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"
@@ -11080,24 +10610,6 @@
"node": ">= 0.6"
}
},
- "node_modules/event-emitter": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
- "node_modules/eventemitter3": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
- "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/eventsource": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
@@ -11111,9 +10623,9 @@
}
},
"node_modules/eventsource-parser": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz",
- "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz",
+ "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==",
"license": "MIT",
"engines": {
"node": ">=18.0.0"
@@ -11145,6 +10657,22 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
+ "node_modules/execa/node_modules/get-stream": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+ "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sec-ant/readable-stream": "^0.4.1",
+ "is-stream": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/execa/node_modules/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
@@ -11161,6 +10689,7 @@
"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"
@@ -11174,15 +10703,15 @@
"license": "Apache-2.0"
},
"node_modules/express": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
- "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.3.0.tgz",
+ "integrity": "sha512-qCqy1xSoaugxOD4IVHb1ZWdkvCF2W3aE2okKouWj8VwJ+ztskSiXoBnCSJqfKT+cVPJhuJqe9YLbY425+Zh00g==",
"license": "MIT",
"dependencies": {
"accepts": "^2.0.0",
- "body-parser": "^2.2.1",
- "content-disposition": "^1.0.0",
- "content-type": "^1.0.5",
+ "body-parser": "^2.3.0",
+ "content-disposition": "^2.0.1",
+ "content-type": "^2.0.0",
"cookie": "^0.7.1",
"cookie-signature": "^1.2.1",
"debug": "^4.4.0",
@@ -11198,14 +10727,14 @@
"on-finished": "^2.4.1",
"once": "^1.4.0",
"parseurl": "^1.3.3",
- "proxy-addr": "^2.0.7",
- "qs": "^6.14.0",
+ "proxy-addr": "^2.0.8",
+ "qs": "^6.16.0",
"range-parser": "^1.2.1",
"router": "^2.2.0",
"send": "^1.1.0",
"serve-static": "^2.2.0",
"statuses": "^2.0.1",
- "type-is": "^2.0.1",
+ "type-is": "^2.1.0",
"vary": "^1.1.2"
},
"engines": {
@@ -11217,11 +10746,12 @@
}
},
"node_modules/express-rate-limit": {
- "version": "8.5.2",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz",
- "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==",
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.1.tgz",
+ "integrity": "sha512-2FXbqkygil3mZiXzEtM0IjE/UBmBNot0J1GEVrJT4JbrvwOSoEtqtO+wHbiMQELWe1eNvHoYRg2dkjOid+6JkA==",
"license": "MIT",
"dependencies": {
+ "debug": "^4.4.3",
"ip-address": "^10.2.0"
},
"engines": {
@@ -11234,16 +10764,6 @@
"express": ">= 4.11"
}
},
- "node_modules/ext": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
- "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "type": "^2.7.2"
- }
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -11306,9 +10826,9 @@
"license": "Unlicense"
},
"node_modules/fast-uri": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz",
- "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz",
+ "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==",
"funding": [
{
"type": "github",
@@ -11322,14 +10842,37 @@
"license": "BSD-3-Clause"
},
"node_modules/fastq": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
- "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz",
+ "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==",
"license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
},
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fflate": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
+ "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==",
+ "license": "MIT"
+ },
"node_modules/figures": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
@@ -11346,16 +10889,13 @@
}
},
"node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "version": "11.1.5",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz",
+ "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "flat-cache": "^4.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
+ "flat-cache": "^6.1.23"
}
},
"node_modules/filelist": {
@@ -11368,10 +10908,17 @@
"minimatch": "^5.0.1"
}
},
+ "node_modules/filelist/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/filelist/node_modules/brace-expansion": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
- "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz",
+ "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11442,30 +10989,28 @@
}
},
"node_modules/flat-cache": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "version": "6.1.23",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz",
+ "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.4"
- },
- "engines": {
- "node": ">=16"
+ "cacheable": "^2.5.0",
+ "flatted": "^3.4.2",
+ "hookified": "^1.15.0"
}
},
"node_modules/flatted": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
- "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
+ "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
"dev": true,
"license": "ISC"
},
"node_modules/follow-redirects": {
- "version": "1.16.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
- "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.1.tgz",
+ "integrity": "sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==",
"funding": [
{
"type": "individual",
@@ -11615,12 +11160,12 @@
}
},
"node_modules/framer-motion": {
- "version": "12.42.2",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.42.2.tgz",
- "integrity": "sha512-5XY9luDiu0oHfHBjpDthFMh0ES+122w6p/papSJBweMkO8Sn+PW2QaEgRblQBpWFnuvZS5qvarpt/hO2pjGmnw==",
+ "version": "12.43.0",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.43.0.tgz",
+ "integrity": "sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g==",
"license": "MIT",
"dependencies": {
- "motion-dom": "^12.42.2",
+ "motion-dom": "^12.43.0",
"motion-utils": "^12.39.0",
"tslib": "^2.4.0"
},
@@ -11684,6 +11229,7 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
@@ -11729,9 +11275,9 @@
}
},
"node_modules/get-east-asian-width": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
- "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz",
+ "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -11799,25 +11345,38 @@
}
},
"node_modules/get-stream": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
- "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@sec-ant/readable-stream": "^0.4.1",
- "is-stream": "^4.0.1"
+ "pump": "^3.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz",
+ "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"license": "ISC",
@@ -11825,11 +11384,12 @@
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
},
"engines": {
- "node": ">=12"
+ "node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -11848,27 +11408,35 @@
"node": ">=10.13.0"
}
},
+ "node_modules/glob/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/glob/node_modules/brace-expansion": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
- "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/glob/node_modules/minimatch": {
- "version": "5.1.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
- "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">=10"
+ "node": "*"
}
},
"node_modules/global-agent": {
@@ -11907,9 +11475,9 @@
}
},
"node_modules/globals": {
- "version": "17.7.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz",
- "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==",
+ "version": "17.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.13.0.tgz",
+ "integrity": "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -11981,21 +11549,11 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC"
},
- "node_modules/hanji": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/hanji/-/hanji-0.0.5.tgz",
- "integrity": "sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lodash.throttle": "^4.1.1",
- "sisteransi": "^1.0.5"
- }
- },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -12042,6 +11600,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/hashery": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz",
+ "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^1.15.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/hasown": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
@@ -12054,13 +11625,6 @@
"node": ">= 0.4"
}
},
- "node_modules/heap": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz",
- "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/hermes-estree": {
"version": "0.25.1",
"resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
@@ -12079,14 +11643,21 @@
}
},
"node_modules/hono": {
- "version": "4.12.28",
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.28.tgz",
- "integrity": "sha512-YwUvVpSF7m1yOblFPrU3Hbo8XhPheBoiyfGuII6z19LnOr6JpDnyyp7LFNrfV56wS8tpvtBFGRISHN02pDdLOA==",
+ "version": "4.13.13",
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.13.tgz",
+ "integrity": "sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==",
"license": "MIT",
"engines": {
"node": ">=16.9.0"
}
},
+ "node_modules/hookified": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
+ "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/hosted-git-info": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
@@ -12100,31 +11671,11 @@
"node": ">=10"
}
},
- "node_modules/hosted-git-info/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/hosted-git-info/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/html-encoding-sniffer": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
"integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"whatwg-encoding": "^3.1.1"
@@ -12133,12 +11684,6 @@
"node": ">=18"
}
},
- "node_modules/html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "license": "MIT"
- },
"node_modules/html-to-text": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
@@ -12212,9 +11757,9 @@
}
},
"node_modules/http-cache-semantics": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
- "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.3.0.tgz",
+ "integrity": "sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==",
"dev": true,
"license": "BSD-2-Clause"
},
@@ -12242,7 +11787,7 @@
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
"integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "^7.1.0",
@@ -12341,6 +11886,7 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
@@ -12357,6 +11903,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
@@ -12453,19 +12000,10 @@
"url": "https://opencollective.com/ioredis"
}
},
- "node_modules/ioredis/node_modules/cluster-key-slot": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz",
- "integrity": "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/ip-address": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz",
- "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz",
+ "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==",
"license": "MIT",
"engines": {
"node": ">= 12"
@@ -12508,6 +12046,7 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/is-binary-path": {
@@ -12524,13 +12063,13 @@
}
},
"node_modules/is-core-module": {
- "version": "2.16.2",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
- "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz",
+ "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hasown": "^2.0.3"
+ "hasown": "^2.0.4"
},
"engines": {
"node": ">= 0.4"
@@ -12564,19 +12103,13 @@
}
},
"node_modules/is-fullwidth-code-point": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz",
- "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "get-east-asian-width": "^1.3.1"
- },
"engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/is-glob": {
@@ -12667,14 +12200,13 @@
"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==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/is-promise": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
- "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
- "dev": true,
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
"license": "MIT"
},
"node_modules/is-regexp": {
@@ -12749,45 +12281,12 @@
}
},
"node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "license": "ISC"
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-report": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
- "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^4.0.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-reports": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
- "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- },
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
+ "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
+ "license": "BlueOak-1.0.0",
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
"node_modules/jackspeak": {
@@ -12824,40 +12323,35 @@
}
},
"node_modules/jiti": {
- "version": "1.21.7",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
- "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
- "devOptional": true,
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "dev": true,
"license": "MIT",
"bin": {
- "jiti": "bin/jiti.js"
+ "jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/jose": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz",
- "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==",
+ "version": "6.2.12",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz",
+ "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/panva"
}
},
- "node_modules/js-md5": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz",
- "integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==",
- "license": "MIT"
- },
"node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz",
+ "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==",
+ "dev": true,
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
- "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
+ "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
"funding": [
{
"type": "github",
@@ -12880,7 +12374,7 @@
"version": "25.0.1",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
"integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"cssstyle": "^4.1.0",
@@ -12921,7 +12415,7 @@
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
"integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "^7.1.2",
@@ -12950,35 +12444,17 @@
"dev": true,
"license": "MIT"
},
- "node_modules/json-diff": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.9.0.tgz",
- "integrity": "sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cli-color": "^2.0.0",
- "difflib": "~0.2.1",
- "dreamopt": "~0.8.0"
- },
- "bin": {
- "json-diff": "bin/json-diff.js"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
"license": "MIT"
},
"node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"license": "MIT"
},
"node_modules/json-schema-typed": {
@@ -13076,15 +12552,16 @@
}
},
"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==",
+ "version": "1.13.15",
+ "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.13.15.tgz",
+ "integrity": "sha512-AHdhEQeDFEJ4GKDAQ9AwxChy+v2kUILUB3TGQRpkXMkWePjXTU/WQEzWVQoIx/Gz8fE73Wr5SEuZCy2vk8jrMQ==",
"license": "MIT"
},
"node_modules/lightningcss": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
- "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
+ "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+ "dev": true,
"license": "MPL-2.0",
"dependencies": {
"detect-libc": "^2.0.3"
@@ -13097,26 +12574,27 @@
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
- "lightningcss-android-arm64": "1.32.0",
- "lightningcss-darwin-arm64": "1.32.0",
- "lightningcss-darwin-x64": "1.32.0",
- "lightningcss-freebsd-x64": "1.32.0",
- "lightningcss-linux-arm-gnueabihf": "1.32.0",
- "lightningcss-linux-arm64-gnu": "1.32.0",
- "lightningcss-linux-arm64-musl": "1.32.0",
- "lightningcss-linux-x64-gnu": "1.32.0",
- "lightningcss-linux-x64-musl": "1.32.0",
- "lightningcss-win32-arm64-msvc": "1.32.0",
- "lightningcss-win32-x64-msvc": "1.32.0"
+ "lightningcss-android-arm64": "1.33.0",
+ "lightningcss-darwin-arm64": "1.33.0",
+ "lightningcss-darwin-x64": "1.33.0",
+ "lightningcss-freebsd-x64": "1.33.0",
+ "lightningcss-linux-arm-gnueabihf": "1.33.0",
+ "lightningcss-linux-arm64-gnu": "1.33.0",
+ "lightningcss-linux-arm64-musl": "1.33.0",
+ "lightningcss-linux-x64-gnu": "1.33.0",
+ "lightningcss-linux-x64-musl": "1.33.0",
+ "lightningcss-win32-arm64-msvc": "1.33.0",
+ "lightningcss-win32-x64-msvc": "1.33.0"
}
},
"node_modules/lightningcss-android-arm64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
- "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
+ "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13129,14 +12607,15 @@
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
- "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
+ "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13151,12 +12630,13 @@
}
},
"node_modules/lightningcss-darwin-x64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
- "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
+ "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13171,12 +12651,13 @@
}
},
"node_modules/lightningcss-freebsd-x64": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
- "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
+ "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13191,12 +12672,13 @@
}
},
"node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
- "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
+ "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
"cpu": [
"arm"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13211,12 +12693,13 @@
}
},
"node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
- "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
+ "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13231,12 +12714,13 @@
}
},
"node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
- "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
+ "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13251,12 +12735,13 @@
}
},
"node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
- "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
+ "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13271,12 +12756,13 @@
}
},
"node_modules/lightningcss-linux-x64-musl": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
- "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
+ "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13291,12 +12777,13 @@
}
},
"node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
- "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
+ "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13311,12 +12798,13 @@
}
},
"node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.32.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
- "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
+ "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -13366,19 +12854,19 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/lint-staged": {
- "version": "17.0.8",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.8.tgz",
- "integrity": "sha512-B2P/d+jVW0UXOQ0MVMLrB/9ydA1P+zz6jYfdrbbEd9ur3S2rcbduFWKiUCC02Sm5hbC8nrm7y24WuYMG54HfxA==",
+ "version": "17.6.0",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.6.0.tgz",
+ "integrity": "sha512-nOhBfYkZEwkFtNzD5pK9s9LkcWoxJ+whLzEnhqi9nl7zTB5n7tg8+9iYgMGx2Wm3VlLu8cbNj0RACzY+nWi5iQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "listr2": "^10.2.1",
- "picomatch": "^4.0.4",
+ "picomatch": "^4.0.7",
"string-argv": "^0.3.2",
- "tinyexec": "^1.2.4"
+ "tinyexec": "^1.3.1"
},
"bin": {
"lint-staged": "bin/lint-staged.js"
@@ -13390,37 +12878,7 @@
"url": "https://opencollective.com/lint-staged"
},
"optionalDependencies": {
- "yaml": "^2.9.0"
- }
- },
- "node_modules/lint-staged/node_modules/picomatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
- "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/listr2": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.2.tgz",
- "integrity": "sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cli-truncate": "^5.2.0",
- "eventemitter3": "^5.0.4",
- "log-update": "^6.1.0",
- "rfdc": "^1.4.1",
- "wrap-ansi": "^10.0.0"
- },
- "engines": {
- "node": ">=22.13.0"
+ "yaml": "^2.9.1"
}
},
"node_modules/locate-path": {
@@ -13446,26 +12904,12 @@
"dev": true,
"license": "MIT"
},
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/lodash.mergewith": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
"integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
"license": "MIT"
},
- "node_modules/lodash.throttle": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
- "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/log-symbols": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
@@ -13506,92 +12950,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/log-update": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
- "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-escapes": "^7.0.0",
- "cli-cursor": "^5.0.0",
- "slice-ansi": "^7.1.0",
- "strip-ansi": "^7.1.0",
- "wrap-ansi": "^9.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-update/node_modules/ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-update/node_modules/slice-ansi": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
- "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.2.1",
- "is-fullwidth-code-point": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/log-update/node_modules/string-width": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
- "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^10.3.0",
- "get-east-asian-width": "^1.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-update/node_modules/wrap-ansi": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
- "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.2.1",
- "string-width": "^7.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -13604,17 +12962,23 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/loose-envify/node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
"node_modules/lottie-react": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.1.tgz",
- "integrity": "sha512-LQrH7jlkigIIv++wIyrOYFLHSKQpEY4zehPicL9bQsrt1rnoKRYCYgpCUe5maqylNtacy58/sQDZTkwMcTRxZw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-3.1.2.tgz",
+ "integrity": "sha512-otbTz+Kk1ksYzcWFAlcH8xFGBWkW/hUNEHy6gLvYf7kgEkZxyPT8lXJeBu/5o0xo0cdMwvd/lwkpuXCTSQmJdQ==",
"license": "MIT",
"dependencies": {
- "lottie-web": "^5.10.2"
+ "lottie-web": "^5.13.0"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ "react": "^18.2.0 || ^19.0.0",
+ "react-dom": "^18.2.0 || ^19.0.0"
}
},
"node_modules/lottie-web": {
@@ -13634,31 +12998,31 @@
}
},
"node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/lru-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
- "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "es5-ext": "~0.10.2"
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/lucide-react": {
- "version": "1.24.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.24.0.tgz",
- "integrity": "sha512-YT6mBD8lGKkg4nM39enlm94/sfJIiW0YKUT60fBy4YK8tai31ylg1VhGNWxkpSKHo9UagfnZqwIff3HTDQwXeA==",
+ "version": "1.55.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.55.0.tgz",
+ "integrity": "sha512-bSozQHiI3/8q7JvgoqVRGOYUi7fYT3siAZwmZsljjsOH2Husp/2ODdFf/leD+ZC/2yKfn7r8oh6yeoR3ITR5vA==",
"license": "ISC",
"peerDependencies": {
+ "@types/react": "*",
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"node_modules/luxon": {
@@ -13682,40 +13046,27 @@
}
},
"node_modules/magic-string": {
- "version": "0.30.21",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
- "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.3.tgz",
+ "integrity": "sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.5"
+ "@jridgewell/sourcemap-codec": "^1.6.0"
}
},
"node_modules/magicast": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz",
- "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.5.tgz",
+ "integrity": "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.29.3",
- "@babel/types": "^7.29.0",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7",
"source-map-js": "^1.2.1"
}
},
- "node_modules/make-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
- "license": "MIT",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/matcher": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
@@ -13740,32 +13091,16 @@
}
},
"node_modules/media-typer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
- "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz",
+ "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
- }
- },
- "node_modules/memoizee": {
- "version": "0.4.17",
- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz",
- "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "d": "^1.0.2",
- "es5-ext": "^0.10.64",
- "es6-weak-map": "^2.0.3",
- "event-emitter": "^0.3.5",
- "is-promise": "^2.2.2",
- "lru-queue": "^0.1.0",
- "next-tick": "^1.1.0",
- "timers-ext": "^0.1.7"
},
- "engines": {
- "node": ">=0.12"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/merge-descriptors": {
@@ -13818,6 +13153,18 @@
"node": ">=8.6"
}
},
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/mime": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
@@ -13898,16 +13245,18 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
- "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
- "dev": true,
- "license": "ISC",
+ "version": "10.2.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
+ "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^5.0.8"
},
"engines": {
- "node": "*"
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/minimist": {
@@ -13955,12 +13304,12 @@
}
},
"node_modules/motion": {
- "version": "12.42.2",
- "resolved": "https://registry.npmjs.org/motion/-/motion-12.42.2.tgz",
- "integrity": "sha512-Atvv11yUKIid41cVrRBDVX5m8tF8kNpExRSlbpt6APClhDjtwQssgFHhQzejxw7/7YYbjHSPKBVbHo05BuJT5Q==",
+ "version": "12.43.0",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.43.0.tgz",
+ "integrity": "sha512-BQgQbSa9Hn3/mtbib0MK53y6JSANa+YKUKlaYnWzAVDH424RYQ5LVpV3pNiWH00BA2z4ojsSdMzqT7g2FQwjuQ==",
"license": "MIT",
"dependencies": {
- "framer-motion": "^12.42.2",
+ "framer-motion": "^12.43.0",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -13981,9 +13330,9 @@
}
},
"node_modules/motion-dom": {
- "version": "12.42.2",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.42.2.tgz",
- "integrity": "sha512-5gIMWLp/PycBtJRJWRgjxke5n8dlvkSn2DrYW+tr3XcqAZY1xZh6BJyooJXCM8wdfM7wfMjkBJNLge1CKPUIRA==",
+ "version": "12.43.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.43.0.tgz",
+ "integrity": "sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag==",
"license": "MIT",
"dependencies": {
"motion-utils": "^12.39.0"
@@ -14002,9 +13351,9 @@
"license": "MIT"
},
"node_modules/msgpackr": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.0.4.tgz",
- "integrity": "sha512-o1C5KRmuRt+apqMr1HuGSqWStZoRBUpEsCsl15uM9VdAF1qHLtvMOU2En747EnTyEl6c4pzPewRMFF31s1CNbA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-2.1.0.tgz",
+ "integrity": "sha512-p/pBCVO63CsvvpkomUnNNag6+n38rULuDA6HHe70o2gtC8ODI52foF/4ko2qQcp6OiErJXTmrZeXmsGGHsIQNQ==",
"license": "MIT",
"optionalDependencies": {
"msgpackr-extract": "^3.0.4"
@@ -14045,9 +13394,9 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.15",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
- "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
+ "version": "3.3.20",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
+ "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
"funding": [
{
"type": "github",
@@ -14070,25 +13419,25 @@
"license": "MIT"
},
"node_modules/negotiator": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
- "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz",
+ "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==",
"license": "MIT",
+ "dependencies": {
+ "content-type": "^2.1.0"
+ },
"engines": {
- "node": ">= 0.6"
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
- "node_modules/next-tick": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
- "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/node-abi": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.33.0.tgz",
- "integrity": "sha512-vLBWCKb+7LWsX+TbfzWOkw0W81m377tyx3hOweBTjO43CXZnRGS1/JPWs20fr0PgZyDXk6ROYrylsEycK8raDA==",
+ "version": "4.37.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.37.0.tgz",
+ "integrity": "sha512-O9XXMXLeRHQtvh43NCah3y9N1K69tecOmu8Y5p2ay4iXvtpbQr0VaroJF9EmRVp3vkdoj3qn4IFfX+ZYtC94fw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14105,9 +13454,9 @@
"license": "MIT"
},
"node_modules/node-addon-api": {
- "version": "8.9.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.9.0.tgz",
- "integrity": "sha512-ekZMeaaIzSQTSpr7X2X3iJM7lTzgnx8ahAG9pJfT/7+14mlEM8ZYQ9cgCDvSSRbReFK0oHli3WrZdCiRsgAT9Q==",
+ "version": "8.9.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.9.2.tgz",
+ "integrity": "sha512-VijLXbi3UACN69I0JVXJsX4tjACjNoQDgv2gTF6sx2wWEi8tkSg2eX8p5gSIFi8z2+DL3oHmY6OyKce38SDolg==",
"license": "MIT",
"engines": {
"node": "^18 || ^20 || >= 21"
@@ -14185,9 +13534,9 @@
}
},
"node_modules/node-gyp/node_modules/undici": {
- "version": "6.27.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz",
- "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==",
+ "version": "6.29.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-6.29.0.tgz",
+ "integrity": "sha512-R+RODBqp6i2pPflGdq+xIOUkl+RNfGgHwoinecKu/JCuf2uO06cOKoDbI2P7Dn6KcswdKwrczbU6IYJ6K8X+wg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -14218,9 +13567,9 @@
"license": "MIT"
},
"node_modules/node-releases": {
- "version": "2.0.51",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz",
- "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==",
+ "version": "2.0.58",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.58.tgz",
+ "integrity": "sha512-BdiKAgbfRlvfMq/XzO/AF9NPmaA8a+YpLAyAFTVFBj3gARrAIfWvNq7Q7NE4se3KgFu0KkrvQMxTS0XVnsGzHg==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -14306,16 +13655,16 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.24",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz",
- "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==",
- "devOptional": true,
+ "version": "2.2.28",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.28.tgz",
+ "integrity": "sha512-IlVB7OS7qrOsVYlpnFIkETjMwT9jwvmocJmmM+GZU/PAB3uGi9Ezd7vcWhWBUnSc0ya4ppmQITOyP1ez9gg8cg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/oauth4webapi": {
- "version": "3.8.6",
- "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.6.tgz",
- "integrity": "sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==",
+ "version": "3.8.8",
+ "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.8.tgz",
+ "integrity": "sha512-8N28E+a/oxfXWBgOMt+ZP/JUf/XR+IFbvkAEPP3gznXOMv9BpAAwiIj0TFNz3tGTPc0ZQ8zmWBNgN1nAys0gng==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/panva"
@@ -14373,9 +13722,10 @@
}
},
"node_modules/obug": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz",
- "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz",
+ "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==",
+ "dev": true,
"funding": [
"https://github.com/sponsors/sxzz",
"https://opencollective.com/debug"
@@ -14416,32 +13766,41 @@
}
},
"node_modules/onetime": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
- "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"license": "MIT",
"dependencies": {
- "mimic-function": "^5.0.0"
+ "mimic-fn": "^2.1.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/onetime/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/open": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz",
- "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==",
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/open/-/open-11.0.4.tgz",
+ "integrity": "sha512-++Zlftm0kVLPmzC06t6epuWmcRMDbI4z5P3NNX979WA/k23+NtSOynEGzsVfZwguKw2mi5umVgnBlJQMwRz4Pg==",
"license": "MIT",
"dependencies": {
- "default-browser": "^5.4.0",
+ "default-browser": "^5.5.1",
"define-lazy-prop": "^3.0.0",
"is-in-ssh": "^1.0.0",
"is-inside-container": "^1.0.0",
- "powershell-utils": "^0.1.0",
- "wsl-utils": "^0.3.0"
+ "powershell-utils": "^0.2.1",
+ "wsl-utils": "^1.0.0"
},
"engines": {
"node": ">=20"
@@ -14458,13 +13817,13 @@
"peer": true
},
"node_modules/openid-client": {
- "version": "6.8.4",
- "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.4.tgz",
- "integrity": "sha512-QSw0BA08piujetEwfZsHoTrDpMEha7GDZDicQqVwX4u0ChCjefvjDB++TZ8BTg76UpwhzIQgdvvfgfl3HpCSAw==",
+ "version": "6.8.8",
+ "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.8.tgz",
+ "integrity": "sha512-ZsucJA5Ad04Uv7YN4ql+s4GXNmb9uAYQwyJTsJx7CH/MX3JZioLE2pVKi1SC+YrbSLA4Px3Gi30dMjgOZtb6pA==",
"license": "MIT",
"dependencies": {
- "jose": "^6.2.2",
- "oauth4webapi": "^3.8.5"
+ "jose": "^6.2.12",
+ "oauth4webapi": "^3.8.8"
},
"funding": {
"url": "https://github.com/sponsors/panva"
@@ -14598,15 +13957,16 @@
"license": "BlueOak-1.0.0"
},
"node_modules/pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "license": "(MIT AND Zlib)"
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
+ "license": "MIT"
},
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
@@ -14619,6 +13979,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.0.0",
@@ -14775,9 +14136,9 @@
}
},
"node_modules/path-scurry/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==",
+ "version": "11.5.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz",
+ "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==",
"license": "BlueOak-1.0.0",
"engines": {
"node": "20 || >=22"
@@ -14793,24 +14154,18 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "license": "MIT"
- },
"node_modules/pdfkit": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.18.0.tgz",
- "integrity": "sha512-NvUwSDZ0eYEzqAiWwVQkRkjYUkZ48kcsHuCO31ykqPPIVkwoSDjDGiwIgHHNtsiwls3z3P/zy4q00hl2chg2Ug==",
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.20.2.tgz",
+ "integrity": "sha512-Q/w03ICAQyXfHNfTsg1udp0ADerdBN0s7a6XSPL7J7Ro6ABnafoBOCDBstIO9U02mvzHEV8HrvFIw5iV5ejIRA==",
"license": "MIT",
"dependencies": {
- "@noble/ciphers": "^1.0.0",
- "@noble/hashes": "^1.6.0",
+ "@noble/ciphers": "^1.3.0",
+ "@noble/hashes": "^1.8.0",
+ "fflate": "^0.8.3",
"fontkit": "^2.0.4",
- "js-md5": "^0.8.3",
"linebreak": "^1.1.0",
- "png-js": "^1.0.0"
+ "png-js": "^2.0.0"
}
},
"node_modules/pdfkit/node_modules/@noble/hashes": {
@@ -14850,14 +14205,14 @@
}
},
"node_modules/pg": {
- "version": "8.22.0",
- "resolved": "https://registry.npmjs.org/pg/-/pg-8.22.0.tgz",
- "integrity": "sha512-8wih1vVIBMxoUM2oB4soJsD9tDnDpLv4OXBJ+EJzFsvycD+lfyIreC2gGHq78f8jbLLt+bvlPTFdFZfJkOuzAA==",
+ "version": "8.23.1",
+ "resolved": "https://registry.npmjs.org/pg/-/pg-8.23.1.tgz",
+ "integrity": "sha512-aL96AHANtWjPLDOLqnhx+ngp9+UK7ETEU8VJrDCGvsSSi/mGLcWYsS6Herg7lmaBJe4uwrfqsa7gTEFaSizDoQ==",
"license": "MIT",
"dependencies": {
- "pg-connection-string": "^2.14.0",
+ "pg-connection-string": "^2.14.1",
"pg-pool": "^3.14.0",
- "pg-protocol": "^1.15.0",
+ "pg-protocol": "^1.16.1",
"pg-types": "2.2.0",
"pgpass": "1.0.5"
},
@@ -14865,7 +14220,7 @@
"node": ">= 16.0.0"
},
"optionalDependencies": {
- "pg-cloudflare": "^1.4.0"
+ "pg-cloudflare": "^1.4.1"
},
"peerDependencies": {
"pg-native": ">=3.0.1"
@@ -14877,16 +14232,16 @@
}
},
"node_modules/pg-cloudflare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz",
- "integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.1.tgz",
+ "integrity": "sha512-6PQbsFWZcp9EmJEwy5cGQ2La+AMWpP46lgbb8X+U/XsHIUweYDNCpeuKck5RxL2MdVFi7krbbEi5nX4Zh7JhrQ==",
"license": "MIT",
"optional": true
},
"node_modules/pg-connection-string": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.14.0.tgz",
- "integrity": "sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==",
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.14.1.tgz",
+ "integrity": "sha512-qR3kGNPBLpCNtz0evbKA0Y/MRFXwSSdT+pTJvYp/bXTcReZbvX1kzF0IyTc1QnxqF7AZbOeBhNL8R5mYQZV/MA==",
"license": "MIT"
},
"node_modules/pg-int8": {
@@ -14908,9 +14263,9 @@
}
},
"node_modules/pg-protocol": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.15.0.tgz",
- "integrity": "sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ==",
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.16.1.tgz",
+ "integrity": "sha512-p9VOFMiHB/ZbJATetbg+99PxssTVSQRnyuPSQ67mN1+1KBOjZaZ83ZQzltnxPhJwSsC3nwVjJ10DVJlerbFzLg==",
"license": "MIT"
},
"node_modules/pg-types": {
@@ -14945,31 +14300,21 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
- "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
"license": "MIT",
"engines": {
- "node": ">=8.6"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/pino": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
- "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.4.0.tgz",
+ "integrity": "sha512-bk1ZMTwG/Vymx+zPoa28MhNzucFvXJWp3csrSuxuHPSMeUettaCoQ5Jvg07mtC4JGNpcfTwz41oVCnNgBK9+vA==",
"license": "MIT",
"dependencies": {
"@pinojs/redact": "^0.4.0",
@@ -14979,7 +14324,7 @@
"pino-std-serializers": "^7.0.0",
"process-warning": "^5.0.0",
"quick-format-unescaped": "^4.0.3",
- "real-require": "^0.2.0",
+ "real-require": "^1.0.0",
"safe-stable-stringify": "^2.3.1",
"sonic-boom": "^4.0.1",
"thread-stream": "^4.0.0"
@@ -15096,13 +14441,16 @@
}
},
"node_modules/pkijs": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz",
- "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.1.tgz",
+ "integrity": "sha512-Oo/NZcSWccq8KyoG7gLE9fnltgHns+pNCjCAp/WmjsUySi+sX7y4z4Xqu4fVb42CDHzRPl33fjzT15V1wvcyhA==",
"dev": true,
"license": "BSD-3-Clause",
+ "workspaces": [
+ "website"
+ ],
"dependencies": {
- "@noble/hashes": "1.4.0",
+ "@noble/hashes": "1.8.0",
"asn1js": "^3.0.6",
"bytestreamjs": "^2.0.1",
"pvtsutils": "^1.3.6",
@@ -15114,13 +14462,13 @@
}
},
"node_modules/pkijs/node_modules/@noble/hashes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
- "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
+ "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 16"
+ "node": "^14.21.3 || >=16"
},
"funding": {
"url": "https://paulmillr.com/funding/"
@@ -15142,23 +14490,23 @@
}
},
"node_modules/png-js": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.1.0.tgz",
- "integrity": "sha512-PM/uYGzGdNSzqeOgly68+6wKQDL1SY0a/N+OEa/+br6LnHWOAJB0Npiamnodfq3jd2LS/i2fMeOKSAILjA+m5Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/png-js/-/png-js-2.0.0.tgz",
+ "integrity": "sha512-GdzJuUMc6ZSpxFJWVxtOH1bzYHym+TOnveqUjb+VJIbZWbZzyiRGFiKhbiielfpYbgMlhHVhsJ0FTazfuRFkMA==",
"dependencies": {
- "browserify-zlib": "^0.2.0"
+ "fflate": "^0.8.2"
}
},
"node_modules/postal-mime": {
- "version": "2.7.5",
- "resolved": "https://registry.npmjs.org/postal-mime/-/postal-mime-2.7.5.tgz",
- "integrity": "sha512-GNEXKvWFQnbgO5NlrGzVa0FmWzBZ24PersAWErttSg1Hjpf0ATxTwS5DOMGaOpTG6bUh5cTr7xi0jAD942wCJA==",
+ "version": "2.7.6",
+ "resolved": "https://registry.npmjs.org/postal-mime/-/postal-mime-2.7.6.tgz",
+ "integrity": "sha512-UUlyE2KlxmvwMGq060onF/VWU3zD6dVW31FwokQ5v26jWd35fbs2MoTFzh+jXnPwAyV2MULMKXcBInGOl5TO6Q==",
"license": "MIT-0"
},
"node_modules/postcss": {
- "version": "8.5.16",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz",
- "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==",
+ "version": "8.5.29",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz",
+ "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==",
"funding": [
{
"type": "opencollective",
@@ -15175,9 +14523,9 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.12",
+ "nanoid": "^3.3.19",
"picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
+ "source-map-js": "^1.2.2"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -15374,10 +14722,22 @@
"node": ">=14.0.0"
}
},
+ "node_modules/postject/node_modules/commander": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+ "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
"node_modules/powershell-utils": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz",
- "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==",
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.1.tgz",
+ "integrity": "sha512-C+y9x90UElAddDZmV4qOx9W53B61PO7cIqWz2dQsWlwswuq4mr8NEwytdGKboYbQlGZ3awrkTeNvcZiZNHnQ8A==",
"license": "MIT",
"engines": {
"node": ">=20"
@@ -15397,9 +14757,9 @@
}
},
"node_modules/prettier": {
- "version": "3.9.6",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz",
- "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==",
+ "version": "3.9.10",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz",
+ "integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==",
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
@@ -15427,6 +14787,17 @@
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
+ "node_modules/pretty-format/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
@@ -15441,10 +14812,18 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/pretty-format/node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/pretty-ms": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz",
- "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==",
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.1.tgz",
+ "integrity": "sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==",
"license": "MIT",
"dependencies": {
"parse-ms": "^4.0.0"
@@ -15474,9 +14853,9 @@
"license": "MIT"
},
"node_modules/process-warning": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
- "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.1.tgz",
+ "integrity": "sha512-oCkNVj4OKnKEcocVBcDfiIugN1/cE6rgfT3nCtzeqZPA8+rIxMaQ0xXzIkGP8Gj2qUaP1UR7uhJ1VD8lUCpzCg==",
"funding": [
{
"type": "github",
@@ -15503,6 +14882,7 @@
"version": "15.1.3",
"resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.3.tgz",
"integrity": "sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==",
+ "deprecated": "prom-client has been replaced by @prometheus-io/client",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/api": "^1.4.0",
@@ -15559,12 +14939,6 @@
"react-is": "^16.13.1"
}
},
- "node_modules/prop-types/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "license": "MIT"
- },
"node_modules/proper-lockfile": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
@@ -15578,9 +14952,9 @@
}
},
"node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
+ "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",
"license": "MIT",
"dependencies": {
"forwarded": "0.2.0",
@@ -15588,6 +14962,10 @@
},
"engines": {
"node": ">= 0.10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/proxy-from-env": {
@@ -15614,7 +14992,7 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -15631,19 +15009,39 @@
}
},
"node_modules/pvutils": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz",
- "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz",
+ "integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=16.0.0"
}
},
+ "node_modules/qified": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz",
+ "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/qified/node_modules/hookified": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz",
+ "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/qs": {
- "version": "6.15.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
- "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
+ "version": "6.16.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz",
+ "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==",
"license": "BSD-3-Clause",
"dependencies": {
"es-define-property": "^1.0.1",
@@ -15696,66 +15094,66 @@
}
},
"node_modules/radix-ui": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.6.2.tgz",
- "integrity": "sha512-OwYUjzMwiInCUxgAWpPsavXC3Kh4iyi/49uU1/qZTG3RQDlvegyk1GOMiGvSkjua1RDb3JD3fo3eroL9FV4GQw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.5",
- "@radix-ui/react-accessible-icon": "1.1.11",
- "@radix-ui/react-accordion": "1.2.16",
- "@radix-ui/react-alert-dialog": "1.1.19",
- "@radix-ui/react-arrow": "1.1.11",
- "@radix-ui/react-aspect-ratio": "1.1.11",
- "@radix-ui/react-avatar": "1.2.2",
- "@radix-ui/react-checkbox": "1.3.7",
- "@radix-ui/react-collapsible": "1.1.16",
- "@radix-ui/react-collection": "1.1.12",
- "@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-context": "1.2.0",
- "@radix-ui/react-context-menu": "2.3.3",
- "@radix-ui/react-dialog": "1.1.19",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.15",
- "@radix-ui/react-dropdown-menu": "2.1.20",
- "@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.12",
- "@radix-ui/react-form": "0.1.12",
- "@radix-ui/react-hover-card": "1.1.19",
- "@radix-ui/react-label": "2.1.11",
- "@radix-ui/react-menu": "2.1.20",
- "@radix-ui/react-menubar": "1.1.20",
- "@radix-ui/react-navigation-menu": "1.2.18",
- "@radix-ui/react-one-time-password-field": "0.1.12",
- "@radix-ui/react-password-toggle-field": "0.1.7",
- "@radix-ui/react-popover": "1.1.19",
- "@radix-ui/react-popper": "1.3.3",
- "@radix-ui/react-portal": "1.1.13",
- "@radix-ui/react-presence": "1.1.7",
- "@radix-ui/react-primitive": "2.1.7",
- "@radix-ui/react-progress": "1.1.12",
- "@radix-ui/react-radio-group": "1.4.3",
- "@radix-ui/react-roving-focus": "1.1.15",
- "@radix-ui/react-scroll-area": "1.2.14",
- "@radix-ui/react-select": "2.3.3",
- "@radix-ui/react-separator": "1.1.11",
- "@radix-ui/react-slider": "1.4.3",
- "@radix-ui/react-slot": "1.3.0",
- "@radix-ui/react-switch": "1.3.3",
- "@radix-ui/react-tabs": "1.1.17",
- "@radix-ui/react-toast": "1.2.19",
- "@radix-ui/react-toggle": "1.1.14",
- "@radix-ui/react-toggle-group": "1.1.15",
- "@radix-ui/react-toolbar": "1.1.15",
- "@radix-ui/react-tooltip": "1.2.12",
- "@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-controllable-state": "1.2.3",
- "@radix-ui/react-use-effect-event": "0.0.3",
- "@radix-ui/react-use-escape-keydown": "1.1.3",
- "@radix-ui/react-use-is-hydrated": "0.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.2",
- "@radix-ui/react-use-size": "1.1.2",
- "@radix-ui/react-visually-hidden": "1.2.7"
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.7.0.tgz",
+ "integrity": "sha512-x+z5TV2v6u0QpAQ4dQfNMcvtIdSQ1Op2oqBEyfDXjNldRZbMTP+hcjr5Iie31bep81Axeioa+70Ww7pZDzTEQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.7",
+ "@radix-ui/react-accessible-icon": "1.1.16",
+ "@radix-ui/react-accordion": "1.2.21",
+ "@radix-ui/react-alert-dialog": "1.1.24",
+ "@radix-ui/react-arrow": "1.1.16",
+ "@radix-ui/react-aspect-ratio": "1.1.16",
+ "@radix-ui/react-avatar": "1.2.7",
+ "@radix-ui/react-checkbox": "1.3.12",
+ "@radix-ui/react-collapsible": "1.1.21",
+ "@radix-ui/react-collection": "1.1.16",
+ "@radix-ui/react-compose-refs": "1.1.5",
+ "@radix-ui/react-context": "1.2.2",
+ "@radix-ui/react-context-menu": "2.3.8",
+ "@radix-ui/react-dialog": "1.2.0",
+ "@radix-ui/react-direction": "1.1.5",
+ "@radix-ui/react-dismissable-layer": "1.1.20",
+ "@radix-ui/react-dropdown-menu": "2.1.25",
+ "@radix-ui/react-focus-guards": "1.1.6",
+ "@radix-ui/react-focus-scope": "1.2.0",
+ "@radix-ui/react-form": "0.2.0",
+ "@radix-ui/react-hover-card": "1.1.24",
+ "@radix-ui/react-label": "2.1.16",
+ "@radix-ui/react-menu": "2.1.25",
+ "@radix-ui/react-menubar": "1.1.25",
+ "@radix-ui/react-navigation-menu": "1.3.0",
+ "@radix-ui/react-one-time-password-field": "0.1.17",
+ "@radix-ui/react-password-toggle-field": "0.1.12",
+ "@radix-ui/react-popover": "1.2.0",
+ "@radix-ui/react-popper": "1.3.8",
+ "@radix-ui/react-portal": "1.1.18",
+ "@radix-ui/react-presence": "1.1.11",
+ "@radix-ui/react-primitive": "2.1.11",
+ "@radix-ui/react-progress": "1.1.17",
+ "@radix-ui/react-radio-group": "1.4.8",
+ "@radix-ui/react-roving-focus": "1.1.20",
+ "@radix-ui/react-scroll-area": "1.3.0",
+ "@radix-ui/react-select": "2.3.8",
+ "@radix-ui/react-separator": "1.1.16",
+ "@radix-ui/react-slider": "1.5.0",
+ "@radix-ui/react-slot": "1.4.0",
+ "@radix-ui/react-switch": "1.3.8",
+ "@radix-ui/react-tabs": "1.1.22",
+ "@radix-ui/react-toast": "1.2.24",
+ "@radix-ui/react-toggle": "1.1.19",
+ "@radix-ui/react-toggle-group": "1.1.20",
+ "@radix-ui/react-toolbar": "1.1.20",
+ "@radix-ui/react-tooltip": "1.3.0",
+ "@radix-ui/react-use-callback-ref": "1.1.4",
+ "@radix-ui/react-use-controllable-state": "1.2.6",
+ "@radix-ui/react-use-effect-event": "0.0.5",
+ "@radix-ui/react-use-escape-keydown": "1.1.5",
+ "@radix-ui/react-use-is-hydrated": "0.1.3",
+ "@radix-ui/react-use-layout-effect": "1.1.4",
+ "@radix-ui/react-use-size": "1.1.5",
+ "@radix-ui/react-visually-hidden": "1.2.12"
},
"peerDependencies": {
"@types/react": "*",
@@ -15817,24 +15215,24 @@
}
},
"node_modules/react": {
- "version": "19.2.8",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz",
- "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==",
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz",
+ "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
- "version": "19.2.8",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz",
- "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==",
+ "version": "19.3.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz",
+ "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==",
"license": "MIT",
"dependencies": {
- "scheduler": "^0.27.0"
+ "scheduler": "^0.28.0"
},
"peerDependencies": {
- "react": "^19.2.8"
+ "react": "^19.3.0"
}
},
"node_modules/react-icons": {
@@ -15847,23 +15245,21 @@
}
},
"node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "dev": true,
- "license": "MIT",
- "peer": true
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
},
"node_modules/react-phone-number-input": {
- "version": "3.4.17",
- "resolved": "https://registry.npmjs.org/react-phone-number-input/-/react-phone-number-input-3.4.17.tgz",
- "integrity": "sha512-1wcjhBAWHgEBAGLi5/XbeZI7Q3aEHNb2z/dHY6R2Gz70TQvu0ZoOT28NTdwtZf4lyRKXWufnTzVhLPBUD8LfmQ==",
+ "version": "3.4.18",
+ "resolved": "https://registry.npmjs.org/react-phone-number-input/-/react-phone-number-input-3.4.18.tgz",
+ "integrity": "sha512-EmPhJFSxQB7CTmLAlQfGAQQPF+WmJECU08gjyUt50zd2iESb4ETsm6z+BRfUEjH+TXct4EWvJvub+OztJxb/Cg==",
"license": "MIT",
"dependencies": {
"classnames": "^2.5.1",
"country-flag-icons": "^1.6.14",
"input-format": "^0.3.14",
- "libphonenumber-js": "^1.13.4",
+ "libphonenumber-js": "^1.13.11",
"prop-types": "^15.8.1"
},
"peerDependencies": {
@@ -15919,9 +15315,9 @@
}
},
"node_modules/react-router": {
- "version": "7.18.1",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.1.tgz",
- "integrity": "sha512-GDLgg3i3uM0aeJO3Fm+TCS+sDQ7gu12T6x0qdTEzcwqEfleci7JwugVNIF3U//0FWKnJT7ptG+20B2jfDqnZAg==",
+ "version": "7.18.4",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.4.tgz",
+ "integrity": "sha512-PUPQcMhMGRAslLcvtlPz/kmzBEWPhLdgLFrL7pLNepBL6dX0lWj4WD2cUYVgYCuT3jxvghYFg81cDTj44DhetQ==",
"license": "MIT",
"dependencies": {
"cookie": "^1.0.1",
@@ -15941,12 +15337,12 @@
}
},
"node_modules/react-router-dom": {
- "version": "7.18.1",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.1.tgz",
- "integrity": "sha512-KaZh+X/6UtEp28x51AUYZDMg9NGoz2ja3dNHa+ta/tk40vCzKhQ/RypCWBMLbmDr6//E24Vv5uPsrqXFozdkAg==",
+ "version": "7.18.4",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.4.tgz",
+ "integrity": "sha512-yrfmJHIpDG7taCpqKjT1G5B6q3O2K+RN8/fgNf0lTjCwiPbQ0ei6vXX9ZjQR+7ld8Tr7Z5xmyMnZ8YJrphWQUw==",
"license": "MIT",
"dependencies": {
- "react-router": "7.18.1"
+ "react-router": "7.18.4"
},
"engines": {
"node": ">=20.0.0"
@@ -16005,14 +15401,11 @@
}
},
"node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.2.tgz",
+ "integrity": "sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "pify": "^2.3.0"
- }
+ "license": "MIT"
},
"node_modules/readable-stream": {
"version": "2.3.8",
@@ -16043,19 +15436,29 @@
"node": ">=8.10.0"
}
},
- "node_modules/real-require": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
- "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "node_modules/readdirp/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">= 12.13.0"
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/real-require": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz",
+ "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==",
+ "license": "MIT"
+ },
"node_modules/recast": {
- "version": "0.23.12",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.12.tgz",
- "integrity": "sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==",
+ "version": "0.23.21",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.21.tgz",
+ "integrity": "sha512-mFAyJq9vUbSTARLZUvAEf1z3YxlvAwswbmxMx2mPA/MSm4KmpwvwvhsH/NIrZhyOuwD60Lzyw2qh83uCbgTPYw==",
"license": "MIT",
"dependencies": {
"ast-types": "^0.16.1",
@@ -16083,19 +15486,19 @@
}
},
"node_modules/redis": {
- "version": "5.12.1",
- "resolved": "https://registry.npmjs.org/redis/-/redis-5.12.1.tgz",
- "integrity": "sha512-LDsoVvb/CpoV9EN3FXvgvSHNJWuCIzl9MiO3ppOevuGLpSGJhwfQjpEwfFJcQvNSddHADDdZaWx0HnmMxRXG7g==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-6.3.0.tgz",
+ "integrity": "sha512-XFQbPie1lGpKeUZ8ySYY43yLnQy/iIQtHNvIr/1XdaABpb96rUSdm3Mfl+98FEVbv9ZJIzINMno5s0Nh8E5LEw==",
"license": "MIT",
"dependencies": {
- "@redis/bloom": "5.12.1",
- "@redis/client": "5.12.1",
- "@redis/json": "5.12.1",
- "@redis/search": "5.12.1",
- "@redis/time-series": "5.12.1"
+ "@redis/bloom": "6.3.0",
+ "@redis/client": "6.3.0",
+ "@redis/json": "6.3.0",
+ "@redis/search": "6.3.0",
+ "@redis/time-series": "6.3.0"
},
"engines": {
- "node": ">= 18.19.0"
+ "node": ">= 20.0.0"
}
},
"node_modules/redis-errors": {
@@ -16157,13 +15560,13 @@
}
},
"node_modules/resend": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/resend/-/resend-6.18.0.tgz",
- "integrity": "sha512-EjxZ9AVzywJgOlUoIJe9ytBWVrfbUtJbjeoLnRSvpU1sv97Hh9DSwhw+k8kiujrG4Rg4bzTBsjlmwWWuoOxSug==",
+ "version": "6.32.1",
+ "resolved": "https://registry.npmjs.org/resend/-/resend-6.32.1.tgz",
+ "integrity": "sha512-Z9DxkIZt5uvVNkjxjc+r4rCPI0MdDIJ7H+GvU50o9GkhrD0tVTwP6caE8KYEco90sos312l6R72jAEMCBFBiFQ==",
"license": "MIT",
"dependencies": {
- "postal-mime": "2.7.5",
- "standardwebhooks": "1.0.0"
+ "postal-mime": "2.7.6",
+ "standardwebhooks": "1.1.1"
},
"engines": {
"node": ">=20"
@@ -16178,14 +15581,14 @@
}
},
"node_modules/resolve": {
- "version": "1.22.12",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
- "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+ "version": "1.22.13",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz",
+ "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
- "is-core-module": "^2.16.1",
+ "is-core-module": "^2.17.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -16216,6 +15619,16 @@
"node": ">=8"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/responselike": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
@@ -16245,6 +15658,21 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/restore-cursor/node_modules/onetime": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+ "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-function": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/restore-cursor/node_modules/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
@@ -16283,13 +15711,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/rfdc": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
- "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/rimraf": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
@@ -16305,29 +15726,6 @@
"rimraf": "bin.js"
}
},
- "node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/roarr": {
"version": "2.15.4",
"resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
@@ -16348,12 +15746,12 @@
}
},
"node_modules/rolldown": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz",
- "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.13.tgz",
+ "integrity": "sha512-/5apOkwWxtACcQtZ5WlrAsKS4JwXVThQPJZ3RqIruRY9UG9M8e0VlXN068xum/JRKA4aIUoJ13ghe/kGCvidiQ==",
"license": "MIT",
"dependencies": {
- "@oxc-project/types": "=0.139.0",
+ "@oxc-project/types": "=0.153.0",
"@rolldown/pluginutils": "^1.0.0"
},
"bin": {
@@ -16363,21 +15761,21 @@
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
- "@rolldown/binding-android-arm64": "1.1.5",
- "@rolldown/binding-darwin-arm64": "1.1.5",
- "@rolldown/binding-darwin-x64": "1.1.5",
- "@rolldown/binding-freebsd-x64": "1.1.5",
- "@rolldown/binding-linux-arm-gnueabihf": "1.1.5",
- "@rolldown/binding-linux-arm64-gnu": "1.1.5",
- "@rolldown/binding-linux-arm64-musl": "1.1.5",
- "@rolldown/binding-linux-ppc64-gnu": "1.1.5",
- "@rolldown/binding-linux-s390x-gnu": "1.1.5",
- "@rolldown/binding-linux-x64-gnu": "1.1.5",
- "@rolldown/binding-linux-x64-musl": "1.1.5",
- "@rolldown/binding-openharmony-arm64": "1.1.5",
- "@rolldown/binding-wasm32-wasi": "1.1.5",
- "@rolldown/binding-win32-arm64-msvc": "1.1.5",
- "@rolldown/binding-win32-x64-msvc": "1.1.5"
+ "@rolldown/binding-android-arm-eabi": "1.2.13",
+ "@rolldown/binding-android-arm64": "1.2.13",
+ "@rolldown/binding-darwin-arm64": "1.2.13",
+ "@rolldown/binding-darwin-x64": "1.2.13",
+ "@rolldown/binding-freebsd-x64": "1.2.13",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.2.13",
+ "@rolldown/binding-linux-arm64-gnu": "1.2.13",
+ "@rolldown/binding-linux-arm64-musl": "1.2.13",
+ "@rolldown/binding-linux-ppc64-gnu": "1.2.13",
+ "@rolldown/binding-linux-s390x-gnu": "1.2.13",
+ "@rolldown/binding-linux-x64-gnu": "1.2.13",
+ "@rolldown/binding-linux-x64-musl": "1.2.13",
+ "@rolldown/binding-openharmony-arm64": "1.2.13",
+ "@rolldown/binding-win32-arm64-msvc": "1.2.13",
+ "@rolldown/binding-win32-x64-msvc": "1.2.13"
}
},
"node_modules/router": {
@@ -16396,17 +15794,11 @@
"node": ">= 18"
}
},
- "node_modules/router/node_modules/is-promise": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
- "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
- "license": "MIT"
- },
"node_modules/rrweb-cssom": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
"integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/run-applescript": {
@@ -16487,9 +15879,9 @@
}
},
"node_modules/sax": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
- "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz",
+ "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
@@ -16500,7 +15892,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
"integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
- "devOptional": true,
+ "dev": true,
"license": "ISC",
"dependencies": {
"xmlchars": "^2.2.0"
@@ -16510,9 +15902,9 @@
}
},
"node_modules/scheduler": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
- "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz",
+ "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==",
"license": "MIT"
},
"node_modules/selderee": {
@@ -16622,9 +16014,9 @@
"license": "ISC"
},
"node_modules/shadcn": {
- "version": "4.13.0",
- "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-4.13.0.tgz",
- "integrity": "sha512-5fuJ4jI/GcPeA/iTL4cJivCZuYQGXz/N3bIzyd+Gd/FM6xUCy2MxGG+LaDQuw2cjNy9zGPSFPTEmI048UwPTZA==",
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-4.21.4.tgz",
+ "integrity": "sha512-YYfn/hsHbRH2mGwnKBx9tk+DjTQH+RUMS5iCxjKzwzuJ5uoHPqLOFUCJSeX0sXfrcBSfgQaXiOLGKNLjlIQxxw==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.28.0",
@@ -16633,10 +16025,11 @@
"@babel/preset-typescript": "^7.27.1",
"@dotenvx/dotenvx": "^1.48.4",
"@modelcontextprotocol/sdk": "^1.26.0",
+ "@shadcn/registry": "0.1.3",
"@types/validate-npm-package-name": "^4.0.2",
"browserslist": "^4.26.2",
+ "cn": "^0.2.4",
"commander": "^14.0.0",
- "cosmiconfig": "^9.0.0",
"dedent": "^1.6.0",
"deepmerge": "^4.3.1",
"diff": "^8.0.2",
@@ -16647,15 +16040,15 @@
"kleur": "^4.1.5",
"open": "^11.0.0",
"ora": "^8.2.0",
- "postcss": "^8.5.6",
- "postcss-selector-parser": "^7.1.0",
+ "postcss": "^8.5.23",
+ "postcss-selector-parser": "^7.1.3",
"prompts": "^2.4.2",
"recast": "^0.23.11",
+ "socks": "^2.8.8",
"stringify-object": "^5.0.0",
- "tailwind-merge": "^3.0.1",
"ts-morph": "^26.0.0",
"tsconfig-paths": "^4.2.0",
- "undici": "^7.27.2",
+ "undici": "^7.29.0",
"validate-npm-package-name": "^7.0.1",
"zod": "^3.24.1",
"zod-to-json-schema": "^3.24.6"
@@ -16677,9 +16070,9 @@
}
},
"node_modules/shadcn/node_modules/fs-extra": {
- "version": "11.3.6",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.6.tgz",
- "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==",
+ "version": "11.4.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.1.tgz",
+ "integrity": "sha512-KYAb4c9BJQI6QqGKthV68OHe0badztdXJWKo0WtBA9IuCFPTKvE5ZdUBglP833aMjhaSPNO4A5j/EkzZtGlKjA==",
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
@@ -16691,9 +16084,9 @@
}
},
"node_modules/shadcn/node_modules/postcss-selector-parser": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz",
- "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==",
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz",
+ "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==",
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
@@ -16734,9 +16127,9 @@
}
},
"node_modules/shell-quote": {
- "version": "1.8.4",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz",
- "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.12.0.tgz",
+ "integrity": "sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -16818,12 +16211,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/siginfo": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
- "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
- "license": "ISC"
- },
"node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -16849,34 +16236,28 @@
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
"license": "MIT"
},
- "node_modules/slice-ansi": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
- "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
- "dev": true,
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
"license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.2.3",
- "is-fullwidth-code-point": "^5.1.0"
- },
"engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
}
},
- "node_modules/slice-ansi/node_modules/ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "dev": true,
+ "node_modules/socks": {
+ "version": "2.8.10",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.10.tgz",
+ "integrity": "sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ==",
"license": "MIT",
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "ip-address": "^10.1.1",
+ "smart-buffer": "^4.2.0"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
}
},
"node_modules/sonic-boom": {
@@ -16898,9 +16279,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
+ "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -16946,12 +16327,6 @@
"node": ">=0.8"
}
},
- "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==",
- "license": "MIT"
- },
"node_modules/standard-as-callback": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
@@ -16959,9 +16334,9 @@
"license": "MIT"
},
"node_modules/standardwebhooks": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/standardwebhooks/-/standardwebhooks-1.0.0.tgz",
- "integrity": "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/standardwebhooks/-/standardwebhooks-1.1.1.tgz",
+ "integrity": "sha512-bCbX9ZEyFkWPsRz7Bl3NuQUJohmwGSev/yhr7vhaGPlc4AfIrspIRa6cPTBuI1ItmrTDJ4d/S2hCsfe4+vQGnQ==",
"license": "MIT",
"dependencies": {
"@stablelib/base64": "^1.0.0",
@@ -16988,9 +16363,10 @@
}
},
"node_modules/std-env": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz",
- "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz",
+ "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==",
+ "dev": true,
"license": "MIT"
},
"node_modules/stdin-discarder": {
@@ -17026,9 +16402,9 @@
}
},
"node_modules/string-width": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz",
- "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz",
+ "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17086,18 +16462,6 @@
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
- "node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
"node_modules/strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
@@ -17132,19 +16496,6 @@
"node": ">=8"
}
},
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/sucrase": {
"version": "3.35.1",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
@@ -17192,9 +16543,9 @@
}
},
"node_modules/superagent": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz",
- "integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==",
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.4.1.tgz",
+ "integrity": "sha512-PVMkMrhKrSTtFhUU8jiWuGh/gyRMKiyCTCmm0+qVzRNxlfntmRKJkDhlEXN62x3HIb33sQ4kmL8lcSdccWAchQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17213,9 +16564,9 @@
}
},
"node_modules/supertest": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.2.2.tgz",
- "integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.3.1.tgz",
+ "integrity": "sha512-vNaNCFoCR/edDbErQZp5KLNT8R4dSPHX7rlDLoE8hWLAm/878j6ShMbe8HK/E6RwwuhlSXVelXAIg9AxR5WWPw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17228,15 +16579,19 @@
}
},
"node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/supports-preserve-symlinks-flag": {
@@ -17272,27 +16627,6 @@
"node": ">=20.0.0"
}
},
- "node_modules/swagger-jsdoc/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/swagger-jsdoc/node_modules/brace-expansion": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
- "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
"node_modules/swagger-jsdoc/node_modules/commander": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz",
@@ -17326,21 +16660,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/swagger-jsdoc/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.5"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/swagger-jsdoc/node_modules/yaml": {
"version": "2.0.0-1",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-1.tgz",
@@ -17351,9 +16670,9 @@
}
},
"node_modules/swagger-ui-dist": {
- "version": "5.32.8",
- "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.32.8.tgz",
- "integrity": "sha512-dgMdWXIgnI4zX4OPhKEdWnlDODbgm8W3AX0Ivn/BBqcUh6xZsBxhZMnvk6DJyRz1BTrj8dPxtarmEGgkz30oyA==",
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.33.1.tgz",
+ "integrity": "sha512-H872wWkA53bFIsGgi7OWgmq+CRWw3nFQGdJWRqOB9wNwTm6e5ol34+qPDkV4AJlK+gglM2EsJiOOzsGsEGbluA==",
"license": "Apache-2.0",
"dependencies": {
"@scarf/scarf": "=1.4.0"
@@ -17397,13 +16716,13 @@
"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==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/systeminformation": {
- "version": "5.31.15",
- "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.15.tgz",
- "integrity": "sha512-7mqCtD28TK5dVdLAQONVa/Do/NBgMH2dxqf49nh6DIKoEWuDg6tkgGBP+dN22VEJVPZa/QqiHomhWNRn4WUNTQ==",
+ "version": "5.33.15",
+ "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.33.15.tgz",
+ "integrity": "sha512-s5RloL0F7xhN0ZjfHtLGnbf7EW74EI0N8NFL+1xR7Oxz9QA33obNZsl7lyfnJOhN04E/kGFPoJPlvY7TZ5fzmw==",
"license": "MIT",
"os": [
"darwin",
@@ -17419,7 +16738,7 @@
"systeminformation": "lib/cli.js"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=10.0.0"
},
"funding": {
"type": "Buy me a coffee",
@@ -17427,9 +16746,9 @@
}
},
"node_modules/tailwind-merge": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz",
- "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.7.0.tgz",
+ "integrity": "sha512-XPPUyAc+cvspz3lHTcR/QgPfW2A0lv/xQNIjX3HGhLR+Nq2lHaLq5MtTesHn8GUr3W3DguT2KT5x3NVgRtYwmA==",
"license": "MIT",
"funding": {
"type": "github",
@@ -17437,9 +16756,9 @@
}
},
"node_modules/tailwindcss": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.2.tgz",
- "integrity": "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz",
+ "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==",
"dev": true,
"license": "MIT"
},
@@ -17458,9 +16777,9 @@
}
},
"node_modules/tar": {
- "version": "7.5.19",
- "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.19.tgz",
- "integrity": "sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==",
+ "version": "7.5.22",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz",
+ "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==",
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/fs-minipass": "^4.0.0",
@@ -17483,9 +16802,9 @@
}
},
"node_modules/tdigest": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz",
- "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==",
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.3.tgz",
+ "integrity": "sha512-zbRt+lT+/H4fRItHshczHErVCQnitJk8MfMT24MqFJf3YL7SJJPqGIGeuOdvxXxM/AHFzKBl7WoyaYwqO9s3Kw==",
"license": "MIT",
"dependencies": {
"bintrees": "1.0.2"
@@ -17552,26 +16871,6 @@
"node": ">=20"
}
},
- "node_modules/thread-stream/node_modules/real-require": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz",
- "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==",
- "license": "MIT"
- },
- "node_modules/timers-ext": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz",
- "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "es5-ext": "^0.10.64",
- "next-tick": "^1.1.0"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
"node_modules/tiny-async-pool": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz",
@@ -17605,15 +16904,20 @@
"license": "MIT"
},
"node_modules/tinybench": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
- "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
- "license": "MIT"
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.2.2.tgz",
+ "integrity": "sha512-nIZ2N2dFpjBsg2hgitKu7mA+FvsIJuGJOwysRngmVRRmWgR/UyPjwJj8c/fT/dhm8EkHnF5EOogRf+0Z2qrimA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.0.0"
+ }
},
"node_modules/tinyexec": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz",
- "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz",
+ "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
@@ -17623,6 +16927,7 @@
"version": "0.2.17",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
"integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.5.0",
@@ -17635,39 +16940,11 @@
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
- "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"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==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz",
+ "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=14.0.0"
@@ -17677,7 +16954,7 @@
"version": "6.1.86",
"resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
"integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"tldts-core": "^6.1.86"
@@ -17690,7 +16967,7 @@
"version": "6.1.86",
"resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
"integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/tmp": {
@@ -17738,7 +17015,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
"integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
- "devOptional": true,
+ "dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"tldts": "^6.1.32"
@@ -17751,7 +17028,7 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
"integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"punycode": "^2.3.1"
@@ -17831,10 +17108,10 @@
"license": "0BSD"
},
"node_modules/tsx": {
- "version": "4.23.1",
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.1.tgz",
- "integrity": "sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==",
- "devOptional": true,
+ "version": "4.23.15",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.15.tgz",
+ "integrity": "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "~0.28.0"
@@ -17858,13 +17135,6 @@
"url": "https://github.com/sponsors/Wombosvideo"
}
},
- "node_modules/type": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
- "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -17910,24 +17180,11 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/type-is/node_modules/content-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
- "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
"node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -17938,16 +17195,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.63.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.63.0.tgz",
- "integrity": "sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==",
+ "version": "8.71.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.1.tgz",
+ "integrity": "sha512-oiNVPC3/NbV1FpaHU07l8O6ynqG9v4PAiW2WvTrAmZdR0f2HI/gE668ElMLCK7Xbsu5k2fK5C4fXNiq05j7/nQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.63.0",
- "@typescript-eslint/parser": "8.63.0",
- "@typescript-eslint/typescript-estree": "8.63.0",
- "@typescript-eslint/utils": "8.63.0"
+ "@typescript-eslint/eslint-plugin": "8.71.1",
+ "@typescript-eslint/parser": "8.71.1",
+ "@typescript-eslint/typescript-estree": "8.71.1",
+ "@typescript-eslint/utils": "8.71.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -17968,19 +17225,19 @@
"license": "MIT"
},
"node_modules/undici": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz",
- "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==",
+ "version": "7.30.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.30.0.tgz",
+ "integrity": "sha512-dkrQXeHSaoamnItlYbmzG0wFYrM0ZwDxCIg0A7aKjTyyhh9svRzCNFEzV+Vm05/yehjCzjDZ31KXfGEjYSztDQ==",
"license": "MIT",
"engines": {
"node": ">=20.18.1"
}
},
"node_modules/undici-types": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
- "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
- "dev": true,
+ "version": "8.9.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",
+ "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",
+ "devOptional": true,
"license": "MIT"
},
"node_modules/unicode-properties": {
@@ -18003,12 +17260,6 @@
"tiny-inflate": "^1.0.0"
}
},
- "node_modules/unicode-trie/node_modules/pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
- "license": "MIT"
- },
"node_modules/unicorn-magic": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
@@ -18075,9 +17326,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
- "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz",
+ "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==",
"funding": [
{
"type": "opencollective",
@@ -18188,16 +17439,30 @@
"node": ">= 0.8"
}
},
+ "node_modules/verkit": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.5.0.tgz",
+ "integrity": "sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
"node_modules/vite": {
- "version": "8.1.4",
- "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.4.tgz",
- "integrity": "sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==",
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.4.tgz",
+ "integrity": "sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "lightningcss": "^1.32.0",
- "picomatch": "^4.0.5",
- "postcss": "^8.5.16",
- "rolldown": "~1.1.4",
+ "lightningcss": "^1.33.0",
+ "picomatch": "^4.0.7",
+ "postcss": "^8.5.29",
+ "rolldown": "~1.2.12",
"tinyglobby": "^0.2.17"
},
"bin": {
@@ -18214,7 +17479,7 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
- "@vitejs/devtools": "^0.3.0",
+ "@vitejs/devtools": "^0.7.1",
"esbuild": "^0.27.0 || ^0.28.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",
@@ -18265,50 +17530,32 @@
}
}
},
- "node_modules/vite/node_modules/picomatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
- "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/vitest": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.8.tgz",
- "integrity": "sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==",
- "license": "MIT",
- "dependencies": {
- "@vitest/expect": "4.1.8",
- "@vitest/mocker": "4.1.8",
- "@vitest/pretty-format": "4.1.8",
- "@vitest/runner": "4.1.8",
- "@vitest/snapshot": "4.1.8",
- "@vitest/spy": "4.1.8",
- "@vitest/utils": "4.1.8",
- "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"
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.3.tgz",
+ "integrity": "sha512-xMw97S3rjdtj5dkVat7jCsqWBpvchs3RlpQctUqwJD0KkERk40vz2fJ77lDwW/Vzh/pk18eItYAzkodhSes3jQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/mocker": "5.0.3",
+ "chai": "^6.2.2",
+ "es-module-lexer": "^2.3.2",
+ "expect-type": "^1.4.0",
+ "magic-string": "^1.2.3",
+ "obug": "^2.1.4",
+ "picomatch": "^4.0.7",
+ "std-env": "^4.2.0",
+ "tinybench": "^6.1.4",
+ "tinyexec": "^1.3.0",
+ "tinyglobby": "^0.2.17",
+ "why-is-node-running": "3.2.1"
},
"bin": {
"vitest": "vitest.mjs"
},
"engines": {
- "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
+ "node": "^22.12.0 || ^24.0.0 || >=26.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
@@ -18316,16 +17563,16 @@
"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.8",
- "@vitest/browser-preview": "4.1.8",
- "@vitest/browser-webdriverio": "4.1.8",
- "@vitest/coverage-istanbul": "4.1.8",
- "@vitest/coverage-v8": "4.1.8",
- "@vitest/ui": "4.1.8",
+ "@types/node": "^22.0.0 || >=24.0.0",
+ "@vitest/browser-playwright": "5.0.3",
+ "@vitest/browser-preview": "5.0.3",
+ "@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0",
+ "@vitest/coverage-istanbul": "5.0.3",
+ "@vitest/coverage-v8": "5.0.3",
+ "@vitest/ui": "5.0.3",
"happy-dom": "*",
"jsdom": "*",
- "vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "vite": "^6.4.0 || ^7.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"@edge-runtime/vm": {
@@ -18366,23 +17613,11 @@
}
}
},
- "node_modules/vitest/node_modules/picomatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
- "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"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==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"xml-name-validator": "^5.0.0"
@@ -18409,7 +17644,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "devOptional": true,
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
@@ -18441,7 +17676,7 @@
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
"integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"tr46": "^5.1.0",
@@ -18452,34 +17687,32 @@
}
},
"node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+ "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
+ "dev": true,
"license": "ISC",
"dependencies": {
- "isexe": "^2.0.0"
+ "isexe": "^3.1.1"
},
"bin": {
- "node-which": "bin/node-which"
+ "node-which": "bin/which.js"
},
"engines": {
- "node": ">= 8"
+ "node": "^18.17.0 || >=20.5.0"
}
},
"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==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.1.tgz",
+ "integrity": "sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "siginfo": "^2.0.0",
- "stackback": "0.0.2"
- },
"bin": {
"why-is-node-running": "cli.js"
},
"engines": {
- "node": ">=8"
+ "node": ">=20.11"
}
},
"node_modules/wmf": {
@@ -18510,26 +17743,19 @@
"node": ">=0.10.0"
}
},
- "node_modules/wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/wrap-ansi": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz",
- "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==",
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-styles": "^6.2.3",
- "string-width": "^8.2.0",
- "strip-ansi": "^7.1.2"
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
},
"engines": {
- "node": ">=20"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
@@ -18548,6 +17774,24 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -18555,10 +17799,10 @@
"license": "ISC"
},
"node_modules/ws": {
- "version": "8.21.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
- "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
- "devOptional": true,
+ "version": "8.22.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz",
+ "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -18577,13 +17821,13 @@
}
},
"node_modules/wsl-utils": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz",
- "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-1.0.1.tgz",
+ "integrity": "sha512-c16PKLIRxBYpR3jSWsdS7SFp0COm5SOQdiFjY818dYFHJbMGuLBszpF07LBWmOS1uzrHa9VGdynsEgoeKy0oOQ==",
"license": "MIT",
"dependencies": {
"is-wsl": "^3.1.0",
- "powershell-utils": "^0.1.0"
+ "powershell-utils": "^0.2.0"
},
"engines": {
"node": ">=20"
@@ -18617,7 +17861,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
"integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18"
@@ -18637,7 +17881,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/xtend": {
@@ -18660,15 +17904,17 @@
}
},
"node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
"license": "ISC"
},
"node_modules/yaml": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
- "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz",
+ "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==",
+ "dev": true,
"license": "ISC",
"optional": true,
"bin": {
@@ -18682,16 +17928,16 @@
}
},
"node_modules/yargs": {
- "version": "18.0.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz",
- "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==",
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.2.0.tgz",
+ "integrity": "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^9.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
- "string-width": "^7.2.0",
+ "string-width": "^8.2.1",
"y18n": "^5.0.5",
"yargs-parser": "^22.0.0"
},
@@ -18709,24 +17955,6 @@
"node": "^20.19.0 || ^22.12.0 || >=23"
}
},
- "node_modules/yargs/node_modules/string-width": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
- "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^10.3.0",
- "get-east-asian-width": "^1.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
@@ -18741,9 +17969,9 @@
}
},
"node_modules/yocto-spinner": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-1.2.1.tgz",
- "integrity": "sha512-9cbFWLhbiZp+820O4pkHGNncI7+MrUGzBOjw8NMG+ewsY+aG0DdEXnr19Smxao32YOjLZRMdn1UtaxcrXOYOIg==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-1.2.2.tgz",
+ "integrity": "sha512-DODGl1wJjA/s5pnJFKau9lIYHT81lnhob1i3e1TjxZRxEhWRKl74nTbWE6H5KlkViQQTo/Z29YFdxzTZAMY3ng==",
"license": "MIT",
"dependencies": {
"yoctocolors": "^2.1.1"
@@ -18756,9 +17984,9 @@
}
},
"node_modules/yoctocolors": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz",
- "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz",
+ "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -18768,9 +17996,9 @@
}
},
"node_modules/zod": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
- "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
+ "version": "4.6.5",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz",
+ "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
diff --git a/package.json b/package.json
index f9b80225..8a992fad 100644
--- a/package.json
+++ b/package.json
@@ -39,42 +39,44 @@
"discover:ats": "npm run discover:greenhouse && npm run discover:lever && npm run discover:inhire"
},
"dependencies": {
- "@vitest/coverage-v8": "4.1.8",
- "axios": "^1.17.0",
+ "@vitest/coverage-v8": "5.0.3",
+ "axios": "^1.20.0",
"cheerio": "^1.2.0",
"cors": "^2.8.6",
"dotenv": "^17.4.2",
- "drizzle-orm": "^0.45.2",
+ "drizzle-orm": "^0.45.4",
"express": "^5.2.1",
- "openid-client": "^6.8.4",
- "pdfkit": "^0.18.0",
- "pg": "^8.21.0",
- "pino": "^10.3.1",
- "react-phone-number-input": "^3.4.17",
+ "openid-client": "^6.8.8",
+ "pdfkit": "^0.20.2",
+ "pg": "^8.23.1",
+ "pino": "^10.4.0",
+ "react-phone-number-input": "^3.4.18",
"swagger-jsdoc": "^6.3.0",
"swagger-ui-express": "^5.0.1",
- "tar": "^7.5.16",
+ "tar": "^7.5.22",
"xlsx": "^0.18.5"
},
"devDependencies": {
- "@commitlint/cli": "^21.0.2",
+ "@commitlint/cli": "^21.2.3",
"@commitlint/config-conventional": "^21.0.2",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
- "@types/node": "^25.9.5",
+ "@types/node": "^26.6.4",
"@types/pdfkit": "^0.17.6",
- "@types/pg": "^8.20.0",
+ "@types/pg": "^8.23.1",
"@types/pino": "^7.0.5",
"@types/swagger-jsdoc": "^6.0.4",
"@types/swagger-ui-express": "^4.1.8",
+ "@vitest/coverage-v8": "5.0.3",
"concurrently": "^9.2.1",
- "drizzle-kit": "^0.18.1",
+ "drizzle-kit": "^0.31.11",
"electron": "^42.3.3",
"electron-builder": "^26.15.0",
"husky": "^9.1.7",
"lint-staged": "^17.0.7",
"tsx": "^4.23.1",
- "typescript": "^5.9.3"
+ "typescript": "~5.9.3",
+ "vitest": "5.0.3"
},
"lint-staged": {
"frontend/src/**/*.{js,jsx,ts,tsx}": [
diff --git a/scraper-go/Dockerfile b/scraper-go/Dockerfile
index 3ee8efa8..c5592014 100644
--- a/scraper-go/Dockerfile
+++ b/scraper-go/Dockerfile
@@ -1,5 +1,5 @@
# ── Build stage ─────────────────────────────────────────────
-FROM golang:1.26-alpine AS builder
+FROM golang:1.27-alpine AS builder
WORKDIR /app
@@ -16,7 +16,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build \
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /catalog ./cmd/catalog
# ── Runtime stage ───────────────────────────────────────────
-FROM alpine:3.20
+FROM alpine:3.24
RUN apk --no-cache add ca-certificates wget
diff --git a/scraper-go/cmd/server/admin_handlers.go b/scraper-go/cmd/server/admin_handlers.go
index e30fa94a..302c29d6 100644
--- a/scraper-go/cmd/server/admin_handlers.go
+++ b/scraper-go/cmd/server/admin_handlers.go
@@ -6,8 +6,11 @@ import (
"errors"
"fmt"
"github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/domain"
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/metrics"
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/ports"
"log/slog"
"net/http"
+ "sort"
"strconv"
"time"
@@ -176,18 +179,51 @@ func handleGetJobs(js *jobstore.Store) http.HandlerFunc {
}
}
-// handleJobsCount retorna o total de vagas no índice via GET /admin/jobs/count
-func handleJobsCount(js *jobstore.Store) http.HandlerFunc {
+// handleJobsCount keeps the legacy total and adds full catalog attribution and
+// the startup inventory, independent of providers selected for the latest run.
+func handleJobsCount(js *jobstore.Store, inventory ...[]ports.JobSource) http.HandlerFunc {
+ type sourceTotal struct {
+ Source *string `json:"source"`
+ Provider string `json:"provider"`
+ Total int64 `json:"total"`
+ }
+ var configured []string
+ if len(inventory) > 0 {
+ configured = make([]string, 0)
+ seen := map[string]bool{}
+ for _, a := range inventory[0] {
+ id := metrics.Provider(string(ports.CapabilitiesOf(a).Provider))
+ if !seen[id] {
+ configured = append(configured, id)
+ seen[id] = true
+ }
+ }
+ sort.Strings(configured)
+ }
return func(w http.ResponseWriter, r *http.Request) {
- count, err := js.Count(r.Context())
+ ctx, cancel := context.WithTimeout(r.Context(), 3*time.Second)
+ defer cancel()
+ groups, err := js.SourceCounts(ctx)
+ var count int64
+ var sources []sourceTotal
+ if err == nil {
+ sources = make([]sourceTotal, 0, len(groups))
+ for _, g := range groups {
+ provider := "unknown"
+ if g.Source != nil {
+ provider = metrics.Provider(*g.Source)
+ }
+ sources = append(sources, sourceTotal{g.Source, provider, g.Total})
+ count += g.Total
+ }
+ } else {
+ count, err = js.Count(ctx)
+ }
if err != nil {
http.Error(w, "erro ao contar vagas", http.StatusInternalServerError)
return
}
-
w.Header().Set("Content-Type", "application/json")
- json.NewEncoder(w).Encode(map[string]any{
- "total": count,
- })
+ json.NewEncoder(w).Encode(map[string]any{"total": count, "sources": sources, "configuredProviders": configured})
}
}
diff --git a/scraper-go/cmd/server/catalog_counts_test.go b/scraper-go/cmd/server/catalog_counts_test.go
new file mode 100644
index 00000000..80caa045
--- /dev/null
+++ b/scraper-go/cmd/server/catalog_counts_test.go
@@ -0,0 +1,65 @@
+package main
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/domain"
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/jobstore"
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/ports"
+ "github.com/stretchr/testify/require"
+ "net/http/httptest"
+ "testing"
+)
+
+type countedCatalog struct {
+ jobstore.Catalog
+ fail bool
+}
+
+func (c countedCatalog) Count(context.Context) (int64, error) { return 9, nil }
+func (c countedCatalog) SourceCounts(context.Context) ([]jobstore.SourceCount, error) {
+ if c.fail {
+ return nil, errors.New("unavailable")
+ }
+ return []jobstore.SourceCount{{Source: strPtr("Green House"), Total: 6}, {Source: strPtr("LinkedIn"), Total: 2}, {Source: nil, Total: 1}}, nil
+}
+func strPtr(s string) *string { return &s }
+
+type configuredAdapter string
+
+func (a configuredAdapter) SourceName() string { return string(a) }
+func (a configuredAdapter) Search(context.Context, string, domain.ScrapeRequest) ([]domain.Job, error) {
+ return nil, nil
+}
+func TestCatalogCountsAndConfiguredInventory(t *testing.T) {
+ for _, partial := range []bool{false, true} {
+ w := httptest.NewRecorder()
+ handleJobsCount(jobstore.NewDurable(nil, countedCatalog{fail: partial}), []ports.JobSource{configuredAdapter("Green House:company"), configuredAdapter("The Muse"), configuredAdapter("Green House:other")})(w, httptest.NewRequest("GET", "/admin/jobs/count", nil))
+ require.Equal(t, 200, w.Code)
+ var body struct {
+ Total int
+ Sources []struct {
+ Source *string
+ Provider string
+ Total int
+ }
+ ConfiguredProviders []string
+ }
+ require.NoError(t, json.Unmarshal(w.Body.Bytes(), &body))
+ require.Equal(t, 9, body.Total)
+ require.Equal(t, []string{"greenhouse", "themuse"}, body.ConfiguredProviders)
+ if partial {
+ require.Nil(t, body.Sources)
+ } else {
+ require.Len(t, body.Sources, 3)
+ sum := 0
+ for _, s := range body.Sources {
+ sum += s.Total
+ }
+ require.Equal(t, body.Total, sum)
+ require.Equal(t, "greenhouse", body.Sources[0].Provider)
+ require.Nil(t, body.Sources[2].Source)
+ }
+ }
+}
diff --git a/scraper-go/cmd/server/observability_test.go b/scraper-go/cmd/server/observability_test.go
index 4f13beb9..a4cacffe 100644
--- a/scraper-go/cmd/server/observability_test.go
+++ b/scraper-go/cmd/server/observability_test.go
@@ -16,7 +16,7 @@ import (
)
func TestOperationalSnapshotPartialResourcesAndNoSecrets(t *testing.T) {
- metrics.StartRun("cron", time.Now())
+ metrics.StartRun("cron", time.Now(), "public-run-id")
metrics.LockAcquired(time.Second)
r := httptest.NewRecorder()
handleOperationalSnapshot(nil, nil)(r, httptest.NewRequest("GET", "/admin/observability", nil))
@@ -35,9 +35,12 @@ func TestOperationalSnapshotPartialResourcesAndNoSecrets(t *testing.T) {
if body.Status != "partial" || body.Execution.Status != "running" || body.Resources.Goroutines < 1 || !body.Lock.Held {
t.Fatal(r.Body.String())
}
- if strings.Contains(r.Body.String(), "token") || strings.Contains(r.Body.String(), "runId") {
+ if strings.Contains(r.Body.String(), "token") || strings.Contains(r.Body.String(), "private-secret") {
t.Fatal("secret exposure")
}
+ if body.Execution.RunID == nil || *body.Execution.RunID != "public-run-id" {
+ t.Fatal("real run identity missing")
+ }
metrics.LockReleased()
metrics.FinishRun(nil)
r = httptest.NewRecorder()
diff --git a/scraper-go/cmd/server/server.go b/scraper-go/cmd/server/server.go
index 363a8b02..7c7dbd8e 100644
--- a/scraper-go/cmd/server/server.go
+++ b/scraper-go/cmd/server/server.go
@@ -153,7 +153,7 @@ func run(adapterList []ports.JobSource, runtimeCfg config.RuntimeConfig) {
mux.Handle("POST /admin/scrape", handleTriggerScrape(scheduler, bgCtx))
mux.Handle("GET /admin/scrape/status", handleScraperStatus(scheduler))
mux.Handle("GET /admin/jobs", handleGetJobs(jobStore))
- mux.Handle("GET /admin/jobs/count", handleJobsCount(jobStore))
+ mux.Handle("GET /admin/jobs/count", handleJobsCount(jobStore, adapterList))
srv := &http.Server{
Addr: addr,
diff --git a/scraper-go/go.mod b/scraper-go/go.mod
index ebeac3e8..573e31c6 100644
--- a/scraper-go/go.mod
+++ b/scraper-go/go.mod
@@ -1,6 +1,6 @@
module github.com/Benevanio/Jobs_Scraper_Global/scraper-go
-go 1.26
+go 1.26.0
require github.com/PuerkitoBio/goquery v1.12.0
@@ -34,8 +34,8 @@ require (
require (
github.com/andybalholm/cascadia v1.3.3 // indirect
github.com/lib/pq v1.10.9
- github.com/redis/go-redis/v9 v9.19.0
+ github.com/redis/go-redis/v9 v9.22.0
golang.org/x/net v0.52.0 // indirect
- golang.org/x/sync v0.20.0
- golang.org/x/text v0.36.0
+ golang.org/x/sync v0.23.0
+ golang.org/x/text v0.42.0
)
diff --git a/scraper-go/go.sum b/scraper-go/go.sum
index 9578b843..8b2f5187 100644
--- a/scraper-go/go.sum
+++ b/scraper-go/go.sum
@@ -44,8 +44,8 @@ github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9Z
github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
-github.com/redis/go-redis/v9 v9.19.0 h1:XPVaaPSnG6RhYf7p+rmSa9zZfeVAnWsH5h3lxthOm/k=
-github.com/redis/go-redis/v9 v9.19.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA=
+github.com/redis/go-redis/v9 v9.22.0 h1:laDvpYXTJtZLloinw1fA5Kqd6HAEH2XKxOkG/PDq2F0=
+github.com/redis/go-redis/v9 v9.22.0/go.mod h1:y2g0Wj8rQvuK0ELM+oxSudcLtC09JScs98I/X9gRWY4=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
@@ -90,8 +90,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
-golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
+golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk=
+golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -123,8 +123,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
-golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
+golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI=
+golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
diff --git a/scraper-go/internal/adapters/gupy/adapter.go b/scraper-go/internal/adapters/gupy/adapter.go
index d4a2c421..390c277f 100644
--- a/scraper-go/internal/adapters/gupy/adapter.go
+++ b/scraper-go/internal/adapters/gupy/adapter.go
@@ -22,7 +22,7 @@ import (
)
const (
- gupyDefaultBaseURL = "https://employability-portal.gupy.io/api/v1/jobs"
+ gupyDefaultBaseURL = "https://portal.gupy.io/api/job-search/jobs"
gupyDefaultPageLimit = 100
gupyDefaultMaxOffset = 10000
gupyDefaultQueryLimit = 60
diff --git a/scraper-go/internal/catalog/source_counts.go b/scraper-go/internal/catalog/source_counts.go
new file mode 100644
index 00000000..0215ef48
--- /dev/null
+++ b/scraper-go/internal/catalog/source_counts.go
@@ -0,0 +1,34 @@
+package catalog
+
+import (
+ "context"
+ "database/sql"
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/jobstore"
+)
+
+// A single statement sees one PostgreSQL snapshot and the same activity cutoff
+// as Count. Returns groups only, without decoding/loading catalog documents.
+func (s *Store) SourceCounts(ctx context.Context) ([]jobstore.SourceCount, error) {
+ rows, err := s.DB.QueryContext(ctx, `SELECT NULLIF(btrim(payload->>'source'),'') AS source,count(*) FROM job_catalog WHERE expires_at>$1 GROUP BY 1 ORDER BY 1 NULLS LAST`, s.Now().UTC())
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ counts := make([]jobstore.SourceCount, 0)
+ for rows.Next() {
+ var source sql.NullString
+ var c jobstore.SourceCount
+ if err = rows.Scan(&source, &c.Total); err != nil {
+ return nil, err
+ }
+ if source.Valid {
+ v := source.String
+ c.Source = &v
+ }
+ counts = append(counts, c)
+ }
+ if err = rows.Err(); err != nil {
+ return nil, err
+ }
+ return counts, nil
+}
diff --git a/scraper-go/internal/catalog/source_counts_test.go b/scraper-go/internal/catalog/source_counts_test.go
new file mode 100644
index 00000000..e49db6b7
--- /dev/null
+++ b/scraper-go/internal/catalog/source_counts_test.go
@@ -0,0 +1,70 @@
+package catalog
+
+import (
+ "context"
+ "database/sql"
+ "encoding/json"
+ "fmt"
+ "github.com/stretchr/testify/require"
+ "os"
+ "testing"
+ "time"
+)
+
+func TestSourceCountsFullActiveCatalog(t *testing.T) {
+ dsn := os.Getenv("PAV125_TEST_DATABASE_URL")
+ if dsn == "" {
+ t.Skip("isolated PostgreSQL required")
+ }
+ root, err := sql.Open("postgres", dsn)
+ require.NoError(t, err)
+ schema := fmt.Sprintf("pav126_sources_%d", time.Now().UnixNano())
+ _, err = root.Exec("CREATE SCHEMA " + schema)
+ require.NoError(t, err)
+ db, err := sql.Open("postgres", dsn+"&search_path="+schema)
+ require.NoError(t, err)
+ t.Cleanup(func() { db.Close(); root.Exec("DROP SCHEMA " + schema + " CASCADE"); root.Close() })
+ _, err = db.Exec(`CREATE TABLE job_catalog(id text,payload jsonb,expires_at timestamptz,revision bigint)`)
+ require.NoError(t, err)
+ for i := 0; i < 205; i++ {
+ source := any("Green House")
+ if i >= 200 {
+ source = "LinkedIn"
+ }
+ if i == 204 {
+ source = nil
+ }
+ raw, _ := json.Marshal(map[string]any{"source": source, "sources": []string{"Lever", "Gupy"}})
+ _, err = db.Exec(`INSERT INTO job_catalog VALUES($1,$2,now()+interval '1 day',1)`, fmt.Sprint(i), string(raw))
+ require.NoError(t, err)
+ }
+ _, err = db.Exec(`INSERT INTO job_catalog VALUES('expired','{"source":"Jooble"}',now()-interval '1 day',1)`)
+ require.NoError(t, err)
+ store := New(db, DefaultLifetime)
+ counts, err := store.SourceCounts(context.Background())
+ require.NoError(t, err)
+ total := int64(0)
+ bySource := map[string]int64{}
+ for _, c := range counts {
+ total += c.Total
+ if c.Source == nil {
+ bySource["missing"] = c.Total
+ } else {
+ bySource[*c.Source] = c.Total
+ }
+ }
+ require.Equal(t, map[string]int64{"Green House": 200, "LinkedIn": 4, "missing": 1}, bySource)
+ n, err := store.Count(context.Background())
+ require.NoError(t, err)
+ require.Equal(t, n, total)
+ sample, err := store.Sample(context.Background(), 2)
+ require.NoError(t, err)
+ require.Len(t, sample, 2)
+ require.Equal(t, int64(205), total)
+ _, err = db.Exec(`DELETE FROM job_catalog`)
+ require.NoError(t, err)
+ counts, err = store.SourceCounts(context.Background())
+ require.NoError(t, err)
+ require.Empty(t, counts)
+ require.NotNil(t, counts)
+}
diff --git a/scraper-go/internal/jobstore/source_counts.go b/scraper-go/internal/jobstore/source_counts.go
new file mode 100644
index 00000000..422f80d8
--- /dev/null
+++ b/scraper-go/internal/jobstore/source_counts.go
@@ -0,0 +1,23 @@
+package jobstore
+
+import (
+ "context"
+ "fmt"
+)
+
+// SourceCount partitions active catalog rows by their primary source. Multi-source
+// provenance is deliberately not expanded: each catalog identity counts once.
+type SourceCount struct {
+ Source *string
+ Total int64
+}
+type sourceCounter interface {
+ SourceCounts(context.Context) ([]SourceCount, error)
+}
+
+func (s *Store) SourceCounts(ctx context.Context) ([]SourceCount, error) {
+ if source, ok := s.catalog.(sourceCounter); ok {
+ return source.SourceCounts(ctx)
+ }
+ return nil, fmt.Errorf("source aggregation unavailable for this catalog")
+}
diff --git a/scraper-go/internal/metrics/run_snapshot.go b/scraper-go/internal/metrics/run_snapshot.go
new file mode 100644
index 00000000..76311d28
--- /dev/null
+++ b/scraper-go/internal/metrics/run_snapshot.go
@@ -0,0 +1,146 @@
+package metrics
+
+import "time"
+
+// Run totals are independent of process-lifetime Prometheus counters. Only
+// events carrying the current real lease identity may update an active run.
+type ClassificationTotals struct {
+ Received int `json:"received"`
+ Classified int `json:"classified"`
+ Approved int `json:"approved"`
+ Rejected int `json:"rejected"`
+ Invalid int `json:"invalid"`
+}
+type PersistenceTotals struct {
+ Received int `json:"received"`
+ Inserted int `json:"inserted"`
+ Updated int `json:"updated"`
+ Skipped int `json:"skipped"`
+ Failed int `json:"failed"`
+ FailedBatches int `json:"failedBatches"`
+}
+type ProviderState struct {
+ ID string `json:"id"`
+ ConfiguredConcurrency int `json:"configuredConcurrency"`
+ Active int `json:"active"`
+ Waiting int `json:"waiting"`
+ TasksTotal int `json:"tasksTotal"`
+ TasksCompleted int `json:"tasksCompleted"`
+ TasksFailed int `json:"tasksFailed"`
+ TasksCanceled int `json:"tasksCanceled"`
+ JobsCollected int `json:"jobsCollected"`
+ LastTaskStatus *string `json:"lastTaskStatus"`
+ LastTaskFinishedAt *time.Time `json:"lastTaskFinishedAt"`
+ LastTaskDurationSeconds *float64 `json:"lastTaskDurationSeconds"`
+ LastErrorType *string `json:"lastErrorType"`
+}
+
+func activeRun(runID string) bool {
+ return runID != "" && runID == state.runID && (state.execution.Status == "running" || state.execution.Status == "canceling")
+}
+func BeginRunProcessing(runID string, persistence bool) {
+ state.Lock()
+ defer state.Unlock()
+ if !activeRun(runID) {
+ return
+ }
+ if state.classification == nil {
+ state.classification = &ClassificationTotals{}
+ }
+ if persistence && state.persistence == nil {
+ state.persistence = &PersistenceTotals{}
+ }
+}
+func RunClassificationReceived(runID string, n int) {
+ state.Lock()
+ defer state.Unlock()
+ if activeRun(runID) && state.classification != nil {
+ state.classification.Received += max(0, n)
+ }
+}
+func RecordRunClassification(runID string, approved bool) {
+ state.Lock()
+ defer state.Unlock()
+ if !activeRun(runID) || state.classification == nil {
+ return
+ }
+ state.classification.Classified++
+ if approved {
+ state.classification.Approved++
+ } else {
+ state.classification.Rejected++
+ }
+}
+func RecordRunInvalid(runID string) {
+ state.Lock()
+ defer state.Unlock()
+ if activeRun(runID) && state.classification != nil {
+ state.classification.Invalid++
+ }
+}
+func RunPersistenceReceived(runID string, size int) {
+ state.Lock()
+ defer state.Unlock()
+ if activeRun(runID) && state.persistence != nil {
+ state.persistence.Received += max(0, size)
+ }
+}
+
+// Called once with the final SaveBatch result, after its internal retries.
+// Skipped means inputs absent from committed Persisted, including invalid and
+// duplicate inputs; it is not another count of unique durable catalog rows.
+func RecordRunPersistence(runID string, size, inserted, updated, persisted int, err error) {
+ state.Lock()
+ defer state.Unlock()
+ if !activeRun(runID) || state.persistence == nil {
+ return
+ }
+ p := state.persistence
+ if err != nil {
+ p.Failed += max(0, size)
+ p.FailedBatches++
+ return
+ }
+ p.Inserted += max(0, inserted)
+ p.Updated += max(0, updated)
+ p.Skipped += max(0, size-persisted)
+}
+func RecordRunProvider(runID, provider string, jobs int, started time.Time, err error) {
+ state.Lock()
+ defer state.Unlock()
+ if !activeRun(runID) {
+ return
+ }
+ p, ok := state.providers[Provider(provider)]
+ if !ok {
+ return
+ } // Never create providers from arbitrary event text.
+ status := Status(err)
+ now := time.Now().UTC()
+ duration := max(0, now.Sub(started).Seconds())
+ p.TasksCompleted++
+ p.JobsCollected += max(0, jobs)
+ if status == "failed" {
+ p.TasksFailed++
+ }
+ if status == "canceled" || status == "timeout" {
+ p.TasksCanceled++
+ }
+ p.LastTaskStatus = &status
+ p.LastTaskFinishedAt = &now
+ p.LastTaskDurationSeconds = &duration
+ p.LastErrorType = nil
+ if err != nil {
+ category := ErrorType(err)
+ p.LastErrorType = &category
+ }
+ state.providers[p.ID] = p
+}
+
+func copyPointer[T any](p *T) *T {
+ if p == nil {
+ return nil
+ }
+ v := *p
+ return &v
+}
diff --git a/scraper-go/internal/metrics/run_snapshot_test.go b/scraper-go/internal/metrics/run_snapshot_test.go
new file mode 100644
index 00000000..cc5b61c8
--- /dev/null
+++ b/scraper-go/internal/metrics/run_snapshot_test.go
@@ -0,0 +1,103 @@
+package metrics
+
+import (
+ "context"
+ "errors"
+ "testing"
+ "time"
+
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/domain"
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/ports"
+)
+
+func TestRunSnapshotLifecycleAndIsolation(t *testing.T) {
+ StartRun("manual", time.Now(), "run-one")
+ s := Current()
+ if s.Execution.RunID == nil || *s.Execution.RunID != "run-one" || s.Classification != nil || s.Persistence != nil || s.Providers != nil {
+ t.Fatalf("new run: %+v", s)
+ }
+ BeginRunProcessing("run-one", true)
+ RunClassificationReceived("run-one", 3)
+ RecordRunClassification("run-one", true)
+ RecordRunClassification("run-one", false)
+ RecordRunInvalid("run-one")
+ RunPersistenceReceived("run-one", 2)
+ RecordRunPersistence("run-one", 2, 1, 0, 1, nil)
+ FinishRun(nil, "run-one")
+ RecordRunClassification("run-one", true)
+ s = Current()
+ if s.Execution.FinishedAt == nil || s.Classification.Classified != 2 || s.Classification.Received != 3 || s.Classification.Invalid != 1 || s.Persistence.Inserted != 1 || s.Persistence.Skipped != 1 {
+ t.Fatalf("finished: %+v", s)
+ }
+ s.Classification.Approved = 999
+ if Current().Classification.Approved != 1 {
+ t.Fatal("snapshot aliases live state")
+ }
+ StartRun("cron", time.Now(), "run-two")
+ RecordRunClassification("run-one", true)
+ RunPersistenceReceived("run-one", 100)
+ FinishRun(context.Canceled, "run-one")
+ s = Current()
+ if *s.Execution.RunID != "run-two" || s.Execution.FinishedAt != nil || s.Classification != nil || s.Persistence != nil || s.Execution.Status != "running" {
+ t.Fatalf("reset/old run: %+v", s)
+ }
+ BeginRunProcessing("run-two", false)
+ if Current().Classification.Classified != 0 || Current().Persistence != nil {
+ t.Fatal("zero versus unavailable")
+ }
+ StartRun("manual", time.Now())
+ if Current().Execution.RunID != nil || Current().Classification != nil {
+ t.Fatal("missing identity")
+ }
+}
+func TestRunPersistenceCountsFinalCalls(t *testing.T) {
+ StartRun("manual", time.Now(), "persist-run")
+ BeginRunProcessing("persist-run", true)
+ RunPersistenceReceived("persist-run", 4)
+ if Current().Persistence.Received != 4 || Current().Persistence.Inserted != 0 {
+ t.Fatal("pending")
+ }
+ RecordRunPersistence("persist-run", 4, 1, 2, 3, nil)
+ RunPersistenceReceived("persist-run", 2)
+ RecordRunPersistence("persist-run", 2, 100, 100, 0, errors.New("private message"))
+ p := Current().Persistence
+ if p.Received != 6 || p.Inserted != 1 || p.Updated != 2 || p.Skipped != 1 || p.Failed != 2 || p.FailedBatches != 1 {
+ t.Fatalf("outcomes %+v", p)
+ }
+}
+func TestRunProvidersUseBoundedPlanAndRealTasks(t *testing.T) {
+ StartRun("manual", time.Now(), "providers-run")
+ Configure(4, 4, nil, 0, func(ports.ProviderID) int { return 2 }, "providers-run")
+ if Current().Providers == nil || len(Current().Providers) != 0 {
+ t.Fatal("known empty plan")
+ }
+ sources := []ports.JobSource{runSource("Green House:company secret"), runSource("arbitrary secret")}
+ Configure(4, 4, sources, 2, func(ports.ProviderID) int { return 2 }, "providers-run")
+ Active("greenhouse", 1)
+ Waiting("greenhouse", 1)
+ RecordRunProvider("providers-run", "greenhouse", 3, time.Now().Add(-time.Second), nil)
+ RecordRunProvider("providers-run", "greenhouse", 0, time.Now(), errors.New("HTTP 429 secret"))
+ providers := Current().Providers
+ if len(providers) != 2 || providers[0].ID != "greenhouse" || providers[0].TasksTotal != 2 || providers[0].TasksCompleted != 2 || providers[0].JobsCollected != 3 || providers[0].TasksFailed != 1 || *providers[0].LastErrorType != "rate_limit" || providers[0].Active != 1 || providers[0].Waiting != 1 {
+ t.Fatalf("providers %+v", providers)
+ }
+ RecordRunProvider("old", "greenhouse", 100, time.Now(), nil)
+ if Current().Providers[0].JobsCollected != 3 {
+ t.Fatal("old run")
+ }
+ providers[0].JobsCollected = 999
+ if Current().Providers[0].JobsCollected != 3 {
+ t.Fatal("aliased provider")
+ }
+ FinishRun(nil, "providers-run")
+ if Current().Providers[0].Active != 0 || Current().Providers[0].Waiting != 0 {
+ t.Fatal("finished live counts")
+ }
+}
+
+type runSource string
+
+func (s runSource) SourceName() string { return string(s) }
+func (s runSource) Search(context.Context, string, domain.ScrapeRequest) ([]domain.Job, error) {
+ return nil, nil
+}
diff --git a/scraper-go/internal/metrics/state.go b/scraper-go/internal/metrics/state.go
index 623a9dfd..08b88b0b 100644
--- a/scraper-go/internal/metrics/state.go
+++ b/scraper-go/internal/metrics/state.go
@@ -15,6 +15,7 @@ import (
)
type Execution struct {
+ RunID *string `json:"runId"`
Status string `json:"status"`
Source *string `json:"source"`
StartedAt *time.Time `json:"startedAt"`
@@ -66,12 +67,15 @@ func (s MaintenanceSummary) Valid() bool {
}
type Snapshot struct {
- Execution Execution `json:"execution"`
- Lock Lock `json:"lock"`
- Concurrency Concurrency `json:"concurrency"`
- Progress map[string]int `json:"progress"`
- Queues map[string]Queue `json:"queues"`
- Errors struct {
+ Providers []ProviderState `json:"providers"`
+ Classification *ClassificationTotals `json:"classification"`
+ Persistence *PersistenceTotals `json:"persistence"`
+ Execution Execution `json:"execution"`
+ Lock Lock `json:"lock"`
+ Concurrency Concurrency `json:"concurrency"`
+ Progress map[string]int `json:"progress"`
+ Queues map[string]Queue `json:"queues"`
+ Errors struct {
Total int `json:"total"`
Timeouts int `json:"timeouts"`
} `json:"errors"`
@@ -81,6 +85,9 @@ type Snapshot struct {
var state = struct {
sync.Mutex
+ classification *ClassificationTotals
+ persistence *PersistenceTotals
+ providers map[string]ProviderState
runID string
lockRunID string
execution Execution
@@ -169,6 +176,15 @@ func StartRun(source string, started time.Time, runID ...string) {
if len(runID) > 0 {
state.runID = runID[0]
}
+ state.execution.RunID = nil
+ if state.runID != "" {
+ id := state.runID
+ state.execution.RunID = &id
+ }
+ state.execution.FinishedAt = nil
+ state.classification = nil
+ state.persistence = nil
+ state.providers = nil
s := Source(source)
state.execution.Status = "running"
state.execution.Source = &s
@@ -287,7 +303,7 @@ func addProgress(kind string, n int) {
Progress.WithLabelValues(kind).Set(float64(state.progress[kind]))
LastProgress.Set(float64(time.Now().Unix()))
}
-func Configure(configured, effective int, sources []ports.JobSource, keywords int, limit func(ports.ProviderID) int) {
+func Configure(configured, effective int, sources []ports.JobSource, keywords int, limit func(ports.ProviderID) int, runID ...string) {
state.Lock()
defer state.Unlock()
if configured > 0 {
@@ -297,6 +313,10 @@ func Configure(configured, effective int, sources []ports.JobSource, keywords in
state.providerRemaining = map[string]int{}
state.adapterRemaining = map[int]int{}
ProviderConfigured.Reset()
+ trackRun := len(runID) > 0 && activeRun(runID[0])
+ if trackRun {
+ state.providers = map[string]ProviderState{}
+ }
tasks := 0
for i, a := range sources {
c := ports.CapabilitiesOf(a)
@@ -305,6 +325,13 @@ func Configure(configured, effective int, sources []ports.JobSource, keywords in
n = keywords
}
p := Provider(string(c.Provider))
+ if trackRun {
+ detail := state.providers[p]
+ detail.ID = p
+ detail.ConfiguredConcurrency = limit(c.Provider)
+ detail.TasksTotal += n
+ state.providers[p] = detail
+ }
state.providerRemaining[p] += n
state.adapterRemaining[i] = n
tasks += n
@@ -382,6 +409,28 @@ func Current() Snapshot {
state.Lock()
defer state.Unlock()
s := Snapshot{Execution: state.execution, Concurrency: state.concurrency, Lock: Lock{Held: state.held, TTLSeconds: max(0, time.Until(state.expiry).Seconds())}, Progress: map[string]int{}, Queues: map[string]Queue{}, RejectedTitles: []RejectedTitle{}, RejectedTitlesSince: state.titlesSince}
+ s.Execution.RunID = copyPointer(s.Execution.RunID)
+ if state.classification != nil {
+ v := *state.classification
+ s.Classification = &v
+ }
+ if state.persistence != nil {
+ v := *state.persistence
+ s.Persistence = &v
+ }
+ if state.providers != nil {
+ s.Providers = make([]ProviderState, 0, len(state.providers))
+ for id, p := range state.providers {
+ p.LastTaskStatus = copyPointer(p.LastTaskStatus)
+ p.LastTaskFinishedAt = copyPointer(p.LastTaskFinishedAt)
+ p.LastTaskDurationSeconds = copyPointer(p.LastTaskDurationSeconds)
+ p.LastErrorType = copyPointer(p.LastErrorType)
+ p.Active = state.active[id]
+ p.Waiting = state.waiting[id]
+ s.Providers = append(s.Providers, p)
+ }
+ sort.Slice(s.Providers, func(i, j int) bool { return s.Providers[i].ID < s.Providers[j].ID })
+ }
if s.Execution.StartedAt != nil {
if s.Execution.Status == "running" || s.Execution.Status == "canceling" {
s.Execution.DurationSeconds = max(0, time.Since(*s.Execution.StartedAt).Seconds())
diff --git a/scraper-go/internal/pipeline/pipeline.go b/scraper-go/internal/pipeline/pipeline.go
index c61fe880..557780fe 100644
--- a/scraper-go/internal/pipeline/pipeline.go
+++ b/scraper-go/internal/pipeline/pipeline.go
@@ -70,7 +70,7 @@ func runWithConcurrency(
results := make(chan result, queueCapacity)
incoming := make(chan domain.Job, stageQueueCapacity(processCfg))
runStats := newProviderRunStats(adapterList, budget)
- metrics.Configure(0, maxConcurrency, adapterList, len(req.Keywords), budget.providerLimit)
+ metrics.Configure(0, maxConcurrency, adapterList, len(req.Keywords), budget.providerLimit, processCfg.RunID)
metrics.BindQueue("collection", func() metrics.Queue { return metrics.Queue{Depth: len(tasks), Capacity: cap(tasks)} })
metrics.BindQueue("classification", func() metrics.Queue { return metrics.Queue{Depth: len(incoming), Capacity: cap(incoming)} })
defer metrics.ClearQueues()
@@ -84,7 +84,7 @@ func runWithConcurrency(
for range maxConcurrency {
go func() {
defer tasksWg.Done()
- runWorker(ctx, tasks, results, budget, runStats, req)
+ runWorker(ctx, tasks, results, budget, runStats, req, processCfg.RunID)
}()
}
@@ -303,6 +303,7 @@ func runWorker(
budget *concurrencyBudget,
runStats *providerRunStats,
req domain.ScrapeRequest,
+ runID string,
) {
for {
if context.Cause(ctx) != nil {
@@ -319,7 +320,7 @@ func runWorker(
if context.Cause(ctx) != nil {
return
}
- runScheduledTask(ctx, task, results, budget, runStats, req)
+ runScheduledTask(ctx, task, results, budget, runStats, req, runID)
}
}
}
@@ -331,6 +332,7 @@ func runScheduledTask(
budget *concurrencyBudget,
runStats *providerRunStats,
req domain.ScrapeRequest,
+ runID string,
) {
permit, err := budget.acquire(ctx, task.provider)
if err != nil {
@@ -349,6 +351,7 @@ func runScheduledTask(
observedErr = cause
}
metrics.RecordProvider(source, string(task.mode), len(task.keywords), len(jobs), started, observedErr)
+ metrics.RecordRunProvider(runID, source, len(jobs), started, observedErr)
metrics.AdapterFinished(task.ordinal)
metrics.ScrapeRunsTotal.WithLabelValues(source).Inc()
diff --git a/scraper-go/internal/pipeline/process.go b/scraper-go/internal/pipeline/process.go
index 5a611695..fdc4b18b 100644
--- a/scraper-go/internal/pipeline/process.go
+++ b/scraper-go/internal/pipeline/process.go
@@ -95,6 +95,7 @@ func processIncomingJobs(
})
defer func() { persistenceDepth.Store(0); indexDepth.Store(0) }()
approved := make([]domain.Job, 0)
+ metrics.BeginRunProcessing(cfg.RunID, cfg.Persist != nil || cfg.Store != nil)
stats := ProcessStats{}
batchNo := 0
windowDuplicates := 0
@@ -249,7 +250,9 @@ func processIncomingJobs(
merged := dedup.Merge(&existing, &incoming)
metrics.Stage("classification")
+ metrics.RunClassificationReceived(cfg.RunID, 1)
classification := classifier.Classify(*merged)
+ metrics.RecordRunClassification(cfg.RunID, classification.InScope)
merged.Classification = &classification
if !classification.InScope && existing.Classification != nil {
merged.Classification = existing.Classification
@@ -408,12 +411,14 @@ func processStageBatch(
started := time.Now()
metrics.Stage("classification")
defer metrics.AddProgress("batchesCompleted", 1)
+ metrics.RunClassificationReceived(cfg.RunID, len(jobs))
valid := make([]domain.Job, 0, len(jobs))
invalid := 0
for _, job := range jobs {
if jobIsInvalid(job) {
invalid++
metrics.InvalidJob(job.Source)
+ metrics.RecordRunInvalid(cfg.RunID)
stats.Invalid++
continue
}
@@ -426,6 +431,7 @@ func processStageBatch(
rejected := 0
for _, job := range valid {
classification := classifier.Classify(job)
+ metrics.RecordRunClassification(cfg.RunID, classification.InScope)
stats.Classified++
if !classification.InScope {
rejected++
@@ -492,11 +498,13 @@ func persistJobs(
chunk := jobs[start:end]
var result jobstore.SaveResult
var err error
+ metrics.RunPersistenceReceived(cfg.RunID, len(chunk))
if cfg.Persist != nil {
result, err = cfg.Persist(ctx, chunk)
} else {
result, err = cfg.Store.SaveBatch(ctx, chunk)
}
+ metrics.RecordRunPersistence(cfg.RunID, len(chunk), result.Inserted, result.Updated, len(result.Persisted), err)
if err != nil {
stats.Failed++
slog.Error("scraper persist batch failed",
diff --git a/scraper-go/internal/pipeline/process_test.go b/scraper-go/internal/pipeline/process_test.go
index fc4b8a18..1916f5ca 100644
--- a/scraper-go/internal/pipeline/process_test.go
+++ b/scraper-go/internal/pipeline/process_test.go
@@ -12,6 +12,7 @@ import (
"github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/classifier"
"github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/domain"
"github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/jobstore"
+ "github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/metrics"
"github.com/Benevanio/Jobs_Scraper_Global/scraper-go/internal/ports"
"github.com/alicebob/miniredis/v2"
"github.com/redis/go-redis/v9"
@@ -662,3 +663,61 @@ func TestProcessIncomingJobsDoesNotReconcileWithoutPersistedIDs(t *testing.T) {
assert.Equal(t, 1, stats.Failed)
assert.Equal(t, 0, stats.Indexed)
}
+
+func TestRunSnapshotObservesProcessingWithoutChangingResults(t *testing.T) {
+ metrics.StartRun("manual", time.Now(), "pipeline-observation")
+ defer metrics.FinishRun(nil, "pipeline-observation")
+ cfg := processConfig{RunID: "pipeline-observation", ClassificationBatchSize: 10, PersistBatchSize: 10}
+ cfg.Persist = func(_ context.Context, jobs []domain.Job) (jobstore.SaveResult, error) {
+ return jobstore.SaveResult{Inserted: len(jobs), Persisted: jobs}, nil
+ }
+ rejected := inScopeJob(2)
+ rejected.Title = "Auxiliar Administrativo"
+ rejected.Description = "Rotinas administrativas e atendimento ao público"
+ invalid := domain.Job{Source: "gupy"}
+ got, _, err := processIncomingJobs(context.Background(), feedJobs(inScopeJob(1), rejected, invalid), cfg)
+ require.NoError(t, err)
+ require.Len(t, got, 1)
+ s := metrics.Current()
+ require.NotNil(t, s.Classification)
+ require.NotNil(t, s.Persistence)
+ assert.Equal(t, 3, s.Classification.Received)
+ assert.Equal(t, 2, s.Classification.Classified)
+ assert.Equal(t, 1, s.Classification.Approved)
+ assert.Equal(t, 1, s.Classification.Rejected)
+ assert.Equal(t, 1, s.Classification.Invalid)
+ assert.Equal(t, 1, s.Persistence.Received)
+ assert.Equal(t, 1, s.Persistence.Inserted)
+}
+func TestRunSnapshotObservesTerminalPersistenceFailure(t *testing.T) {
+ metrics.StartRun("manual", time.Now(), "pipeline-failure")
+ defer metrics.FinishRun(errors.New("failure"), "pipeline-failure")
+ cfg := processConfig{RunID: "pipeline-failure", ClassificationBatchSize: 2, PersistBatchSize: 2}
+ cfg.Persist = func(context.Context, []domain.Job) (jobstore.SaveResult, error) {
+ return jobstore.SaveResult{}, errors.New("failure")
+ }
+ _, _, err := processIncomingJobs(context.Background(), feedJobs(inScopeJob(1), inScopeJob(2)), cfg)
+ require.Error(t, err)
+ p := metrics.Current().Persistence
+ require.NotNil(t, p)
+ assert.Equal(t, 2, p.Received)
+ assert.Equal(t, 2, p.Failed)
+ assert.Equal(t, 1, p.FailedBatches)
+ assert.Zero(t, p.Inserted)
+}
+
+func TestRunSnapshotProviderTracksRealScheduledTask(t *testing.T) {
+ metrics.StartRun("manual", time.Now(), "provider-pipeline")
+ defer metrics.FinishRun(nil, "provider-pipeline")
+ source := schedulerTestAdapter{provider: ports.ProviderGupy, search: func(context.Context, string) ([]domain.Job, error) { return []domain.Job{inScopeJob(1)}, nil }}
+ _, _, err := runWithConcurrency(context.Background(), []ports.JobSource{source}, domain.ScrapeRequest{Keywords: []string{"go"}, MaxConcurrency: 1}, 1, nil, processConfig{RunID: "provider-pipeline", ClassificationBatchSize: 1, PersistBatchSize: 1})
+ require.NoError(t, err)
+ providers := metrics.Current().Providers
+ require.Len(t, providers, 1)
+ assert.Equal(t, "gupy", providers[0].ID)
+ assert.Equal(t, 1, providers[0].TasksTotal)
+ assert.Equal(t, 1, providers[0].TasksCompleted)
+ assert.Equal(t, 1, providers[0].JobsCollected)
+ assert.Equal(t, "success", *providers[0].LastTaskStatus)
+ assert.Zero(t, providers[0].Active)
+}