diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index e5a99224..4cb709d1 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -26,7 +26,9 @@ jobs:
- run: pnpm install
- - run: pnpm prettier --check .
+ - run: pnpm typecheck
+
+ - run: pnpm fmt:check
- run: pnpm lint
diff --git a/esbuild.mjs b/esbuild.mjs
index d4be8e5e..54fb4a1d 100644
--- a/esbuild.mjs
+++ b/esbuild.mjs
@@ -27,9 +27,9 @@ 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",
},
external: ["vscode"],
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 6633ebd4..a47387b6 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: {
@@ -189,7 +191,7 @@ export default defineConfig(
},
},
rules: {
- // TS rules already applied above; add React-specific rules
+ ...reactCompilerPlugin.configs.recommended.rules,
...reactPlugin.configs.recommended.rules,
...reactPlugin.configs["jsx-runtime"].rules, // React 17+ JSX transform
...reactHooksPlugin.configs.recommended.rules,
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..387dd1ce 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,7 @@
"test:extension": "ELECTRON_RUN_AS_NODE=1 electron node_modules/vitest/vitest.mjs --project extension",
"test:integration": "tsc -p test --outDir out && node esbuild.mjs && vscode-test",
"test:webview": "vitest --project webview",
+ "typecheck": "concurrently -g \"tsc --noEmit\" \"tsc --noEmit -p test\"",
"vscode:prepublish": "pnpm build:production",
"watch": "pnpm watch:all",
"watch:all": "concurrently -n extension,webviews \"pnpm watch:extension\" \"pnpm watch:webviews\"",
@@ -182,6 +183,11 @@
"id": "coder",
"title": "Coder Remote",
"icon": "media/logo-white.svg"
+ },
+ {
+ "id": "coderTasks",
+ "title": "Coder Tasks",
+ "icon": "media/tasks-logo.svg"
}
]
},
@@ -199,13 +205,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 +316,12 @@
"command": "coder.manageCredentials",
"title": "Manage Credentials",
"category": "Coder"
+ },
+ {
+ "command": "coder.tasks.refresh",
+ "title": "Refresh Tasks",
+ "category": "Coder",
+ "icon": "$(refresh)"
}
],
"menus": {
@@ -370,6 +384,10 @@
},
{
"command": "coder.manageCredentials"
+ },
+ {
+ "command": "coder.tasks.refresh",
+ "when": "false"
}
],
"view/title": [
@@ -404,6 +422,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": [
@@ -448,6 +471,7 @@
},
"dependencies": {
"@peculiar/x509": "^1.14.3",
+ "@repo/shared": "workspace:*",
"axios": "1.13.4",
"date-fns": "^4.1.0",
"eventsource": "^4.1.0",
@@ -478,11 +502,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 +520,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",
@@ -512,7 +538,7 @@
"extensionPack": [
"ms-vscode-remote.remote-ssh"
],
- "packageManager": "pnpm@10.27.0",
+ "packageManager": "pnpm@10.28.2",
"engines": {
"vscode": "^1.95.0",
"node": ">= 20"
diff --git a/packages/shared/package.json b/packages/shared/package.json
new file mode 100644
index 00000000..dd1e801e
--- /dev/null
+++ b/packages/shared/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "@repo/shared",
+ "version": "1.0.0",
+ "description": "Shared types and utilities for extension and webviews",
+ "private": true,
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./src/index.ts",
+ "default": "./src/index.ts"
+ }
+ },
+ "devDependencies": {
+ "typescript": "catalog:"
+ }
+}
diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts
new file mode 100644
index 00000000..980fec78
--- /dev/null
+++ b/packages/shared/src/index.ts
@@ -0,0 +1,6 @@
+// IPC protocol types
+export * from "./ipc/protocol";
+
+// Tasks types and API
+export * from "./tasks/types";
+export * from "./tasks/api";
diff --git a/packages/shared/src/ipc/protocol.ts b/packages/shared/src/ipc/protocol.ts
new file mode 100644
index 00000000..12bf3e4e
--- /dev/null
+++ b/packages/shared/src/ipc/protocol.ts
@@ -0,0 +1,100 @@
+/**
+ * Type-safe IPC protocol for VS Code webview communication.
+ *
+ * Inspired by tRPC's approach: types are carried in a phantom `_types` property
+ * that exists only for TypeScript inference, not at runtime.
+ */
+
+// --- Message definitions ---
+
+/** Request definition: params P, response R */
+export interface RequestDef
{
+ readonly method: string;
+ /** @internal Phantom types for inference - not present at runtime */
+ readonly _types?: { params: P; response: R };
+}
+
+/** Command definition: params P, no response */
+export interface CommandDef
{
+ readonly method: string;
+ /** @internal Phantom type for inference - not present at runtime */
+ readonly _types?: { params: P };
+}
+
+/** Notification definition: data D (extension to webview) */
+export interface NotificationDef {
+ readonly method: string;
+ /** @internal Phantom type for inference - not present at runtime */
+ readonly _types?: { data: D };
+}
+
+// --- Factory functions ---
+
+/** Define a request with typed params and response */
+export function defineRequest(
+ method: string,
+): RequestDef
{
+ return { method } as RequestDef
;
+}
+
+/** Define a fire-and-forget command */
+export function defineCommand
(method: string): CommandDef
{
+ return { method } as CommandDef
;
+}
+
+/** Define a push notification (extension to webview) */
+export function defineNotification(
+ method: string,
+): NotificationDef {
+ return { method } as NotificationDef;
+}
+
+// --- Wire format ---
+
+/** Request from webview to extension */
+export interface IpcRequest {
+ readonly requestId: string;
+ readonly method: string;
+ readonly params?: P;
+}
+
+/** Response from extension to webview */
+export interface IpcResponse {
+ readonly requestId: string;
+ readonly method: string;
+ readonly success: boolean;
+ readonly data?: T;
+ readonly error?: string;
+}
+
+/** Push notification from extension to webview */
+export interface IpcNotification {
+ readonly type: string;
+ readonly data?: D;
+}
+
+// --- Handler utilities ---
+
+/** Extract params type from a request/command definition */
+export type ParamsOf = T extends { _types?: { params: infer P } } ? P : void;
+
+/** Extract response type from a request definition */
+export type ResponseOf = T extends { _types?: { response: infer R } }
+ ? R
+ : void;
+
+/** Type-safe request handler - infers params and return type from definition */
+export function requestHandler(
+ _def: RequestDef
,
+ fn: (params: P) => Promise,
+): (params: unknown) => Promise {
+ return fn as (params: unknown) => Promise;
+}
+
+/** Type-safe command handler - infers params type from definition */
+export function commandHandler(
+ _def: CommandDef
,
+ fn: (params: P) => void | Promise,
+): (params: unknown) => void | Promise {
+ return fn as (params: unknown) => void | Promise;
+}
diff --git a/packages/shared/src/tasks/api.ts b/packages/shared/src/tasks/api.ts
new file mode 100644
index 00000000..26b4f611
--- /dev/null
+++ b/packages/shared/src/tasks/api.ts
@@ -0,0 +1,82 @@
+/**
+ * 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";
+
+export interface InitResponse {
+ tasks: readonly Task[];
+ templates: readonly TaskTemplate[];
+ baseUrl: string;
+ tasksSupported: boolean;
+}
+
+const init = defineRequest("init");
+const getTasks = defineRequest("getTasks");
+const getTemplates = defineRequest("getTemplates");
+const getTask = defineRequest<{ taskId: string }, Task>("getTask");
+const getTaskDetails = defineRequest<{ taskId: string }, TaskDetails>(
+ "getTaskDetails",
+);
+
+export interface CreateTaskParams {
+ templateVersionId: string;
+ prompt: string;
+ presetId?: string;
+}
+const createTask = defineRequest("createTask");
+
+const deleteTask = defineRequest<{ taskId: string }, void>("deleteTask");
+const pauseTask = defineRequest<{ taskId: string }, void>("pauseTask");
+const resumeTask = defineRequest<{ taskId: string }, void>("resumeTask");
+
+const viewInCoder = defineCommand<{ taskId: string }>("viewInCoder");
+const viewLogs = defineCommand<{ taskId: string }>("viewLogs");
+const downloadLogs = defineCommand<{ taskId: string }>("downloadLogs");
+const sendTaskMessage = defineCommand<{
+ taskId: string;
+ message: string;
+}>("sendTaskMessage");
+
+const taskUpdated = defineNotification("taskUpdated");
+const tasksUpdated = defineNotification("tasksUpdated");
+const logsAppend = defineNotification("logsAppend");
+const refresh = defineNotification("refresh");
+const showCreateForm = defineNotification("showCreateForm");
+
+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/shared/src/tasks/types.ts b/packages/shared/src/tasks/types.ts
new file mode 100644
index 00000000..25108908
--- /dev/null
+++ b/packages/shared/src/tasks/types.ts
@@ -0,0 +1,119 @@
+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 extends TaskActions {
+ task: Task;
+ logs: TaskLogEntry[];
+ logsStatus: LogsStatus;
+}
+
+export interface TaskActions {
+ canPause: boolean;
+ canResume: boolean;
+}
+
+const RESUMABLE_STATUSES: readonly WorkspaceStatus[] = [
+ "stopped",
+ "failed",
+ "canceled",
+];
+
+const PAUSED_STATUSES: readonly WorkspaceStatus[] = [
+ "stopped",
+ "stopping",
+ "canceled",
+];
+
+const INITIALIZING_STATUSES: readonly WorkspaceStatus[] = [
+ "starting",
+ "pending",
+];
+
+export function getTaskActions(task: Task): TaskActions {
+ const hasWorkspace = task.workspace_id !== null;
+ const status = task.workspace_status;
+ return {
+ canPause: hasWorkspace && status === "running",
+ canResume: hasWorkspace && !!status && RESUMABLE_STATUSES.includes(status),
+ };
+}
+
+/** 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;
+ const workspaceStatus = task.workspace_status;
+
+ if (task.status === "error" || taskState === "failed") {
+ return "error";
+ }
+
+ if (workspaceStatus && PAUSED_STATUSES.includes(workspaceStatus)) {
+ return "paused";
+ }
+
+ if (workspaceStatus && INITIALIZING_STATUSES.includes(workspaceStatus)) {
+ return "initializing";
+ }
+
+ if (task.status === "active" && workspaceStatus === "running" && taskState) {
+ return taskState;
+ }
+
+ if (taskState === "complete") {
+ return "complete";
+ }
+
+ return "idle";
+}
diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json
new file mode 100644
index 00000000..883686d3
--- /dev/null
+++ b/packages/shared/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "extends": "../tsconfig.packages.json",
+ "compilerOptions": {
+ "composite": true,
+ "declaration": true,
+ "noEmit": false,
+ "outDir": "dist",
+ "rootDir": "src",
+ "tsBuildInfoFile": "dist/.tsbuildinfo"
+ },
+ "include": ["src"]
+}
diff --git a/packages/tasks/package.json b/packages/tasks/package.json
index 04163928..b938f4f5 100644
--- a/packages/tasks/package.json
+++ b/packages/tasks/package.json
@@ -9,15 +9,19 @@
"dev": "vite build --watch"
},
"dependencies": {
+ "@repo/shared": "workspace:*",
"@repo/webview-shared": "workspace:*",
+ "@tanstack/react-query": "catalog:",
"@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..2de812c6 100644
--- a/packages/tasks/src/App.tsx
+++ b/packages/tasks/src/App.tsx
@@ -1,41 +1,46 @@
-import { logger } from "@repo/webview-shared/logger";
-import { useMessage } from "@repo/webview-shared/react";
+import { useQuery } from "@tanstack/react-query";
import {
VscodeButton,
+ VscodeIcon,
VscodeProgressRing,
} from "@vscode-elements/react-elements";
-import { useEffect, useState } from "react";
-import { sendReady, sendRefresh } from "./messages";
-
-import type { TasksExtensionMessage } from "@repo/webview-shared";
+import { useTasksApi } from "./hooks/useTasksApi";
export default function App() {
- const [ready, setReady] = useState(false);
+ const api = useTasksApi();
- useMessage((message) => {
- switch (message.type) {
- case "init":
- setReady(true);
- break;
- case "error":
- logger.error("Tasks panel error:", message.data);
- break;
- }
+ const { data, isLoading, error, refetch } = useQuery({
+ queryKey: ["tasks-init"],
+ queryFn: () => api.init(),
});
- useEffect(() => {
- sendReady();
- }, []);
-
- if (!ready) {
+ if (isLoading) {
return ;
}
+ if (error) {
+ return Error: {error.message}
;
+ }
+
+ if (!data?.tasksSupported) {
+ return (
+
+ Tasks not supported
+
+ );
+ }
+
return (
-
Coder Tasks
-
Refresh
+
+ Connected to {data.baseUrl}
+
+
Templates: {data.templates.length}
+
Tasks: {data.tasks.length}
+
void refetch()}>
+ Refresh
+
);
}
diff --git a/packages/tasks/src/hooks/useTasksApi.ts b/packages/tasks/src/hooks/useTasksApi.ts
new file mode 100644
index 00000000..24560572
--- /dev/null
+++ b/packages/tasks/src/hooks/useTasksApi.ts
@@ -0,0 +1,40 @@
+/**
+ * Tasks API hook - provides type-safe access to all Tasks operations.
+ *
+ * @example
+ * ```tsx
+ * const api = useTasksApi();
+ * const tasks = await api.getTasks();
+ * api.viewInCoder("task-id");
+ * ```
+ */
+
+import { TasksApi, type CreateTaskParams } from "@repo/shared";
+import { useIpc } from "@repo/webview-shared/react";
+
+export function useTasksApi() {
+ const { request, command } = useIpc();
+
+ return {
+ // Requests
+ init: () => request(TasksApi.init),
+ getTasks: () => request(TasksApi.getTasks),
+ getTemplates: () => request(TasksApi.getTemplates),
+ getTask: (taskId: string) => request(TasksApi.getTask, { taskId }),
+ getTaskDetails: (taskId: string) =>
+ request(TasksApi.getTaskDetails, { taskId }),
+ createTask: (params: CreateTaskParams) =>
+ request(TasksApi.createTask, params),
+ deleteTask: (taskId: string) => request(TasksApi.deleteTask, { taskId }),
+ pauseTask: (taskId: string) => request(TasksApi.pauseTask, { taskId }),
+ resumeTask: (taskId: string) => request(TasksApi.resumeTask, { taskId }),
+
+ // Commands
+ viewInCoder: (taskId: string) => command(TasksApi.viewInCoder, { taskId }),
+ viewLogs: (taskId: string) => command(TasksApi.viewLogs, { taskId }),
+ downloadLogs: (taskId: string) =>
+ command(TasksApi.downloadLogs, { taskId }),
+ sendTaskMessage: (taskId: string, message: string) =>
+ command(TasksApi.sendTaskMessage, { taskId, message }),
+ };
+}
diff --git a/packages/tasks/src/index.css b/packages/tasks/src/index.css
index 43e1c98c..1edf8176 100644
--- a/packages/tasks/src/index.css
+++ b/packages/tasks/src/index.css
@@ -1 +1,4 @@
+/* Import codicons font for vscode-elements icons */
+@import "@vscode/codicons/dist/codicon.css";
+
/* Webview styles */
diff --git a/packages/tasks/src/index.tsx b/packages/tasks/src/index.tsx
index c6dbba43..e6bb1159 100644
--- a/packages/tasks/src/index.tsx
+++ b/packages/tasks/src/index.tsx
@@ -1,10 +1,13 @@
import { ErrorBoundary } from "@repo/webview-shared/react";
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
import "./index.css";
+const queryClient = new QueryClient();
+
const root = document.getElementById("root");
if (!root) {
throw new Error(
@@ -14,8 +17,10 @@ if (!root) {
createRoot(root).render(
-
-
-
+
+
+
+
+
,
);
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/tasks/tsconfig.json b/packages/tasks/tsconfig.json
index 6f3c0045..ae9f5d1b 100644
--- a/packages/tasks/tsconfig.json
+++ b/packages/tasks/tsconfig.json
@@ -1,10 +1,11 @@
{
- "extends": "../tsconfig.webview.json",
+ "extends": "../tsconfig.packages.json",
"compilerOptions": {
"paths": {
+ "@repo/shared": ["../shared/src"],
"@repo/webview-shared": ["../webview-shared/src"]
}
},
"include": ["src"],
- "references": [{ "path": "../webview-shared" }]
+ "references": [{ "path": "../shared" }, { "path": "../webview-shared" }]
}
diff --git a/packages/tsconfig.webview.json b/packages/tsconfig.packages.json
similarity index 100%
rename from packages/tsconfig.webview.json
rename to packages/tsconfig.packages.json
diff --git a/packages/webview-shared/createWebviewConfig.ts b/packages/webview-shared/createWebviewConfig.ts
index 71b096af..9ebbcdf9 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()],
+ // Use relative URLs for assets (fonts, etc.) in CSS
+ base: "./",
+ plugins: [
+ react({
+ babel: {
+ plugins: [["babel-plugin-react-compiler", {}]],
+ },
+ }),
+ ],
build: {
outDir: resolve(dirname, `../../dist/webviews/${webviewName}`),
emptyOutDir: true,
@@ -27,7 +35,13 @@ export function createWebviewConfig(
input: resolve(dirname, "src/index.tsx"),
output: {
entryFileNames: "index.js",
- assetFileNames: "index.[ext]",
+ // Keep fonts with original names for proper CSS references
+ assetFileNames: (assetInfo) => {
+ if (assetInfo.names?.[0]?.endsWith(".ttf")) {
+ return "codicon.ttf";
+ }
+ return "index.[ext]";
+ },
},
},
// Keeps extension size down; build locally to map stack traces
diff --git a/packages/webview-shared/extension.d.ts b/packages/webview-shared/extension.d.ts
deleted file mode 100644
index dedd225f..00000000
--- a/packages/webview-shared/extension.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-// Types exposed to the extension (react/ subpath is excluded).
-export type {
- TasksExtensionMessage,
- TasksWebviewMessage,
- WebviewMessage,
-} from "./src/index";
diff --git a/packages/webview-shared/package.json b/packages/webview-shared/package.json
index 472c310d..9951ac81 100644
--- a/packages/webview-shared/package.json
+++ b/packages/webview-shared/package.json
@@ -1,7 +1,7 @@
{
"name": "@repo/webview-shared",
"version": "1.0.0",
- "description": "Types and utilities for Coder webviews",
+ "description": "Webview-specific utilities (React hooks, VS Code API wrappers)",
"private": true,
"type": "module",
"exports": {
@@ -22,6 +22,9 @@
"default": "./src/react/index.ts"
}
},
+ "dependencies": {
+ "@repo/shared": "workspace:*"
+ },
"peerDependencies": {
"@vscode-elements/react-elements": "catalog:",
"react": "catalog:"
diff --git a/packages/webview-shared/src/api.ts b/packages/webview-shared/src/api.ts
index 0113b12c..6579e45a 100644
--- a/packages/webview-shared/src/api.ts
+++ b/packages/webview-shared/src/api.ts
@@ -10,6 +10,9 @@ function getVsCodeApi(): WebviewApi {
return vscodeApi;
}
+/**
+ * Post a message to the extension.
+ */
export function postMessage(message: WebviewMessage): void {
getVsCodeApi().postMessage(message);
}
diff --git a/packages/webview-shared/src/index.ts b/packages/webview-shared/src/index.ts
index 6a1a1f52..b2588950 100644
--- a/packages/webview-shared/src/index.ts
+++ b/packages/webview-shared/src/index.ts
@@ -1,13 +1,9 @@
-// Message passing types - simple generic interface
-export interface WebviewMessage {
- type: string;
- data?: T;
+// Webview → Extension message (request or command)
+export interface WebviewMessage {
+ method: string;
+ params?: unknown;
+ requestId?: string;
}
-/** Messages sent from the extension to the Tasks webview */
-export type TasksExtensionMessage =
- | { type: "init" }
- | { type: "error"; data: string };
-
-/** Messages sent from the Tasks webview to the extension */
-export type TasksWebviewMessage = { type: "ready" } | { type: "refresh" };
+// VS Code state API
+export { getState, setState, postMessage } from "./api";
diff --git a/packages/webview-shared/src/react/index.ts b/packages/webview-shared/src/react/index.ts
index cb43953d..c4f20434 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 { useIpc, type UseIpcOptions } from "./useIpc";
diff --git a/packages/webview-shared/src/react/useIpc.ts b/packages/webview-shared/src/react/useIpc.ts
new file mode 100644
index 00000000..58f8c97c
--- /dev/null
+++ b/packages/webview-shared/src/react/useIpc.ts
@@ -0,0 +1,185 @@
+/**
+ * Type-safe IPC hook for webview-extension communication.
+ * Handles request correlation, timeouts, and cleanup automatically.
+ */
+
+import { useEffect, useRef } from "react";
+
+import { postMessage } from "../api";
+
+import type { IpcNotification, IpcResponse } from "@repo/shared";
+
+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;
+}
+
+type NotificationHandler = (data: unknown) => void;
+
+/**
+ * Hook for type-safe IPC with the extension.
+ *
+ * @example
+ * ```tsx
+ * const ipc = useIpc();
+ * const tasks = await ipc.request(getTasks); // Type: Task[]
+ * ipc.command(viewInCoder, { taskId: "123" }); // Fire-and-forget
+ *
+ * // Subscribe to notifications
+ * useEffect(() => {
+ * return ipc.onNotification(tasksUpdated, (tasks) => {
+ * setTasks(tasks); // tasks is typed as Task[]
+ * });
+ * }, []);
+ * ```
+ */
+export function useIpc(options: UseIpcOptions = {}) {
+ const { timeoutMs = DEFAULT_TIMEOUT_MS } = options;
+ const pendingRequests = useRef>(new Map());
+ const notificationHandlers = useRef>>(
+ new Map(),
+ );
+
+ // Cleanup on unmount
+ useEffect(() => {
+ return () => {
+ for (const req of pendingRequests.current.values()) {
+ clearTimeout(req.timeout);
+ req.reject(new Error("Component unmounted"));
+ }
+ pendingRequests.current.clear();
+ notificationHandlers.current.clear();
+ };
+ }, []);
+
+ // Handle responses and notifications
+ useEffect(() => {
+ const handler = (event: MessageEvent) => {
+ const msg = event.data as IpcResponse | IpcNotification | undefined;
+
+ if (!msg || typeof msg !== "object") {
+ return;
+ }
+
+ // Response handling (has requestId + success)
+ if ("requestId" in msg && "success" in msg) {
+ 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"));
+ }
+ return;
+ }
+
+ // Notification handling (has type, no requestId)
+ if ("type" in msg && !("requestId" in msg)) {
+ const handlers = notificationHandlers.current.get(msg.type);
+ if (handlers) {
+ for (const h of handlers) {
+ h(msg.data);
+ }
+ }
+ }
+ };
+
+ window.addEventListener("message", handler);
+ return () => window.removeEventListener("message", handler);
+ }, []);
+
+ /** Send request and await typed response */
+ function request(
+ definition: {
+ method: string;
+ _types?: { 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,
+ requestId,
+ params,
+ });
+ });
+ }
+
+ /** Send command without waiting (fire-and-forget) */
+ function command(
+ definition: { method: string; _types?: { params: P } },
+ ...args: P extends void ? [] : [params: P]
+ ): void {
+ postMessage({
+ method: definition.method,
+ params: args[0],
+ });
+ }
+
+ /**
+ * Subscribe to push notifications from the extension.
+ * Returns an unsubscribe function that should be called on cleanup.
+ *
+ * @example
+ * ```tsx
+ * useEffect(() => {
+ * return ipc.onNotification(tasksUpdated, (tasks) => {
+ * setTasks(tasks);
+ * });
+ * }, []);
+ * ```
+ */
+ function onNotification(
+ definition: { method: string; _types?: { data: D } },
+ callback: (data: D) => void,
+ ): () => void {
+ const method = definition.method;
+ let handlers = notificationHandlers.current.get(method);
+ if (!handlers) {
+ handlers = new Set();
+ notificationHandlers.current.set(method, handlers);
+ }
+ handlers.add(callback as NotificationHandler);
+
+ // Return unsubscribe function
+ return () => {
+ const h = notificationHandlers.current.get(method);
+ if (h) {
+ h.delete(callback as NotificationHandler);
+ if (h.size === 0) {
+ notificationHandlers.current.delete(method);
+ }
+ }
+ };
+ }
+
+ return { request, command, onNotification };
+}
diff --git a/packages/webview-shared/tsconfig.json b/packages/webview-shared/tsconfig.json
index 794f6482..6f8d4c80 100644
--- a/packages/webview-shared/tsconfig.json
+++ b/packages/webview-shared/tsconfig.json
@@ -1,12 +1,16 @@
{
- "extends": "../tsconfig.webview.json",
+ "extends": "../tsconfig.packages.json",
"compilerOptions": {
"composite": true,
"declaration": true,
"noEmit": false,
"outDir": "dist",
"rootDir": "src",
- "tsBuildInfoFile": "dist/.tsbuildinfo"
+ "tsBuildInfoFile": "dist/.tsbuildinfo",
+ "paths": {
+ "@repo/shared": ["../shared/src"]
+ }
},
- "include": ["src"]
+ "include": ["src"],
+ "references": [{ "path": "../shared" }]
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 992f2dda..96c97cb1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,18 +6,30 @@ settings:
catalogs:
default:
+ '@tanstack/react-query':
+ specifier: ^5.90.20
+ version: 5.90.20
'@types/react':
specifier: ^19.2.10
version: 19.2.10
'@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
@@ -43,6 +55,9 @@ importers:
'@peculiar/x509':
specifier: ^1.14.3
version: 1.14.3
+ '@repo/shared':
+ specifier: workspace:*
+ version: link:packages/shared
axios:
specifier: 1.13.4
version: 1.13.4
@@ -100,7 +115,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 +133,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 +158,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 +175,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 +187,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 +217,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,25 +229,40 @@ 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/shared:
+ devDependencies:
+ typescript:
+ specifier: 'catalog:'
+ version: 5.9.3
packages/tasks:
dependencies:
+ '@repo/shared':
+ specifier: workspace:*
+ version: link:../shared
'@repo/webview-shared':
specifier: workspace:*
version: link:../webview-shared
+ '@tanstack/react-query':
+ specifier: 'catalog:'
+ version: 5.90.20(react@19.2.4)
'@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,17 +276,24 @@ 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.7.0(vite@7.3.1(@types/node@24.10.10))
+ babel-plugin-react-compiler:
specifier: 'catalog:'
- version: 4.2.2(vite@7.3.1(@types/node@24.10.9))
+ 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:
+ dependencies:
+ '@repo/shared':
+ specifier: workspace:*
+ version: link:../shared
devDependencies:
'@types/react':
specifier: 'catalog:'
@@ -270,10 +313,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 +322,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 +338,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/code-frame@7.28.6':
- resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
+ '@babel/helper-optimise-call-expression@7.27.1':
+ resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
+ engines: {node: '>=6.9.0'}
+
+ '@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 +452,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 +539,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 +746,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 +775,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 +787,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 +990,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,84 +1174,17 @@ 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==}
+ '@szmarczak/http-timer@4.0.6':
+ resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
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]
+ '@tanstack/query-core@5.90.20':
+ resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==}
- '@swc/core@1.15.10':
- resolution: {integrity: sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==}
- engines: {node: '>=10'}
+ '@tanstack/react-query@5.90.20':
+ resolution: {integrity: sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==}
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'}
+ react: ^18 || ^19
'@testing-library/dom@10.4.1':
resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==}
@@ -1134,20 +1205,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 +1232,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 +1259,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 +1280,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 +1324,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 +1333,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==}
- 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==}
+ '@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/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 +1491,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 +1520,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 +1558,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 +1621,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 +1631,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 +1651,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 +1659,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 +1697,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 +1729,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 +1770,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 +1783,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 +1843,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 +1870,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 +1908,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 +1927,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 +1949,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 +2009,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 +2023,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 +2063,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 +2098,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 +2111,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 +2132,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 +2280,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 +2333,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 +2352,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 +2386,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 +2451,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 +2489,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 +2517,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 +2547,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 +2566,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 +2620,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 +2641,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 +2663,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 +2681,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 +2703,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 +2880,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 +2892,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 +2918,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 +2956,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 +2967,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 +3033,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 +3062,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 +3273,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 +3284,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 +3294,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 +3310,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 +3325,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 +3404,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 +3428,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 +3440,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 +3462,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-parser-stream@7.1.2:
+ resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
- parse5@7.1.2:
- resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
parse5@8.0.0:
resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==}
@@ -3379,8 +3489,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 +3529,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 +3538,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 +3571,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 +3578,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 +3621,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 +3640,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 +3696,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 +3737,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 +3846,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 +3878,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 +3940,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 +4033,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 +4117,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 +4143,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 +4152,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 +4173,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 +4187,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 +4221,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 +4265,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 +4307,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 +4350,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 +4407,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 +4443,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 +4460,6 @@ packages:
snapshots:
- '@aashutoshrathi/word-wrap@1.2.6': {}
-
'@acemir/cssom@0.9.31': {}
'@altano/repository-tools@2.0.1': {}
@@ -4339,7 +4472,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 +4492,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 +4554,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/types': 7.28.5
+ '@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/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 +4775,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 +4898,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 +4929,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 +4944,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 +4952,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 +5121,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 +5136,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 +5231,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 +5336,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 +5357,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 +5367,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 +5388,20 @@ 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':
+ '@szmarczak/http-timer@4.0.6':
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': {}
+ defer-to-connect: 2.0.1
- '@swc/types@0.1.25':
- dependencies:
- '@swc/counter': 0.1.3
+ '@tanstack/query-core@5.90.20': {}
- '@szmarczak/http-timer@4.0.6':
+ '@tanstack/react-query@5.90.20(react@19.2.4)':
dependencies:
- defer-to-connect: 2.0.1
+ '@tanstack/query-core': 5.90.20
+ react: 19.2.4
'@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 +5420,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 +5441,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 +5460,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 +5501,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 +5509,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 +5519,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 +5543,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 +5559,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 +5586,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 +5628,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 +5645,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 +5728,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 +5828,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 +5847,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 +5912,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 +5928,7 @@ snapshots:
acorn@8.15.0: {}
- agent-base@7.1.3: {}
+ agent-base@7.1.4: {}
ajv@6.12.6:
dependencies:
@@ -5678,18 +5940,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 +5958,6 @@ snapshots:
ansi-styles@5.2.0: {}
- ansi-styles@6.2.1: {}
-
ansi-styles@6.2.3: {}
anymatch@3.1.3:
@@ -5707,10 +5965,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 +6034,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 +6067,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 +6090,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 +6106,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 +6121,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 +6141,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 +6194,8 @@ snapshots:
camelcase@6.3.0: {}
+ caniuse-lite@1.0.30001767: {}
+
ccount@2.0.1: {}
chai@6.2.2: {}
@@ -5942,21 +6214,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 +6277,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 +6291,7 @@ snapshots:
commander@12.1.0: {}
- comment-parser@1.4.1: {}
+ comment-parser@1.4.5: {}
concat-map@0.0.1: {}
@@ -6038,12 +6314,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 +6327,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 +6377,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 +6390,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 +6425,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 +6449,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 +6457,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 +6475,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@40.0.0:
+ electron-to-chromium@1.5.286: {}
+
+ 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 +6680,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 +6734,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 +6803,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 +6834,7 @@ snapshots:
esprima@4.0.1: {}
- esquery@1.6.0:
+ esquery@1.7.0:
dependencies:
estraverse: 5.3.0
@@ -6558,11 +6850,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 +6885,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 +6942,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 +6985,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 +7019,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 +7050,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 +7080,7 @@ snapshots:
globals@14.0.0: {}
- globals@17.0.0: {}
+ globals@17.3.0: {}
globalthis@1.0.4:
dependencies:
@@ -6853,6 +7138,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 +7154,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 +7183,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 +7223,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 +7383,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 +7391,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 +7403,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 +7413,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 +7449,8 @@ snapshots:
- supports-color
- utf-8-validate
+ jsesc@3.1.0: {}
+
json-buffer@3.0.1: {}
json-schema-traverse@0.4.1: {}
@@ -7204,9 +7483,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 +7510,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 +7584,7 @@ snapshots:
lodash.truncate@4.4.2: {}
- lodash@4.17.21: {}
+ lodash@4.17.23: {}
log-symbols@4.1.0:
dependencies:
@@ -7329,10 +7608,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 +7628,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 +7639,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 +7665,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 +7760,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 +7792,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 +7932,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 +7970,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 +8007,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 +8027,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 +8035,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 +8057,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 +8066,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 +8074,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 +8145,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 +8171,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 +8189,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 +8209,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 +8226,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-parser-stream@7.1.2:
+ dependencies:
+ parse5: 7.3.0
- parse5@7.1.2:
+ parse5@7.3.0:
dependencies:
- entities: 4.4.0
+ entities: 6.0.1
parse5@8.0.0:
dependencies:
@@ -7975,9 +8262,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 +8291,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 +8309,7 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier@3.7.4: {}
+ prettier@3.8.1: {}
pretty-bytes@7.1.0: {}
@@ -8050,7 +8337,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 +8350,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 +8357,6 @@ snapshots:
punycode.js@2.3.1: {}
- punycode@2.3.0: {}
-
punycode@2.3.1: {}
pvtsutils@1.3.6:
@@ -8111,7 +8390,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 +8403,8 @@ snapshots:
react-is@17.0.2: {}
+ react-refresh@0.17.0: {}
+
react@19.2.4: {}
read-pkg@9.0.1:
@@ -8148,7 +8429,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 +8491,7 @@ snapshots:
retry@0.12.0: {}
- reusify@1.0.4: {}
+ reusify@1.1.0: {}
roarr@2.15.4:
dependencies:
@@ -8222,38 +8503,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 +8567,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 +8691,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 +8733,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 +8759,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 +8824,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 +8876,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 +8886,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 +8921,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 +8935,7 @@ snapshots:
tough-cookie@6.0.0:
dependencies:
- tldts: 7.0.19
+ tldts: 7.0.21
tr46@6.0.0:
dependencies:
@@ -8730,18 +9008,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 +9038,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 +9063,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 +9097,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 +9130,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 +9176,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 +9200,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 +9263,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 +9275,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 +9300,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 +9309,8 @@ snapshots:
y18n@5.0.8: {}
+ yallist@3.1.1: {}
+
yallist@4.0.0: {}
yargs-parser@21.1.1: {}
@@ -9060,6 +9354,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..412e9261 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -8,16 +8,19 @@ 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
+ "@tanstack/react-query": ^5.90.20
# 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/api/coderApi.ts b/src/api/coderApi.ts
index 70a0c5cc..0ec05522 100644
--- a/src/api/coderApi.ts
+++ b/src/api/coderApi.ts
@@ -10,6 +10,7 @@ import {
type ServerSentEvent,
type GetInboxNotificationResponse,
type ProvisionerJobLog,
+ type TaskLogEntry,
type Workspace,
type WorkspaceAgent,
type WorkspaceAgentLog,
@@ -192,6 +193,13 @@ export class CoderApi extends Api implements vscode.Disposable {
});
}
+ getTaskLogs = async (user: string, taskId: string) => {
+ const response = await this.getAxiosInstance().get<{
+ logs: TaskLogEntry[];
+ }>(`/api/v2/tasks/${user}/${taskId}/logs`);
+ return response.data.logs ?? [];
+ };
+
watchInboxNotifications = async (
watchTemplates: string[],
watchTargets: string[],
diff --git a/src/extension.ts b/src/extension.ts
index 15c903d7..64d39eea 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -19,7 +19,7 @@ import { Remote } from "./remote/remote";
import { getRemoteSshExtension } from "./remote/sshExtension";
import { registerUriHandler } from "./uri/uriHandler";
import { initVscodeProposed } from "./vscodeProposed";
-import { TasksPanel } from "./webviews/tasks/TasksPanel";
+import { TasksPanel } from "./webviews/tasks/tasksPanel";
import {
WorkspaceProvider,
WorkspaceQuery,
@@ -188,13 +188,16 @@ 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);
ctx.subscriptions.push(
- vscode.window.registerWebviewViewProvider(
- TasksPanel.viewType,
- tasksProvider,
+ tasksPanel,
+ vscode.window.registerWebviewViewProvider(TasksPanel.viewType, tasksPanel),
+ vscode.commands.registerCommand("coder.tasks.refresh", () =>
+ tasksPanel.refresh(),
),
+ // Refresh tasks panel when deployment changes (login/logout/switch)
+ secretsManager.onDidChangeCurrentDeployment(() => tasksPanel.refresh()),
);
ctx.subscriptions.push(
diff --git a/src/webviews/tasks/TasksPanel.ts b/src/webviews/tasks/TasksPanel.ts
deleted file mode 100644
index 9b071604..00000000
--- a/src/webviews/tasks/TasksPanel.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import * as vscode from "vscode";
-
-import { getWebviewHtml } from "../util";
-
-import type {
- TasksExtensionMessage,
- TasksWebviewMessage,
-} from "@repo/webview-shared";
-
-export class TasksPanel implements vscode.WebviewViewProvider {
- public static readonly viewType = "coder.tasksPanel";
-
- private view?: vscode.WebviewView;
- private disposables: vscode.Disposable[] = [];
-
- constructor(private readonly extensionUri: vscode.Uri) {}
-
- resolveWebviewView(
- webviewView: vscode.WebviewView,
- _context: vscode.WebviewViewResolveContext,
- _token: vscode.CancellationToken,
- ): void {
- this.view = webviewView;
-
- webviewView.webview.options = {
- enableScripts: true,
- localResourceRoots: [
- vscode.Uri.joinPath(this.extensionUri, "dist", "webviews"),
- ],
- };
-
- // Set up message handling before loading HTML to avoid race conditions
- this.disposables.forEach((d) => {
- d.dispose();
- });
- this.disposables = [];
- this.disposables.push(
- webviewView.webview.onDidReceiveMessage(
- (message: TasksWebviewMessage) => {
- this.handleMessage(message);
- },
- ),
- );
-
- webviewView.webview.html = getWebviewHtml(
- webviewView.webview,
- this.extensionUri,
- "tasks",
- "Coder Tasks",
- );
-
- webviewView.onDidDispose(() => {
- this.disposables.forEach((d) => {
- 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 sendMessage(message: TasksExtensionMessage): void {
- void this.view?.webview.postMessage(message);
- }
-}
diff --git a/src/webviews/tasks/tasksPanel.ts b/src/webviews/tasks/tasksPanel.ts
new file mode 100644
index 00000000..f0b54986
--- /dev/null
+++ b/src/webviews/tasks/tasksPanel.ts
@@ -0,0 +1,517 @@
+import { isAxiosError } from "axios";
+import * as vscode from "vscode";
+
+import {
+ commandHandler,
+ getTaskActions,
+ getTaskUIState,
+ requestHandler,
+ TasksApi,
+ type CreateTaskParams,
+ type InitResponse,
+ type IpcNotification,
+ type IpcRequest,
+ type IpcResponse,
+ type LogsStatus,
+ type TaskDetails,
+ type TaskTemplate,
+ type TaskUIState,
+} from "@repo/shared";
+
+import { type CoderApi } from "../../api/coderApi";
+import { toError } from "../../error/errorUtils";
+import { type Logger } from "../../logging/logger";
+import { getWebviewHtml } from "../util";
+
+import type {
+ Preset,
+ Task,
+ TaskLogEntry,
+ Template,
+} from "coder/site/src/api/typesGenerated";
+
+/** Build URL to view task build logs in Coder dashboard */
+function getTaskBuildUrl(baseUrl: string, task: Task): string {
+ if (task.workspace_name && task.workspace_build_number) {
+ return `${baseUrl}/@${task.owner_name}/${task.workspace_name}/builds/${task.workspace_build_number}`;
+ }
+ return `${baseUrl}/tasks/${task.owner_name}/${task.id}`;
+}
+
+/** Check if message is a request (has requestId) */
+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"
+ );
+}
+
+/** UI states where task logs won't change */
+const STABLE_UI_STATES: readonly TaskUIState[] = [
+ "complete",
+ "error",
+ "paused",
+];
+
+export class TasksPanel
+ implements vscode.WebviewViewProvider, vscode.Disposable
+{
+ public static readonly viewType = "coder.tasksPanel";
+
+ private view?: vscode.WebviewView;
+ private disposables: vscode.Disposable[] = [];
+
+ // Template cache with TTL
+ private templatesCache: TaskTemplate[] = [];
+ private templatesCacheTime = 0;
+ private readonly CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
+
+ // Cache logs for last viewed task in stable state
+ private cachedLogs?: {
+ taskId: string;
+ logs: TaskLogEntry[];
+ status: LogsStatus;
+ uiState: TaskUIState;
+ };
+
+ /**
+ * Request handlers indexed by method name.
+ * Type safety is ensured at definition time via requestHandler().
+ */
+ private readonly requestHandlers: Record<
+ string,
+ (params: unknown) => Promise
+ > = {
+ [TasksApi.init.method]: requestHandler(TasksApi.init, () =>
+ this.handleInit(),
+ ),
+ [TasksApi.getTasks.method]: requestHandler(TasksApi.getTasks, async () => {
+ const result = await this.fetchTasksWithStatus();
+ return result.tasks;
+ }),
+ [TasksApi.getTemplates.method]: requestHandler(TasksApi.getTemplates, () =>
+ this.fetchTemplates(),
+ ),
+ [TasksApi.getTask.method]: requestHandler(TasksApi.getTask, (p) =>
+ this.client.getTask("me", p.taskId),
+ ),
+ [TasksApi.getTaskDetails.method]: requestHandler(
+ TasksApi.getTaskDetails,
+ (p) => this.handleGetTaskDetails(p.taskId),
+ ),
+ [TasksApi.createTask.method]: requestHandler(TasksApi.createTask, (p) =>
+ this.handleCreateTask(p),
+ ),
+ [TasksApi.deleteTask.method]: requestHandler(TasksApi.deleteTask, (p) =>
+ this.handleDeleteTask(p.taskId),
+ ),
+ [TasksApi.pauseTask.method]: requestHandler(TasksApi.pauseTask, (p) =>
+ this.handlePauseTask(p.taskId),
+ ),
+ [TasksApi.resumeTask.method]: requestHandler(TasksApi.resumeTask, (p) =>
+ this.handleResumeTask(p.taskId),
+ ),
+ };
+
+ /**
+ * Command handlers indexed by method name.
+ * Type safety is ensured at definition time via commandHandler().
+ */
+ private readonly commandHandlers: Record<
+ string,
+ (params: unknown) => void | Promise
+ > = {
+ [TasksApi.viewInCoder.method]: commandHandler(TasksApi.viewInCoder, (p) =>
+ this.handleViewInCoder(p.taskId),
+ ),
+ [TasksApi.viewLogs.method]: commandHandler(TasksApi.viewLogs, (p) =>
+ this.handleViewLogs(p.taskId),
+ ),
+ [TasksApi.downloadLogs.method]: commandHandler(TasksApi.downloadLogs, (p) =>
+ this.handleDownloadLogs(p.taskId),
+ ),
+ [TasksApi.sendTaskMessage.method]: commandHandler(
+ TasksApi.sendTaskMessage,
+ (p) => this.handleSendMessage(p.taskId, p.message),
+ ),
+ };
+
+ constructor(
+ private readonly extensionUri: vscode.Uri,
+ private readonly client: CoderApi,
+ private readonly logger: Logger,
+ ) {}
+
+ public showCreateForm(): void {
+ this.sendNotification({ type: TasksApi.showCreateForm.method });
+ }
+
+ public refresh(): void {
+ this.templatesCacheTime = 0;
+ this.cachedLogs = undefined;
+ this.sendNotification({ type: TasksApi.refresh.method });
+ }
+
+ resolveWebviewView(
+ webviewView: vscode.WebviewView,
+ _context: vscode.WebviewViewResolveContext,
+ _token: vscode.CancellationToken,
+ ): void {
+ this.view = webviewView;
+
+ webviewView.webview.options = {
+ enableScripts: true,
+ localResourceRoots: [
+ vscode.Uri.joinPath(this.extensionUri, "dist", "webviews"),
+ ],
+ };
+
+ for (const d of this.disposables) {
+ d.dispose();
+ }
+ this.disposables = [];
+
+ this.disposables.push(
+ webviewView.webview.onDidReceiveMessage((message: unknown) => {
+ this.handleMessage(message).catch((err: unknown) => {
+ this.logger.error("Unhandled error in message handler", err);
+ });
+ }),
+ );
+
+ webviewView.webview.html = getWebviewHtml(
+ webviewView.webview,
+ this.extensionUri,
+ "tasks",
+ "Coder Tasks",
+ );
+
+ webviewView.onDidDispose(() => {
+ for (const d of this.disposables) {
+ d.dispose();
+ }
+ this.disposables = [];
+ });
+ }
+
+ private async handleMessage(message: unknown): Promise {
+ if (isIpcRequest(message)) {
+ await this.handleRequest(message);
+ } else if (isIpcCommand(message)) {
+ await this.handleCommand(message);
+ }
+ }
+
+ private async handleRequest(message: IpcRequest): Promise {
+ const { requestId, method, params } = message;
+
+ try {
+ const handler = this.requestHandlers[method];
+ if (!handler) {
+ throw new Error(`Unknown method: ${method}`);
+ }
+ const data = await handler(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 {
+ const handler = this.commandHandlers[method];
+ if (!handler) {
+ throw new Error(`Unknown command: ${method}`);
+ }
+ await handler(params);
+ } catch (err) {
+ this.logger.warn(`Command ${method} failed`, err);
+ }
+ }
+
+ private async handleInit(): Promise {
+ const [tasksResult, templates] = await Promise.all([
+ this.fetchTasksWithStatus(),
+ this.fetchTemplates(),
+ ]);
+ return {
+ tasks: tasksResult.tasks,
+ templates,
+ baseUrl: this.client.getHost() ?? "",
+ tasksSupported: tasksResult.supported,
+ };
+ }
+
+ private async handleGetTaskDetails(taskId: string): Promise {
+ const task = await this.client.getTask("me", taskId);
+ const { logs, logsStatus } = await this.getLogsWithCache(task);
+ return { task, logs, logsStatus, ...getTaskActions(task) };
+ }
+
+ private async handleCreateTask(params: CreateTaskParams): Promise {
+ const task = await this.client.createTask("me", {
+ template_version_id: params.templateVersionId,
+ template_version_preset_id: params.presetId,
+ input: params.prompt,
+ });
+
+ await this.refreshAndNotifyTasks();
+ vscode.window.showInformationMessage("Task created successfully");
+ return task;
+ }
+
+ private async handleDeleteTask(taskId: string): Promise {
+ await this.client.deleteTask("me", taskId);
+
+ if (this.cachedLogs?.taskId === taskId) {
+ this.cachedLogs = undefined;
+ }
+
+ await this.refreshAndNotifyTasks();
+ vscode.window.showInformationMessage("Task deleted successfully");
+ }
+
+ private async handlePauseTask(taskId: string): Promise {
+ const task = await this.client.getTask("me", taskId);
+ if (!task.workspace_id) {
+ throw new Error("Task has no workspace");
+ }
+
+ await this.client.stopWorkspace(task.workspace_id);
+
+ await this.refreshAndNotifyTasks();
+ vscode.window.showInformationMessage("Task paused");
+ }
+
+ private async handleResumeTask(taskId: string): Promise {
+ const task = await this.client.getTask("me", 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.refreshAndNotifyTasks();
+ vscode.window.showInformationMessage("Task resumed");
+ }
+
+ private async handleViewInCoder(taskId: string): Promise {
+ const baseUrl = this.client.getHost();
+ if (!baseUrl) return;
+
+ const task = await this.client.getTask("me", taskId);
+ vscode.env.openExternal(
+ vscode.Uri.parse(`${baseUrl}/tasks/${task.owner_name}/${task.id}`),
+ );
+ }
+
+ private async handleViewLogs(taskId: string): Promise {
+ const baseUrl = this.client.getHost();
+ if (!baseUrl) return;
+
+ const task = await this.client.getTask("me", taskId);
+ vscode.env.openExternal(vscode.Uri.parse(getTaskBuildUrl(baseUrl, task)));
+ }
+
+ private async handleDownloadLogs(taskId: string): Promise {
+ const result = await this.fetchTaskLogs(taskId);
+ if (result.logs.length === 0) {
+ vscode.window.showWarningMessage("No logs available to download");
+ return;
+ }
+
+ const content = result.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"));
+ vscode.window.showInformationMessage(`Logs saved to ${uri.fsPath}`);
+ }
+ }
+
+ /**
+ * Placeholder handler for sending follow-up messages to a task.
+ * The Coder API does not yet support this feature.
+ */
+ private handleSendMessage(taskId: string, message: string): void {
+ this.logger.info(`Sending message to task ${taskId}: ${message}`);
+ vscode.window.showInformationMessage(
+ "Follow-up messages are not yet supported by the API",
+ );
+ }
+
+ private async fetchTasksWithStatus(): Promise<{
+ tasks: readonly Task[];
+ supported: boolean;
+ }> {
+ if (!this.client.getHost()) {
+ return { tasks: [], supported: true };
+ }
+
+ try {
+ const tasks = await this.client.getTasks({ owner: "me" });
+ return { tasks, supported: true };
+ } catch (err) {
+ if (isAxiosError(err) && err.response?.status === 404) {
+ return { tasks: [], supported: false };
+ }
+ throw err;
+ }
+ }
+
+ private async refreshAndNotifyTasks(): Promise {
+ const tasks = await this.fetchTasksWithStatus();
+ this.sendNotification({
+ type: TasksApi.tasksUpdated.method,
+ data: tasks.tasks,
+ });
+ }
+
+ private async fetchTemplates(): Promise {
+ if (!this.client.getHost()) {
+ return [];
+ }
+
+ const now = Date.now();
+ if (
+ this.templatesCache.length > 0 &&
+ now - this.templatesCacheTime < this.CACHE_TTL_MS
+ ) {
+ return this.templatesCache;
+ }
+
+ try {
+ const templates = await this.client.getTemplates({});
+
+ const result = await Promise.all(
+ templates.map(async (template: Template): Promise => {
+ let presets: Preset[] = [];
+ try {
+ presets =
+ (await this.client.getTemplateVersionPresets(
+ template.active_version_id,
+ )) ?? [];
+ } catch {
+ // Presets may not be available
+ }
+
+ 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.templatesCache = result;
+ this.templatesCacheTime = now;
+ return result;
+ } catch (err) {
+ this.logger.warn("Failed to fetch templates", err);
+ return [];
+ }
+ }
+
+ /**
+ * Get logs for a task, using cache for stable states (complete/error/paused).
+ */
+ private async getLogsWithCache(
+ task: Task,
+ ): Promise<{ logs: TaskLogEntry[]; logsStatus: LogsStatus }> {
+ const uiState = getTaskUIState(task);
+ const isStable = STABLE_UI_STATES.includes(uiState);
+
+ // Use cache if same task in same stable state
+ if (
+ this.cachedLogs?.taskId === task.id &&
+ isStable &&
+ this.cachedLogs.uiState === uiState
+ ) {
+ return { logs: this.cachedLogs.logs, logsStatus: this.cachedLogs.status };
+ }
+
+ const { logs, status } = await this.fetchTaskLogs(task.id);
+
+ // Cache only for stable states
+ if (isStable) {
+ this.cachedLogs = { taskId: task.id, logs, status, uiState };
+ }
+
+ return { logs, logsStatus: status };
+ }
+
+ private async fetchTaskLogs(
+ taskId: string,
+ ): Promise<{ logs: TaskLogEntry[]; status: LogsStatus }> {
+ try {
+ const logs = await this.client.getTaskLogs("me", taskId);
+ return { logs, status: "ok" };
+ } catch (err) {
+ 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 sendResponse(response: IpcResponse): void {
+ this.view?.webview.postMessage(response);
+ }
+
+ private sendNotification(notification: IpcNotification): void {
+ this.view?.webview.postMessage(notification);
+ }
+
+ dispose(): void {
+ for (const d of this.disposables) {
+ d.dispose();
+ }
+ this.disposables = [];
+ this.cachedLogs = undefined;
+ }
+}
diff --git a/src/webviews/util.ts b/src/webviews/util.ts
index eb663a9b..ca7be033 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 "vscode-codicon-stylesheet"
+ // ID to load the codicons font inside its shadow DOM components
return `
@@ -31,7 +33,7 @@ export function getWebviewHtml(
${title}
-
+
diff --git a/test/mocks/tasks.ts b/test/mocks/tasks.ts
new file mode 100644
index 00000000..d80bc49b
--- /dev/null
+++ b/test/mocks/tasks.ts
@@ -0,0 +1,140 @@
+/**
+ * Test factories for Tasks-related types.
+ * Use these to create test data with sensible defaults.
+ */
+
+import type {
+ Task,
+ TaskLogEntry,
+ Template,
+ Preset,
+ TaskState,
+} from "coder/site/src/api/typesGenerated";
+
+/**
+ * Create a Task with sensible defaults.
+ * The defaults represent a typical active task with a running workspace.
+ */
+export function task(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_build_number: 5,
+ 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,
+ };
+}
+
+/**
+ * Create a Task without workspace or state details.
+ * Useful for testing state/status logic in isolation.
+ */
+export function minimalTask(overrides: Partial = {}): Task {
+ return task({
+ workspace_id: null,
+ workspace_name: "",
+ workspace_status: undefined,
+ workspace_build_number: undefined,
+ current_state: null,
+ ...overrides,
+ });
+}
+
+/** Create a task state object for testing state-dependent behavior */
+export function taskState(state: TaskState): Task["current_state"] {
+ return { state, message: "", timestamp: "", uri: "" };
+}
+
+/** Create a Template with sensible defaults */
+export function template(overrides: Partial = {}): Template {
+ return {
+ id: "template-1",
+ created_at: "2024-01-01T00:00:00Z",
+ updated_at: "2024-01-01T00:00:00Z",
+ organization_id: "org-1",
+ organization_name: "test-org",
+ organization_display_name: "Test Org",
+ organization_icon: "",
+ name: "test-template",
+ display_name: "Test Template",
+ provisioner: "terraform",
+ active_version_id: "version-1",
+ active_user_count: 0,
+ build_time_stats: {
+ delete: { P50: null, P95: null },
+ start: { P50: null, P95: null },
+ stop: { P50: null, P95: null },
+ },
+ description: "Test template",
+ deprecated: false,
+ deprecation_message: "",
+ icon: "/icon.svg",
+ default_ttl_ms: 0,
+ activity_bump_ms: 0,
+ autostop_requirement: { days_of_week: [], weeks: 0 },
+ autostart_requirement: { days_of_week: [] },
+ created_by_id: "user-1",
+ created_by_name: "testuser",
+ allow_user_autostart: true,
+ allow_user_autostop: true,
+ allow_user_cancel_workspace_jobs: true,
+ failure_ttl_ms: 0,
+ time_til_dormant_ms: 0,
+ time_til_dormant_autodelete_ms: 0,
+ require_active_version: false,
+ max_port_share_level: "public",
+ cors_behavior: "passthru",
+ use_classic_parameter_flow: false,
+ ...overrides,
+ };
+}
+
+/** Create a Preset with sensible defaults */
+export function preset(overrides: Partial = {}): Preset {
+ return {
+ ID: "preset-1",
+ Name: "Test Preset",
+ Parameters: [],
+ Default: false,
+ DesiredPrebuildInstances: null,
+ Description: "Test preset",
+ Icon: "",
+ ...overrides,
+ };
+}
+
+/** Create a TaskLogEntry with sensible defaults */
+export function logEntry(overrides: Partial = {}): TaskLogEntry {
+ return {
+ id: 1,
+ time: "2024-01-01T00:00:00Z",
+ type: "output",
+ content: "Test log entry",
+ ...overrides,
+ };
+}
diff --git a/test/mocks/vscode.runtime.ts b/test/mocks/vscode.runtime.ts
index d4aea3f2..50ff3cae 100644
--- a/test/mocks/vscode.runtime.ts
+++ b/test/mocks/vscode.runtime.ts
@@ -89,6 +89,7 @@ export const window = {
showErrorMessage: vi.fn(),
showQuickPick: vi.fn(),
showInputBox: vi.fn(),
+ showSaveDialog: vi.fn(),
withProgress: vi.fn(),
createOutputChannel: vi.fn(() => ({
appendLine: vi.fn(),
diff --git a/test/tsconfig.json b/test/tsconfig.json
index 32c1e314..604f1299 100644
--- a/test/tsconfig.json
+++ b/test/tsconfig.json
@@ -6,6 +6,8 @@
// Both mappings needed: exact match for root, wildcard for subpaths
"paths": {
"@/*": ["src/*"],
+ "@repo/shared": ["packages/shared/src/index.ts"],
+ "@repo/shared/*": ["packages/shared/src/*"],
"@repo/webview-shared": ["packages/webview-shared/src/index.ts"],
"@repo/webview-shared/*": ["packages/webview-shared/src/*"]
}
diff --git a/test/unit/webviews/tasks/tasksPanel.test.ts b/test/unit/webviews/tasks/tasksPanel.test.ts
new file mode 100644
index 00000000..43ec8ecc
--- /dev/null
+++ b/test/unit/webviews/tasks/tasksPanel.test.ts
@@ -0,0 +1,503 @@
+import { beforeEach, describe, expect, it, vi } from "vitest";
+import * as vscode from "vscode";
+
+import { TasksPanel } from "@/webviews/tasks/tasksPanel";
+
+import { TasksApi, type ParamsOf, type ResponseOf } from "@repo/shared";
+
+import { logEntry, preset, task, template } from "../../../mocks/tasks";
+import { createAxiosError, createMockLogger } from "../../../mocks/testHelpers";
+
+import type { Task } from "coder/site/src/api/typesGenerated";
+
+import type { CoderApi } from "@/api/coderApi";
+
+/** Subset of CoderApi used by TasksPanel */
+type TasksPanelClient = Pick<
+ CoderApi,
+ | "getTasks"
+ | "getTask"
+ | "getTaskLogs"
+ | "createTask"
+ | "deleteTask"
+ | "getTemplates"
+ | "getTemplateVersionPresets"
+ | "startWorkspace"
+ | "stopWorkspace"
+ | "getHost"
+>;
+
+type MockClient = { [K in keyof TasksPanelClient]: ReturnType };
+
+function createClient(baseUrl = "https://coder.example.com"): MockClient {
+ return {
+ getTasks: vi.fn().mockResolvedValue([]),
+ getTask: vi.fn(),
+ getTaskLogs: vi.fn().mockResolvedValue([]),
+ createTask: vi.fn(),
+ deleteTask: vi.fn().mockResolvedValue(undefined),
+ getTemplates: vi.fn().mockResolvedValue([]),
+ getTemplateVersionPresets: vi.fn().mockResolvedValue([]),
+ startWorkspace: vi.fn().mockResolvedValue(undefined),
+ stopWorkspace: vi.fn().mockResolvedValue(undefined),
+ getHost: vi.fn().mockReturnValue(baseUrl),
+ };
+}
+
+interface ApiDef {
+ method: string;
+}
+
+interface Harness {
+ panel: TasksPanel;
+ client: MockClient;
+ /** Type-safe request using TasksApi definitions */
+ request: (
+ def: T,
+ params?: ParamsOf,
+ ) => Promise<{ success: boolean; data?: ResponseOf; error?: string }>;
+ command: (method: string, params?: unknown) => Promise;
+ messages: () => unknown[];
+}
+
+function createHarness(): Harness {
+ const client = createClient();
+ const panel = new TasksPanel(
+ vscode.Uri.file("/test/extension"),
+ // Cast needed: mock only implements the subset of CoderApi methods used by TasksPanel
+ client as unknown as CoderApi,
+ createMockLogger(),
+ );
+
+ const posted: unknown[] = [];
+ let handler: ((msg: unknown) => void) | null = null;
+
+ const webview: vscode.WebviewView = {
+ viewType: "coder.tasksPanel",
+ webview: {
+ options: { enableScripts: false, localResourceRoots: [] },
+ html: "",
+ cspSource: "",
+ postMessage: vi.fn((msg: unknown) => {
+ posted.push(msg);
+ return Promise.resolve(true);
+ }),
+ onDidReceiveMessage: vi.fn((h) => {
+ handler = h;
+ return { dispose: vi.fn() };
+ }),
+ asWebviewUri: vi.fn((uri: vscode.Uri) => uri),
+ },
+ visible: true,
+ show: vi.fn(),
+ onDidChangeVisibility: vi.fn(() => ({ dispose: vi.fn() })),
+ onDidDispose: vi.fn(() => ({ dispose: vi.fn() })),
+ };
+
+ panel.resolveWebviewView(
+ webview,
+ {} as vscode.WebviewViewResolveContext,
+ {} as vscode.CancellationToken,
+ );
+
+ return {
+ panel,
+ client,
+ messages: () => [...posted],
+ request: async (def: T, params?: ParamsOf) => {
+ const requestId = `req-${Date.now()}-${Math.random()}`;
+ handler?.({ requestId, method: def.method, params });
+
+ await vi.waitFor(
+ () => {
+ if (
+ !posted.some(
+ (m) => (m as { requestId?: string }).requestId === requestId,
+ )
+ ) {
+ throw new Error("waiting");
+ }
+ },
+ { timeout: 1000 },
+ );
+
+ return posted.find(
+ (m) => (m as { requestId?: string }).requestId === requestId,
+ ) as { success: boolean; data?: ResponseOf; error?: string };
+ },
+ command: async (method: string, params?: unknown) => {
+ handler?.({ method, params });
+ await new Promise((r) => setTimeout(r, 10));
+ },
+ };
+}
+
+describe("TasksPanel", () => {
+ beforeEach(() => {
+ // Reset shared vscode mocks between tests
+ vi.resetAllMocks();
+ });
+
+ describe("init", () => {
+ it("returns tasks, templates, and baseUrl when logged in", async () => {
+ const h = createHarness();
+ h.client.getTasks.mockResolvedValue([task()]);
+ h.client.getTemplates.mockResolvedValue([template()]);
+ h.client.getTemplateVersionPresets.mockResolvedValue([preset()]);
+
+ const res = await h.request(TasksApi.init);
+
+ expect(res).toMatchObject({
+ success: true,
+ data: {
+ tasksSupported: true,
+ baseUrl: "https://coder.example.com",
+ tasks: [{ id: "task-1" }],
+ templates: [{ id: "template-1", presets: [{ id: "preset-1" }] }],
+ },
+ });
+ });
+
+ it("returns empty when not logged in", async () => {
+ const h = createHarness();
+ h.client.getHost.mockReturnValue(undefined);
+
+ const res = await h.request(TasksApi.init);
+
+ expect(res.success).toBe(true);
+ expect(res.data).toMatchObject({ tasks: [], templates: [] });
+ });
+
+ it("returns tasksSupported=false on 404", async () => {
+ const h = createHarness();
+ h.client.getTasks.mockRejectedValue(createAxiosError(404, "Not found"));
+
+ const res = await h.request(TasksApi.init);
+
+ expect(res).toMatchObject({
+ success: true,
+ data: { tasksSupported: false },
+ });
+ });
+ });
+
+ describe("getTasks", () => {
+ it("returns list of tasks", async () => {
+ const h = createHarness();
+ h.client.getTasks.mockResolvedValue([
+ task({ id: "t1" }),
+ task({ id: "t2" }),
+ ]);
+
+ const res = await h.request(TasksApi.getTasks);
+
+ expect(res.success).toBe(true);
+ expect(res.data).toHaveLength(2);
+ });
+ });
+
+ describe("getTask", () => {
+ it("returns task by id", async () => {
+ const h = createHarness();
+ h.client.getTask.mockResolvedValue(task({ id: "task-123" }));
+
+ const res = await h.request(TasksApi.getTask, { taskId: "task-123" });
+
+ expect(res).toMatchObject({ success: true, data: { id: "task-123" } });
+ });
+ });
+
+ describe("getTemplates", () => {
+ it("returns templates with presets", async () => {
+ const h = createHarness();
+ h.client.getTemplates.mockResolvedValue([template()]);
+ h.client.getTemplateVersionPresets.mockResolvedValue([
+ preset({ ID: "p1", Name: "Default", Default: true }),
+ preset({ ID: "p2", Name: "Custom" }),
+ ]);
+
+ const res = await h.request(TasksApi.getTemplates);
+
+ expect(res.data?.[0].presets).toEqual([
+ { id: "p1", name: "Default", isDefault: true },
+ { id: "p2", name: "Custom", isDefault: false },
+ ]);
+ });
+
+ it("caches templates", async () => {
+ const h = createHarness();
+ h.client.getTemplates.mockResolvedValue([template()]);
+ h.client.getTemplateVersionPresets.mockResolvedValue([]);
+
+ await h.request(TasksApi.getTemplates);
+ await h.request(TasksApi.getTemplates);
+
+ expect(h.client.getTemplates).toHaveBeenCalledTimes(1);
+ });
+ });
+
+ describe("getTaskDetails", () => {
+ it("returns task with logs", async () => {
+ const h = createHarness();
+ h.client.getTask.mockResolvedValue(task());
+ h.client.getTaskLogs.mockResolvedValue([
+ logEntry({ content: "Starting" }),
+ ]);
+
+ const res = await h.request(TasksApi.getTaskDetails, {
+ taskId: "task-1",
+ });
+
+ expect(res).toMatchObject({
+ success: true,
+ data: { task: { id: "task-1" }, logsStatus: "ok" },
+ });
+ expect(res.data?.logs).toHaveLength(1);
+ });
+
+ interface LogCachingTestCase {
+ name: string;
+ state: "complete" | "working";
+ expectedCalls: number;
+ }
+ it.each([
+ {
+ name: "caches logs for completed tasks",
+ state: "complete",
+ expectedCalls: 1,
+ },
+ {
+ name: "refetches logs for active tasks",
+ state: "working",
+ expectedCalls: 2,
+ },
+ ])("$name", async ({ state, expectedCalls }) => {
+ const h = createHarness();
+ h.client.getTask.mockResolvedValue(
+ task({ current_state: { timestamp: "", state, message: "", uri: "" } }),
+ );
+ h.client.getTaskLogs.mockResolvedValue([logEntry()]);
+
+ await h.request(TasksApi.getTaskDetails, { taskId: "task-1" });
+ await h.request(TasksApi.getTaskDetails, { taskId: "task-1" });
+
+ expect(h.client.getTaskLogs).toHaveBeenCalledTimes(expectedCalls);
+ });
+ });
+
+ describe("createTask", () => {
+ it("creates task and notifies", async () => {
+ const h = createHarness();
+ const newTask = task({ id: "new-task" });
+ h.client.createTask.mockResolvedValue(newTask);
+ h.client.getTasks.mockResolvedValue([newTask]);
+
+ const res = await h.request(TasksApi.createTask, {
+ templateVersionId: "v1",
+ prompt: "Build a feature",
+ presetId: "preset-1",
+ });
+
+ expect(res).toMatchObject({ success: true, data: { id: "new-task" } });
+ expect(h.messages()).toContainEqual(
+ expect.objectContaining({ type: "tasksUpdated" }),
+ );
+ });
+ });
+
+ describe("deleteTask", () => {
+ it("deletes task and notifies", async () => {
+ const h = createHarness();
+ h.client.getTasks.mockResolvedValue([]);
+
+ const res = await h.request(TasksApi.deleteTask, { taskId: "task-1" });
+
+ expect(res.success).toBe(true);
+ expect(h.client.deleteTask).toHaveBeenCalledWith("me", "task-1");
+ expect(h.messages()).toContainEqual(
+ expect.objectContaining({ type: "tasksUpdated" }),
+ );
+ });
+ });
+
+ describe("pauseTask / resumeTask", () => {
+ interface WorkspaceControlTestCase {
+ method: typeof TasksApi.pauseTask | typeof TasksApi.resumeTask;
+ clientMethod: keyof MockClient;
+ taskOverrides: Partial;
+ }
+ it.each([
+ {
+ method: TasksApi.pauseTask,
+ clientMethod: "stopWorkspace",
+ taskOverrides: { workspace_id: "ws-1" },
+ },
+ {
+ method: TasksApi.resumeTask,
+ clientMethod: "startWorkspace",
+ taskOverrides: { workspace_id: "ws-1", template_version_id: "tv-1" },
+ },
+ ])(
+ "$method.method calls $clientMethod",
+ async ({ method, clientMethod, taskOverrides }) => {
+ const h = createHarness();
+ h.client.getTask.mockResolvedValue(task(taskOverrides));
+ h.client.getTasks.mockResolvedValue([]);
+
+ const res = await h.request(method, { taskId: "task-1" });
+
+ expect(res.success).toBe(true);
+ expect(h.client[clientMethod]).toHaveBeenCalled();
+ },
+ );
+
+ it("pauseTask fails when no workspace", async () => {
+ const h = createHarness();
+ h.client.getTask.mockResolvedValue(task({ workspace_id: null }));
+
+ const res = await h.request(TasksApi.pauseTask, { taskId: "task-1" });
+
+ expect(res.success).toBe(false);
+ expect(res.error).toContain("no workspace");
+ });
+ });
+
+ describe("viewInCoder / viewLogs", () => {
+ interface OpenExternalTestCase {
+ name: string;
+ method: "viewInCoder" | "viewLogs";
+ taskOverrides: Partial;
+ expectedUrl: string;
+ }
+ it.each([
+ {
+ name: "viewInCoder opens task URL",
+ method: "viewInCoder",
+ taskOverrides: { id: "task-123", owner_name: "alice" },
+ expectedUrl: "https://coder.example.com/tasks/alice/task-123",
+ },
+ {
+ name: "viewLogs opens build URL when workspace exists",
+ method: "viewLogs",
+ taskOverrides: {
+ owner_name: "alice",
+ workspace_name: "my-ws",
+ workspace_build_number: 42,
+ },
+ expectedUrl: "https://coder.example.com/@alice/my-ws/builds/42",
+ },
+ {
+ name: "viewLogs opens task URL when no workspace",
+ method: "viewLogs",
+ taskOverrides: {
+ id: "task-1",
+ owner_name: "alice",
+ workspace_name: "",
+ },
+ expectedUrl: "https://coder.example.com/tasks/alice/task-1",
+ },
+ ])("$name", async ({ method, taskOverrides, expectedUrl }) => {
+ const h = createHarness();
+ h.client.getTask.mockResolvedValue(task(taskOverrides));
+
+ await h.command(method, { taskId: "task-1" });
+
+ expect(vscode.env.openExternal).toHaveBeenCalledWith(
+ vscode.Uri.parse(expectedUrl),
+ );
+ });
+
+ it("viewInCoder does nothing when not logged in", async () => {
+ const h = createHarness();
+ h.client.getHost.mockReturnValue(undefined);
+
+ await h.command("viewInCoder", { taskId: "task-123" });
+
+ expect(vscode.env.openExternal).not.toHaveBeenCalled();
+ });
+ });
+
+ describe("downloadLogs", () => {
+ it("saves logs to file", async () => {
+ const h = createHarness();
+ h.client.getTaskLogs.mockResolvedValue([logEntry()]);
+ const saveUri = vscode.Uri.file("/downloads/logs.txt");
+ vi.mocked(vscode.window.showSaveDialog).mockResolvedValue(saveUri);
+
+ await h.command("downloadLogs", { taskId: "task-1" });
+
+ expect(vscode.workspace.fs.writeFile).toHaveBeenCalledWith(
+ saveUri,
+ expect.any(Buffer),
+ );
+ });
+
+ it("shows warning when no logs", async () => {
+ const h = createHarness();
+ h.client.getTaskLogs.mockResolvedValue([]);
+
+ await h.command("downloadLogs", { taskId: "task-1" });
+
+ expect(vscode.window.showWarningMessage).toHaveBeenCalledWith(
+ "No logs available to download",
+ );
+ });
+
+ it("does nothing when user cancels", async () => {
+ const h = createHarness();
+ h.client.getTaskLogs.mockResolvedValue([logEntry()]);
+ vi.mocked(vscode.window.showSaveDialog).mockResolvedValue(undefined);
+
+ await h.command("downloadLogs", { taskId: "task-1" });
+
+ expect(vscode.workspace.fs.writeFile).not.toHaveBeenCalled();
+ });
+ });
+
+ describe("sendTaskMessage", () => {
+ it("shows not supported message", async () => {
+ const h = createHarness();
+ await h.command("sendTaskMessage", {
+ taskId: "task-1",
+ message: "hello",
+ });
+
+ expect(vscode.window.showInformationMessage).toHaveBeenCalledWith(
+ expect.stringContaining("not yet supported"),
+ );
+ });
+ });
+
+ describe("public methods", () => {
+ it("showCreateForm sends notification", () => {
+ const h = createHarness();
+ h.panel.showCreateForm();
+ expect(h.messages()).toContainEqual({ type: "showCreateForm" });
+ });
+
+ it("refresh sends notification", () => {
+ const h = createHarness();
+ h.panel.refresh();
+ expect(h.messages()).toContainEqual({ type: "refresh" });
+ });
+ });
+
+ describe("error handling", () => {
+ it("returns error on request failure", async () => {
+ const h = createHarness();
+ h.client.getTasks.mockRejectedValue(new Error("Network error"));
+
+ const res = await h.request(TasksApi.init);
+
+ expect(res).toMatchObject({ success: false, error: "Network error" });
+ });
+
+ it("handles unknown methods", async () => {
+ const h = createHarness();
+ const res = await h.request({ method: "unknownMethod" });
+
+ expect(res.success).toBe(false);
+ expect(res.error).toContain("Unknown method");
+ });
+ });
+});
diff --git a/test/webview/shared/api.test.ts b/test/webview/shared/api.test.ts
index fe8c05b8..b49270dc 100644
--- a/test/webview/shared/api.test.ts
+++ b/test/webview/shared/api.test.ts
@@ -21,12 +21,12 @@ beforeEach(() => {
describe("postMessage", () => {
it("sends messages to the extension", () => {
- postMessage({ type: "ready" });
- postMessage({ type: "refresh", data: { id: 1 } });
+ postMessage({ method: "ready" });
+ postMessage({ method: "refresh", params: { id: 1 } });
expect(sent).toEqual([
- { type: "ready" },
- { type: "refresh", data: { id: 1 } },
+ { method: "ready" },
+ { method: "refresh", params: { id: 1 } },
]);
});
});
diff --git a/test/webview/shared/tasks/types.test.ts b/test/webview/shared/tasks/types.test.ts
new file mode 100644
index 00000000..01a231b4
--- /dev/null
+++ b/test/webview/shared/tasks/types.test.ts
@@ -0,0 +1,155 @@
+import { describe, expect, it } from "vitest";
+
+import {
+ getTaskActions,
+ getTaskUIState,
+ type Task,
+ type TaskActions,
+ type TaskUIState,
+} from "@repo/shared";
+
+import { minimalTask as task, taskState as state } from "../../../mocks/tasks";
+
+describe("getTaskActions", () => {
+ interface TaskActionsTestCase {
+ name: string;
+ overrides: Partial;
+ expected: TaskActions;
+ }
+ it.each([
+ {
+ name: "no workspace",
+ overrides: {},
+ expected: { canPause: false, canResume: false },
+ },
+ {
+ name: "running workspace",
+ overrides: { workspace_id: "ws", workspace_status: "running" },
+ expected: { canPause: true, canResume: false },
+ },
+ {
+ name: "stopped workspace",
+ overrides: { workspace_id: "ws", workspace_status: "stopped" },
+ expected: { canPause: false, canResume: true },
+ },
+ {
+ name: "failed workspace",
+ overrides: { workspace_id: "ws", workspace_status: "failed" },
+ expected: { canPause: false, canResume: true },
+ },
+ {
+ name: "canceled workspace",
+ overrides: { workspace_id: "ws", workspace_status: "canceled" },
+ expected: { canPause: false, canResume: true },
+ },
+ {
+ name: "starting workspace",
+ overrides: { workspace_id: "ws", workspace_status: "starting" },
+ expected: { canPause: false, canResume: false },
+ },
+ {
+ name: "pending workspace",
+ overrides: { workspace_id: "ws", workspace_status: "pending" },
+ expected: { canPause: false, canResume: false },
+ },
+ {
+ name: "workspace_id null with running status",
+ overrides: { workspace_id: null, workspace_status: "running" },
+ expected: { canPause: false, canResume: false },
+ },
+ ])("$name", ({ overrides, expected }) => {
+ expect(getTaskActions(task(overrides))).toEqual(expected);
+ });
+});
+
+describe("getTaskUIState", () => {
+ interface TaskUIStateTestCase {
+ name: string;
+ overrides: Partial;
+ expected: TaskUIState;
+ }
+ it.each([
+ // Error states (highest priority)
+ {
+ name: "task status error",
+ overrides: { status: "error" },
+ expected: "error",
+ },
+ {
+ name: "task state failed",
+ overrides: { current_state: state("failed") },
+ expected: "error",
+ },
+ {
+ name: "error takes priority over paused",
+ overrides: { status: "error", workspace_status: "stopped" },
+ expected: "error",
+ },
+
+ // Paused states
+ {
+ name: "stopped workspace",
+ overrides: { workspace_status: "stopped" },
+ expected: "paused",
+ },
+ {
+ name: "stopping workspace",
+ overrides: { workspace_status: "stopping" },
+ expected: "paused",
+ },
+ {
+ name: "canceled workspace",
+ overrides: { workspace_status: "canceled" },
+ expected: "paused",
+ },
+
+ // Initializing states
+ {
+ name: "starting workspace",
+ overrides: { workspace_status: "starting" },
+ expected: "initializing",
+ },
+ {
+ name: "pending workspace",
+ overrides: { workspace_status: "pending" },
+ expected: "initializing",
+ },
+
+ // Active states
+ {
+ name: "working state",
+ overrides: {
+ status: "active",
+ workspace_status: "running",
+ current_state: state("working"),
+ },
+ expected: "working",
+ },
+ {
+ name: "idle state",
+ overrides: {
+ status: "active",
+ workspace_status: "running",
+ current_state: state("idle"),
+ },
+ expected: "idle",
+ },
+
+ // Complete state
+ {
+ name: "complete state",
+ overrides: { current_state: state("complete") },
+ expected: "complete",
+ },
+
+ // Default fallback
+ { name: "no workspace or state", overrides: {}, expected: "idle" },
+ {
+ name: "running but no state",
+ overrides: { workspace_status: "running", current_state: null },
+ expected: "idle",
+ },
+ ])("$name → $expected", ({ overrides, expected }) => {
+ expect(getTaskUIState(task(overrides))).toBe(expected);
+ });
+});
diff --git a/test/webview/shared/useIpc.test.ts b/test/webview/shared/useIpc.test.ts
new file mode 100644
index 00000000..f20104fa
--- /dev/null
+++ b/test/webview/shared/useIpc.test.ts
@@ -0,0 +1,305 @@
+import { act, renderHook } from "@testing-library/react";
+import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
+
+import { defineCommand, defineNotification, defineRequest } from "@repo/shared";
+import { useIpc, type UseIpcOptions } from "@repo/webview-shared/react";
+
+const sent: unknown[] = [];
+
+vi.stubGlobal(
+ "acquireVsCodeApi",
+ vi.fn(() => ({
+ postMessage: (msg: unknown) => sent.push(msg),
+ getState: () => undefined,
+ setState: () => {},
+ })),
+);
+
+/** Get requestId from the last sent message */
+const lastRequestId = () =>
+ (sent[sent.length - 1] as { requestId: string }).requestId;
+
+/** Simulate a successful response */
+async function respond(requestId: string, data?: T) {
+ await act(async () => {
+ window.dispatchEvent(
+ new MessageEvent("message", {
+ data: { requestId, success: true, data },
+ }),
+ );
+ await Promise.resolve();
+ });
+}
+
+/** Simulate a failed response */
+async function respondError(requestId: string, error: string) {
+ await act(async () => {
+ window.dispatchEvent(
+ new MessageEvent("message", {
+ data: { requestId, success: false, error },
+ }),
+ );
+ await Promise.resolve();
+ });
+}
+
+/** Simulate a notification from the extension */
+function notify(type: string, data?: T) {
+ act(() => {
+ window.dispatchEvent(new MessageEvent("message", { data: { type, data } }));
+ });
+}
+
+describe("useIpc", () => {
+ let unmount: () => void;
+
+ beforeEach(() => {
+ sent.length = 0;
+ });
+
+ afterEach(() => {
+ unmount?.();
+ });
+
+ /** Render the hook and register unmount for automatic cleanup */
+ function renderIpc(options?: UseIpcOptions) {
+ const hook = renderHook(() => useIpc(options));
+ unmount = hook.unmount;
+ return hook.result;
+ }
+
+ describe("request", () => {
+ it("sends message with method, params, and requestId", async () => {
+ const result = renderIpc();
+ const req = defineRequest<{ id: string }, string>("getItem");
+
+ act(() => {
+ void result.current.request(req, { id: "123" });
+ });
+
+ const msg = sent[0] as Record;
+ expect(msg).toMatchObject({ method: "getItem", params: { id: "123" } });
+ expect(typeof msg.requestId).toBe("string");
+
+ // Resolve pending request to avoid unhandled rejection on unmount
+ await respond(msg.requestId as string);
+ });
+
+ it("resolves when response.success is true", async () => {
+ const result = renderIpc();
+ const req = defineRequest("getValue");
+
+ let resolved: { value: number } | undefined;
+ act(() => {
+ void result.current.request(req).then((v) => (resolved = v));
+ });
+
+ // Simulate extension sending success response
+ await respond(lastRequestId(), { value: 42 });
+
+ expect(resolved).toEqual({ value: 42 });
+ });
+
+ it("rejects when response.success is false", async () => {
+ const result = renderIpc();
+ const req = defineRequest("fail");
+
+ let error: Error | undefined;
+ act(() => {
+ void result.current.request(req).catch((e) => (error = e));
+ });
+
+ // Simulate extension sending error response
+ await respondError(lastRequestId(), "Bad request");
+
+ expect(error?.message).toBe("Bad request");
+ });
+
+ it("rejects with default message when error is empty", async () => {
+ const result = renderIpc();
+ const req = defineRequest("empty");
+
+ let error: Error | undefined;
+ act(() => {
+ void result.current.request(req).catch((e) => (error = e));
+ });
+
+ await respondError(lastRequestId(), "");
+
+ expect(error?.message).toBe("Request failed");
+ });
+
+ it("ignores responses with unknown requestId", async () => {
+ const result = renderIpc();
+ const req = defineRequest("test");
+
+ let resolved = false;
+ act(() => {
+ void result.current.request(req).then(() => (resolved = true));
+ });
+
+ // Response with wrong requestId should be ignored
+ await respond("unknown-id", 1);
+ expect(resolved).toBe(false);
+
+ // Resolve the actual pending request before unmount
+ await respond(lastRequestId(), 0);
+ });
+ });
+
+ describe("timeout", () => {
+ beforeEach(() => vi.useFakeTimers());
+ afterEach(() => vi.useRealTimers());
+
+ it("rejects after timeout", async () => {
+ const result = renderIpc({ timeoutMs: 100 });
+ const req = defineRequest("slow");
+
+ let error: Error | undefined;
+ act(() => {
+ void result.current.request(req).catch((e) => (error = e));
+ });
+
+ await act(async () => {
+ vi.advanceTimersByTime(100);
+ await Promise.resolve();
+ });
+
+ expect(error?.message).toBe("Request timeout: slow");
+ });
+
+ it("defaults to 30 second timeout", async () => {
+ const result = renderIpc();
+ const req = defineRequest("default");
+
+ let rejected = false;
+ act(() => {
+ void result.current.request(req).catch(() => (rejected = true));
+ });
+
+ await act(async () => {
+ vi.advanceTimersByTime(29999);
+ await Promise.resolve();
+ });
+ expect(rejected).toBe(false);
+
+ await act(async () => {
+ vi.advanceTimersByTime(1);
+ await Promise.resolve();
+ });
+ expect(rejected).toBe(true);
+ });
+ });
+
+ describe("command", () => {
+ it("sends message without requestId", () => {
+ const result = renderIpc();
+ const cmd = defineCommand<{ action: string }>("doAction");
+
+ act(() => {
+ result.current.command(cmd, { action: "save" });
+ });
+
+ expect(sent[0]).toMatchObject({
+ method: "doAction",
+ params: { action: "save" },
+ });
+ expect(sent[0]).not.toHaveProperty("requestId");
+ });
+ });
+
+ describe("onNotification", () => {
+ it("calls handler when notification is received", () => {
+ const result = renderIpc();
+ const notification = defineNotification<{ count: number }>("update");
+ const handler = vi.fn();
+
+ act(() => {
+ result.current.onNotification(notification, handler);
+ });
+
+ notify("update", { count: 5 });
+
+ expect(handler).toHaveBeenCalledWith({ count: 5 });
+ });
+
+ it("supports multiple handlers for same notification", () => {
+ const result = renderIpc();
+ const notification = defineNotification("event");
+ const handler1 = vi.fn();
+ const handler2 = vi.fn();
+
+ act(() => {
+ result.current.onNotification(notification, handler1);
+ result.current.onNotification(notification, handler2);
+ });
+
+ notify("event", "hello");
+
+ expect(handler1).toHaveBeenCalledWith("hello");
+ expect(handler2).toHaveBeenCalledWith("hello");
+ });
+
+ it("unsubscribe stops handler from being called", () => {
+ const result = renderIpc();
+ const notification = defineNotification("tick");
+ const handler = vi.fn();
+
+ let unsubscribe: () => void;
+ act(() => {
+ unsubscribe = result.current.onNotification(notification, handler);
+ });
+
+ notify("tick", 1);
+ expect(handler).toHaveBeenCalledTimes(1);
+
+ act(() => unsubscribe());
+
+ notify("tick", 2);
+ expect(handler).toHaveBeenCalledTimes(1);
+ });
+
+ it("ignores notifications for unsubscribed types", () => {
+ const result = renderIpc();
+ const notification = defineNotification("specific");
+ const handler = vi.fn();
+
+ act(() => {
+ result.current.onNotification(notification, handler);
+ });
+
+ notify("other", null);
+
+ expect(handler).not.toHaveBeenCalled();
+ });
+ });
+
+ describe("cleanup", () => {
+ it("rejects pending requests on unmount", async () => {
+ const result = renderIpc();
+ const req = defineRequest("pending");
+
+ let error: Error | undefined;
+ act(() => {
+ void result.current.request(req).catch((e) => (error = e));
+ });
+
+ await act(async () => {
+ unmount();
+ await Promise.resolve();
+ });
+
+ expect(error?.message).toBe("Component unmounted");
+ });
+
+ it("removes message listener on unmount", () => {
+ const spy = vi.spyOn(window, "removeEventListener");
+ renderIpc();
+
+ act(() => unmount());
+
+ expect(spy).toHaveBeenCalledWith("message", expect.any(Function));
+ spy.mockRestore();
+ });
+ });
+});
diff --git a/tsconfig.json b/tsconfig.json
index a2b374cc..a54a705c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -11,7 +11,7 @@
"noImplicitOverride": true,
"noImplicitReturns": true,
"paths": {
- "@repo/webview-shared": ["./packages/webview-shared/extension.d.ts"]
+ "@repo/shared": ["./packages/shared/src/index.ts"]
}
},
"include": ["src"]
diff --git a/vitest.config.ts b/vitest.config.ts
index fd34ceb8..dc461d91 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -42,6 +42,10 @@ export default defineConfig({
resolve: {
alias: {
"@repo/webview-shared": webviewSharedAlias,
+ "@repo/tasks/components": path.resolve(
+ __dirname,
+ "packages/tasks/src/components",
+ ),
},
},
},