From 360d3059966aed75bb14095591e7374e4bc6bf12 Mon Sep 17 00:00:00 2001 From: Ehab Younes Date: Wed, 4 Feb 2026 00:22:31 +0300 Subject: [PATCH 1/6] Add Tasks panel infrastructure with type-safe IPC protocol Adds foundational infrastructure for the Tasks panel: Backend (TasksPanel.ts): - CRUD operations for tasks (create, delete, pause, resume) - Template and preset management - Log fetching with caching - Real-time push notifications to webview Type-safe IPC Protocol: - Generic request/response/notification patterns - Compile-time type safety for webview-extension messages - useIpc hook for React components - useTasksApi hook with typed methods Supporting infrastructure: - Test setup for jsdom compatibility with Lit elements - Codicon stylesheet integration for vscode-elements - React Compiler integration with ESLint plugin - pnpm catalog for consistent dependency versions --- esbuild.mjs | 5 +- eslint.config.mjs | 3 + media/tasks-logo.svg | 4 + package.json | 34 +- packages/tasks/package.json | 4 +- packages/tasks/src/App.tsx | 76 +- packages/tasks/src/messages.ts | 17 - .../webview-shared/createWebviewConfig.ts | 12 +- packages/webview-shared/extension.d.ts | 15 + packages/webview-shared/src/api.ts | 8 +- packages/webview-shared/src/index.ts | 13 +- packages/webview-shared/src/ipc/index.ts | 16 + packages/webview-shared/src/ipc/protocol.ts | 97 + packages/webview-shared/src/ipc/useIpc.ts | 138 + packages/webview-shared/src/react/index.ts | 1 + .../webview-shared/src/react/useTasksApi.ts | 137 + packages/webview-shared/src/tasks/api.ts | 98 + packages/webview-shared/src/tasks/index.ts | 2 + packages/webview-shared/src/tasks/messages.ts | 122 + packages/webview-shared/src/tasks/types.ts | 116 + pnpm-lock.yaml | 2263 +++++++++-------- pnpm-workspace.yaml | 6 +- src/extension.ts | 16 +- src/webviews/tasks/TasksPanel.ts | 561 +++- src/webviews/util.ts | 4 +- test/unit/webviews/tasks/TasksPanel.test.ts | 636 +++++ test/webview/setup.ts | 24 + vitest.config.ts | 5 + 28 files changed, 3338 insertions(+), 1095 deletions(-) create mode 100644 media/tasks-logo.svg delete mode 100644 packages/tasks/src/messages.ts create mode 100644 packages/webview-shared/src/ipc/index.ts create mode 100644 packages/webview-shared/src/ipc/protocol.ts create mode 100644 packages/webview-shared/src/ipc/useIpc.ts create mode 100644 packages/webview-shared/src/react/useTasksApi.ts create mode 100644 packages/webview-shared/src/tasks/api.ts create mode 100644 packages/webview-shared/src/tasks/index.ts create mode 100644 packages/webview-shared/src/tasks/messages.ts create mode 100644 packages/webview-shared/src/tasks/types.ts create mode 100644 test/unit/webviews/tasks/TasksPanel.test.ts create mode 100644 test/webview/setup.ts diff --git a/esbuild.mjs b/esbuild.mjs index d4be8e5e..12822962 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -27,10 +27,11 @@ const buildOptions = { target: "node20", format: "cjs", mainFields: ["module", "main"], - // Force openpgp to use CJS. The ESM version uses import.meta.url which is - // undefined when bundled to CJS, causing runtime errors. alias: { + // Force openpgp to use CJS. The ESM version uses import.meta.url which is + // undefined when bundled to CJS, causing runtime errors. openpgp: "./node_modules/openpgp/dist/node/openpgp.min.cjs", + "@repo/webview-shared": "./packages/webview-shared/src/index.ts", }, external: ["vscode"], sourcemap: production ? "external" : true, diff --git a/eslint.config.mjs b/eslint.config.mjs index 6633ebd4..82c18991 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -8,6 +8,7 @@ import { createTypeScriptImportResolver } from "eslint-import-resolver-typescrip import { flatConfigs as importXFlatConfigs } from "eslint-plugin-import-x"; import packageJson from "eslint-plugin-package-json"; import reactPlugin from "eslint-plugin-react"; +import reactCompilerPlugin from "eslint-plugin-react-compiler"; import reactHooksPlugin from "eslint-plugin-react-hooks"; import globals from "globals"; @@ -181,6 +182,7 @@ export default defineConfig( files: ["**/*.tsx"], plugins: { react: reactPlugin, + "react-compiler": reactCompilerPlugin, "react-hooks": reactHooksPlugin, }, settings: { @@ -194,6 +196,7 @@ export default defineConfig( ...reactPlugin.configs["jsx-runtime"].rules, // React 17+ JSX transform ...reactHooksPlugin.configs.recommended.rules, "react/prop-types": "off", // Using TypeScript + "react-compiler/react-compiler": "error", }, }, diff --git a/media/tasks-logo.svg b/media/tasks-logo.svg new file mode 100644 index 00000000..987cd421 --- /dev/null +++ b/media/tasks-logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/package.json b/package.json index b838d7c1..2a92abf5 100644 --- a/package.json +++ b/package.json @@ -182,6 +182,11 @@ "id": "coder", "title": "Coder Remote", "icon": "media/logo-white.svg" + }, + { + "id": "coderTasks", + "title": "Coder Tasks", + "icon": "media/tasks-logo.svg" } ] }, @@ -199,13 +204,15 @@ "visibility": "visible", "icon": "media/logo-white.svg", "when": "coder.authenticated && coder.isOwner" - }, + } + ], + "coderTasks": [ { "type": "webview", "id": "coder.tasksPanel", - "name": "Tasks", - "icon": "media/logo-white.svg", - "when": "coder.authenticated && coder.devMode" + "name": "Coder Tasks", + "icon": "media/tasks-logo.svg", + "when": "coder.authenticated" } ] }, @@ -308,6 +315,12 @@ "command": "coder.manageCredentials", "title": "Manage Credentials", "category": "Coder" + }, + { + "command": "coder.tasks.refresh", + "title": "Refresh Tasks", + "category": "Coder", + "icon": "$(refresh)" } ], "menus": { @@ -370,6 +383,10 @@ }, { "command": "coder.manageCredentials" + }, + { + "command": "coder.tasks.refresh", + "when": "false" } ], "view/title": [ @@ -404,6 +421,11 @@ "command": "coder.searchAllWorkspaces", "when": "coder.authenticated && view == allWorkspaces", "group": "navigation@3" + }, + { + "command": "coder.tasks.refresh", + "when": "coder.authenticated && view == coder.tasksPanel", + "group": "navigation@1" } ], "view/item/context": [ @@ -478,11 +500,12 @@ "@types/ws": "^8.18.1", "@typescript-eslint/eslint-plugin": "^8.53.1", "@typescript-eslint/parser": "^8.53.1", - "@vitejs/plugin-react-swc": "catalog:", + "@vitejs/plugin-react": "catalog:", "@vitest/coverage-v8": "^4.0.16", "@vscode/test-cli": "^0.0.12", "@vscode/test-electron": "^2.5.2", "@vscode/vsce": "^3.7.1", + "babel-plugin-react-compiler": "catalog:", "bufferutil": "^4.1.0", "coder": "github:coder/coder#main", "concurrently": "^9.2.1", @@ -495,6 +518,7 @@ "eslint-plugin-import-x": "^4.16.1", "eslint-plugin-package-json": "^0.88.2", "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-compiler": "catalog:", "eslint-plugin-react-hooks": "^5.0.0", "globals": "^17.0.0", "jsdom": "^27.4.0", diff --git a/packages/tasks/package.json b/packages/tasks/package.json index 04163928..580223b2 100644 --- a/packages/tasks/package.json +++ b/packages/tasks/package.json @@ -11,13 +11,15 @@ "dependencies": { "@repo/webview-shared": "workspace:*", "@vscode-elements/react-elements": "catalog:", + "@vscode/codicons": "catalog:", "react": "catalog:", "react-dom": "catalog:" }, "devDependencies": { "@types/react": "catalog:", "@types/react-dom": "catalog:", - "@vitejs/plugin-react-swc": "catalog:", + "@vitejs/plugin-react": "catalog:", + "babel-plugin-react-compiler": "catalog:", "typescript": "catalog:", "vite": "catalog:" } diff --git a/packages/tasks/src/App.tsx b/packages/tasks/src/App.tsx index 3e0f70b6..cf473245 100644 --- a/packages/tasks/src/App.tsx +++ b/packages/tasks/src/App.tsx @@ -1,41 +1,61 @@ -import { logger } from "@repo/webview-shared/logger"; -import { useMessage } from "@repo/webview-shared/react"; -import { - VscodeButton, - VscodeProgressRing, -} from "@vscode-elements/react-elements"; +import { useTasksApi } from "@repo/webview-shared/react"; +import { VscodeProgressRing } from "@vscode-elements/react-elements"; import { useEffect, useState } from "react"; -import { sendReady, sendRefresh } from "./messages"; - -import type { TasksExtensionMessage } from "@repo/webview-shared"; +import type { Task, TaskTemplate } from "@repo/webview-shared"; export default function App() { - const [ready, setReady] = useState(false); - - useMessage((message) => { - switch (message.type) { - case "init": - setReady(true); - break; - case "error": - logger.error("Tasks panel error:", message.data); - break; - } - }); + const api = useTasksApi(); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [tasks, setTasks] = useState([]); + const [templates, setTemplates] = useState([]); + const [tasksSupported, setTasksSupported] = useState(true); useEffect(() => { - sendReady(); - }, []); + api + .init() + .then((data) => { + setTasks(data.tasks); + setTemplates(data.templates); + setTasksSupported(data.tasksSupported); + setLoading(false); + }) + .catch((err) => { + setError(err instanceof Error ? err.message : "Failed to initialize"); + setLoading(false); + }); + }, [api]); + + if (loading) { + return ( +
+ +
+ ); + } + + if (error) { + return ( +
+

Error: {error}

+
+ ); + } - if (!ready) { - return ; + if (!tasksSupported) { + return ( +
+

Tasks are not supported on this Coder server.

+
+ ); } return ( -
-

Coder Tasks

- Refresh +
+

Tasks

+

Templates: {templates.length}

+

Tasks: {tasks.length}

); } diff --git a/packages/tasks/src/messages.ts b/packages/tasks/src/messages.ts deleted file mode 100644 index 86948886..00000000 --- a/packages/tasks/src/messages.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { postMessage } from "@repo/webview-shared/api"; - -import type { TasksWebviewMessage } from "@repo/webview-shared"; - -function sendMessage(message: TasksWebviewMessage): void { - postMessage(message); -} - -/** Signal to the extension that the webview is ready */ -export function sendReady(): void { - sendMessage({ type: "ready" }); -} - -/** Request task refresh from the extension */ -export function sendRefresh(): void { - sendMessage({ type: "refresh" }); -} diff --git a/packages/webview-shared/createWebviewConfig.ts b/packages/webview-shared/createWebviewConfig.ts index 71b096af..22fe53a2 100644 --- a/packages/webview-shared/createWebviewConfig.ts +++ b/packages/webview-shared/createWebviewConfig.ts @@ -1,4 +1,4 @@ -import react from "@vitejs/plugin-react-swc"; +import react from "@vitejs/plugin-react"; import { resolve } from "node:path"; import { defineConfig, type UserConfig } from "vite"; @@ -14,7 +14,15 @@ export function createWebviewConfig( const production = process.env.NODE_ENV === "production"; return defineConfig({ - plugins: [react()], + plugins: [ + react({ + babel: { + plugins: [["babel-plugin-react-compiler", {}]], + }, + }), + ], + // Use relative paths for assets (required for VS Code webviews) + base: "./", build: { outDir: resolve(dirname, `../../dist/webviews/${webviewName}`), emptyOutDir: true, diff --git a/packages/webview-shared/extension.d.ts b/packages/webview-shared/extension.d.ts index dedd225f..a9bd0ed5 100644 --- a/packages/webview-shared/extension.d.ts +++ b/packages/webview-shared/extension.d.ts @@ -1,6 +1,21 @@ // Types exposed to the extension (react/ subpath is excluded). export type { + LogsStatus, + TaskActions, + TaskDetails, TasksExtensionMessage, + TasksPushMessage, + TasksRequest, + TasksResponse, TasksWebviewMessage, + TaskTemplate, + TaskUIState, WebviewMessage, } from "./src/index"; + +export { + getTaskActions, + getTaskUIState, + isTasksRequest, + isTasksResponse, +} from "./src/index"; diff --git a/packages/webview-shared/src/api.ts b/packages/webview-shared/src/api.ts index 0113b12c..98c37cc2 100644 --- a/packages/webview-shared/src/api.ts +++ b/packages/webview-shared/src/api.ts @@ -10,7 +10,13 @@ function getVsCodeApi(): WebviewApi { return vscodeApi; } -export function postMessage(message: WebviewMessage): void { +/** + * Post a message to the extension. + * Accepts legacy WebviewMessage format or any object for the new IPC protocol. + */ +export function postMessage( + message: WebviewMessage | Record, +): void { getVsCodeApi().postMessage(message); } diff --git a/packages/webview-shared/src/index.ts b/packages/webview-shared/src/index.ts index 6a1a1f52..200f794d 100644 --- a/packages/webview-shared/src/index.ts +++ b/packages/webview-shared/src/index.ts @@ -2,12 +2,13 @@ export interface WebviewMessage { type: string; data?: T; + // Request-response pattern support + requestId?: string; + payload?: unknown; } -/** Messages sent from the extension to the Tasks webview */ -export type TasksExtensionMessage = - | { type: "init" } - | { type: "error"; data: string }; +// VS Code state API +export { getState, setState, postMessage } from "./api"; -/** Messages sent from the Tasks webview to the extension */ -export type TasksWebviewMessage = { type: "ready" } | { type: "refresh" }; +// Tasks types - re-exported from tasks submodule +export * from "./tasks"; diff --git a/packages/webview-shared/src/ipc/index.ts b/packages/webview-shared/src/ipc/index.ts new file mode 100644 index 00000000..8e4a43f9 --- /dev/null +++ b/packages/webview-shared/src/ipc/index.ts @@ -0,0 +1,16 @@ +// IPC Protocol - Type-safe webview communication +export { + defineCommand, + defineNotification, + defineRequest, + type DataOf, + type IpcCommand, + type IpcMessageBase, + type IpcNotification, + type IpcRequest, + type IpcResponse, + type ParamsOf, + type ResponseOf, +} from "./protocol"; + +export { useIpc, type UseIpcOptions } from "./useIpc"; diff --git a/packages/webview-shared/src/ipc/protocol.ts b/packages/webview-shared/src/ipc/protocol.ts new file mode 100644 index 00000000..1f7266d6 --- /dev/null +++ b/packages/webview-shared/src/ipc/protocol.ts @@ -0,0 +1,97 @@ +/** + * Type-safe IPC protocol for VS Code webview communication. + * + * Provides compile-time binding between request params and response types, + * eliminating runtime type mismatches. + */ + +/** Base for all IPC messages */ +export interface IpcMessageBase { + method: string; + scope?: string; +} + +/** + * Request expecting a response. Generic params ensure type safety: + * - P: request payload type + * - R: response type (phantom - not sent over wire) + */ +export interface IpcRequest

extends IpcMessageBase { + readonly requestId: string; + readonly params: P; + /** Phantom type for compile-time response inference */ + readonly _response?: R; +} + +/** Fire-and-forget command, no response expected */ +export interface IpcCommand

extends IpcMessageBase { + readonly params: P; +} + +/** Extension-to-webview push notification */ +export interface IpcNotification extends IpcMessageBase { + readonly data: D; +} + +/** Response from extension to webview */ +export interface IpcResponse { + readonly requestId: string; + readonly method: string; + readonly success: boolean; + readonly data?: T; + readonly error?: string; +} + +// ============================================================================= +// Type definition helpers - create type-safe message contracts +// ============================================================================= + +/** Define a request with compile-time param→response binding */ +export function defineRequest

( + method: string, + scope?: string, +) { + return { + method, + scope, + _params: undefined as unknown as P, + _response: undefined as unknown as R, + } as const; +} + +/** Define a fire-and-forget command */ +export function defineCommand

(method: string, scope?: string) { + return { + method, + scope, + _params: undefined as unknown as P, + } as const; +} + +/** Define a push notification (extension → webview) */ +export function defineNotification(method: string, scope?: string) { + return { + method, + scope, + _data: undefined as unknown as D, + } as const; +} + +// ============================================================================= +// Type extraction utilities +// ============================================================================= + +/** Extract params type from a request/command definition */ +export type ParamsOf = T extends { _params: infer P } ? P : never; + +/** Extract response type from a request definition */ +export type ResponseOf = T extends { _response: infer R } ? R : never; + +/** Extract data type from a notification definition */ +export type DataOf = T extends { _data: infer D } ? D : never; + +/** Message definition with method and optional scope */ +export interface MessageDefinition { + method: string; + scope?: string; +} diff --git a/packages/webview-shared/src/ipc/useIpc.ts b/packages/webview-shared/src/ipc/useIpc.ts new file mode 100644 index 00000000..3797a742 --- /dev/null +++ b/packages/webview-shared/src/ipc/useIpc.ts @@ -0,0 +1,138 @@ +/** + * Type-safe IPC hook for webview-extension communication. + * Handles request correlation, timeouts, and cleanup automatically. + */ + +import { useCallback, useEffect, useRef } from "react"; + +import { postMessage } from "../api"; + +import type { IpcResponse } from "./protocol"; + +interface PendingRequest { + resolve: (value: unknown) => void; + reject: (error: Error) => void; + timeout: ReturnType; +} + +const DEFAULT_TIMEOUT_MS = 30000; + +export interface UseIpcOptions { + /** Request timeout in ms (default: 30000) */ + timeoutMs?: number; + /** Scope for message routing */ + scope?: string; +} + +/** + * Hook for type-safe IPC with the extension. + * + * @example + * ```tsx + * // In your API definitions: + * const GetTasks = defineRequest("getTasks"); + * const ViewInCoder = defineCommand<{ taskId: string }>("viewInCoder"); + * + * // In your component: + * const ipc = useIpc(); + * const tasks = await ipc.request(GetTasks); // Type: Task[] + * ipc.command(ViewInCoder, { taskId: "123" }); // Fire-and-forget + * ``` + */ +export function useIpc(options: UseIpcOptions = {}) { + const { timeoutMs = DEFAULT_TIMEOUT_MS, scope } = options; + const pendingRequests = useRef>(new Map()); + + // Cleanup pending requests on unmount + useEffect(() => { + return () => { + for (const [, req] of pendingRequests.current) { + clearTimeout(req.timeout); + req.reject(new Error("Component unmounted")); + } + pendingRequests.current.clear(); + }; + }, []); + + // Handle responses from extension + useEffect(() => { + const handler = (event: MessageEvent) => { + const msg = event.data as IpcResponse | undefined; + if (!msg || typeof msg.requestId !== "string" || !("success" in msg)) { + return; + } + + const pending = pendingRequests.current.get(msg.requestId); + if (!pending) return; + + clearTimeout(pending.timeout); + pendingRequests.current.delete(msg.requestId); + + if (msg.success) { + pending.resolve(msg.data); + } else { + pending.reject(new Error(msg.error || "Request failed")); + } + }; + + window.addEventListener("message", handler); + return () => window.removeEventListener("message", handler); + }, []); + + /** Send request and await typed response */ + const request = useCallback( + ( + definition: { + method: string; + scope?: string; + _params?: P; + _response?: R; + }, + ...args: P extends void ? [] : [params: P] + ): Promise => { + const requestId = crypto.randomUUID(); + const params = args[0]; + + return new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + if (pendingRequests.current.has(requestId)) { + pendingRequests.current.delete(requestId); + reject(new Error(`Request timeout: ${definition.method}`)); + } + }, timeoutMs); + + pendingRequests.current.set(requestId, { + resolve: resolve as (value: unknown) => void, + reject, + timeout, + }); + + postMessage({ + method: definition.method, + scope: scope ?? definition.scope, + requestId, + params, + }); + }); + }, + [scope, timeoutMs], + ); + + /** Send command without waiting (fire-and-forget) */ + const command = useCallback( +

( + definition: { method: string; scope?: string; _params?: P }, + ...args: P extends void ? [] : [params: P] + ): void => { + const params = args[0]; + postMessage({ + method: definition.method, + scope: scope ?? definition.scope, + params, + }); + }, + [scope], + ); + + return { request, command }; +} diff --git a/packages/webview-shared/src/react/index.ts b/packages/webview-shared/src/react/index.ts index cb43953d..0ad696b4 100644 --- a/packages/webview-shared/src/react/index.ts +++ b/packages/webview-shared/src/react/index.ts @@ -1,3 +1,4 @@ export { postMessage, getState, setState } from "../api"; export { ErrorBoundary } from "./ErrorBoundary"; export { useMessage, useVsCodeState } from "./hooks"; +export { useTasksApi } from "./useTasksApi"; diff --git a/packages/webview-shared/src/react/useTasksApi.ts b/packages/webview-shared/src/react/useTasksApi.ts new file mode 100644 index 00000000..b01b9ca0 --- /dev/null +++ b/packages/webview-shared/src/react/useTasksApi.ts @@ -0,0 +1,137 @@ +/** + * Tasks API hook - provides type-safe access to all Tasks operations. + * Built on the generic IPC protocol for compile-time type safety. + */ + +import { useCallback, useMemo } from "react"; + +import { useIpc } from "../ipc/useIpc"; +import * as api from "../tasks/api"; + +import type { Task, TaskDetails, TaskTemplate } from "../tasks/types"; + +/** + * Hook providing the Tasks API with full type safety. + * + * @example + * ```tsx + * const tasks = useTasksApi(); + * + * // Requests (await response) + * const allTasks = await tasks.getTasks(); + * const details = await tasks.getTaskDetails("task-id"); + * + * // Commands (fire-and-forget) + * tasks.viewInCoder("task-id"); + * + * // Listen to notifications + * tasks.onTasksUpdated((tasks) => setTasks(tasks)); + * ``` + */ +export function useTasksApi() { + const ipc = useIpc(); + + // ========================================================================= + // Requests + // ========================================================================= + + const init = useCallback(() => ipc.request(api.init), [ipc]); + + const getTasks = useCallback(() => ipc.request(api.getTasks), [ipc]); + + const getTemplates = useCallback(() => ipc.request(api.getTemplates), [ipc]); + + const getTask = useCallback( + (taskId: string) => ipc.request(api.getTask, { taskId }), + [ipc], + ); + + const getTaskDetails = useCallback( + (taskId: string) => ipc.request(api.getTaskDetails, { taskId }), + [ipc], + ); + + const createTask = useCallback( + (params: api.CreateTaskParams) => ipc.request(api.createTask, params), + [ipc], + ); + + const deleteTask = useCallback( + (taskId: string) => ipc.request(api.deleteTask, { taskId }), + [ipc], + ); + + const pauseTask = useCallback( + (taskId: string) => ipc.request(api.pauseTask, { taskId }), + [ipc], + ); + + const resumeTask = useCallback( + (taskId: string) => ipc.request(api.resumeTask, { taskId }), + [ipc], + ); + + // ========================================================================= + // Commands (fire-and-forget) + // ========================================================================= + + const viewInCoder = useCallback( + (taskId: string) => ipc.command(api.viewInCoder, { taskId }), + [ipc], + ); + + const viewLogs = useCallback( + (taskId: string) => ipc.command(api.viewLogs, { taskId }), + [ipc], + ); + + const downloadLogs = useCallback( + (taskId: string) => ipc.command(api.downloadLogs, { taskId }), + [ipc], + ); + + const sendTaskMessage = useCallback( + (taskId: string, message: string) => + ipc.command(api.sendTaskMessage, { taskId, message }), + [ipc], + ); + + return useMemo( + () => ({ + // Requests + init, + getTasks, + getTemplates, + getTask, + getTaskDetails, + createTask, + deleteTask, + pauseTask, + resumeTask, + // Commands + viewInCoder, + viewLogs, + downloadLogs, + sendTaskMessage, + }), + [ + init, + getTasks, + getTemplates, + getTask, + getTaskDetails, + createTask, + deleteTask, + pauseTask, + resumeTask, + viewInCoder, + viewLogs, + downloadLogs, + sendTaskMessage, + ], + ); +} + +/** Re-export types for convenience */ +export type { Task, TaskDetails, TaskTemplate }; +export type { InitResponse, CreateTaskParams } from "../tasks/api"; diff --git a/packages/webview-shared/src/tasks/api.ts b/packages/webview-shared/src/tasks/api.ts new file mode 100644 index 00000000..8380f381 --- /dev/null +++ b/packages/webview-shared/src/tasks/api.ts @@ -0,0 +1,98 @@ +/** + * Tasks API - Type-safe message definitions for the Tasks webview. + * + * Usage: + * ```tsx + * const ipc = useIpc(); + * const tasks = await ipc.request(TasksApi.getTasks); // Returns Task[] + * ipc.command(TasksApi.viewInCoder, { taskId: "..." }); // Fire-and-forget + * ``` + */ + +import { + defineCommand, + defineNotification, + defineRequest, +} from "../ipc/protocol"; + +import type { Task, TaskDetails, TaskLogEntry, TaskTemplate } from "./types"; + +// ============================================================================= +// Requests (expect response) +// ============================================================================= + +export interface InitResponse { + tasks: Task[]; + templates: TaskTemplate[]; + baseUrl: string; + tasksSupported: boolean; +} + +export const init = defineRequest("init"); +export const getTasks = defineRequest("getTasks"); +export const getTemplates = defineRequest("getTemplates"); +export const getTask = defineRequest<{ taskId: string }, Task>("getTask"); +export const getTaskDetails = defineRequest<{ taskId: string }, TaskDetails>( + "getTaskDetails", +); + +export interface CreateTaskParams { + templateVersionId: string; + prompt: string; + presetId?: string; +} +export const createTask = defineRequest("createTask"); + +export const deleteTask = defineRequest<{ taskId: string }, void>("deleteTask"); +export const pauseTask = defineRequest<{ taskId: string }, void>("pauseTask"); +export const resumeTask = defineRequest<{ taskId: string }, void>("resumeTask"); + +// ============================================================================= +// Commands (fire-and-forget) +// ============================================================================= + +export const viewInCoder = defineCommand<{ taskId: string }>("viewInCoder"); +export const viewLogs = defineCommand<{ taskId: string }>("viewLogs"); +export const downloadLogs = defineCommand<{ taskId: string }>("downloadLogs"); +export const sendTaskMessage = defineCommand<{ + taskId: string; + message: string; +}>("sendTaskMessage"); + +// ============================================================================= +// Notifications (extension → webview push) +// ============================================================================= + +export const taskUpdated = defineNotification("taskUpdated"); +export const tasksUpdated = defineNotification("tasksUpdated"); +export const logsAppend = defineNotification("logsAppend"); +export const refresh = defineNotification("refresh"); +export const showCreateForm = defineNotification("showCreateForm"); + +// ============================================================================= +// Grouped export +// ============================================================================= + +export const TasksApi = { + // Requests + init, + getTasks, + getTemplates, + getTask, + getTaskDetails, + createTask, + deleteTask, + pauseTask, + resumeTask, + // Commands + viewInCoder, + viewLogs, + downloadLogs, + sendTaskMessage, + // Notifications + taskUpdated, + tasksUpdated, + logsAppend, + refresh, + showCreateForm, +} as const; diff --git a/packages/webview-shared/src/tasks/index.ts b/packages/webview-shared/src/tasks/index.ts new file mode 100644 index 00000000..6e2604db --- /dev/null +++ b/packages/webview-shared/src/tasks/index.ts @@ -0,0 +1,2 @@ +export * from "./messages"; +export * from "./types"; diff --git a/packages/webview-shared/src/tasks/messages.ts b/packages/webview-shared/src/tasks/messages.ts new file mode 100644 index 00000000..03437d9e --- /dev/null +++ b/packages/webview-shared/src/tasks/messages.ts @@ -0,0 +1,122 @@ +import type { Task, TaskDetails, TaskLogEntry, TaskTemplate } from "./types"; + +/** + * Request wrapper - webview sends this to the extension. + * Each request has a unique requestId for correlating responses. + */ +export interface TasksRequest { + requestId: string; + type: string; + payload?: T; +} + +/** + * Response wrapper - extension sends this back to the webview. + * Includes the original requestId for correlation. + */ +export interface TasksResponse { + requestId: string; + type: string; + success: boolean; + data?: T; + error?: string; +} + +/** + * Requests sent from the Tasks webview to the extension. + * These are action intents with request IDs for correlation. + */ +export type TasksWebviewRequest = + | (TasksRequest & { type: "getTasks" }) + | (TasksRequest & { type: "getTemplates" }) + | (TasksRequest<{ taskId: string }> & { type: "getTaskDetails" }) + | (TasksRequest<{ + templateVersionId: string; + prompt: string; + presetId?: string; + }> & { type: "createTask" }) + | (TasksRequest<{ taskId: string }> & { type: "deleteTask" }) + | (TasksRequest<{ taskId: string }> & { type: "pauseTask" }) + | (TasksRequest<{ taskId: string }> & { type: "resumeTask" }) + | (TasksRequest<{ taskId: string }> & { type: "viewInCoder" }) + | (TasksRequest<{ taskId: string }> & { type: "downloadLogs" }) + | (TasksRequest<{ taskId: string; message: string }> & { + type: "sendTaskMessage"; + }) + | (TasksRequest<{ taskId: string }> & { type: "viewLogs" }); + +export interface TasksInitData { + tasks: Task[]; + templates: TaskTemplate[]; + baseUrl: string; + tasksSupported: boolean; +} + +/** + * Responses sent from the extension to the Tasks webview. + * These correspond to the requests and include data or errors. + */ +export type TasksExtensionResponse = + | (TasksResponse & { + type: "init"; + }) + | (TasksResponse & { type: "getTasks" }) + | (TasksResponse & { type: "getTemplates" }) + | (TasksResponse & { type: "getTaskDetails" }) + | (TasksResponse & { type: "createTask" }) + | (TasksResponse & { + type: + | "deleteTask" + | "pauseTask" + | "resumeTask" + | "viewInCoder" + | "downloadLogs" + | "sendTaskMessage" + | "viewLogs"; + }); + +/** + * Push messages from the extension to the webview. + * These are server-driven events, not responses to requests. + */ +export type TasksPushMessage = + | { type: "taskUpdated"; data: Task } + | { type: "tasksUpdated"; data: Task[] } + | { type: "logsAppend"; data: TaskLogEntry[] } + | { type: "refresh" } + | { type: "showCreateForm" }; + +/** + * All messages sent from the extension to the webview. + */ +export type TasksExtensionMessage = TasksExtensionResponse | TasksPushMessage; + +/** + * Messages sent from the Tasks webview to the extension. + */ +export type TasksWebviewMessage = + | TasksWebviewRequest + | { type: "ready" } + | { type: "refresh" }; + +/** + * Type guard to check if a message is a request (has requestId). + */ +export function isTasksRequest( + message: TasksWebviewMessage, +): message is TasksWebviewRequest { + return "requestId" in message && typeof message.requestId === "string"; +} + +/** + * Type guard to check if a message is a response (has requestId and success). + */ +export function isTasksResponse( + message: TasksExtensionMessage, +): message is TasksExtensionResponse { + return ( + "requestId" in message && + typeof message.requestId === "string" && + "success" in message + ); +} diff --git a/packages/webview-shared/src/tasks/types.ts b/packages/webview-shared/src/tasks/types.ts new file mode 100644 index 00000000..5b403769 --- /dev/null +++ b/packages/webview-shared/src/tasks/types.ts @@ -0,0 +1,116 @@ +import type { + Preset, + Task, + TaskLogEntry, + TaskState, + TaskStatus, + Template, + WorkspaceStatus, +} from "coder/site/src/api/typesGenerated"; + +// Re-export SDK types for convenience +export type { + Preset, + Task, + TaskLogEntry, + TaskState, + TaskStatus, + Template, + WorkspaceStatus, +}; + +/** + * Combined template and preset information for the create task form. + * This is derived from Template and Preset but simplified for the webview. + */ +export interface TaskTemplate { + id: string; + name: string; + displayName: string; + icon: string; + activeVersionId: string; + presets: TaskPreset[]; +} + +export interface TaskPreset { + id: string; + name: string; + isDefault: boolean; +} + +/** Status of log fetching */ +export type LogsStatus = "ok" | "not_available" | "error"; + +/** + * Full details for a selected task, including logs and action availability. + */ +export interface TaskDetails { + task: Task; + logs: TaskLogEntry[]; + logsStatus: LogsStatus; + canResume: boolean; + canPause: boolean; +} + +export interface TaskActions { + canPause: boolean; + canResume: boolean; +} + +export function getTaskActions(task: Task): TaskActions { + const hasWorkspace = task.workspace_id !== null; + return { + canPause: hasWorkspace && task.workspace_status === "running", + canResume: + hasWorkspace && + (task.workspace_status === "stopped" || + task.workspace_status === "failed" || + task.workspace_status === "canceled"), + }; +} + +/** UI state derived from task status, state, and workspace status */ +export type TaskUIState = + | "working" + | "idle" + | "complete" + | "error" + | "paused" + | "initializing"; + +/** Compute the UI state from a Task object */ +export function getTaskUIState(task: Task): TaskUIState { + const taskState = task.current_state?.state; + + // Error takes priority + if (task.status === "error" || taskState === "failed") { + return "error"; + } + + // Check workspace status for paused/initializing + if ( + task.workspace_status === "stopped" || + task.workspace_status === "stopping" || + task.workspace_status === "canceled" + ) { + return "paused"; + } + if ( + task.workspace_status === "starting" || + task.workspace_status === "pending" + ) { + return "initializing"; + } + + // Active task states + if (task.status === "active" && task.workspace_status === "running") { + if (taskState === "working") return "working"; + if (taskState === "idle") return "idle"; + if (taskState === "complete") return "complete"; + } + + // Completed without running workspace + if (taskState === "complete") return "complete"; + + return "idle"; // default fallback +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 992f2dda..e7c5680a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,12 +12,21 @@ catalogs: '@types/react-dom': specifier: ^19.2.3 version: 19.2.3 - '@vitejs/plugin-react-swc': - specifier: ^4.2.2 - version: 4.2.2 + '@vitejs/plugin-react': + specifier: ^4.5.2 + version: 4.7.0 '@vscode-elements/react-elements': specifier: ^2.4.0 version: 2.4.0 + '@vscode/codicons': + specifier: ^0.0.44 + version: 0.0.44 + babel-plugin-react-compiler: + specifier: ^19.1.0-rc.2 + version: 19.1.0-rc.3 + eslint-plugin-react-compiler: + specifier: ^19.1.0-rc.2 + version: 19.1.0-rc.2 react: specifier: ^19.2.4 version: 19.2.4 @@ -100,7 +109,7 @@ importers: version: 10.0.10 '@types/node': specifier: ^20 - version: 20.19.30 + version: 20.19.31 '@types/proper-lockfile': specifier: ^4.1.4 version: 4.1.4 @@ -118,22 +127,22 @@ importers: version: 0.7.39 '@types/vscode': specifier: ^1.95.0 - version: 1.107.0 + version: 1.108.1 '@types/ws': specifier: ^8.18.1 version: 8.18.1 '@typescript-eslint/eslint-plugin': specifier: ^8.53.1 - version: 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) + version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.53.1 - version: 8.53.1(eslint@9.39.2)(typescript@5.9.3) - '@vitejs/plugin-react-swc': + version: 8.54.0(eslint@9.39.2)(typescript@5.9.3) + '@vitejs/plugin-react': specifier: 'catalog:' - version: 4.2.2(vite@7.3.1(@types/node@20.19.30)) + version: 4.7.0(vite@7.3.1(@types/node@20.19.31)) '@vitest/coverage-v8': specifier: ^4.0.16 - version: 4.0.16(vitest@4.0.16(@types/node@20.19.30)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + version: 4.0.18(vitest@4.0.18(@types/node@20.19.31)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) '@vscode/test-cli': specifier: ^0.0.12 version: 0.0.12 @@ -143,12 +152,15 @@ importers: '@vscode/vsce': specifier: ^3.7.1 version: 3.7.1 + babel-plugin-react-compiler: + specifier: 'catalog:' + version: 19.1.0-rc.3 bufferutil: specifier: ^4.1.0 version: 4.1.0 coder: specifier: github:coder/coder#main - version: https://codeload.github.com/coder/coder/tar.gz/37aecda165d8697766fd42399416afce6ad41dcb + version: https://codeload.github.com/coder/coder/tar.gz/b1e18f23985e82c5fda24610c507cab868736416 concurrently: specifier: ^9.2.1 version: 9.2.1 @@ -157,7 +169,7 @@ importers: version: 1.11.19 electron: specifier: ^40.0.0 - version: 40.0.0 + version: 40.1.0 esbuild: specifier: ^0.27.2 version: 0.27.2 @@ -169,22 +181,25 @@ importers: version: 10.1.8(eslint@9.39.2) eslint-import-resolver-typescript: specifier: ^4.4.4 - version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2) + version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2) eslint-plugin-import-x: specifier: ^4.16.1 - version: 4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2) + version: 4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2) eslint-plugin-package-json: specifier: ^0.88.2 version: 0.88.2(@types/estree@1.0.8)(eslint@9.39.2)(jsonc-eslint-parser@2.4.2) eslint-plugin-react: specifier: ^7.37.0 version: 7.37.5(eslint@9.39.2) + eslint-plugin-react-compiler: + specifier: 'catalog:' + version: 19.1.0-rc.2(eslint@9.39.2) eslint-plugin-react-hooks: specifier: ^5.0.0 version: 5.2.0(eslint@9.39.2) globals: specifier: ^17.0.0 - version: 17.0.0 + version: 17.3.0 jsdom: specifier: ^27.4.0 version: 27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -196,7 +211,7 @@ importers: version: 4.56.10(tslib@2.8.1) prettier: specifier: ^3.7.4 - version: 3.7.4 + version: 3.8.1 react: specifier: 'catalog:' version: 19.2.4 @@ -208,16 +223,16 @@ importers: version: 5.9.3 typescript-eslint: specifier: ^8.53.1 - version: 8.53.1(eslint@9.39.2)(typescript@5.9.3) + version: 8.54.0(eslint@9.39.2)(typescript@5.9.3) utf-8-validate: specifier: ^6.0.6 version: 6.0.6 vite: specifier: 'catalog:' - version: 7.3.1(@types/node@20.19.30) + version: 7.3.1(@types/node@20.19.31) vitest: specifier: ^4.0.16 - version: 4.0.16(@types/node@20.19.30)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + version: 4.0.18(@types/node@20.19.31)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) packages/tasks: dependencies: @@ -227,6 +242,9 @@ importers: '@vscode-elements/react-elements': specifier: 'catalog:' version: 2.4.0(@types/react@19.2.10)(@vscode/codicons@0.0.44)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@vscode/codicons': + specifier: 'catalog:' + version: 0.0.44 react: specifier: 'catalog:' version: 19.2.4 @@ -240,15 +258,18 @@ importers: '@types/react-dom': specifier: 'catalog:' version: 19.2.3(@types/react@19.2.10) - '@vitejs/plugin-react-swc': + '@vitejs/plugin-react': specifier: 'catalog:' - version: 4.2.2(vite@7.3.1(@types/node@24.10.9)) + version: 4.7.0(vite@7.3.1(@types/node@24.10.10)) + babel-plugin-react-compiler: + specifier: 'catalog:' + version: 19.1.0-rc.3 typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.1(@types/node@24.10.9) + version: 7.3.1(@types/node@24.10.10) packages/webview-shared: devDependencies: @@ -270,10 +291,6 @@ importers: packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - '@acemir/cssom@0.9.31': resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} @@ -283,8 +300,8 @@ packages: '@asamuzakjp/css-color@4.1.1': resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==} - '@asamuzakjp/dom-selector@6.7.6': - resolution: {integrity: sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==} + '@asamuzakjp/dom-selector@6.7.7': + resolution: {integrity: sha512-8CO/UQ4tzDd7ula+/CVimJIVWez99UJlbMyIgk8xOnhAVPKLnBZmUFYVgugS441v2ZqUq5EnSh6B0Ua0liSFAA==} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -299,52 +316,110 @@ packages: resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} - '@azure/core-auth@1.10.0': - resolution: {integrity: sha512-88Djs5vBvGbHQHf5ZZcaoNHo6Y8BKZkt3cw2iuJIQzLEgH4Ox6Tm4hjFhbqOxyYsgIG/eJbFEHpxRIfEEWv5Ow==} + '@azure/core-auth@1.10.1': + resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} engines: {node: '>=20.0.0'} - '@azure/core-client@1.10.0': - resolution: {integrity: sha512-O4aP3CLFNodg8eTHXECaH3B3CjicfzkxVtnrfLkOq0XNP7TIECGfHpK/C6vADZkWP75wzmdBnsIA8ksuJMk18g==} + '@azure/core-client@1.10.1': + resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} engines: {node: '>=20.0.0'} - '@azure/core-rest-pipeline@1.22.0': - resolution: {integrity: sha512-OKHmb3/Kpm06HypvB3g6Q3zJuvyXcpxDpCS1PnU8OV6AJgSFaee/covXBcPbWc6XDDxtEPlbi3EMQ6nUiPaQtw==} + '@azure/core-rest-pipeline@1.22.2': + resolution: {integrity: sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==} engines: {node: '>=20.0.0'} - '@azure/core-tracing@1.3.0': - resolution: {integrity: sha512-+XvmZLLWPe67WXNZo9Oc9CrPj/Tm8QnHR92fFAFdnbzwNdCH1h+7UdpaQgRSBsMY+oW1kHXNUZQLdZ1gHX3ROw==} + '@azure/core-tracing@1.3.1': + resolution: {integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==} engines: {node: '>=20.0.0'} - '@azure/core-util@1.13.0': - resolution: {integrity: sha512-o0psW8QWQ58fq3i24Q1K2XfS/jYTxr7O1HRcyUE9bV9NttLU+kYOH82Ixj8DGlMTOWgxm1Sss2QAfKK5UkSPxw==} + '@azure/core-util@1.13.1': + resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} engines: {node: '>=20.0.0'} - '@azure/identity@4.10.2': - resolution: {integrity: sha512-Uth4vz0j+fkXCkbvutChUj03PDCokjbC6Wk9JT8hHEUtpy/EurNKAseb3+gO6Zi9VYBvwt61pgbzn1ovk942Qg==} + '@azure/identity@4.13.0': + resolution: {integrity: sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==} engines: {node: '>=20.0.0'} '@azure/logger@1.3.0': resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} engines: {node: '>=20.0.0'} - '@azure/msal-browser@4.16.0': - resolution: {integrity: sha512-yF8gqyq7tVnYftnrWaNaxWpqhGQXoXpDfwBtL7UCGlIbDMQ1PUJF/T2xCL6NyDNHoO70qp1xU8GjjYTyNIefkw==} + '@azure/msal-browser@4.28.1': + resolution: {integrity: sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA==} engines: {node: '>=0.8.0'} - '@azure/msal-common@15.9.0': - resolution: {integrity: sha512-lbz/D+C9ixUG3hiZzBLjU79a0+5ZXCorjel3mwXluisKNH0/rOS/ajm8yi4yI9RP5Uc70CAcs9Ipd0051Oh/kA==} + '@azure/msal-common@15.14.1': + resolution: {integrity: sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw==} engines: {node: '>=0.8.0'} - '@azure/msal-node@3.6.4': - resolution: {integrity: sha512-jMeut9UQugcmq7aPWWlJKhJIse4DQ594zc/JaP6BIxg55XaX3aM/jcPuIQ4ryHnI4QSf03wUspy/uqAvjWKbOg==} + '@azure/msal-node@3.8.6': + resolution: {integrity: sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w==} engines: {node: '>=16'} - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.0': + resolution: {integrity: sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.27.1': @@ -355,17 +430,52 @@ packages: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.28.6': resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': @@ -407,11 +517,11 @@ packages: resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} - '@emnapi/core@1.7.1': - resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -614,8 +724,8 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@exodus/bytes@1.10.0': - resolution: {integrity: sha512-tf8YdcbirXdPnJ+Nd4UN1EXnz+IP2DI45YVEr3vvzcVTOyrApkmIB4zvOQVd3XPr7RXnfBtAx+PXImXOIU0Ajg==} + '@exodus/bytes@1.11.0': + resolution: {integrity: sha512-wO3vd8nsEHdumsXrjGO/v4p6irbg7hy9kvIeR6i2AwylZSk4HJdWgL0FNaVquW1+AweJcdvU1IEpuIWk/WaPnA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -643,8 +753,8 @@ packages: resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + '@isaacs/brace-expansion@5.0.1': + resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} engines: {node: 20 || >=22} '@isaacs/cliui@8.0.2': @@ -655,8 +765,14 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} '@jridgewell/sourcemap-codec@1.5.5': @@ -852,131 +968,131 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rolldown/pluginutils@1.0.0-beta.47': - resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rollup/rollup-android-arm-eabi@4.55.1': - resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} + '@rollup/rollup-android-arm-eabi@4.57.1': + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.55.1': - resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} + '@rollup/rollup-android-arm64@4.57.1': + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.55.1': - resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + '@rollup/rollup-darwin-arm64@4.57.1': + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.55.1': - resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + '@rollup/rollup-darwin-x64@4.57.1': + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.55.1': - resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + '@rollup/rollup-freebsd-arm64@4.57.1': + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.55.1': - resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + '@rollup/rollup-freebsd-x64@4.57.1': + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + '@rollup/rollup-linux-arm-musleabihf@4.57.1': + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.55.1': - resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} + '@rollup/rollup-linux-arm64-gnu@4.57.1': + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.55.1': - resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + '@rollup/rollup-linux-arm64-musl@4.57.1': + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.55.1': - resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} + '@rollup/rollup-linux-loong64-gnu@4.57.1': + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.55.1': - resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} + '@rollup/rollup-linux-loong64-musl@4.57.1': + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} + '@rollup/rollup-linux-ppc64-gnu@4.57.1': + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.55.1': - resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} + '@rollup/rollup-linux-ppc64-musl@4.57.1': + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} + '@rollup/rollup-linux-riscv64-gnu@4.57.1': + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.55.1': - resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} + '@rollup/rollup-linux-riscv64-musl@4.57.1': + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.55.1': - resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} + '@rollup/rollup-linux-s390x-gnu@4.57.1': + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.55.1': - resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} + '@rollup/rollup-linux-x64-gnu@4.57.1': + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.55.1': - resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + '@rollup/rollup-linux-x64-musl@4.57.1': + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.55.1': - resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + '@rollup/rollup-openbsd-x64@4.57.1': + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.55.1': - resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} + '@rollup/rollup-openharmony-arm64@4.57.1': + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.55.1': - resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + '@rollup/rollup-win32-arm64-msvc@4.57.1': + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.55.1': - resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + '@rollup/rollup-win32-ia32-msvc@4.57.1': + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.55.1': - resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + '@rollup/rollup-win32-x64-gnu@4.57.1': + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.55.1': - resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} + '@rollup/rollup-win32-x64-msvc@4.57.1': + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} cpu: [x64] os: [win32] @@ -1036,81 +1152,6 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@swc/core-darwin-arm64@1.15.10': - resolution: {integrity: sha512-U72pGqmJYbjrLhMndIemZ7u9Q9owcJczGxwtfJlz/WwMaGYAV/g4nkGiUVk/+QSX8sFCAjanovcU1IUsP2YulA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.15.10': - resolution: {integrity: sha512-NZpDXtwHH083L40xdyj1sY31MIwLgOxKfZEAGCI8xHXdHa+GWvEiVdGiu4qhkJctoHFzAEc7ZX3GN5phuJcPuQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.15.10': - resolution: {integrity: sha512-ioieF5iuRziUF1HkH1gg1r93e055dAdeBAPGAk40VjqpL5/igPJ/WxFHGvc6WMLhUubSJI4S0AiZAAhEAp1jDg==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.15.10': - resolution: {integrity: sha512-tD6BClOrxSsNus9cJL7Gxdv7z7Y2hlyvZd9l0NQz+YXzmTWqnfzLpg16ovEI7gknH2AgDBB5ywOsqu8hUgSeEQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.15.10': - resolution: {integrity: sha512-4uAHO3nbfbrTcmO/9YcVweTQdx5fN3l7ewwl5AEK4yoC4wXmoBTEPHAVdKNe4r9+xrTgd4BgyPsy0409OjjlMw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.15.10': - resolution: {integrity: sha512-W0h9ONNw1pVIA0cN7wtboOSTl4Jk3tHq+w2cMPQudu9/+3xoCxpFb9ZdehwCAk29IsvdWzGzY6P7dDVTyFwoqg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.15.10': - resolution: {integrity: sha512-XQNZlLZB62S8nAbw7pqoqwy91Ldy2RpaMRqdRN3T+tAg6Xg6FywXRKCsLh6IQOadr4p1+lGnqM/Wn35z5a/0Vw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.15.10': - resolution: {integrity: sha512-qnAGrRv5Nj/DATxAmCnJQRXXQqnJwR0trxLndhoHoxGci9MuguNIjWahS0gw8YZFjgTinbTxOwzatkoySihnmw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.15.10': - resolution: {integrity: sha512-i4X/q8QSvzVlaRtv1xfnfl+hVKpCfiJ+9th484rh937fiEZKxZGf51C+uO0lfKDP1FfnT6C1yBYwHy7FLBVXFw==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.15.10': - resolution: {integrity: sha512-HvY8XUFuoTXn6lSccDLYFlXv1SU/PzYi4PyUqGT++WfTnbw/68N/7BdUZqglGRwiSqr0qhYt/EhmBpULj0J9rA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.15.10': - resolution: {integrity: sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '>=0.5.17' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/types@0.1.25': - resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -1134,20 +1175,20 @@ packages: '@types/react-dom': optional: true - '@textlint/ast-node-types@15.2.1': - resolution: {integrity: sha512-20fEcLPsXg81yWpApv4FQxrZmlFF/Ta7/kz1HGIL+pJo5cSTmkc+eCki3GpOPZIoZk0tbJU8hrlwUb91F+3SNQ==} + '@textlint/ast-node-types@15.5.1': + resolution: {integrity: sha512-2ABQSaQoM9u9fycXLJKcCv4XQulJWTUSwjo6F0i/ujjqOH8/AZ2A0RDKKbAddqxDhuabVB20lYoEsZZgzehccg==} - '@textlint/linter-formatter@15.2.1': - resolution: {integrity: sha512-oollG/BHa07+mMt372amxHohteASC+Zxgollc1sZgiyxo4S6EuureV3a4QIQB0NecA+Ak3d0cl0WI/8nou38jw==} + '@textlint/linter-formatter@15.5.1': + resolution: {integrity: sha512-7wfzpcQtk7TZ3UJO2deTI71mJCm4VvPGUmSwE4iuH6FoaxpdWpwSBiMLcZtjYrt/oIFOtNz0uf5rI+xJiHTFww==} - '@textlint/module-interop@15.2.1': - resolution: {integrity: sha512-b/C/ZNrm05n1ypymDknIcpkBle30V2ZgE3JVqQlA9PnQV46Ky510qrZk6s9yfKgA3m1YRnAw04m8xdVtqjq1qg==} + '@textlint/module-interop@15.5.1': + resolution: {integrity: sha512-Y1jcFGCKNSmHxwsLO3mshOfLYX4Wavq2+w5BG6x5lGgZv0XrF1xxURRhbnhns4LzCu0fAcx6W+3V8/1bkyTZCw==} - '@textlint/resolver@15.2.1': - resolution: {integrity: sha512-FY3aK4tElEcOJVUsaMj4Zro4jCtKEEwUMIkDL0tcn6ljNcgOF7Em+KskRRk/xowFWayqDtdz5T3u7w/6fjjuJQ==} + '@textlint/resolver@15.5.1': + resolution: {integrity: sha512-CVHxMIm8iNGccqM12CQ/ycvh+HjJId4RyC6as5ynCcp2E1Uy1TCe0jBWOpmLsbT4Nx15Ke29BmspyByawuIRyA==} - '@textlint/types@15.2.1': - resolution: {integrity: sha512-zyqNhSatK1cwxDUgosEEN43hFh3WCty9Zm2Vm3ogU566IYegifwqN54ey/CiRy/DiO4vMcFHykuQnh2Zwp6LLw==} + '@textlint/types@15.5.1': + resolution: {integrity: sha512-IY1OVZZk8LOOrbapYCsaeH7XSJT89HVukixDT8CoiWMrKGCTCZ3/Kzoa3DtMMbY8jtY777QmPOVCNnR+8fF6YQ==} '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -1161,11 +1202,23 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1176,8 +1229,8 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -1197,11 +1250,11 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@20.19.30': - resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==} + '@types/node@20.19.31': + resolution: {integrity: sha512-5jsi0wpncvTD33Sh1UCgacK37FFwDn+EG7wCmEvs62fCvBL+n8/76cAYDok21NF6+jaVWIqKwCZyX7Vbu8eB3A==} - '@types/node@24.10.9': - resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} + '@types/node@24.10.10': + resolution: {integrity: sha512-+0/4J266CBGPUq/ELg7QUHhN25WYjE0wYTPSQJn1xeu8DOlIOPxXxrNGiLmfAWl7HMMgWFWXpt9IDjMWrF5Iow==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1241,8 +1294,8 @@ packages: '@types/vscode-webview@1.57.5': resolution: {integrity: sha512-iBAUYNYkz+uk1kdsq05fEcoh8gJmwT3lqqFPN7MGyjQ3HVloViMdo7ZJ8DFIP8WOK74PjOEilosqAyxV2iUFUw==} - '@types/vscode@1.107.0': - resolution: {integrity: sha512-XS8YE1jlyTIowP64+HoN30OlC1H9xqSlq1eoLZUgFEC8oUTO6euYZxti1xRiLSfZocs4qytTzR6xCBYtioQTCg==} + '@types/vscode@1.108.1': + resolution: {integrity: sha512-DerV0BbSzt87TbrqmZ7lRDIYaMiqvP8tmJTzW2p49ZBVtGUnGAu2RGQd1Wv4XMzEVUpaHbsemVM5nfuQJj7H6w==} '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -1250,71 +1303,67 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.53.1': - resolution: {integrity: sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==} + '@typescript-eslint/eslint-plugin@8.54.0': + resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.53.1 + '@typescript-eslint/parser': ^8.54.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.53.1': - resolution: {integrity: sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==} + '@typescript-eslint/parser@8.54.0': + resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.53.1': - resolution: {integrity: sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==} + '@typescript-eslint/project-service@8.54.0': + resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.53.1': - resolution: {integrity: sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==} + '@typescript-eslint/scope-manager@8.54.0': + resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.53.1': - resolution: {integrity: sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==} + '@typescript-eslint/tsconfig-utils@8.54.0': + resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.53.1': - resolution: {integrity: sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==} + '@typescript-eslint/type-utils@8.54.0': + resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.52.0': - resolution: {integrity: sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==} + '@typescript-eslint/types@8.54.0': + resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.53.1': - resolution: {integrity: sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.53.1': - resolution: {integrity: sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==} + '@typescript-eslint/typescript-estree@8.54.0': + resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.53.1': - resolution: {integrity: sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==} + '@typescript-eslint/utils@8.54.0': + resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.53.1': - resolution: {integrity: sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==} + '@typescript-eslint/visitor-keys@8.54.0': + resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typespec/ts-http-runtime@0.3.0': - resolution: {integrity: sha512-sOx1PKSuFwnIl7z4RN0Ls7N9AQawmR9r66eI5rFCzLDIs8HTIYrIpH9QjYWoX0lkgGrkLxXhi4QnK7MizPRrIg==} + '@typespec/ts-http-runtime@0.3.2': + resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} engines: {node: '>=20.0.0'} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -1412,26 +1461,26 @@ packages: cpu: [x64] os: [win32] - '@vitejs/plugin-react-swc@4.2.2': - resolution: {integrity: sha512-x+rE6tsxq/gxrEJN3Nv3dIV60lFflPj94c90b+NNo6n1QV1QQUTLoL0MpaOVasUZ0zqVBn7ead1B5ecx1JAGfA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4 || ^5 || ^6 || ^7 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitest/coverage-v8@4.0.16': - resolution: {integrity: sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==} + '@vitest/coverage-v8@4.0.18': + resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} peerDependencies: - '@vitest/browser': 4.0.16 - vitest: 4.0.16 + '@vitest/browser': 4.0.18 + vitest: 4.0.18 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.16': - resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} + '@vitest/expect@4.0.18': + resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} - '@vitest/mocker@4.0.16': - resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} + '@vitest/mocker@4.0.18': + resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -1441,20 +1490,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.16': - resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} + '@vitest/pretty-format@4.0.18': + resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} - '@vitest/runner@4.0.16': - resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} + '@vitest/runner@4.0.18': + resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} - '@vitest/snapshot@4.0.16': - resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} + '@vitest/snapshot@4.0.18': + resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} - '@vitest/spy@4.0.16': - resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} + '@vitest/spy@4.0.18': + resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} - '@vitest/utils@4.0.16': - resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} + '@vitest/utils@4.0.18': + resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} '@vscode-elements/elements@2.4.0': resolution: {integrity: sha512-3VzHabhhT+mdaCTQhR0uxN/BFHcy+QjRVxnqjoG/ERsRxNEYZ+BycMFwmvV1H2gZSW9GBpUS6YpmPfAIhLAmgg==} @@ -1479,53 +1528,53 @@ packages: resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==} engines: {node: '>=16'} - '@vscode/vsce-sign-alpine-arm64@2.0.5': - resolution: {integrity: sha512-XVmnF40APwRPXSLYA28Ye+qWxB25KhSVpF2eZVtVOs6g7fkpOxsVnpRU1Bz2xG4ySI79IRuapDJoAQFkoOgfdQ==} + '@vscode/vsce-sign-alpine-arm64@2.0.6': + resolution: {integrity: sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==} cpu: [arm64] os: [alpine] - '@vscode/vsce-sign-alpine-x64@2.0.5': - resolution: {integrity: sha512-JuxY3xcquRsOezKq6PEHwCgd1rh1GnhyH6urVEWUzWn1c1PC4EOoyffMD+zLZtFuZF5qR1I0+cqDRNKyPvpK7Q==} + '@vscode/vsce-sign-alpine-x64@2.0.6': + resolution: {integrity: sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==} cpu: [x64] os: [alpine] - '@vscode/vsce-sign-darwin-arm64@2.0.5': - resolution: {integrity: sha512-z2Q62bk0ptADFz8a0vtPvnm6vxpyP3hIEYMU+i1AWz263Pj8Mc38cm/4sjzxu+LIsAfhe9HzvYNS49lV+KsatQ==} + '@vscode/vsce-sign-darwin-arm64@2.0.6': + resolution: {integrity: sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==} cpu: [arm64] os: [darwin] - '@vscode/vsce-sign-darwin-x64@2.0.5': - resolution: {integrity: sha512-ma9JDC7FJ16SuPXlLKkvOD2qLsmW/cKfqK4zzM2iJE1PbckF3BlR08lYqHV89gmuoTpYB55+z8Y5Fz4wEJBVDA==} + '@vscode/vsce-sign-darwin-x64@2.0.6': + resolution: {integrity: sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==} cpu: [x64] os: [darwin] - '@vscode/vsce-sign-linux-arm64@2.0.5': - resolution: {integrity: sha512-Hr1o0veBymg9SmkCqYnfaiUnes5YK6k/lKFA5MhNmiEN5fNqxyPUCdRZMFs3Ajtx2OFW4q3KuYVRwGA7jdLo7Q==} + '@vscode/vsce-sign-linux-arm64@2.0.6': + resolution: {integrity: sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==} cpu: [arm64] os: [linux] - '@vscode/vsce-sign-linux-arm@2.0.5': - resolution: {integrity: sha512-cdCwtLGmvC1QVrkIsyzv01+o9eR+wodMJUZ9Ak3owhcGxPRB53/WvrDHAFYA6i8Oy232nuen1YqWeEohqBuSzA==} + '@vscode/vsce-sign-linux-arm@2.0.6': + resolution: {integrity: sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==} cpu: [arm] os: [linux] - '@vscode/vsce-sign-linux-x64@2.0.5': - resolution: {integrity: sha512-XLT0gfGMcxk6CMRLDkgqEPTyG8Oa0OFe1tPv2RVbphSOjFWJwZgK3TYWx39i/7gqpDHlax0AP6cgMygNJrA6zg==} + '@vscode/vsce-sign-linux-x64@2.0.6': + resolution: {integrity: sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==} cpu: [x64] os: [linux] - '@vscode/vsce-sign-win32-arm64@2.0.5': - resolution: {integrity: sha512-hco8eaoTcvtmuPhavyCZhrk5QIcLiyAUhEso87ApAWDllG7djIrWiOCtqn48k4pHz+L8oCQlE0nwNHfcYcxOPw==} + '@vscode/vsce-sign-win32-arm64@2.0.6': + resolution: {integrity: sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==} cpu: [arm64] os: [win32] - '@vscode/vsce-sign-win32-x64@2.0.5': - resolution: {integrity: sha512-1ixKFGM2FwM+6kQS2ojfY3aAelICxjiCzeg4nTHpkeU1Tfs4RC+lVLrgq5NwcBC7ZLr6UfY3Ct3D6suPeOf7BQ==} + '@vscode/vsce-sign-win32-x64@2.0.6': + resolution: {integrity: sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==} cpu: [x64] os: [win32] - '@vscode/vsce-sign@2.0.6': - resolution: {integrity: sha512-j9Ashk+uOWCDHYDxgGsqzKq5FXW9b9MW7QqOIYZ8IYpneJclWTBeHZz2DJCSKQgo+JAqNcaRRE1hzIx0dswqAw==} + '@vscode/vsce-sign@2.0.9': + resolution: {integrity: sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==} '@vscode/vsce@3.7.1': resolution: {integrity: sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==} @@ -1542,8 +1591,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} ajv@6.12.6: @@ -1552,18 +1601,14 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + ansi-escapes@7.2.0: + resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} engines: {node: '>=18'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - ansi-regex@6.2.2: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} @@ -1576,10 +1621,6 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -1588,9 +1629,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1629,12 +1667,16 @@ packages: resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} engines: {node: '>=12.0.0'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.10: - resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} + ast-v8-to-istanbul@0.3.11: + resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -1657,14 +1699,21 @@ packages: azure-devops-node-api@12.5.0: resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} + babel-plugin-react-compiler@19.1.0-rc.3: + resolution: {integrity: sha512-mjRn69WuTz4adL0bXGx8Rsyk1086zFJeKmes6aK0xPuK3aaXmDJdLHqwKKMrpm6KAI1MCoUK72d2VeqQbu8YIA==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + baseline-browser-mapping@2.9.19: + resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + hasBin: true + + basic-ftp@5.1.0: + resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==} engines: {node: '>=10.0.0'} bidi-js@1.0.3: @@ -1691,11 +1740,11 @@ packages: boundary@2.0.0: resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -1704,6 +1753,11 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -1759,6 +1813,9 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} + caniuse-lite@1.0.30001767: + resolution: {integrity: sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1783,9 +1840,9 @@ packages: cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - cheerio@1.0.0-rc.12: - resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} - engines: {node: '>= 6'} + cheerio@1.2.0: + resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} + engines: {node: '>=20.18.1'} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -1821,8 +1878,8 @@ packages: resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} engines: {node: '>=16'} - coder@https://codeload.github.com/coder/coder/tar.gz/37aecda165d8697766fd42399416afce6ad41dcb: - resolution: {tarball: https://codeload.github.com/coder/coder/tar.gz/37aecda165d8697766fd42399416afce6ad41dcb} + coder@https://codeload.github.com/coder/coder/tar.gz/b1e18f23985e82c5fda24610c507cab868736416: + resolution: {tarball: https://codeload.github.com/coder/coder/tar.gz/b1e18f23985e82c5fda24610c507cab868736416} version: 0.0.0 color-convert@2.0.1: @@ -1840,8 +1897,8 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + comment-parser@1.4.5: + resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==} engines: {node: '>= 12.0.0'} concat-map@0.0.1: @@ -1862,15 +1919,15 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} css-tree@3.1.0: resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} cssstyle@5.3.7: @@ -1922,8 +1979,8 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - decode-named-character-reference@1.2.0: - resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -1936,12 +1993,12 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} engines: {node: '>=18'} defer-to-connect@2.0.1: @@ -1976,8 +2033,8 @@ packages: resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} engines: {node: '>=12.20'} - detect-libc@2.0.1: - resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} detect-newline@4.0.1: @@ -2011,8 +2068,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - domutils@3.0.1: - resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} @@ -2024,17 +2081,20 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - editions@6.21.0: - resolution: {integrity: sha512-ofkXJtn7z0urokN62DI3SBo/5xAtF0rR7tn+S/bSYV79Ka8pTajIIl+fFQ1q88DQEImymmo97M4azY3WX/nUdg==} - engines: {node: '>=4'} + editions@6.22.0: + resolution: {integrity: sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==} + engines: {ecmascript: '>= es5', node: '>=4'} - electron@40.0.0: - resolution: {integrity: sha512-UyBy5yJ0/wm4gNugCtNPjvddjAknMTuXR2aCHioXicH7aKRKGDBPp4xqTEi/doVcB3R+MN3wfU9o8d/9pwgK2A==} + electron-to-chromium@1.5.286: + resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} + + electron@40.1.0: + resolution: {integrity: sha512-2j/kvw7uF0H1PnzYBzw2k2Q6q16J8ToKrtQzZfsAoXbbMY0l5gQi2DLOauIZLzwp4O01n8Wt/74JhSRwG0yj9A==} engines: {node: '>= 12.20.55'} hasBin: true - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2042,24 +2102,28 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.18.4: - resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} + enhanced-resolve@5.19.0: + resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} engines: {node: '>=10.13.0'} - entities@4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2186,6 +2250,12 @@ packages: eslint: '>=8.0.0' jsonc-eslint-parser: ^2.0.0 + eslint-plugin-react-compiler@19.1.0-rc.2: + resolution: {integrity: sha512-oKalwDGcD+RX9mf3NEO4zOoUMeLvjSvcbbEOpquzmzqEEM2MQdp7/FY/Hx9NzmUwFzH1W9SKTz5fihfMldpEYw==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + eslint-plugin-react-hooks@5.2.0: resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} engines: {node: '>=10'} @@ -2233,8 +2303,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -2252,8 +2322,8 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - eventsource-parser@3.0.1: - resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} + eventsource-parser@3.0.6: + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} engines: {node: '>=18.0.0'} eventsource@4.1.0: @@ -2286,11 +2356,11 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -2351,10 +2421,6 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} - engines: {node: '>= 6'} - form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -2393,12 +2459,16 @@ packages: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -2417,11 +2487,11 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + get-tsconfig@4.13.1: + resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==} - get-uri@6.0.3: - resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} git-hooks-list@4.2.1: @@ -2447,13 +2517,15 @@ packages: peerDependencies: tslib: '2' - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + 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 hasBin: true glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} + 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 hasBin: true global-agent@3.0.0: @@ -2464,8 +2536,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@17.0.0: - resolution: {integrity: sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw==} + globals@17.3.0: + resolution: {integrity: sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==} engines: {node: '>=18'} globalthis@1.0.4: @@ -2518,6 +2590,12 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -2533,8 +2611,8 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - htmlparser2@8.0.1: - resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -2555,11 +2633,15 @@ packages: resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} ignore@7.0.5: @@ -2569,16 +2651,16 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - index-to-position@1.1.0: - resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} engines: {node: '>=18'} inherits@2.0.4: @@ -2591,8 +2673,8 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} is-array-buffer@3.0.5: @@ -2768,10 +2850,6 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - istanbul-reports@3.2.0: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} @@ -2784,31 +2862,23 @@ packages: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} jackspeak@4.1.1: resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} engines: {node: 20 || >=22} + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsdom@27.4.0: resolution: {integrity: sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -2818,6 +2888,11 @@ packages: canvas: optional: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -2851,8 +2926,8 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} jsx-ast-utils@3.3.5: @@ -2862,11 +2937,11 @@ packages: jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - jws@3.2.3: - resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} keytar@7.9.0: resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} @@ -2928,8 +3003,8 @@ packages: lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -2957,14 +3032,13 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.1.0: - resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} - engines: {node: 20 || >=22} - lru-cache@11.2.5: resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} engines: {node: 20 || >=22} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -3169,8 +3243,8 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + minimatch@10.1.2: + resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} engines: {node: 20 || >=22} minimatch@3.1.2: @@ -3180,8 +3254,8 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} @@ -3190,8 +3264,8 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mocha@11.7.4: - resolution: {integrity: sha512-1jYAaY8x0kAZ0XszLWu14pzsf4KV740Gld4HXkhNTXwcHx4AUEDkPzgEHg9CM5dVcW+zv036tjpsEbLraPJj4w==} + mocha@11.7.5: + resolution: {integrity: sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -3206,8 +3280,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} @@ -3221,20 +3295,23 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - node-abi@3.31.0: - resolution: {integrity: sha512-eSKV6s+APenqVh8ubJyiu/YhZgxQpGP66ntzUb3lY1xB9ukSRaGnx0AIxI+IM+1+IVYC1oWobgG5L3Lt9ARykQ==} + node-abi@3.87.0: + resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==} engines: {node: '>=10'} node-addon-api@4.3.0: resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} - node-gyp-build@4.6.0: - resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-sarif-builder@3.2.0: - resolution: {integrity: sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==} - engines: {node: '>=18'} + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + + node-sarif-builder@3.4.0: + resolution: {integrity: sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==} + engines: {node: '>=20'} normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} @@ -3297,8 +3374,8 @@ packages: resolution: {integrity: sha512-pLzCU8IgyKXPSO11eeharQkQ4GzOKNWhXq79pQarIRZEMt1/ssyr+MIuWBv1mNoenJLg04gvPx+fi4gcKZ4bag==} engines: {node: '>= 18.0.0'} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} ora@8.2.0: @@ -3321,8 +3398,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} engines: {node: '>=18'} pac-proxy-agent@7.2.0: @@ -3333,8 +3410,8 @@ packages: resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} package-json-validator@0.60.0: resolution: {integrity: sha512-3BBkeFHm3O1VsazTSIN8+AGAl/eJQvTvWquECchRszIW6SC3aJ/fZHwZkpsmJlt7FMjTMNEgz+EhamVn94wgFw==} @@ -3355,11 +3432,14 @@ packages: parse-semver@1.1.1: resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} - parse5-htmlparser2-tree-adapter@7.0.0: - resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} parse5@8.0.0: resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} @@ -3379,8 +3459,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} engines: {node: 20 || >=22} path-type@6.0.0: @@ -3419,8 +3499,8 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - prebuild-install@7.1.1: - resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} hasBin: true @@ -3428,8 +3508,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.7.4: - resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true @@ -3461,9 +3541,6 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} @@ -3471,10 +3548,6 @@ packages: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3518,6 +3591,10 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + react@19.2.4: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} @@ -3533,8 +3610,8 @@ packages: readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} readdirp@3.6.0: @@ -3589,21 +3666,21 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} roarr@2.15.4: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} - rollup@4.55.1: - resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} + rollup@4.57.1: + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} run-parallel@1.2.0: @@ -3630,8 +3707,12 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.4.4: + resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + engines: {node: '>=11.0.0'} saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} @@ -3735,8 +3816,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.6: - resolution: {integrity: sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==} + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} sort-object-keys@2.1.0: @@ -3767,9 +3848,6 @@ packages: spdx-license-ids@3.0.22: resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} @@ -3832,10 +3910,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - strip-ansi@7.1.2: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} @@ -3929,11 +4003,11 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} - tldts-core@7.0.19: - resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==} + tldts-core@7.0.21: + resolution: {integrity: sha512-oVOMdHvgjqyzUZH1rOESgJP1uNe2bVrfK0jUHHmiM2rpEiRbf3j4BrsIc6JigJRbHGanQwuZv/R+LTcHsw+bLA==} - tldts@7.0.19: - resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==} + tldts@7.0.21: + resolution: {integrity: sha512-Plu6V8fF/XU6d2k8jPtlQf5F4Xx2hAin4r2C2ca7wR8NK5MbRTo9huLUWRe28f3Uk8bYZfg74tit/dSjc18xnw==} hasBin: true tmp@0.2.5: @@ -4013,11 +4087,11 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typed-rest-client@1.8.9: - resolution: {integrity: sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==} + typed-rest-client@1.8.11: + resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} - typescript-eslint@8.53.1: - resolution: {integrity: sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==} + typescript-eslint@8.54.0: + resolution: {integrity: sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4039,8 +4113,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - underscore@1.13.6: - resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} + underscore@1.13.7: + resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -4048,6 +4122,10 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici@7.20.0: + resolution: {integrity: sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==} + engines: {node: '>=20.18.1'} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} @@ -4065,8 +4143,8 @@ packages: unist-util-visit-parents@6.0.2: resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -4079,6 +4157,12 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -4107,8 +4191,8 @@ packages: resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} engines: {node: ^20.17.0 || >=22.9.0} - version-range@4.14.0: - resolution: {integrity: sha512-gjb0ARm9qlcBAonU4zPwkl9ecKkas+tC2CGwFfptTCWWIVTWY1YUbT2zZKsOAF1jR/tNxxyLwwG0cb42XlYcTg==} + version-range@4.15.0: + resolution: {integrity: sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==} engines: {node: '>=4'} vite@7.3.1: @@ -4151,18 +4235,18 @@ packages: yaml: optional: true - vitest@4.0.16: - resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} + vitest@4.0.18: + resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.16 - '@vitest/browser-preview': 4.0.16 - '@vitest/browser-webdriverio': 4.0.16 - '@vitest/ui': 4.0.16 + '@vitest/browser-playwright': 4.0.18 + '@vitest/browser-preview': 4.0.18 + '@vitest/browser-webdriverio': 4.0.18 + '@vitest/ui': 4.0.18 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4193,6 +4277,11 @@ packages: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -4231,6 +4320,10 @@ packages: engines: {node: '>=8'} hasBin: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + workerpool@9.3.4: resolution: {integrity: sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==} @@ -4284,6 +4377,9 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -4317,6 +4413,15 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod-validation-error@3.5.4: + resolution: {integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.24.4 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -4325,8 +4430,6 @@ packages: snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - '@acemir/cssom@0.9.31': {} '@altano/repository-tools@2.0.1': {} @@ -4339,7 +4442,7 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 11.2.5 - '@asamuzakjp/dom-selector@6.7.6': + '@asamuzakjp/dom-selector@6.7.7': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 @@ -4359,61 +4462,61 @@ snapshots: dependencies: tslib: 2.8.1 - '@azure/core-auth@1.10.0': + '@azure/core-auth@1.10.1': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.13.0 + '@azure/core-util': 1.13.1 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/core-client@1.10.0': + '@azure/core-client@1.10.1': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.0 - '@azure/core-rest-pipeline': 1.22.0 - '@azure/core-tracing': 1.3.0 - '@azure/core-util': 1.13.0 + '@azure/core-auth': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/core-rest-pipeline@1.22.0': + '@azure/core-rest-pipeline@1.22.2': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.0 - '@azure/core-tracing': 1.3.0 - '@azure/core-util': 1.13.0 + '@azure/core-auth': 1.10.1 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.0 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/core-tracing@1.3.0': + '@azure/core-tracing@1.3.1': dependencies: tslib: 2.8.1 - '@azure/core-util@1.13.0': + '@azure/core-util@1.13.1': dependencies: '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.0 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/identity@4.10.2': + '@azure/identity@4.13.0': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.0 - '@azure/core-client': 1.10.0 - '@azure/core-rest-pipeline': 1.22.0 - '@azure/core-tracing': 1.3.0 - '@azure/core-util': 1.13.0 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@azure/msal-browser': 4.16.0 - '@azure/msal-node': 3.6.4 + '@azure/msal-browser': 4.28.1 + '@azure/msal-node': 3.8.6 open: 10.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -4421,46 +4524,185 @@ snapshots: '@azure/logger@1.3.0': dependencies: - '@typespec/ts-http-runtime': 0.3.0 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/msal-browser@4.16.0': + '@azure/msal-browser@4.28.1': dependencies: - '@azure/msal-common': 15.9.0 + '@azure/msal-common': 15.14.1 - '@azure/msal-common@15.9.0': {} + '@azure/msal-common@15.14.1': {} - '@azure/msal-node@3.6.4': + '@azure/msal-node@3.8.6': dependencies: - '@azure/msal-common': 15.9.0 - jsonwebtoken: 9.0.2 + '@azure/msal-common': 15.14.1 + jsonwebtoken: 9.0.3 uuid: 8.3.2 - '@babel/code-frame@7.27.1': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/code-frame@7.28.6': + '@babel/compat-data@7.29.0': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.0': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-compilation-targets@7.28.6': dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 7.7.3 + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} - '@babel/parser@7.28.5': + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/types': 7.28.5 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 '@babel/runtime@7.28.6': {} - '@babel/types@7.28.5': + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.0 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 @@ -4503,13 +4745,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@emnapi/core@1.7.1': + '@emnapi/core@1.8.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.7.1': + '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 optional: true @@ -4626,8 +4868,8 @@ snapshots: debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 - ignore: 5.2.4 - import-fresh: 3.3.0 + ignore: 5.3.2 + import-fresh: 3.3.1 js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 @@ -4657,7 +4899,7 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@exodus/bytes@1.10.0': {} + '@exodus/bytes@1.11.0': {} '@humanfs/core@0.19.1': {} @@ -4672,7 +4914,7 @@ snapshots: '@isaacs/balanced-match@4.0.1': {} - '@isaacs/brace-expansion@5.0.0': + '@isaacs/brace-expansion@5.0.1': dependencies: '@isaacs/balanced-match': 4.0.1 @@ -4680,20 +4922,30 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 '@istanbuljs/schema@0.1.3': {} - '@jridgewell/resolve-uri@3.1.1': {} + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.31': dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': @@ -4839,8 +5091,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.7.1 - '@emnapi/runtime': 1.7.1 + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -4854,7 +5106,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.20.1 '@peculiar/asn1-cms@2.6.0': dependencies: @@ -4949,81 +5201,81 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rolldown/pluginutils@1.0.0-beta.47': {} + '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/rollup-android-arm-eabi@4.55.1': + '@rollup/rollup-android-arm-eabi@4.57.1': optional: true - '@rollup/rollup-android-arm64@4.55.1': + '@rollup/rollup-android-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-arm64@4.55.1': + '@rollup/rollup-darwin-arm64@4.57.1': optional: true - '@rollup/rollup-darwin-x64@4.55.1': + '@rollup/rollup-darwin-x64@4.57.1': optional: true - '@rollup/rollup-freebsd-arm64@4.55.1': + '@rollup/rollup-freebsd-arm64@4.57.1': optional: true - '@rollup/rollup-freebsd-x64@4.55.1': + '@rollup/rollup-freebsd-x64@4.57.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.55.1': + '@rollup/rollup-linux-arm-musleabihf@4.57.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.55.1': + '@rollup/rollup-linux-arm64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.55.1': + '@rollup/rollup-linux-arm64-musl@4.57.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.55.1': + '@rollup/rollup-linux-loong64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-loong64-musl@4.55.1': + '@rollup/rollup-linux-loong64-musl@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.55.1': + '@rollup/rollup-linux-ppc64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-ppc64-musl@4.55.1': + '@rollup/rollup-linux-ppc64-musl@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.55.1': + '@rollup/rollup-linux-riscv64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.55.1': + '@rollup/rollup-linux-riscv64-musl@4.57.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.55.1': + '@rollup/rollup-linux-s390x-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.55.1': + '@rollup/rollup-linux-x64-gnu@4.57.1': optional: true - '@rollup/rollup-linux-x64-musl@4.55.1': + '@rollup/rollup-linux-x64-musl@4.57.1': optional: true - '@rollup/rollup-openbsd-x64@4.55.1': + '@rollup/rollup-openbsd-x64@4.57.1': optional: true - '@rollup/rollup-openharmony-arm64@4.55.1': + '@rollup/rollup-openharmony-arm64@4.57.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.55.1': + '@rollup/rollup-win32-arm64-msvc@4.57.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.55.1': + '@rollup/rollup-win32-ia32-msvc@4.57.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.55.1': + '@rollup/rollup-win32-x64-gnu@4.57.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.55.1': + '@rollup/rollup-win32-x64-msvc@4.57.1': optional: true '@secretlint/config-creator@10.2.2': @@ -5054,13 +5306,13 @@ snapshots: dependencies: '@secretlint/resolver': 10.2.2 '@secretlint/types': 10.2.2 - '@textlint/linter-formatter': 15.2.1 - '@textlint/module-interop': 15.2.1 - '@textlint/types': 15.2.1 + '@textlint/linter-formatter': 15.5.1 + '@textlint/module-interop': 15.5.1 + '@textlint/types': 15.5.1 chalk: 5.6.2 debug: 4.4.3(supports-color@8.1.1) pluralize: 8.0.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 table: 6.9.0 terminal-link: 4.0.0 transitivePeerDependencies: @@ -5075,7 +5327,7 @@ snapshots: '@secretlint/source-creator': 10.2.2 '@secretlint/types': 10.2.2 debug: 4.4.3(supports-color@8.1.1) - p-map: 7.0.3 + p-map: 7.0.4 transitivePeerDependencies: - supports-color @@ -5085,7 +5337,7 @@ snapshots: '@secretlint/secretlint-formatter-sarif@10.2.2': dependencies: - node-sarif-builder: 3.2.0 + node-sarif-builder: 3.4.0 '@secretlint/secretlint-rule-no-dotenv@10.2.2': dependencies: @@ -5106,65 +5358,13 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@swc/core-darwin-arm64@1.15.10': - optional: true - - '@swc/core-darwin-x64@1.15.10': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.15.10': - optional: true - - '@swc/core-linux-arm64-gnu@1.15.10': - optional: true - - '@swc/core-linux-arm64-musl@1.15.10': - optional: true - - '@swc/core-linux-x64-gnu@1.15.10': - optional: true - - '@swc/core-linux-x64-musl@1.15.10': - optional: true - - '@swc/core-win32-arm64-msvc@1.15.10': - optional: true - - '@swc/core-win32-ia32-msvc@1.15.10': - optional: true - - '@swc/core-win32-x64-msvc@1.15.10': - optional: true - - '@swc/core@1.15.10': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.25 - optionalDependencies: - '@swc/core-darwin-arm64': 1.15.10 - '@swc/core-darwin-x64': 1.15.10 - '@swc/core-linux-arm-gnueabihf': 1.15.10 - '@swc/core-linux-arm64-gnu': 1.15.10 - '@swc/core-linux-arm64-musl': 1.15.10 - '@swc/core-linux-x64-gnu': 1.15.10 - '@swc/core-linux-x64-musl': 1.15.10 - '@swc/core-win32-arm64-msvc': 1.15.10 - '@swc/core-win32-ia32-msvc': 1.15.10 - '@swc/core-win32-x64-msvc': 1.15.10 - - '@swc/counter@0.1.3': {} - - '@swc/types@0.1.25': - dependencies: - '@swc/counter': 0.1.3 - '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.28.6 + '@babel/code-frame': 7.29.0 '@babel/runtime': 7.28.6 '@types/aria-query': 5.0.4 aria-query: 5.3.0 @@ -5183,19 +5383,19 @@ snapshots: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) - '@textlint/ast-node-types@15.2.1': {} + '@textlint/ast-node-types@15.5.1': {} - '@textlint/linter-formatter@15.2.1': + '@textlint/linter-formatter@15.5.1': dependencies: '@azu/format-text': 1.0.2 '@azu/style-format': 1.0.1 - '@textlint/module-interop': 15.2.1 - '@textlint/resolver': 15.2.1 - '@textlint/types': 15.2.1 + '@textlint/module-interop': 15.5.1 + '@textlint/resolver': 15.5.1 + '@textlint/types': 15.5.1 chalk: 4.1.2 debug: 4.4.3(supports-color@8.1.1) - js-yaml: 3.14.1 - lodash: 4.17.21 + js-yaml: 4.1.1 + lodash: 4.17.23 pluralize: 2.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 @@ -5204,13 +5404,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@textlint/module-interop@15.2.1': {} + '@textlint/module-interop@15.5.1': {} - '@textlint/resolver@15.2.1': {} + '@textlint/resolver@15.5.1': {} - '@textlint/types@15.2.1': + '@textlint/types@15.5.1': dependencies: - '@textlint/ast-node-types': 15.2.1 + '@textlint/ast-node-types': 15.5.1 '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -5223,16 +5423,38 @@ snapshots: '@types/aria-query@5.0.4': {} + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.0 + '@types/cacheable-request@6.0.3': dependencies: - '@types/http-cache-semantics': 4.0.4 + '@types/http-cache-semantics': 4.2.0 '@types/keyv': 3.1.4 - '@types/node': 20.19.30 + '@types/node': 20.19.31 '@types/responselike': 1.0.3 - '@types/chai@5.2.2': + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/debug@4.1.12': dependencies: @@ -5242,7 +5464,7 @@ snapshots: '@types/estree@1.0.8': {} - '@types/http-cache-semantics@4.0.4': {} + '@types/http-cache-semantics@4.2.0': {} '@types/istanbul-lib-coverage@2.0.6': {} @@ -5250,7 +5472,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.19.30 + '@types/node': 20.19.31 '@types/mdast@4.0.4': dependencies: @@ -5260,11 +5482,11 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@20.19.30': + '@types/node@20.19.31': dependencies: undici-types: 6.21.0 - '@types/node@24.10.9': + '@types/node@24.10.10': dependencies: undici-types: 7.16.0 @@ -5284,7 +5506,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.19.30 + '@types/node': 20.19.31 '@types/retry@0.12.5': {} @@ -5300,25 +5522,25 @@ snapshots: '@types/vscode-webview@1.57.5': {} - '@types/vscode@1.107.0': {} + '@types/vscode@1.108.1': {} '@types/ws@8.18.1': dependencies: - '@types/node': 20.19.30 + '@types/node': 20.19.31 '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.19.30 + '@types/node': 20.19.31 optional: true - '@typescript-eslint/eslint-plugin@8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.53.1(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.53.1 - '@typescript-eslint/type-utils': 8.53.1(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.1(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.53.1 + '@typescript-eslint/parser': 8.54.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.54.0 eslint: 9.39.2 ignore: 7.0.5 natural-compare: 1.4.0 @@ -5327,41 +5549,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.53.1(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/parser@8.54.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.53.1 - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.53.1 + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.54.0 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.53.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.9.3) - '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.53.1': + '@typescript-eslint/scope-manager@8.54.0': dependencies: - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/visitor-keys': 8.53.1 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/visitor-keys': 8.54.0 - '@typescript-eslint/tsconfig-utils@8.53.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.53.1(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.1(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2)(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -5369,16 +5591,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.52.0': {} - - '@typescript-eslint/types@8.53.1': {} + '@typescript-eslint/types@8.54.0': {} - '@typescript-eslint/typescript-estree@8.53.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.53.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.53.1(typescript@5.9.3) - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/visitor-keys': 8.53.1 + '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/visitor-keys': 8.54.0 debug: 4.4.3(supports-color@8.1.1) minimatch: 9.0.5 semver: 7.7.3 @@ -5388,23 +5608,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.53.1(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/utils@8.54.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) - '@typescript-eslint/scope-manager': 8.53.1 - '@typescript-eslint/types': 8.53.1 - '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.54.0 + '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) eslint: 9.39.2 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.53.1': + '@typescript-eslint/visitor-keys@8.54.0': dependencies: - '@typescript-eslint/types': 8.53.1 + '@typescript-eslint/types': 8.54.0 eslint-visitor-keys: 4.2.1 - '@typespec/ts-http-runtime@0.3.0': + '@typespec/ts-http-runtime@0.3.2': dependencies: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -5471,76 +5691,81 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-react-swc@4.2.2(vite@7.3.1(@types/node@20.19.30))': + '@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@20.19.31))': dependencies: - '@rolldown/pluginutils': 1.0.0-beta.47 - '@swc/core': 1.15.10 - vite: 7.3.1(@types/node@20.19.30) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 7.3.1(@types/node@20.19.31) transitivePeerDependencies: - - '@swc/helpers' + - supports-color - '@vitejs/plugin-react-swc@4.2.2(vite@7.3.1(@types/node@24.10.9))': + '@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@24.10.10))': dependencies: - '@rolldown/pluginutils': 1.0.0-beta.47 - '@swc/core': 1.15.10 - vite: 7.3.1(@types/node@24.10.9) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 7.3.1(@types/node@24.10.10) transitivePeerDependencies: - - '@swc/helpers' + - supports-color - '@vitest/coverage-v8@4.0.16(vitest@4.0.16(@types/node@20.19.30)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@20.19.31)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.16 - ast-v8-to-istanbul: 0.3.10 + '@vitest/utils': 4.0.18 + ast-v8-to-istanbul: 0.3.11 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 magicast: 0.5.1 obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.16(@types/node@20.19.30)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - transitivePeerDependencies: - - supports-color + vitest: 4.0.18(@types/node@20.19.31)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - '@vitest/expect@4.0.16': + '@vitest/expect@4.0.18': dependencies: '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.2 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.16(vite@7.3.1(@types/node@20.19.30))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@20.19.31))': dependencies: - '@vitest/spy': 4.0.16 + '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@20.19.30) + vite: 7.3.1(@types/node@20.19.31) - '@vitest/pretty-format@4.0.16': + '@vitest/pretty-format@4.0.18': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.16': + '@vitest/runner@4.0.18': dependencies: - '@vitest/utils': 4.0.16 + '@vitest/utils': 4.0.18 pathe: 2.0.3 - '@vitest/snapshot@4.0.16': + '@vitest/snapshot@4.0.18': dependencies: - '@vitest/pretty-format': 4.0.16 + '@vitest/pretty-format': 4.0.18 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.16': {} + '@vitest/spy@4.0.18': {} - '@vitest/utils@4.0.16': + '@vitest/utils@4.0.18': dependencies: - '@vitest/pretty-format': 4.0.16 + '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 '@vscode-elements/elements@2.4.0(@vscode/codicons@0.0.44)': @@ -5566,10 +5791,10 @@ snapshots: '@types/mocha': 10.0.10 c8: 10.1.3 chokidar: 3.6.0 - enhanced-resolve: 5.18.4 - glob: 10.4.5 + enhanced-resolve: 5.19.0 + glob: 10.5.0 minimatch: 9.0.5 - mocha: 11.7.4 + mocha: 11.7.5 supports-color: 10.2.2 yargs: 17.7.2 transitivePeerDependencies: @@ -5585,59 +5810,59 @@ snapshots: transitivePeerDependencies: - supports-color - '@vscode/vsce-sign-alpine-arm64@2.0.5': + '@vscode/vsce-sign-alpine-arm64@2.0.6': optional: true - '@vscode/vsce-sign-alpine-x64@2.0.5': + '@vscode/vsce-sign-alpine-x64@2.0.6': optional: true - '@vscode/vsce-sign-darwin-arm64@2.0.5': + '@vscode/vsce-sign-darwin-arm64@2.0.6': optional: true - '@vscode/vsce-sign-darwin-x64@2.0.5': + '@vscode/vsce-sign-darwin-x64@2.0.6': optional: true - '@vscode/vsce-sign-linux-arm64@2.0.5': + '@vscode/vsce-sign-linux-arm64@2.0.6': optional: true - '@vscode/vsce-sign-linux-arm@2.0.5': + '@vscode/vsce-sign-linux-arm@2.0.6': optional: true - '@vscode/vsce-sign-linux-x64@2.0.5': + '@vscode/vsce-sign-linux-x64@2.0.6': optional: true - '@vscode/vsce-sign-win32-arm64@2.0.5': + '@vscode/vsce-sign-win32-arm64@2.0.6': optional: true - '@vscode/vsce-sign-win32-x64@2.0.5': + '@vscode/vsce-sign-win32-x64@2.0.6': optional: true - '@vscode/vsce-sign@2.0.6': + '@vscode/vsce-sign@2.0.9': optionalDependencies: - '@vscode/vsce-sign-alpine-arm64': 2.0.5 - '@vscode/vsce-sign-alpine-x64': 2.0.5 - '@vscode/vsce-sign-darwin-arm64': 2.0.5 - '@vscode/vsce-sign-darwin-x64': 2.0.5 - '@vscode/vsce-sign-linux-arm': 2.0.5 - '@vscode/vsce-sign-linux-arm64': 2.0.5 - '@vscode/vsce-sign-linux-x64': 2.0.5 - '@vscode/vsce-sign-win32-arm64': 2.0.5 - '@vscode/vsce-sign-win32-x64': 2.0.5 + '@vscode/vsce-sign-alpine-arm64': 2.0.6 + '@vscode/vsce-sign-alpine-x64': 2.0.6 + '@vscode/vsce-sign-darwin-arm64': 2.0.6 + '@vscode/vsce-sign-darwin-x64': 2.0.6 + '@vscode/vsce-sign-linux-arm': 2.0.6 + '@vscode/vsce-sign-linux-arm64': 2.0.6 + '@vscode/vsce-sign-linux-x64': 2.0.6 + '@vscode/vsce-sign-win32-arm64': 2.0.6 + '@vscode/vsce-sign-win32-x64': 2.0.6 '@vscode/vsce@3.7.1': dependencies: - '@azure/identity': 4.10.2 + '@azure/identity': 4.13.0 '@secretlint/node': 10.2.2 '@secretlint/secretlint-formatter-sarif': 10.2.2 '@secretlint/secretlint-rule-no-dotenv': 10.2.2 '@secretlint/secretlint-rule-preset-recommend': 10.2.2 - '@vscode/vsce-sign': 2.0.6 + '@vscode/vsce-sign': 2.0.9 azure-devops-node-api: 12.5.0 chalk: 4.1.2 - cheerio: 1.0.0-rc.12 + cheerio: 1.2.0 cockatiel: 3.2.1 commander: 12.1.0 - form-data: 4.0.4 + form-data: 4.0.5 glob: 11.1.0 hosted-git-info: 4.1.0 jsonc-parser: 3.3.1 @@ -5650,7 +5875,7 @@ snapshots: secretlint: 10.2.2 semver: 7.7.3 tmp: 0.2.5 - typed-rest-client: 1.8.9 + typed-rest-client: 1.8.11 url-join: 4.0.1 xml2js: 0.5.0 yauzl: 2.10.0 @@ -5666,7 +5891,7 @@ snapshots: acorn@8.15.0: {} - agent-base@7.1.3: {} + agent-base@7.1.4: {} ajv@6.12.6: dependencies: @@ -5678,18 +5903,16 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ansi-escapes@7.0.0: + ansi-escapes@7.2.0: dependencies: environment: 1.1.0 ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} - ansi-regex@6.2.2: {} ansi-styles@4.3.0: @@ -5698,8 +5921,6 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} - ansi-styles@6.2.3: {} anymatch@3.1.3: @@ -5707,10 +5928,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - argparse@2.0.1: {} aria-query@5.3.0: @@ -5780,15 +5997,17 @@ snapshots: pvutils: 1.1.5 tslib: 2.8.1 + assertion-error@2.0.1: {} + ast-types@0.13.4: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.10: + ast-v8-to-istanbul@0.3.11: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 - js-tokens: 9.0.1 + js-tokens: 10.0.0 astral-regex@2.0.0: {} @@ -5811,14 +6030,20 @@ snapshots: azure-devops-node-api@12.5.0: dependencies: tunnel: 0.0.6 - typed-rest-client: 1.8.9 + typed-rest-client: 1.8.11 + + babel-plugin-react-compiler@19.1.0-rc.3: + dependencies: + '@babel/types': 7.29.0 balanced-match@1.0.2: {} base64-js@1.5.1: optional: true - basic-ftp@5.0.5: {} + baseline-browser-mapping@2.9.19: {} + + basic-ftp@5.1.0: {} bidi-js@1.0.3: dependencies: @@ -5828,13 +6053,13 @@ snapshots: binaryextensions@6.11.0: dependencies: - editions: 6.21.0 + editions: 6.22.0 bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 optional: true boolbase@1.0.0: {} @@ -5844,12 +6069,12 @@ snapshots: boundary@2.0.0: {} - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -5859,6 +6084,14 @@ snapshots: browser-stdout@1.3.1: {} + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001767 + electron-to-chromium: 1.5.286 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + buffer-crc32@0.2.13: {} buffer-equal-constant-time@1.0.1: {} @@ -5871,11 +6104,11 @@ snapshots: bufferutil@4.1.0: dependencies: - node-gyp-build: 4.6.0 + node-gyp-build: 4.8.4 bundle-name@4.1.0: dependencies: - run-applescript: 7.0.0 + run-applescript: 7.1.0 c8@10.1.3: dependencies: @@ -5924,6 +6157,8 @@ snapshots: camelcase@6.3.0: {} + caniuse-lite@1.0.30001767: {} + ccount@2.0.1: {} chai@6.2.2: {} @@ -5942,21 +6177,25 @@ snapshots: cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 + css-select: 5.2.2 + css-what: 6.2.2 domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.0.1 + domutils: 3.2.2 - cheerio@1.0.0-rc.12: + cheerio@1.2.0: dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 - domutils: 3.0.1 - htmlparser2: 8.0.1 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.0.0 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.1.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 7.20.0 + whatwg-mimetype: 4.0.0 chokidar@3.6.0: dependencies: @@ -6001,7 +6240,7 @@ snapshots: cockatiel@3.2.1: {} - coder@https://codeload.github.com/coder/coder/tar.gz/37aecda165d8697766fd42399416afce6ad41dcb: {} + coder@https://codeload.github.com/coder/coder/tar.gz/b1e18f23985e82c5fda24610c507cab868736416: {} color-convert@2.0.1: dependencies: @@ -6015,7 +6254,7 @@ snapshots: commander@12.1.0: {} - comment-parser@1.4.1: {} + comment-parser@1.4.5: {} concat-map@0.0.1: {} @@ -6038,12 +6277,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-select@5.1.0: + css-select@5.2.2: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 5.0.3 - domutils: 3.0.1 + domutils: 3.2.2 nth-check: 2.1.1 css-tree@3.1.0: @@ -6051,7 +6290,7 @@ snapshots: mdn-data: 2.12.2 source-map-js: 1.2.1 - css-what@6.1.0: {} + css-what@6.2.2: {} cssstyle@5.3.7: dependencies: @@ -6101,7 +6340,7 @@ snapshots: decimal.js@10.6.0: {} - decode-named-character-reference@1.2.0: + decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 @@ -6114,12 +6353,12 @@ snapshots: deep-is@0.1.4: {} - default-browser-id@5.0.0: {} + default-browser-id@5.0.1: {} - default-browser@5.2.1: + default-browser@5.5.0: dependencies: bundle-name: 4.1.0 - default-browser-id: 5.0.0 + default-browser-id: 5.0.1 defer-to-connect@2.0.1: {} @@ -6149,7 +6388,7 @@ snapshots: detect-indent@7.0.2: {} - detect-libc@2.0.1: + detect-libc@2.1.2: optional: true detect-newline@4.0.1: {} @@ -6173,7 +6412,7 @@ snapshots: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - entities: 4.4.0 + entities: 4.5.0 domelementtype@2.3.0: {} @@ -6181,7 +6420,7 @@ snapshots: dependencies: domelementtype: 2.3.0 - domutils@3.0.1: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -6199,42 +6438,46 @@ snapshots: dependencies: safe-buffer: 5.2.1 - editions@6.21.0: + editions@6.22.0: dependencies: - version-range: 4.14.0 + version-range: 4.15.0 + + electron-to-chromium@1.5.286: {} - electron@40.0.0: + electron@40.1.0: dependencies: '@electron/get': 2.0.3 - '@types/node': 24.10.9 + '@types/node': 24.10.10 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color - emoji-regex@10.4.0: {} + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - end-of-stream@1.4.4: + encoding-sniffer@0.2.1: dependencies: - once: 1.4.0 - optional: true + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 end-of-stream@1.4.5: dependencies: once: 1.4.0 - enhanced-resolve@5.18.4: + enhanced-resolve@5.19.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 - entities@4.4.0: {} + entities@4.5.0: {} entities@6.0.1: {} + entities@7.0.1: {} + env-paths@2.2.1: {} environment@1.1.0: {} @@ -6400,40 +6643,40 @@ snapshots: eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: - get-tsconfig: 4.13.0 + get-tsconfig: 4.13.1 stable-hash-x: 0.2.0 optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2))(eslint@9.39.2): dependencies: debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - get-tsconfig: 4.13.0 + get-tsconfig: 4.13.1 is-bun-module: 2.0.0 stable-hash-x: 0.2.0 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2) transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.53.1(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2): dependencies: - '@typescript-eslint/types': 8.52.0 - comment-parser: 1.4.1 + '@typescript-eslint/types': 8.54.0 + comment-parser: 1.4.5 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 - minimatch: 10.1.1 + minimatch: 10.1.2 semver: 7.7.3 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.53.1(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2)(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -6454,6 +6697,18 @@ snapshots: transitivePeerDependencies: - '@types/estree' + eslint-plugin-react-compiler@19.1.0-rc.2(eslint@9.39.2): + dependencies: + '@babel/core': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.29.0) + eslint: 9.39.2 + hermes-parser: 0.25.1 + zod: 3.25.76 + zod-validation-error: 3.5.4(zod@3.25.76) + transitivePeerDependencies: + - supports-color + eslint-plugin-react-hooks@5.2.0(eslint@9.39.2): dependencies: eslint: 9.39.2 @@ -6511,20 +6766,20 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 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.4 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 transitivePeerDependencies: - supports-color @@ -6542,7 +6797,7 @@ snapshots: esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -6558,11 +6813,11 @@ snapshots: esutils@2.0.3: {} - eventsource-parser@3.0.1: {} + eventsource-parser@3.0.6: {} eventsource@4.1.0: dependencies: - eventsource-parser: 3.0.1 + eventsource-parser: 3.0.6 expand-template@2.0.3: optional: true @@ -6593,11 +6848,11 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} - fastq@1.15.0: + fastq@1.20.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fault@2.0.1: dependencies: @@ -6650,14 +6905,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.4: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -6701,9 +6948,11 @@ snapshots: generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} - get-east-asian-width@1.3.0: {} + get-east-asian-width@1.4.0: {} get-intrinsic@1.3.0: dependencies: @@ -6733,16 +6982,15 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.0: + get-tsconfig@4.13.1: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.3: + get-uri@6.0.5: dependencies: - basic-ftp: 5.0.5 + basic-ftp: 5.1.0 data-uri-to-buffer: 6.0.2 debug: 4.4.3(supports-color@8.1.1) - fs-extra: 11.3.3 transitivePeerDependencies: - supports-color @@ -6765,23 +7013,23 @@ snapshots: dependencies: tslib: 2.8.1 - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 - jackspeak: 3.4.0 + jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@11.1.0: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.1.1 + minimatch: 10.1.2 minipass: 7.1.2 - package-json-from-dist: 1.0.0 - path-scurry: 2.0.0 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.1 global-agent@3.0.0: dependencies: @@ -6795,7 +7043,7 @@ snapshots: globals@14.0.0: {} - globals@17.0.0: {} + globals@17.3.0: {} globalthis@1.0.4: dependencies: @@ -6853,6 +7101,12 @@ snapshots: he@1.2.0: {} + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 @@ -6863,24 +7117,24 @@ snapshots: html-encoding-sniffer@6.0.0: dependencies: - '@exodus/bytes': 1.10.0 + '@exodus/bytes': 1.11.0 transitivePeerDependencies: - '@noble/hashes' html-escaper@2.0.2: {} - htmlparser2@8.0.1: + htmlparser2@10.1.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.0.1 - entities: 4.4.0 + domutils: 3.2.2 + entities: 7.0.1 http-cache-semantics@4.2.0: {} http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -6892,30 +7146,34 @@ snapshots: https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color hyperdyperid@1.2.0: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: optional: true - ignore@5.2.4: {} + ignore@5.3.2: {} ignore@7.0.5: {} immediate@3.0.6: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 imurmurhash@0.1.4: {} - index-to-position@1.1.0: {} + index-to-position@1.2.0: {} inherits@2.0.4: {} @@ -6928,10 +7186,7 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + ip-address@10.1.0: {} is-array-buffer@3.0.5: dependencies: @@ -7091,14 +7346,6 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 @@ -7107,7 +7354,7 @@ snapshots: istextorbinary@9.5.0: dependencies: binaryextensions: 6.11.0 - editions: 6.21.0 + editions: 6.22.0 textextensions: 6.11.0 iterator.prototype@1.1.5: @@ -7119,7 +7366,7 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jackspeak@3.4.0: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -7129,26 +7376,19 @@ snapshots: dependencies: '@isaacs/cliui': 8.0.2 - js-tokens@4.0.0: {} - - js-tokens@9.0.1: {} + js-tokens@10.0.0: {} - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 + js-tokens@4.0.0: {} js-yaml@4.1.1: dependencies: argparse: 2.0.1 - jsbn@1.1.0: {} - jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.7.6 - '@exodus/bytes': 1.10.0 + '@asamuzakjp/dom-selector': 6.7.7 + '@exodus/bytes': 1.11.0 cssstyle: 5.3.7 data-urls: 6.0.1 decimal.js: 10.6.0 @@ -7172,6 +7412,8 @@ snapshots: - supports-color - utf-8-validate + jsesc@3.1.0: {} + json-buffer@3.0.1: {} json-schema-traverse@0.4.1: {} @@ -7204,9 +7446,9 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonwebtoken@9.0.2: + jsonwebtoken@9.0.3: dependencies: - jws: 3.2.3 + jws: 4.0.1 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -7231,21 +7473,21 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 - jwa@1.4.2: + jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.3: + jws@4.0.1: dependencies: - jwa: 1.4.2 + jwa: 2.0.1 safe-buffer: 5.2.1 keytar@7.9.0: dependencies: node-addon-api: 4.3.0 - prebuild-install: 7.1.1 + prebuild-install: 7.1.3 optional: true keyv@4.5.4: @@ -7305,7 +7547,7 @@ snapshots: lodash.truncate@4.4.2: {} - lodash@4.17.21: {} + lodash@4.17.23: {} log-symbols@4.1.0: dependencies: @@ -7329,10 +7571,12 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.1.0: {} - lru-cache@11.2.5: {} + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + lru-cache@6.0.0: dependencies: yallist: 4.0.0 @@ -7347,8 +7591,8 @@ snapshots: magicast@0.5.1: dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 source-map-js: 1.2.1 make-dir@4.0.0: @@ -7358,7 +7602,7 @@ snapshots: markdown-it@14.1.0: dependencies: argparse: 2.0.1 - entities: 4.4.0 + entities: 4.5.0 linkify-it: 5.0.0 mdurl: 2.0.0 punycode.js: 2.3.1 @@ -7384,7 +7628,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 micromark: 4.0.2 @@ -7479,7 +7723,7 @@ snapshots: mdast-util-to-string: 4.0.0 micromark-util-classify-character: 2.0.1 micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 zwitch: 2.0.4 mdast-util-to-string@4.0.0: @@ -7511,7 +7755,7 @@ snapshots: micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -7651,7 +7895,7 @@ snapshots: micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -7689,7 +7933,7 @@ snapshots: dependencies: '@types/debug': 4.1.12 debug: 4.4.3(supports-color@8.1.1) - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -7726,19 +7970,19 @@ snapshots: mimic-response@3.1.0: {} - minimatch@10.1.1: + minimatch@10.1.2: dependencies: - '@isaacs/brace-expansion': 5.0.0 + '@isaacs/brace-expansion': 5.0.1 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 - minimist@1.2.7: + minimist@1.2.8: optional: true minipass@7.1.2: {} @@ -7746,7 +7990,7 @@ snapshots: mkdirp-classic@0.5.3: optional: true - mocha@11.7.4: + mocha@11.7.5: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -7754,7 +7998,7 @@ snapshots: diff: 7.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 - glob: 10.4.5 + glob: 10.5.0 he: 1.2.0 is-path-inside: 3.0.3 js-yaml: 4.1.1 @@ -7776,7 +8020,7 @@ snapshots: nanoid@3.3.11: {} - napi-build-utils@1.0.2: + napi-build-utils@2.0.0: optional: true napi-postinstall@0.3.4: {} @@ -7785,7 +8029,7 @@ snapshots: netmask@2.0.2: {} - node-abi@3.31.0: + node-abi@3.87.0: dependencies: semver: 7.7.3 optional: true @@ -7793,9 +8037,11 @@ snapshots: node-addon-api@4.3.0: optional: true - node-gyp-build@4.6.0: {} + node-gyp-build@4.8.4: {} + + node-releases@2.0.27: {} - node-sarif-builder@3.2.0: + node-sarif-builder@3.4.0: dependencies: '@types/sarif': 2.1.7 fs-extra: 11.3.3 @@ -7862,21 +8108,21 @@ snapshots: open@10.2.0: dependencies: - default-browser: 5.2.1 + default-browser: 5.5.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 wsl-utils: 0.1.0 openpgp@6.3.0: {} - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 ora@8.2.0: dependencies: @@ -7888,7 +8134,7 @@ snapshots: log-symbols: 6.0.0 stdin-discarder: 0.2.2 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 own-keys@1.0.1: dependencies: @@ -7906,14 +8152,14 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@7.0.3: {} + p-map@7.0.4: {} pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) - get-uri: 6.0.3 + get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 pac-resolver: 7.0.1 @@ -7926,7 +8172,7 @@ snapshots: degenerator: 5.0.1 netmask: 2.0.2 - package-json-from-dist@1.0.0: {} + package-json-from-dist@1.0.1: {} package-json-validator@0.60.0: dependencies: @@ -7943,22 +8189,26 @@ snapshots: parse-json@8.3.0: dependencies: - '@babel/code-frame': 7.27.1 - index-to-position: 1.1.0 + '@babel/code-frame': 7.29.0 + index-to-position: 1.2.0 type-fest: 4.41.0 parse-semver@1.1.1: dependencies: semver: 7.7.3 - parse5-htmlparser2-tree-adapter@7.0.0: + parse5-htmlparser2-tree-adapter@7.1.0: dependencies: domhandler: 5.0.3 - parse5: 7.1.2 + parse5: 7.3.0 - parse5@7.1.2: + parse5-parser-stream@7.1.2: dependencies: - entities: 4.4.0 + parse5: 7.3.0 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 parse5@8.0.0: dependencies: @@ -7975,9 +8225,9 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-scurry@2.0.0: + path-scurry@2.0.1: dependencies: - lru-cache: 11.1.0 + lru-cache: 11.2.5 minipass: 7.1.2 path-type@6.0.0: {} @@ -8004,16 +8254,16 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - prebuild-install@7.1.1: + prebuild-install@7.1.3: dependencies: - detect-libc: 2.0.1 + detect-libc: 2.1.2 expand-template: 2.0.3 github-from-package: 0.0.0 - minimist: 1.2.7 + minimist: 1.2.8 mkdirp-classic: 0.5.3 - napi-build-utils: 1.0.2 - node-abi: 3.31.0 - pump: 3.0.0 + napi-build-utils: 2.0.0 + node-abi: 3.87.0 + pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 tar-fs: 2.1.4 @@ -8022,7 +8272,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.7.4: {} + prettier@3.8.1: {} pretty-bytes@7.1.0: {} @@ -8050,7 +8300,7 @@ snapshots: proxy-agent@6.5.0: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -8063,12 +8313,6 @@ snapshots: proxy-from-env@1.1.0: {} - pump@3.0.0: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - optional: true - pump@3.0.3: dependencies: end-of-stream: 1.4.5 @@ -8076,8 +8320,6 @@ snapshots: punycode.js@2.3.1: {} - punycode@2.3.0: {} - punycode@2.3.1: {} pvtsutils@1.3.6: @@ -8111,7 +8353,7 @@ snapshots: dependencies: deep-extend: 0.6.0 ini: 1.3.8 - minimist: 1.2.7 + minimist: 1.2.8 strip-json-comments: 2.0.1 optional: true @@ -8124,6 +8366,8 @@ snapshots: react-is@17.0.2: {} + react-refresh@0.17.0: {} + react@19.2.4: {} read-pkg@9.0.1: @@ -8148,7 +8392,7 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.0: + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 @@ -8210,7 +8454,7 @@ snapshots: retry@0.12.0: {} - reusify@1.0.4: {} + reusify@1.1.0: {} roarr@2.15.4: dependencies: @@ -8222,38 +8466,38 @@ snapshots: sprintf-js: 1.1.3 optional: true - rollup@4.55.1: + rollup@4.57.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.1 - '@rollup/rollup-android-arm64': 4.55.1 - '@rollup/rollup-darwin-arm64': 4.55.1 - '@rollup/rollup-darwin-x64': 4.55.1 - '@rollup/rollup-freebsd-arm64': 4.55.1 - '@rollup/rollup-freebsd-x64': 4.55.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 - '@rollup/rollup-linux-arm-musleabihf': 4.55.1 - '@rollup/rollup-linux-arm64-gnu': 4.55.1 - '@rollup/rollup-linux-arm64-musl': 4.55.1 - '@rollup/rollup-linux-loong64-gnu': 4.55.1 - '@rollup/rollup-linux-loong64-musl': 4.55.1 - '@rollup/rollup-linux-ppc64-gnu': 4.55.1 - '@rollup/rollup-linux-ppc64-musl': 4.55.1 - '@rollup/rollup-linux-riscv64-gnu': 4.55.1 - '@rollup/rollup-linux-riscv64-musl': 4.55.1 - '@rollup/rollup-linux-s390x-gnu': 4.55.1 - '@rollup/rollup-linux-x64-gnu': 4.55.1 - '@rollup/rollup-linux-x64-musl': 4.55.1 - '@rollup/rollup-openbsd-x64': 4.55.1 - '@rollup/rollup-openharmony-arm64': 4.55.1 - '@rollup/rollup-win32-arm64-msvc': 4.55.1 - '@rollup/rollup-win32-ia32-msvc': 4.55.1 - '@rollup/rollup-win32-x64-gnu': 4.55.1 - '@rollup/rollup-win32-x64-msvc': 4.55.1 + '@rollup/rollup-android-arm-eabi': 4.57.1 + '@rollup/rollup-android-arm64': 4.57.1 + '@rollup/rollup-darwin-arm64': 4.57.1 + '@rollup/rollup-darwin-x64': 4.57.1 + '@rollup/rollup-freebsd-arm64': 4.57.1 + '@rollup/rollup-freebsd-x64': 4.57.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 + '@rollup/rollup-linux-arm64-musl': 4.57.1 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 + '@rollup/rollup-linux-loong64-musl': 4.57.1 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 + '@rollup/rollup-linux-x64-gnu': 4.57.1 + '@rollup/rollup-linux-x64-musl': 4.57.1 + '@rollup/rollup-openbsd-x64': 4.57.1 + '@rollup/rollup-openharmony-arm64': 4.57.1 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 + '@rollup/rollup-win32-x64-gnu': 4.57.1 + '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 - run-applescript@7.0.0: {} + run-applescript@7.1.0: {} run-parallel@1.2.0: dependencies: @@ -8286,7 +8530,9 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - sax@1.2.4: {} + safer-buffer@2.1.2: {} + + sax@1.4.4: {} saxes@6.0.0: dependencies: @@ -8408,15 +8654,15 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) - socks: 2.8.6 + socks: 2.8.7 transitivePeerDependencies: - supports-color - socks@2.8.6: + socks@2.8.7: dependencies: - ip-address: 9.0.5 + ip-address: 10.1.0 smart-buffer: 4.2.0 sort-object-keys@2.1.0: {} @@ -8450,9 +8696,8 @@ snapshots: spdx-license-ids@3.0.22: {} - sprintf-js@1.0.3: {} - - sprintf-js@1.1.3: {} + sprintf-js@1.1.3: + optional: true stable-hash-x@0.2.0: {} @@ -8477,13 +8722,13 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string-width@7.2.0: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 string.prototype.matchall@4.0.12: dependencies: @@ -8542,10 +8787,6 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.0.1 - strip-ansi@7.1.2: dependencies: ansi-regex: 6.2.2 @@ -8598,7 +8839,7 @@ snapshots: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.0 + pump: 3.0.3 tar-stream: 2.2.0 optional: true @@ -8608,25 +8849,25 @@ snapshots: end-of-stream: 1.4.5 fs-constants: 1.0.0 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.2 optional: true terminal-link@4.0.0: dependencies: - ansi-escapes: 7.0.0 + ansi-escapes: 7.2.0 supports-hyperlinks: 3.2.0 test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 + glob: 10.5.0 minimatch: 9.0.5 text-table@0.2.0: {} textextensions@6.11.0: dependencies: - editions: 6.21.0 + editions: 6.22.0 thingies@2.5.0(tslib@2.8.1): dependencies: @@ -8643,11 +8884,11 @@ snapshots: tinyrainbow@3.0.3: {} - tldts-core@7.0.19: {} + tldts-core@7.0.21: {} - tldts@7.0.19: + tldts@7.0.21: dependencies: - tldts-core: 7.0.19 + tldts-core: 7.0.21 tmp@0.2.5: {} @@ -8657,7 +8898,7 @@ snapshots: tough-cookie@6.0.0: dependencies: - tldts: 7.0.19 + tldts: 7.0.21 tr46@6.0.0: dependencies: @@ -8730,18 +8971,18 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typed-rest-client@1.8.9: + typed-rest-client@1.8.11: dependencies: qs: 6.14.1 tunnel: 0.0.6 - underscore: 1.13.6 + underscore: 1.13.7 - typescript-eslint@8.53.1(eslint@9.39.2)(typescript@5.9.3): + typescript-eslint@8.54.0(eslint@9.39.2)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.53.1(@typescript-eslint/parser@8.53.1(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/parser': 8.53.1(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.53.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.1(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/parser': 8.54.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2)(typescript@5.9.3) eslint: 9.39.2 typescript: 5.9.3 transitivePeerDependencies: @@ -8760,12 +9001,14 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - underscore@1.13.6: {} + underscore@1.13.7: {} undici-types@6.21.0: {} undici-types@7.16.0: {} + undici@7.20.0: {} + unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} @@ -8783,7 +9026,7 @@ snapshots: '@types/unist': 3.0.3 unist-util-is: 6.0.1 - unist-util-visit@5.0.0: + unist-util-visit@5.1.0: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.1 @@ -8817,15 +9060,21 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 url-join@4.0.1: {} utf-8-validate@6.0.6: dependencies: - node-gyp-build: 4.6.0 + node-gyp-build: 4.8.4 util-deprecate@1.0.2: {} @@ -8844,41 +9093,41 @@ snapshots: validate-npm-package-name@7.0.2: {} - version-range@4.14.0: {} + version-range@4.15.0: {} - vite@7.3.1(@types/node@20.19.30): + vite@7.3.1(@types/node@20.19.31): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.55.1 + rollup: 4.57.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 20.19.30 + '@types/node': 20.19.31 fsevents: 2.3.3 - vite@7.3.1(@types/node@24.10.9): + vite@7.3.1(@types/node@24.10.10): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.55.1 + rollup: 4.57.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.10 fsevents: 2.3.3 - vitest@4.0.16(@types/node@20.19.30)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)): + vitest@4.0.18(@types/node@20.19.31)(jsdom@27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)): dependencies: - '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(vite@7.3.1(@types/node@20.19.30)) - '@vitest/pretty-format': 4.0.16 - '@vitest/runner': 4.0.16 - '@vitest/snapshot': 4.0.16 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 + '@vitest/expect': 4.0.18 + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@20.19.31)) + '@vitest/pretty-format': 4.0.18 + '@vitest/runner': 4.0.18 + '@vitest/snapshot': 4.0.18 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 es-module-lexer: 1.7.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -8890,10 +9139,10 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@20.19.30) + vite: 7.3.1(@types/node@20.19.31) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.19.30 + '@types/node': 20.19.31 jsdom: 27.4.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - jiti @@ -8914,6 +9163,10 @@ snapshots: webidl-conversions@8.0.1: {} + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-mimetype@4.0.0: {} whatwg-mimetype@5.0.0: {} @@ -8973,6 +9226,8 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + word-wrap@1.2.5: {} + workerpool@9.3.4: {} wrap-ansi@7.0.0: @@ -8983,9 +9238,9 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrap-ansi@9.0.2: dependencies: @@ -9008,7 +9263,7 @@ snapshots: xml2js@0.5.0: dependencies: - sax: 1.2.4 + sax: 1.4.4 xmlbuilder: 11.0.1 xmlbuilder@11.0.1: {} @@ -9017,6 +9272,8 @@ snapshots: y18n@5.0.8: {} + yallist@3.1.1: {} + yallist@4.0.0: {} yargs-parser@21.1.1: {} @@ -9060,6 +9317,12 @@ snapshots: yocto-queue@0.1.0: {} + zod-validation-error@3.5.4(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod@3.25.76: {} + zod@4.3.6: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c209e1e1..ca01f7d3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,16 +8,18 @@ catalogMode: strict catalog: typescript: ^5.9.3 vite: ^7.3.1 - "@vitejs/plugin-react-swc": ^4.2.2 + "@vitejs/plugin-react": ^4.5.2 + babel-plugin-react-compiler: ^19.1.0-rc.2 + eslint-plugin-react-compiler: ^19.1.0-rc.2 react: ^19.2.4 react-dom: ^19.2.4 "@types/react": ^19.2.10 "@types/react-dom": ^19.2.3 "@vscode-elements/react-elements": ^2.4.0 + "@vscode/codicons": ^0.0.44 # Native modules allowed to run install scripts (pnpm blocks by default for security) onlyBuiltDependencies: - - "@swc/core" # vite - "@vscode/vsce-sign" # vsce signing - bufferutil # ws perf - electron # tests diff --git a/src/extension.ts b/src/extension.ts index 15c903d7..7e16019c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -188,12 +188,18 @@ export async function activate(ctx: vscode.ExtensionContext): Promise { // controlled by contexts, see `when` in the package.json. const commands = new Commands(serviceContainer, client, deploymentManager); - // Register Tasks webview panel - const tasksProvider = new TasksPanel(ctx.extensionUri); + // Register Tasks webview panel with dependencies + const tasksPanel = new TasksPanel( + ctx.extensionUri, + client, + output, + () => client.getAxiosInstance().defaults.baseURL, + ); ctx.subscriptions.push( - vscode.window.registerWebviewViewProvider( - TasksPanel.viewType, - tasksProvider, + tasksPanel, + vscode.window.registerWebviewViewProvider(TasksPanel.viewType, tasksPanel), + vscode.commands.registerCommand("coder.tasks.refresh", () => + tasksPanel.refresh(), ), ); diff --git a/src/webviews/tasks/TasksPanel.ts b/src/webviews/tasks/TasksPanel.ts index 9b071604..6bd1e181 100644 --- a/src/webviews/tasks/TasksPanel.ts +++ b/src/webviews/tasks/TasksPanel.ts @@ -1,19 +1,123 @@ +import { isAxiosError } from "axios"; import * as vscode from "vscode"; +import { + getTaskActions, + getTaskUIState, + type LogsStatus, + type TaskDetails, + type TaskTemplate, + type TaskUIState, +} from "@repo/webview-shared"; + +import { type CoderApi } from "../../api/coderApi"; +import { toError } from "../../error/errorUtils"; +import { type Logger } from "../../logging/logger"; import { getWebviewHtml } from "../util"; import type { - TasksExtensionMessage, - TasksWebviewMessage, -} from "@repo/webview-shared"; + Preset, + Task, + TaskLogEntry, + Template, +} from "coder/site/src/api/typesGenerated"; -export class TasksPanel implements vscode.WebviewViewProvider { +// ============================================================================= +// IPC Message Types +// ============================================================================= + +/** Request from webview expecting a response */ +interface IpcRequest { + requestId: string; + method: string; + params?: unknown; +} + +/** Response sent back to webview */ +interface IpcResponse { + requestId: string; + method: string; + success: boolean; + data?: unknown; + error?: string; +} + +/** Push notification to webview (no requestId) */ +interface IpcNotification { + type: string; + data?: unknown; +} + +/** Check if message is a request (has requestId and method) */ +function isIpcRequest(msg: unknown): msg is IpcRequest { + return ( + typeof msg === "object" && + msg !== null && + "requestId" in msg && + typeof (msg as IpcRequest).requestId === "string" && + "method" in msg && + typeof (msg as IpcRequest).method === "string" + ); +} + +/** Check if message is a command (has method but no requestId) */ +function isIpcCommand( + msg: unknown, +): msg is { method: string; params?: unknown } { + return ( + typeof msg === "object" && + msg !== null && + !("requestId" in msg) && + "method" in msg && + typeof (msg as { method: string }).method === "string" + ); +} + +export class TasksPanel + implements vscode.WebviewViewProvider, vscode.Disposable +{ public static readonly viewType = "coder.tasksPanel"; private view?: vscode.WebviewView; private disposables: vscode.Disposable[] = []; - constructor(private readonly extensionUri: vscode.Uri) {} + // State (extension owns this) + private tasks: Task[] = []; + private templates: TaskTemplate[] = []; + private tasksSupported = true; + + // Template cache + private templatesCache: TaskTemplate[] = []; + private templatesCacheTime = 0; + private readonly CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes + + // Log cache - stores logs per task to avoid refetching for stable states + private logCache = new Map< + string, + { + logs: TaskLogEntry[]; + status: LogsStatus; + lastLogId: number | null; + taskUIState: TaskUIState; + } + >(); + + constructor( + private readonly extensionUri: vscode.Uri, + private readonly client: CoderApi, + private readonly logger: Logger, + private readonly getBaseUrl: () => string | undefined, + ) {} + + public showCreateForm(): void { + this.sendNotification({ type: "showCreateForm" }); + } + + public refresh(): void { + this.templatesCacheTime = 0; + this.logCache.clear(); + this.sendNotification({ type: "refresh" }); + } resolveWebviewView( webviewView: vscode.WebviewView, @@ -29,17 +133,17 @@ export class TasksPanel implements vscode.WebviewViewProvider { ], }; - // Set up message handling before loading HTML to avoid race conditions - this.disposables.forEach((d) => { + // Clean up old disposables + for (const d of this.disposables) { d.dispose(); - }); + } this.disposables = []; + + // Set up message handling this.disposables.push( - webviewView.webview.onDidReceiveMessage( - (message: TasksWebviewMessage) => { - this.handleMessage(message); - }, - ), + webviewView.webview.onDidReceiveMessage((message: unknown) => { + void this.handleMessage(message); + }), ); webviewView.webview.html = getWebviewHtml( @@ -50,25 +154,432 @@ export class TasksPanel implements vscode.WebviewViewProvider { ); webviewView.onDidDispose(() => { - this.disposables.forEach((d) => { + for (const d of this.disposables) { d.dispose(); - }); + } this.disposables = []; }); } - private handleMessage(message: TasksWebviewMessage): void { - switch (message.type) { - case "ready": - this.sendMessage({ type: "init" }); - break; - case "refresh": - // Handle refresh - break; + private async handleMessage(message: unknown): Promise { + if (isIpcRequest(message)) { + await this.handleRequest(message); + } else if (isIpcCommand(message)) { + await this.handleCommand(message); + } + // Other messages are ignored + } + + private async handleRequest(message: IpcRequest): Promise { + const { requestId, method, params } = message; + + try { + const data = await this.executeMethod(method, params); + this.sendResponse({ requestId, method, success: true, data }); + } catch (err) { + this.logger.warn(`Request ${method} failed`, err); + this.sendResponse({ + requestId, + method, + success: false, + error: toError(err).message, + }); + } + } + + private async handleCommand(message: { + method: string; + params?: unknown; + }): Promise { + const { method, params } = message; + try { + await this.executeMethod(method, params); + } catch (err) { + this.logger.warn(`Command ${method} failed`, err); + } + } + + private async executeMethod( + method: string, + params: unknown, + ): Promise { + switch (method) { + case "init": + await Promise.all([this.fetchTasks(), this.fetchTemplates()]); + return { + tasks: this.tasks, + templates: this.templates, + baseUrl: this.getBaseUrl() || "", + tasksSupported: this.tasksSupported, + }; + + case "getTasks": + await this.fetchTasks(); + return this.tasks; + + case "getTemplates": + await this.fetchTemplates(); + return this.templates; + + case "getTask": { + const { taskId } = params as { taskId: string }; + return await this.client.getTask("me", taskId); + } + + case "getTaskDetails": { + const { taskId } = params as { taskId: string }; + return await this.getTaskDetails(taskId); + } + + case "createTask": { + const { templateVersionId, prompt, presetId } = params as { + templateVersionId: string; + prompt: string; + presetId?: string; + }; + return await this.createTask(templateVersionId, prompt, presetId); + } + + case "deleteTask": { + const { taskId } = params as { taskId: string }; + await this.deleteTask(taskId); + return; + } + + case "pauseTask": { + const { taskId } = params as { taskId: string }; + await this.pauseTask(taskId); + return; + } + + case "resumeTask": { + const { taskId } = params as { taskId: string }; + await this.resumeTask(taskId); + return; + } + + case "viewInCoder": { + const { taskId } = params as { taskId: string }; + this.viewInCoder(taskId); + return; + } + + case "downloadLogs": { + const { taskId } = params as { taskId: string }; + await this.downloadLogs(taskId); + return; + } + + case "sendTaskMessage": { + const { taskId, message } = params as { + taskId: string; + message: string; + }; + this.sendTaskMessage(taskId, message); + return; + } + + case "viewLogs": { + const { taskId } = params as { taskId: string }; + this.viewTaskLogs(taskId); + return; + } + + default: + throw new Error(`Unknown method: ${method}`); } } - private sendMessage(message: TasksExtensionMessage): void { - void this.view?.webview.postMessage(message); + private async fetchTasks(): Promise { + const baseUrl = this.getBaseUrl(); + if (!baseUrl) { + this.tasks = []; + return; + } + + try { + const tasks = await this.client.getTasks({ owner: "me" }); + this.tasks = [...tasks]; + this.tasksSupported = true; + this.cleanupStaleCache(); + } catch (err) { + if (isAxiosError(err) && err.response?.status === 404) { + this.tasksSupported = false; + this.tasks = []; + return; + } + throw err; + } + } + + private cleanupStaleCache(): void { + const activeTaskIds = new Set(this.tasks.map((t) => t.id)); + for (const taskId of this.logCache.keys()) { + if (!activeTaskIds.has(taskId)) { + this.logCache.delete(taskId); + } + } + } + + private async fetchTemplates(forceRefresh = false): Promise { + const baseUrl = this.getBaseUrl(); + if (!baseUrl) { + this.templates = []; + return; + } + + // Use cache if valid and not forcing refresh + const now = Date.now(); + if ( + !forceRefresh && + this.templatesCache.length > 0 && + now - this.templatesCacheTime < this.CACHE_TTL_MS + ) { + this.templates = this.templatesCache; + return; + } + + try { + const templates = await this.client.getTemplates({}); + + // Fetch presets for each template in parallel + const templatesWithPresets = await Promise.all( + templates.map(async (template: Template): Promise => { + let presets: Preset[] = []; + try { + const fetchedPresets = await this.client.getTemplateVersionPresets( + template.active_version_id, + ); + presets = fetchedPresets ?? []; + } catch { + // Presets may not be available for all templates + } + + return { + id: template.id, + name: template.name, + displayName: template.display_name || template.name, + icon: template.icon, + activeVersionId: template.active_version_id, + presets: presets.map((p) => ({ + id: p.ID, + name: p.Name, + isDefault: p.Default, + })), + }; + }), + ); + + this.templates = templatesWithPresets; + this.templatesCache = templatesWithPresets; + this.templatesCacheTime = now; + } catch (err) { + this.logger.warn("Failed to fetch templates", err); + this.templates = []; + } + } + + private async fetchTaskLogs( + user: string, + taskId: string, + ): Promise<{ + logs: TaskLogEntry[]; + status: "ok" | "not_available" | "error"; + }> { + try { + const response = await this.client + .getAxiosInstance() + .get<{ logs: TaskLogEntry[] }>(`/api/v2/tasks/${user}/${taskId}/logs`); + return { logs: response.data.logs ?? [], status: "ok" }; + } catch (err) { + // 400 means logs not available for this task state + if (isAxiosError(err) && err.response?.status === 400) { + return { logs: [], status: "not_available" }; + } + this.logger.warn("Failed to fetch task logs", err); + return { logs: [], status: "error" }; + } + } + + private async getTaskDetails(taskId: string): Promise { + // Always fetch task to get current state + const task = await this.client.getTask("me", taskId); + const uiState = getTaskUIState(task); + const cached = this.logCache.get(taskId); + + // Stable states where logs won't change: complete, error, paused + const isStableState = + uiState === "complete" || uiState === "error" || uiState === "paused"; + + // Use cached logs if: + // 1. We have a cache entry for this task + // 2. Task is in a stable state + // 3. Cache was captured in the same stable state (logs won't change) + const canUseCache = + cached && isStableState && cached.taskUIState === uiState; + + let logs: TaskLogEntry[]; + let logsStatus: LogsStatus; + + if (canUseCache) { + logs = cached.logs; + logsStatus = cached.status; + } else { + const logsResult = await this.fetchTaskLogs("me", taskId); + logs = logsResult.logs; + logsStatus = logsResult.status; + + // Update cache + const lastLogId = logs.length > 0 ? logs[logs.length - 1].id : null; + this.logCache.set(taskId, { + logs, + status: logsStatus, + lastLogId, + taskUIState: uiState, + }); + } + + const actions = getTaskActions(task); + return { + task, + logs, + logsStatus, + ...actions, + }; + } + + private async createTask( + templateVersionId: string, + prompt: string, + presetId?: string, + ): Promise { + const task = await this.client.createTask("me", { + template_version_id: templateVersionId, + template_version_preset_id: presetId, + input: prompt, + }); + + await this.fetchTasks(); + this.sendNotification({ type: "tasksUpdated", data: this.tasks }); + void vscode.window.showInformationMessage("Task created successfully"); + + return task; + } + + private async deleteTask(taskId: string): Promise { + await this.client.deleteTask("me", taskId); + this.logCache.delete(taskId); + await this.fetchTasks(); + this.sendNotification({ type: "tasksUpdated", data: this.tasks }); + void vscode.window.showInformationMessage("Task deleted successfully"); + } + + private async pauseTask(taskId: string): Promise { + const task = this.tasks.find((t) => t.id === taskId); + if (!task?.workspace_id) { + throw new Error("Task has no workspace"); + } + + await this.client.stopWorkspace(task.workspace_id); + + await this.fetchTasks(); + this.sendNotification({ type: "tasksUpdated", data: this.tasks }); + void vscode.window.showInformationMessage("Task paused"); + } + + private async resumeTask(taskId: string): Promise { + const task = this.tasks.find((t) => t.id === taskId); + if (!task?.workspace_id) { + throw new Error("Task has no workspace"); + } + + await this.client.startWorkspace( + task.workspace_id, + task.template_version_id, + ); + + await this.fetchTasks(); + this.sendNotification({ type: "tasksUpdated", data: this.tasks }); + void vscode.window.showInformationMessage("Task resumed"); + } + + private viewInCoder(taskId: string): void { + const baseUrl = this.getBaseUrl(); + if (!baseUrl) { + return; + } + + const task = this.tasks.find((t) => t.id === taskId); + if (!task) { + return; + } + + const url = `${baseUrl}/tasks/${task.owner_name}/${task.id}`; + void vscode.env.openExternal(vscode.Uri.parse(url)); + } + + private sendTaskMessage(taskId: string, message: string): void { + this.logger.info(`Sending message to task ${taskId}: ${message}`); + void vscode.window.showInformationMessage( + "Follow-up messages are not yet supported by the API", + ); + } + + private viewTaskLogs(taskId: string): void { + const baseUrl = this.getBaseUrl(); + if (!baseUrl) { + return; + } + + const task = this.tasks.find((t) => t.id === taskId); + if (!task) { + return; + } + + if (task.workspace_name && task.workspace_build_number) { + const url = `${baseUrl}/@${task.owner_name}/${task.workspace_name}/builds/${task.workspace_build_number}`; + void vscode.env.openExternal(vscode.Uri.parse(url)); + } else { + const url = `${baseUrl}/tasks/${task.owner_name}/${task.id}`; + void vscode.env.openExternal(vscode.Uri.parse(url)); + } + } + + private async downloadLogs(taskId: string): Promise { + const logsResult = await this.fetchTaskLogs("me", taskId); + if (logsResult.logs.length === 0) { + void vscode.window.showWarningMessage("No logs available to download"); + return; + } + + const content = logsResult.logs + .map((log) => `[${log.time}] [${log.type}] ${log.content}`) + .join("\n"); + + const uri = await vscode.window.showSaveDialog({ + defaultUri: vscode.Uri.file(`task-${taskId}-logs.txt`), + filters: { "Text files": ["txt"], "All files": ["*"] }, + }); + + if (uri) { + await vscode.workspace.fs.writeFile(uri, Buffer.from(content, "utf-8")); + void vscode.window.showInformationMessage(`Logs saved to ${uri.fsPath}`); + } + } + + private sendResponse(response: IpcResponse): void { + void this.view?.webview.postMessage(response); + } + + private sendNotification(notification: IpcNotification): void { + void this.view?.webview.postMessage(notification); + } + + dispose(): void { + for (const d of this.disposables) { + d.dispose(); + } + this.disposables = []; + this.logCache.clear(); } } diff --git a/src/webviews/util.ts b/src/webviews/util.ts index eb663a9b..7caa7ba2 100644 --- a/src/webviews/util.ts +++ b/src/webviews/util.ts @@ -24,6 +24,8 @@ export function getWebviewHtml( vscode.Uri.joinPath(baseUri, "index.css"), ); + // The vscode-elements library looks for a link element with this specific ID + // to load the codicons font inside its shadow DOM components return ` @@ -31,7 +33,7 @@ export function getWebviewHtml( ${title} - +

diff --git a/test/unit/webviews/tasks/TasksPanel.test.ts b/test/unit/webviews/tasks/TasksPanel.test.ts new file mode 100644 index 00000000..8aaaed4d --- /dev/null +++ b/test/unit/webviews/tasks/TasksPanel.test.ts @@ -0,0 +1,636 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import * as vscode from "vscode"; + +import { TasksPanel } from "@/webviews/tasks/TasksPanel"; + +import { createMockLogger } from "../../../mocks/testHelpers"; + +import type { Task, Template, Preset } from "coder/site/src/api/typesGenerated"; + +// Mock vscode +vi.mock("vscode", () => { + const EventEmitter = class { + event = vi.fn(); + fire = vi.fn(); + dispose = vi.fn(); + }; + + return { + Uri: { + joinPath: vi.fn((_base, ...pathSegments: string[]) => ({ + fsPath: `/mock/path/${pathSegments.join("/")}`, + toString: () => `/mock/path/${pathSegments.join("/")}`, + })), + parse: vi.fn((str: string) => ({ toString: () => str })), + file: vi.fn((path: string) => ({ + fsPath: path, + toString: () => path, + })), + }, + EventEmitter, + window: { + showInformationMessage: vi.fn(), + showWarningMessage: vi.fn(), + showSaveDialog: vi.fn(), + }, + env: { + clipboard: { + writeText: vi.fn(), + }, + openExternal: vi.fn(), + }, + workspace: { + fs: { + writeFile: vi.fn(), + }, + }, + }; +}); + +interface MockWebview { + options: { enableScripts: boolean; localResourceRoots: unknown[] }; + html: string; + postMessage: ReturnType; + onDidReceiveMessage: ReturnType; + asWebviewUri: ReturnType; +} + +interface MockWebviewView { + webview: MockWebview; + visible: boolean; + onDidChangeVisibility: ReturnType; + onDidDispose: ReturnType; +} + +function createMockWebviewView(): MockWebviewView { + const view: MockWebviewView = { + webview: { + options: { enableScripts: false, localResourceRoots: [] }, + html: "", + postMessage: vi.fn().mockResolvedValue(true), + onDidReceiveMessage: vi.fn(), + asWebviewUri: vi.fn((uri: { fsPath: string }) => ({ + toString: () => uri.fsPath, + })), + }, + visible: true, + onDidChangeVisibility: vi.fn(), + onDidDispose: vi.fn(), + }; + return view; +} + +interface MockCoderApiForTasks { + getTasks: ReturnType; + getTask: ReturnType; + createTask: ReturnType; + deleteTask: ReturnType; + getTemplates: ReturnType; + getTemplateVersionPresets: ReturnType; + startWorkspace: ReturnType; + stopWorkspace: ReturnType; + getAxiosInstance: () => { + defaults: { baseURL: string | undefined }; + get: ReturnType; + }; +} + +function createMockClient(): MockCoderApiForTasks { + let baseURL: string | undefined = "https://coder.example.com"; + return { + getTasks: vi.fn().mockResolvedValue([]), + getTask: vi.fn(), + createTask: vi.fn(), + deleteTask: vi.fn(), + getTemplates: vi.fn().mockResolvedValue([]), + getTemplateVersionPresets: vi.fn().mockResolvedValue([]), + startWorkspace: vi.fn(), + stopWorkspace: vi.fn(), + getAxiosInstance: () => ({ + defaults: { + get baseURL() { + return baseURL; + }, + set baseURL(value: string | undefined) { + baseURL = value; + }, + }, + get: vi.fn().mockResolvedValue({ data: { logs: [] } }), + }), + }; +} + +function createMockTask(overrides: Partial = {}): Task { + return { + id: "task-1", + organization_id: "org-1", + owner_id: "owner-1", + owner_name: "testuser", + name: "test-task", + display_name: "Test Task", + template_id: "template-1", + template_version_id: "version-1", + template_name: "test-template", + template_display_name: "Test Template", + template_icon: "/icon.svg", + workspace_id: "workspace-1", + workspace_name: "test-workspace", + workspace_status: "running", + workspace_agent_id: null, + workspace_agent_lifecycle: null, + workspace_agent_health: null, + workspace_app_id: null, + initial_prompt: "Test prompt", + status: "active", + current_state: { + timestamp: "2024-01-01T00:00:00Z", + state: "working", + message: "Processing", + uri: "", + }, + created_at: "2024-01-01T00:00:00Z", + updated_at: "2024-01-01T00:00:00Z", + ...overrides, + }; +} + +function createMockTemplate(overrides: Partial