diff --git a/README.md b/README.md index 86b2b11..8404dc1 100644 --- a/README.md +++ b/README.md @@ -1,75 +1,175 @@ -# React + TypeScript + Vite +# Hive Labaratory Component Documentation -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. +`Labaratory` is a fully featured React component that provides a modern GraphQL playground experience (collections, tabs, history, preflight scripts, environment variables, tests, etc.). It ships with an opinionated UI and a context provider that exposes granular hooks for integrating with your own storage or analytics layers. -Currently, two official plugins are available: +This document explains how to embed the component, what data it needs, and how to react to user changes through the available callbacks. -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh +--- -## React Compiler +## Getting Started -The React Compiler is enabled on this template. See [this documentation](https://react.dev/learn/react-compiler) for more information. +```tsx +import { Labaratory } from "@/components/labaratory/labaratory"; -Note: This will impact Vite dev & build performances. +export const Playground = () => { + return ( + { + localStorage.setItem("lab-endpoint", endpoint ?? ""); + }} + defaultOperations={[]} + onOperationCreate={(operation) => console.log("created", operation)} + onOperationUpdate={(operation) => console.log("updated", operation)} + onOperationDelete={(operation) => console.log("deleted", operation)} + /> + ); +}; +``` + +The component renders the full UI and injects a `LabaratoryProvider`, so any nested component can call `useLabaratory()` to access the current state. + +--- + +## Data Flow Overview + +`Labaratory` is controlled via two complementary mechanisms: + +1. **Default Values** – `default*` props let you hydrate the playground from persisted data (e.g., localStorage, database). These are only read during initialization. +2. **Event Callbacks** – `on*` props fire whenever users create/update/delete entities within the playground. Use them to keep external storage in sync or to trigger side effects (analytics, notifications, etc.). + +If you provide both a default value and a callback for the same entity, you can make the playground fully persistent without touching its internals. + +--- + +## Props Reference + +### Endpoint + +- `defaultEndpoint?: string | null` +- `onEndpointChange?: (endpoint: string | null) => void` + +### Collections + +- `defaultCollections?: LabaratoryCollection[]` +- `onCollectionsChange?: (collections: LabaratoryCollection[]) => void` +- `onCollectionCreate?: (collection: LabaratoryCollection) => void` +- `onCollectionUpdate?: (collection: LabaratoryCollection) => void` +- `onCollectionDelete?: (collection: LabaratoryCollection) => void` +- `onCollectionOperationCreate?: (collection: LabaratoryCollection, operation: LabaratoryCollectionOperation) => void` +- `onCollectionOperationUpdate?: (collection: LabaratoryCollection, operation: LabaratoryCollectionOperation) => void` +- `onCollectionOperationDelete?: (collection: LabaratoryCollection, operation: LabaratoryCollectionOperation) => void` + +### Operations + +- `defaultOperations?: LabaratoryOperation[]` +- `defaultActiveOperationId?: string` +- `onOperationsChange?: (operations: LabaratoryOperation[]) => void` +- `onActiveOperationIdChange?: (operationId: string) => void` +- `onOperationCreate?: (operation: LabaratoryOperation) => void` +- `onOperationUpdate?: (operation: LabaratoryOperation) => void` +- `onOperationDelete?: (operation: LabaratoryOperation) => void` + +### History + +- `defaultHistory?: LabaratoryHistory[]` +- `onHistoryChange?: (history: LabaratoryHistory[]) => void` +- `onHistoryCreate?: (history: LabaratoryHistory) => void` +- `onHistoryUpdate?: (history: LabaratoryHistory) => void` +- `onHistoryDelete?: (history: LabaratoryHistory) => void` + +### Tabs + +- `defaultTabs?: LabaratoryTab[]` +- `defaultActiveTabId?: string | null` +- `onTabsChange?: (tabs: LabaratoryTab[]) => void` +- `onActiveTabIdChange?: (tabId: string | null) => void` -## Expanding the ESLint configuration +### Preflight Script -If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: +- `defaultPreflight?: LabaratoryPreflight | null` +- `onPreflightChange?: (preflight: LabaratoryPreflight | null) => void` -```js -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... +### Environment Variables - // Remove tseslint.configs.recommended and replace with this - tseslint.configs.recommendedTypeChecked, - // Alternatively, use this for stricter rules - tseslint.configs.strictTypeChecked, - // Optionally, add this for stylistic rules - tseslint.configs.stylisticTypeChecked, +- `defaultEnv?: LabaratoryEnv | null` +- `onEnvChange?: (env: LabaratoryEnv | null) => void` - // Other configs... - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +### Settings + +- `defaultSettings?: LabaratorySettings | null` +- `onSettingsChange?: (settings: LabaratorySettings | null) => void` + +### Tests + +- `defaultTests?: LabaratoryTest[]` +- `onTestsChange?: (tests: LabaratoryTest[]) => void` + +### Dialog Helpers + +`useLabaratory()` also exposes `openAddCollectionDialog`, `openUpdateEndpointDialog`, and `openAddTestDialog` so that external buttons can toggle the built-in dialogs. + +--- + +## Consuming State via `useLabaratory` + +Inside any descendant of `Labaratory`, call the hook to access live state and actions: + +```tsx +import { useLabaratory } from "@/components/labaratory/context"; + +const RunButton = () => { + const { runActiveOperation, endpoint } = useLabaratory(); + + return ( + + ); +}; ``` -You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: - -```js -// eslint.config.js -import reactX from 'eslint-plugin-react-x' -import reactDom from 'eslint-plugin-react-dom' - -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - // Enable lint rules for React - reactX.configs['recommended-typescript'], - // Enable lint rules for React DOM - reactDom.configs.recommended, - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +All actions returned by the hook (collections, operations, history, tabs, preflight, env, settings, tests) stay in sync with the UI. + +--- + +## Persistence Example + +The snippet below demonstrates how to persist operations and history to `localStorage` using the granular callbacks: + +```tsx +const STORAGE_KEY = "labaratory-data"; + +const loadData = () => { + try { + return JSON.parse(localStorage.getItem(STORAGE_KEY) ?? "{}"); + } catch { + return {}; + } +}; + +const save = (partial: any) => { + const current = loadData(); + localStorage.setItem(STORAGE_KEY, JSON.stringify({ ...current, ...partial })); +}; + +const data = loadData(); + +export function PersistentPlayground() { + return ( + save({ operations })} + onOperationCreate={(operation) => + console.info("operation created", operation) + } + defaultHistory={data.history ?? []} + onHistoryDelete={(history) => console.info("history deleted", history)} + onHistoryChange={(history) => save({ history })} + /> + ); +} ``` diff --git a/electron/main.cjs b/electron/main.cjs deleted file mode 100644 index 53d528f..0000000 --- a/electron/main.cjs +++ /dev/null @@ -1,33 +0,0 @@ -const { app, BrowserWindow } = require('electron'); -const path = require('path'); - -const isDev = !app.isPackaged; - -function createWindow() { - const win = new BrowserWindow({ - width: 1200, - height: 800, - webPreferences: { - preload: path.join(__dirname, 'preload.cjs'), - }, - titleBarStyle: "hiddenInset" - }); - - if (isDev) { - win.loadURL('http://localhost:5173'); - } else { - win.loadFile(path.join(__dirname, '../dist/index.html')); - } -} - -app.whenReady().then(() => { - createWindow(); - - app.on('activate', () => { - if (BrowserWindow.getAllWindows().length === 0) createWindow(); - }); -}); - -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') app.quit(); -}); \ No newline at end of file diff --git a/electron/preload.cjs b/electron/preload.cjs deleted file mode 100644 index 0fb149c..0000000 --- a/electron/preload.cjs +++ /dev/null @@ -1,5 +0,0 @@ -const { contextBridge } = require('electron'); - -contextBridge.exposeInMainWorld('electron', { - ping: () => 'pong', -}); \ No newline at end of file diff --git a/index.html b/index.html index 4a02c49..d99d9c4 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,7 @@ Hive Laboratory - + diff --git a/package.json b/package.json index 5d73468..e8bf589 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "private": true, "version": "0.0.0", "type": "module", - "main": "electron/main.cjs", "build": { "appId": "com.guild.hive.laboratory", "productName": "Hive Laboratory", @@ -20,15 +19,16 @@ "dev": "vite", "dev:electron": "VITE_TARGET=electron concurrently \"vite\" \"wait-on http://localhost:5173 && electron .\"", "build": "tsc -b && vite build", - "dist:electron": "VITE_TARGET=electron vite build && electron-builder", "lint": "eslint .", "preview": "vite preview" }, "dependencies": { + "@dagrejs/dagre": "^1.1.8", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", + "@mlc-ai/web-llm": "^0.2.79", "@monaco-editor/react": "4.8.0-rc.2", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-checkbox": "^1.3.3", @@ -48,9 +48,11 @@ "@tanstack/react-form": "^1.23.8", "@tanstack/react-router": "^1.135.0", "@tanstack/react-router-devtools": "^1.135.0", + "@xyflow/react": "^12.9.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", + "crypto-js": "^4.2.0", "date-fns": "^4.1.0", "esbuild": "^0.25.11", "graphql": "^16.11.0", @@ -58,8 +60,9 @@ "lodash": "^4.17.21", "lucide-react": "^0.548.0", "lz-string": "^1.5.0", - "monaco-editor": "^0.54.0", + "monaco-editor": "^0.52.2", "monaco-graphql": "^1.7.2", + "monacopilot": "^1.2.7", "next-themes": "^0.4.6", "react": "^19.1.1", "react-dom": "^19.1.1", @@ -73,6 +76,7 @@ "devDependencies": { "@eslint/js": "^9.36.0", "@tanstack/router-plugin": "^1.135.0", + "@types/crypto-js": "^4.2.2", "@types/lodash": "^4.17.20", "@types/node": "^24.6.0", "@types/react": "^19.1.16", @@ -80,8 +84,6 @@ "@vitejs/plugin-react": "^5.0.4", "babel-plugin-react-compiler": "^19.1.0-rc.3", "concurrently": "^9.2.1", - "electron": "^39.1.1", - "electron-builder": "^26.0.12", "eslint": "^9.36.0", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.22", @@ -96,5 +98,9 @@ "overrides": { "vite": "npm:rolldown-vite@7.1.14" } + }, + "peerDependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6fb5afa..f3a5531 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: .: dependencies: + '@dagrejs/dagre': + specifier: ^1.1.8 + version: 1.1.8 '@dnd-kit/core': specifier: ^6.3.1 version: 6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -23,9 +26,12 @@ importers: '@dnd-kit/utilities': specifier: ^3.2.2 version: 3.2.2(react@19.2.0) + '@mlc-ai/web-llm': + specifier: ^0.2.79 + version: 0.2.79 '@monaco-editor/react': specifier: 4.8.0-rc.2 - version: 4.8.0-rc.2(monaco-editor@0.54.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 4.8.0-rc.2(monaco-editor@0.52.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-alert-dialog': specifier: ^1.1.15 version: 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -80,6 +86,9 @@ importers: '@tanstack/react-router-devtools': specifier: ^1.135.0 version: 1.135.0(@tanstack/react-router@1.135.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.134.20)(@types/node@24.9.1)(csstype@3.1.3)(esbuild@0.25.11)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)(tiny-invariant@1.3.3)(tsx@4.20.6) + '@xyflow/react': + specifier: ^12.9.3 + version: 12.9.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -89,6 +98,9 @@ importers: cmdk: specifier: ^1.1.1 version: 1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -111,11 +123,14 @@ importers: specifier: ^1.5.0 version: 1.5.0 monaco-editor: - specifier: ^0.54.0 - version: 0.54.0 + specifier: ^0.52.2 + version: 0.52.2 monaco-graphql: specifier: ^1.7.2 - version: 1.7.2(graphql@16.11.0)(monaco-editor@0.54.0)(prettier@3.6.2) + version: 1.7.2(graphql@16.11.0)(monaco-editor@0.52.2)(prettier@3.6.2) + monacopilot: + specifier: ^1.2.7 + version: 1.2.7(monaco-editor@0.52.2) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -139,7 +154,7 @@ importers: version: 4.1.16 vite-plugin-monaco-editor: specifier: ^1.1.0 - version: 1.1.0(monaco-editor@0.54.0) + version: 1.1.0(monaco-editor@0.52.2) zod: specifier: ^4.1.12 version: 4.1.12 @@ -150,6 +165,9 @@ importers: '@tanstack/router-plugin': specifier: ^1.135.0 version: 1.135.0(@tanstack/react-router@1.135.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(rolldown-vite@7.1.14(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(tsx@4.20.6)) + '@types/crypto-js': + specifier: ^4.2.2 + version: 4.2.2 '@types/lodash': specifier: ^4.17.20 version: 4.17.20 @@ -171,12 +189,6 @@ importers: concurrently: specifier: ^9.2.1 version: 9.2.1 - electron: - specifier: ^39.1.1 - version: 39.1.1 - electron-builder: - specifier: ^26.0.12 - version: 26.0.12(electron-builder-squirrel-windows@26.0.12) eslint: specifier: ^9.36.0 version: 9.38.0(jiti@2.6.1) @@ -207,9 +219,6 @@ importers: packages: - 7zip-bin@5.2.0: - resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -351,9 +360,12 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} - '@develar/schema-utils@2.6.5': - resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} - engines: {node: '>= 8.9.0'} + '@dagrejs/dagre@1.1.8': + resolution: {integrity: sha512-5SEDlndt4W/LaVzPYJW+bSmSEZc9EzTf8rJ20WCKvjS5EAZAN0b+x0Yww7VMT4R3Wootkg+X9bUfUxazYw6Blw==} + + '@dagrejs/graphlib@2.2.4': + resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==} + engines: {node: '>17.0.0'} '@dnd-kit/accessibility@3.1.1': resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} @@ -383,53 +395,6 @@ packages: peerDependencies: react: '>=16.8.0' - '@electron/asar@3.2.18': - resolution: {integrity: sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==} - engines: {node: '>=10.12.0'} - hasBin: true - - '@electron/asar@3.4.1': - resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} - engines: {node: '>=10.12.0'} - hasBin: true - - '@electron/fuses@1.8.0': - resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} - hasBin: true - - '@electron/get@2.0.3': - resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} - engines: {node: '>=12'} - - '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': - resolution: {tarball: https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2} - version: 10.2.0-electron.1 - engines: {node: '>=12.13.0'} - hasBin: true - - '@electron/notarize@2.5.0': - resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} - engines: {node: '>= 10.0.0'} - - '@electron/osx-sign@1.3.1': - resolution: {integrity: sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==} - engines: {node: '>=12.0.0'} - hasBin: true - - '@electron/rebuild@3.7.0': - resolution: {integrity: sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==} - engines: {node: '>=12.13.0'} - hasBin: true - - '@electron/universal@2.0.1': - resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} - engines: {node: '>=16.4'} - - '@electron/windows-sign@1.2.2': - resolution: {integrity: sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==} - engines: {node: '>=14.14'} - hasBin: true - '@emnapi/core@1.6.0': resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} @@ -648,9 +613,6 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@gar/promisify@1.1.3': - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - '@hapi/address@5.1.1': resolution: {integrity: sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==} engines: {node: '>=14.0.0'} @@ -687,18 +649,6 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -715,13 +665,8 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@malept/cross-spawn-promise@2.0.0': - resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} - engines: {node: '>= 12.13.0'} - - '@malept/flatpak-bundler@0.4.0': - resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} - engines: {node: '>= 10.0.0'} + '@mlc-ai/web-llm@0.2.79': + resolution: {integrity: sha512-Hy1ZHQ0o2bZGZoVnGK48+fts/ZSKwLe96xjvqL/6C59Mem9HoHTcFE07NC2E23mRmhd01tL655N6CPeYmwWgwQ==} '@monaco-editor/loader@1.6.1': resolution: {integrity: sha512-w3tEnj9HYEC73wtjdpR089AqkUPskFRcdkxsiSFt3SoUc3OHpmu+leP94CXBm4mHfefmhsdfI0ZQu6qJ0wgtPg==} @@ -733,6 +678,9 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@monacopilot/core@1.2.7': + resolution: {integrity: sha512-N2KSfEcgQsVieEQb9zxAJpzwY0fg1ipnOrhxoebDxNYBHy/u8vxH7UnWo+KXBWXE8Dso95vQlVagiVtsAnMTgw==} + '@napi-rs/wasm-runtime@1.0.7': resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} @@ -748,15 +696,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@npmcli/fs@2.1.2': - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - '@npmcli/move-file@2.0.1': - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs - '@oxc-project/runtime@0.92.0': resolution: {integrity: sha512-Z7x2dZOmznihvdvCvLKMl+nswtOSVxS2H2ocar+U9xx6iMfTp0VGIrX6a4xB1v80IwOPC7dT1LXIJrY70Xu3Jw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -764,10 +703,6 @@ packages: '@oxc-project/types@0.93.0': resolution: {integrity: sha512-yNtwmWZIBtJsMr5TEfoZFDxIWV6OdScOpza/f5YxbqUMJk+j6QX3Cf3jgZShGEFYWQJ5j9mJ6jM0tZHu2J9Yrg==} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -1326,17 +1261,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.43': resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==} - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - '@tailwindcss/node@4.1.16': resolution: {integrity: sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==} @@ -1533,10 +1460,6 @@ packages: resolution: {integrity: sha512-IKwZENsK7owmW1Lm5FhuHegY/SyQ8KqtL/7mTSnzoKJgfzhrrf9qwKB1rmkKkt+svUuy/Zw3uVEpZtUzQruWtA==} engines: {node: '>=12'} - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -1552,42 +1475,39 @@ packages: '@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/crypto-js@4.2.2': + resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} - '@types/fs-extra@9.0.13': - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/lodash@4.17.20': resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node@22.19.0': - resolution: {integrity: sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA==} - '@types/node@24.9.1': resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} - '@types/plist@3.0.5': - resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} - '@types/react-dom@19.2.2': resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} peerDependencies: @@ -1596,15 +1516,6 @@ packages: '@types/react@19.2.2': resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - - '@types/verror@1.10.11': - resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.46.2': resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1670,12 +1581,14 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@xmldom/xmldom@0.8.11': - resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} - engines: {node: '>=10.0.0'} + '@xyflow/react@12.9.3': + resolution: {integrity: sha512-PSWoJ8vHiEqSIkLIkge+0eiHWiw4C6dyFDA03VKWJkqbU4A13VlDIVwKqf/Znuysn2GQw/zA61zpHE4rGgax7Q==} + peerDependencies: + react: '>=17' + react-dom: '>=17' - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + '@xyflow/system@0.0.73': + resolution: {integrity: sha512-C2ymH2V4mYDkdVSiRx0D7R0s3dvfXiupVBcko6tXP5K4tVdSBMo22/e3V9yRNdn+2HQFv44RFKzwOyCcUUDAVQ==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1687,27 +1600,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1715,18 +1607,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} @@ -1735,16 +1619,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - app-builder-bin@5.0.0-alpha.12: - resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - - app-builder-lib@26.0.12: - resolution: {integrity: sha512-+/CEPH1fVKf6HowBUs6LcAIoRcjeqgvAeoSE+cl7Y7LndyQ9ViGPYibNk7wmhMHzNgHIuIbw4nWADPO+4mjgWw==} - engines: {node: '>=14.0.0'} - peerDependencies: - dmg-builder: 26.0.12 - electron-builder-squirrel-windows: 26.0.12 - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1752,32 +1626,13 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - async-exit-hook@2.0.1: - resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} - engines: {node: '>=0.12.0'} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - axios@1.13.2: resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} @@ -1791,9 +1646,6 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.20: resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==} hasBin: true @@ -1802,13 +1654,6 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -1824,34 +1669,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - builder-util-runtime@9.3.1: - resolution: {integrity: sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==} - engines: {node: '>=12.0.0'} - - builder-util@26.0.11: - resolution: {integrity: sha512-xNjXfsldUEe153h1DraD0XvDOpqGR0L5eKFkdReB7eFW5HqysDZFfly4rckda6y9dF39N3pkPlOblcfHKGw+uA==} - - cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1871,47 +1688,16 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - chromium-pickle-js@0.2.0: - resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} + classcat@5.0.5: + resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==} cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -1933,18 +1719,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - compare-version@0.1.2: - resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} - engines: {node: '>=0.10.0'} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1953,31 +1727,60 @@ packages: engines: {node: '>=18'} hasBin: true - config-file-ts@0.2.8-rc1: - resolution: {integrity: sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} cookie-es@2.0.0: resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - - crc@3.8.0: - resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} - - cross-dirname@0.1.0: - resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} @@ -1996,28 +1799,9 @@ packages: decode-formdata@0.9.0: resolution: {integrity: sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw==} - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2029,9 +1813,6 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - devalue@5.4.2: resolution: {integrity: sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==} @@ -2039,87 +1820,20 @@ packages: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} - dir-compare@4.2.0: - resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - - dmg-builder@26.0.12: - resolution: {integrity: sha512-59CAAjAhTaIMCN8y9kD573vDkxbs1uhDcrFLHSgutYdPcGOU35Rf95725snvzEOy4BFB7+eLJ8djCNPmGwG67w==} - - dmg-license@1.0.11: - resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} - engines: {node: '>=8'} - os: [darwin] - hasBin: true - - dompurify@3.1.7: - resolution: {integrity: sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==} - - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} - engines: {node: '>=12'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - - electron-builder-squirrel-windows@26.0.12: - resolution: {integrity: sha512-kpwXM7c/ayRUbYVErQbsZ0nQZX4aLHQrPEG9C4h9vuJCXylwFH8a7Jgi2VpKIObzCXO7LKHiCw4KdioFLFOgqA==} - - electron-builder@26.0.12: - resolution: {integrity: sha512-cD1kz5g2sgPTMFHjLxfMjUK5JABq3//J4jPswi93tOPFz6btzXYtK5NrDt717NRbukCUDOrrvmYVOWERlqoiXA==} - engines: {node: '>=14.0.0'} - hasBin: true - - electron-publish@26.0.11: - resolution: {integrity: sha512-a8QRH0rAPIWH9WyyS5LbNvW9Ark6qe63/LqDB7vu2JXYpi0Gma5Q60Dh4tmTqhOBQt0xsrzD8qE7C+D7j+B24A==} - electron-to-chromium@1.5.241: resolution: {integrity: sha512-ILMvKX/ZV5WIJzzdtuHg8xquk2y0BOGlFOxBVwTpbiXqWIH0hamG45ddU4R3PQ0gYu+xgo0vdHXHli9sHIGb4w==} - electron-winstaller@5.4.0: - resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} - engines: {node: '>=8.0.0'} - - electron@39.1.1: - resolution: {integrity: sha512-VuFEI1yQ7BH3RYI5VZtwFlzGp4rpPRd5oEc26ZQIItVLcLTbXt4/O7o4hs+1fyg9Q3NvGAifgX5Vp5EBOIFpAg==} - engines: {node: '>= 12.20.55'} - hasBin: true - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.18.3: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2136,9 +1850,6 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - esbuild@0.25.11: resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} @@ -2210,18 +1921,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - exponential-backoff@3.1.3: - resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2238,9 +1937,6 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2254,9 +1950,6 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2281,41 +1974,10 @@ packages: debug: optional: true - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - form-data@4.0.4: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} - engines: {node: '>=14.14'} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2344,10 +2006,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - get-tsconfig@4.13.0: resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} @@ -2359,23 +2017,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -2384,10 +2025,6 @@ packages: resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} engines: {node: '>=18'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - goober@2.1.18: resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==} peerDependencies: @@ -2397,10 +2034,6 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2440,9 +2073,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -2455,48 +2085,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - - iconv-corefoundation@1.1.7: - resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} - engines: {node: ^8.11.2 || >=10} - os: [darwin] - - 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.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2513,32 +2101,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2551,29 +2117,10 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - - isbinaryfile@5.0.6: - resolution: {integrity: sha512-I+NmIfBHUl+r2wcDd6JwE9yWje/PIVY/R5/CmV8dXLZd5K+L9X2klAOwfAHNnondLXkbHyTAleQAWonpTJBTtw==} - engines: {node: '>= 18.0.0'} - isbot@5.1.32: resolution: {integrity: sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==} engines: {node: '>=18'} @@ -2581,14 +2128,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -2600,8 +2139,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsesc@3.1.0: @@ -2618,26 +2157,14 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - lazy-val@1.0.5: - resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2722,28 +2249,13 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} 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'} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - lucide-react@0.548.0: resolution: {integrity: sha512-63b16z63jM9yc1MwxajHeuu0FRZFsDtljtDjYm26Kd86UQ5HQzu9ksEtoUUw4RBuewodw/tGFmvipePvRsKeDA==} peerDependencies: @@ -2756,19 +2268,6 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - marked@14.0.0: - resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} - engines: {node: '>= 18'} - hasBin: true - - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -2789,34 +2288,9 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -2824,53 +2298,8 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - monaco-editor@0.54.0: - resolution: {integrity: sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==} + monaco-editor@0.52.2: + resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} monaco-graphql@1.7.2: resolution: {integrity: sha512-iLw1L+pfQOISXGTLWRwjSrxcdP3pjS9ljJmerf2EfvTLBjGc1uwhRd+hnA8/LQVr7RXjrHVPkR6ToKVAvTOBEA==} @@ -2879,6 +2308,11 @@ packages: monaco-editor: '>= 0.20.0 < 1' prettier: ^2.8.0 || ^3.0.0 + monacopilot@1.2.7: + resolution: {integrity: sha512-ueLQkY8j7uIgEYrijlOzONUMxpwmFhm2CdOH6Y80G3qN6expgOmZ4+A/d4coFQcgqG9WhcYtr5Be20zwifV1iQ==} + peerDependencies: + monaco-editor: '>=0.41.0' + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2890,68 +2324,26 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - node-abi@3.80.0: - resolution: {integrity: sha512-LyPuZJcI9HVwzXK1GPxWNzrr+vr8Hp/3UqlmWxxh8p54U1ZbclOqbSog9lWHaCX+dBaiGi6n/hIX+mKu74GmPA==} - engines: {node: '>=10'} - - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - - node-api-version@0.2.1: - resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - node-releases@2.0.26: resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} - nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2960,13 +2352,6 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2975,28 +2360,13 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pe-library@0.4.1: - resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} - engines: {node: '>=12', npm: '>=6'} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3012,19 +2382,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - plist@3.1.0: - resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} - engines: {node: '>=10.4.0'} - postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - postject@1.0.0-alpha.6: - resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} - engines: {node: '>=14.0.0'} - hasBin: true - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3034,32 +2395,9 @@ packages: engines: {node: '>=14'} hasBin: true - proc-log@2.0.1: - resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3067,10 +2405,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - react-dom@19.2.0: resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} peerDependencies: @@ -3120,14 +2454,6 @@ packages: resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} - read-binary-file-arch@1.0.6: - resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} - hasBin: true - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3140,13 +2466,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - resedit@1.7.2: - resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} - engines: {node: '>=12', npm: '>=6'} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -3154,35 +2473,10 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - rolldown-vite@7.1.14: resolution: {integrity: sha512-eSiiRJmovt8qDJkGyZuLnbxAOAdie6NCmmd0NkTC0RJI9duiSBTfr8X2mBYJOUFzxQa2USaHmL99J9uMxkjCyw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3234,28 +2528,9 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sanitize-filename@1.6.3: - resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - - sax@1.4.3: - resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} - scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3265,10 +2540,6 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - seroval-plugins@1.3.3: resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} engines: {node: '>=10'} @@ -3291,33 +2562,6 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-update-notifier@2.0.0: - resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} - engines: {node: '>=10'} - - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - solid-js@1.9.10: resolution: {integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==} @@ -3331,9 +2575,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -3342,17 +2583,6 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - stat-mode@1.0.0: - resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} - engines: {node: '>= 6'} - state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} @@ -3360,29 +2590,14 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3401,20 +2616,6 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - temp-file@3.4.0: - resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} - - temp@0.9.4: - resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} - engines: {node: '>=6.0.0'} - - tiny-async-pool@1.3.0: - resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} - tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -3425,13 +2626,6 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - - tmp@0.2.5: - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} - engines: {node: '>=14.14'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3440,9 +2634,6 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - truncate-utf8-bytes@1.0.2: - resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -3464,10 +2655,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - typescript-eslint@8.46.2: resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3480,28 +2667,9 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - unplugin@2.3.10: resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} engines: {node: '>=18.12.0'} @@ -3540,16 +2708,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - utf8-byte-length@1.0.5: - resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - verror@1.10.1: - resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} - engines: {node: '>=0.6.0'} - vite-plugin-monaco-editor@1.1.0: resolution: {integrity: sha512-IvtUqZotrRoVqwT0PBBDIZPNraya3BxN/bfcNfnxZ5rkJiGcNtO5eAOWWSgT7zullIAEqQwxMU83yL9J5k7gww==} peerDependencies: @@ -3563,9 +2721,6 @@ packages: engines: {node: '>=20.0.0'} hasBin: true - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -3582,17 +2737,6 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -3600,9 +2744,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -3611,9 +2752,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -3624,9 +2762,22 @@ packages: zod@4.1.12: resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} -snapshots: + zustand@4.5.7: + resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true - 7zip-bin@5.2.0: {} +snapshots: '@babel/code-frame@7.27.1': dependencies: @@ -3824,10 +2975,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@develar/schema-utils@2.6.5': + '@dagrejs/dagre@1.1.8': dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + '@dagrejs/graphlib': 2.2.4 + + '@dagrejs/graphlib@2.2.4': {} '@dnd-kit/accessibility@3.1.1(react@19.2.0)': dependencies: @@ -3861,116 +3013,6 @@ snapshots: react: 19.2.0 tslib: 2.8.1 - '@electron/asar@3.2.18': - dependencies: - commander: 5.1.0 - glob: 7.2.3 - minimatch: 3.1.2 - - '@electron/asar@3.4.1': - dependencies: - commander: 5.1.0 - glob: 7.2.3 - minimatch: 3.1.2 - - '@electron/fuses@1.8.0': - dependencies: - chalk: 4.1.2 - fs-extra: 9.1.0 - minimist: 1.2.8 - - '@electron/get@2.0.3': - dependencies: - debug: 4.4.3 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color - - '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.3 - glob: 8.1.0 - graceful-fs: 4.2.11 - make-fetch-happen: 10.2.1 - nopt: 6.0.0 - proc-log: 2.0.1 - semver: 7.7.3 - tar: 6.2.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - - '@electron/notarize@2.5.0': - dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - promise-retry: 2.0.1 - transitivePeerDependencies: - - supports-color - - '@electron/osx-sign@1.3.1': - dependencies: - compare-version: 0.1.2 - debug: 4.4.3 - fs-extra: 10.1.0 - isbinaryfile: 4.0.10 - minimist: 1.2.8 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/rebuild@3.7.0': - dependencies: - '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.3 - detect-libc: 2.1.2 - fs-extra: 10.1.0 - got: 11.8.6 - node-abi: 3.80.0 - node-api-version: 0.2.1 - ora: 5.4.1 - read-binary-file-arch: 1.0.6 - semver: 7.7.3 - tar: 6.2.1 - yargs: 17.7.2 - transitivePeerDependencies: - - bluebird - - supports-color - - '@electron/universal@2.0.1': - dependencies: - '@electron/asar': 3.2.18 - '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3 - dir-compare: 4.2.0 - fs-extra: 11.3.2 - minimatch: 9.0.5 - plist: 3.1.0 - transitivePeerDependencies: - - supports-color - - '@electron/windows-sign@1.2.2': - dependencies: - cross-dirname: 0.1.0 - debug: 4.4.3 - fs-extra: 11.3.2 - minimist: 1.2.8 - postject: 1.0.0-alpha.6 - transitivePeerDependencies: - - supports-color - optional: true - '@emnapi/core@1.6.0': dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -4096,7 +3138,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -4128,8 +3170,6 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@gar/promisify@1.1.3': {} - '@hapi/address@5.1.1': dependencies: '@hapi/hoek': 11.0.7 @@ -4157,21 +3197,6 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - 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 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -4191,30 +3216,23 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@malept/cross-spawn-promise@2.0.0': - dependencies: - cross-spawn: 7.0.6 - - '@malept/flatpak-bundler@0.4.0': + '@mlc-ai/web-llm@0.2.79': dependencies: - debug: 4.4.3 - fs-extra: 9.1.0 - lodash: 4.17.21 - tmp-promise: 3.0.3 - transitivePeerDependencies: - - supports-color + loglevel: 1.9.2 '@monaco-editor/loader@1.6.1': dependencies: state-local: 1.0.7 - '@monaco-editor/react@4.8.0-rc.2(monaco-editor@0.54.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@monaco-editor/react@4.8.0-rc.2(monaco-editor@0.52.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@monaco-editor/loader': 1.6.1 - monaco-editor: 0.54.0 + monaco-editor: 0.52.2 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) + '@monacopilot/core@1.2.7': {} + '@napi-rs/wasm-runtime@1.0.7': dependencies: '@emnapi/core': 1.6.0 @@ -4234,23 +3252,10 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@npmcli/fs@2.1.2': - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.7.3 - - '@npmcli/move-file@2.0.1': - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - '@oxc-project/runtime@0.92.0': {} '@oxc-project/types@0.93.0': {} - '@pkgjs/parseargs@0.11.0': - optional: true - '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.3': {} @@ -4765,14 +3770,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.43': {} - '@sindresorhus/is@4.6.0': {} - '@standard-schema/spec@1.0.0': {} - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - '@tailwindcss/node@4.1.16': dependencies: '@jridgewell/remapping': 2.3.5 @@ -5002,8 +4001,6 @@ snapshots: '@tanstack/virtual-file-routes@1.133.19': {} - '@tootallnate/once@2.0.0': {} - '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -5030,49 +4027,39 @@ snapshots: dependencies: '@babel/types': 7.28.5 - '@types/cacheable-request@6.0.3': + '@types/crypto-js@4.2.2': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-drag@3.0.7': dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 24.9.1 - '@types/responselike': 1.0.3 + '@types/d3-selection': 3.0.11 - '@types/debug@4.1.12': + '@types/d3-interpolate@3.0.4': dependencies: - '@types/ms': 2.1.0 + '@types/d3-color': 3.1.3 - '@types/estree@1.0.8': {} + '@types/d3-selection@3.0.11': {} - '@types/fs-extra@9.0.13': + '@types/d3-transition@3.0.9': dependencies: - '@types/node': 24.9.1 + '@types/d3-selection': 3.0.11 - '@types/http-cache-semantics@4.0.4': {} + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 - '@types/json-schema@7.0.15': {} + '@types/estree@1.0.8': {} - '@types/keyv@3.1.4': - dependencies: - '@types/node': 24.9.1 + '@types/json-schema@7.0.15': {} '@types/lodash@4.17.20': {} - '@types/ms@2.1.0': {} - - '@types/node@22.19.0': - dependencies: - undici-types: 6.21.0 - '@types/node@24.9.1': dependencies: undici-types: 7.16.0 - '@types/plist@3.0.5': - dependencies: - '@types/node': 24.9.1 - xmlbuilder: 15.1.1 - optional: true - '@types/react-dom@19.2.2(@types/react@19.2.2)': dependencies: '@types/react': 19.2.2 @@ -5081,18 +4068,6 @@ snapshots: dependencies: csstype: 3.1.3 - '@types/responselike@1.0.3': - dependencies: - '@types/node': 24.9.1 - - '@types/verror@1.10.11': - optional: true - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 24.9.1 - optional: true - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -5198,36 +4173,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@xmldom/xmldom@0.8.11': {} - - abbrev@1.1.1: {} - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - agent-base@6.0.2: + '@xyflow/react@12.9.3(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - debug: 4.4.3 + '@xyflow/system': 0.0.73 + classcat: 5.0.5 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + zustand: 4.5.7(@types/react@19.2.2)(react@19.2.0) transitivePeerDependencies: - - supports-color - - agent-base@7.1.4: {} + - '@types/react' + - immer - agentkeepalive@4.6.0: + '@xyflow/system@0.0.73': dependencies: - humanize-ms: 1.2.1 + '@types/d3-drag': 3.0.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-zoom: 3.0.0 - aggregate-error@3.1.0: + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 + acorn: 8.15.0 - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 + acorn@8.15.0: {} ajv@6.12.6: dependencies: @@ -5238,14 +4211,10 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.3: {} - ansis@4.2.0: {} anymatch@3.1.3: @@ -5253,73 +4222,18 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - app-builder-bin@5.0.0-alpha.12: {} - - app-builder-lib@26.0.12(dmg-builder@26.0.12)(electron-builder-squirrel-windows@26.0.12): - dependencies: - '@develar/schema-utils': 2.6.5 - '@electron/asar': 3.2.18 - '@electron/fuses': 1.8.0 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.1 - '@electron/rebuild': 3.7.0 - '@electron/universal': 2.0.1 - '@malept/flatpak-bundler': 0.4.0 - '@types/fs-extra': 9.0.13 - async-exit-hook: 2.0.1 - builder-util: 26.0.11 - builder-util-runtime: 9.3.1 - chromium-pickle-js: 0.2.0 - config-file-ts: 0.2.8-rc1 - debug: 4.4.3 - dmg-builder: 26.0.12(electron-builder-squirrel-windows@26.0.12) - dotenv: 16.6.1 - dotenv-expand: 11.0.7 - ejs: 3.1.10 - electron-builder-squirrel-windows: 26.0.12(dmg-builder@26.0.12) - electron-publish: 26.0.11 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - is-ci: 3.0.1 - isbinaryfile: 5.0.6 - js-yaml: 4.1.0 - json5: 2.2.3 - lazy-val: 1.0.5 - minimatch: 10.1.1 - plist: 3.1.0 - resedit: 1.7.2 - semver: 7.7.3 - tar: 6.2.1 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - transitivePeerDependencies: - - bluebird - - supports-color - argparse@2.0.1: {} aria-hidden@1.2.6: dependencies: tslib: 2.8.1 - assert-plus@1.0.0: - optional: true - ast-types@0.16.1: dependencies: tslib: 2.8.1 - astral-regex@2.0.0: - optional: true - - async-exit-hook@2.0.1: {} - - async@3.2.6: {} - asynckit@0.4.0: {} - at-least-node@1.0.0: {} - axios@1.13.2: dependencies: follow-redirects: 1.15.11 @@ -5343,21 +4257,10 @@ snapshots: balanced-match@1.0.2: {} - base64-js@1.5.1: {} - baseline-browser-mapping@2.8.20: {} binary-extensions@2.3.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - boolean@3.2.0: - optional: true - brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -5379,79 +4282,6 @@ snapshots: node-releases: 2.0.26 update-browserslist-db: 1.1.4(browserslist@4.27.0) - buffer-crc32@0.2.13: {} - - buffer-from@1.1.2: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builder-util-runtime@9.3.1: - dependencies: - debug: 4.4.3 - sax: 1.4.3 - transitivePeerDependencies: - - supports-color - - builder-util@26.0.11: - dependencies: - 7zip-bin: 5.2.0 - '@types/debug': 4.1.12 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.3.1 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - fs-extra: 10.1.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-ci: 3.0.1 - js-yaml: 4.1.0 - sanitize-filename: 1.6.3 - source-map-support: 0.5.21 - stat-mode: 1.0.0 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - transitivePeerDependencies: - - supports-color - - cacache@16.1.3: - dependencies: - '@npmcli/fs': 2.1.2 - '@npmcli/move-file': 2.0.1 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 8.1.0 - infer-owner: 1.0.4 - lru-cache: 7.18.3 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 9.0.1 - tar: 6.2.1 - unique-filename: 2.0.1 - transitivePeerDependencies: - - bluebird - - cacheable-lookup@5.0.4: {} - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -5478,29 +4308,11 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chownr@2.0.0: {} - - chromium-pickle-js@0.2.0: {} - - ci-info@3.9.0: {} - class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 - clean-stack@2.2.0: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - optional: true + classcat@5.0.5: {} cliui@8.0.1: dependencies: @@ -5508,12 +4320,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - - clone@1.0.4: {} - clsx@2.1.1: {} cmdk@1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): @@ -5538,13 +4344,6 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@5.1.0: {} - - commander@9.5.0: - optional: true - - compare-version@0.1.2: {} - concat-map@0.0.1: {} concurrently@9.2.1: @@ -5556,69 +4355,67 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 - config-file-ts@0.2.8-rc1: - dependencies: - glob: 10.4.5 - typescript: 5.9.3 - convert-source-map@2.0.0: {} cookie-es@2.0.0: {} - core-util-is@1.0.2: - optional: true - - crc@3.8.0: - dependencies: - buffer: 5.7.1 - optional: true - - cross-dirname@0.1.0: - optional: true - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + crypto-js@4.2.0: {} + csstype@3.1.3: {} - date-fns@4.1.0: {} + d3-color@3.1.0: {} - debounce-promise@3.1.2: {} + d3-dispatch@3.0.1: {} - debug@4.4.3: + d3-drag@3.0.0: dependencies: - ms: 2.1.3 + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 - decode-formdata@0.9.0: {} + d3-ease@3.0.1: {} - decompress-response@6.0.0: + d3-interpolate@3.0.1: dependencies: - mimic-response: 3.1.0 + d3-color: 3.1.0 - deep-is@0.1.4: {} + d3-selection@3.0.0: {} - defaults@1.0.4: - dependencies: - clone: 1.0.4 + d3-timer@3.0.1: {} - defer-to-connect@2.0.1: {} + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 - define-data-property@1.1.4: + d3-zoom@3.0.0: dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - optional: true + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + date-fns@4.1.0: {} + + debounce-promise@3.1.2: {} - define-properties@1.2.1: + debug@4.4.3: dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - optional: true + ms: 2.1.3 + + decode-formdata@0.9.0: {} + + deep-is@0.1.4: {} delayed-stream@1.0.0: {} @@ -5626,149 +4423,25 @@ snapshots: detect-node-es@1.1.0: {} - detect-node@2.1.0: - optional: true - devalue@5.4.2: {} diff@8.0.2: {} - dir-compare@4.2.0: - dependencies: - minimatch: 3.1.2 - p-limit: 3.1.0 - - dmg-builder@26.0.12(electron-builder-squirrel-windows@26.0.12): - dependencies: - app-builder-lib: 26.0.12(dmg-builder@26.0.12)(electron-builder-squirrel-windows@26.0.12) - builder-util: 26.0.11 - builder-util-runtime: 9.3.1 - fs-extra: 10.1.0 - iconv-lite: 0.6.3 - js-yaml: 4.1.0 - optionalDependencies: - dmg-license: 1.0.11 - transitivePeerDependencies: - - bluebird - - electron-builder-squirrel-windows - - supports-color - - dmg-license@1.0.11: - dependencies: - '@types/plist': 3.0.5 - '@types/verror': 1.10.11 - ajv: 6.12.6 - crc: 3.8.0 - iconv-corefoundation: 1.1.7 - plist: 3.1.0 - smart-buffer: 4.2.0 - verror: 1.10.1 - optional: true - - dompurify@3.1.7: {} - - dotenv-expand@11.0.7: - dependencies: - dotenv: 16.6.1 - - dotenv@16.6.1: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 - eastasianwidth@0.2.0: {} - - ejs@3.1.10: - dependencies: - jake: 10.9.4 - - electron-builder-squirrel-windows@26.0.12(dmg-builder@26.0.12): - dependencies: - app-builder-lib: 26.0.12(dmg-builder@26.0.12)(electron-builder-squirrel-windows@26.0.12) - builder-util: 26.0.11 - electron-winstaller: 5.4.0 - transitivePeerDependencies: - - bluebird - - dmg-builder - - supports-color - - electron-builder@26.0.12(electron-builder-squirrel-windows@26.0.12): - dependencies: - app-builder-lib: 26.0.12(dmg-builder@26.0.12)(electron-builder-squirrel-windows@26.0.12) - builder-util: 26.0.11 - builder-util-runtime: 9.3.1 - chalk: 4.1.2 - dmg-builder: 26.0.12(electron-builder-squirrel-windows@26.0.12) - fs-extra: 10.1.0 - is-ci: 3.0.1 - lazy-val: 1.0.5 - simple-update-notifier: 2.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - bluebird - - electron-builder-squirrel-windows - - supports-color - - electron-publish@26.0.11: - dependencies: - '@types/fs-extra': 9.0.13 - builder-util: 26.0.11 - builder-util-runtime: 9.3.1 - chalk: 4.1.2 - form-data: 4.0.4 - fs-extra: 10.1.0 - lazy-val: 1.0.5 - mime: 2.6.0 - transitivePeerDependencies: - - supports-color - electron-to-chromium@1.5.241: {} - electron-winstaller@5.4.0: - dependencies: - '@electron/asar': 3.4.1 - debug: 4.4.3 - fs-extra: 7.0.1 - lodash: 4.17.21 - temp: 0.9.4 - optionalDependencies: - '@electron/windows-sign': 1.2.2 - transitivePeerDependencies: - - supports-color - - electron@39.1.1: - dependencies: - '@electron/get': 2.0.3 - '@types/node': 22.19.0 - extract-zip: 2.0.1 - transitivePeerDependencies: - - supports-color - emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 - env-paths@2.2.1: {} - - err-code@2.0.3: {} - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -5784,9 +4457,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es6-error@4.1.1: - optional: true - esbuild@0.25.11: optionalDependencies: '@esbuild/aix-ppc64': 0.25.11 @@ -5898,21 +4568,6 @@ snapshots: esutils@2.0.3: {} - exponential-backoff@3.1.3: {} - - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - extsprintf@1.4.1: - optional: true - fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -5931,10 +4586,6 @@ snapshots: dependencies: reusify: 1.1.0 - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -5943,10 +4594,6 @@ snapshots: dependencies: flat-cache: 4.0.1 - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -5965,11 +4612,6 @@ snapshots: follow-redirects@1.15.11: {} - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - form-data@4.0.4: dependencies: asynckit: 0.4.0 @@ -5978,43 +4620,6 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@11.3.2: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true @@ -6044,10 +4649,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@5.2.0: - dependencies: - pump: 3.0.3 - get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -6060,72 +4661,16 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.7.3 - serialize-error: 7.0.1 - optional: true - globals@14.0.0: {} globals@16.4.0: {} - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - optional: true - goober@2.1.18(csstype@3.1.3): dependencies: csstype: 3.1.3 gopd@1.2.0: {} - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -6145,11 +4690,6 @@ snapshots: has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - optional: true - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -6160,62 +4700,6 @@ snapshots: dependencies: function-bind: 1.1.2 - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - - http-cache-semantics@4.2.0: {} - - http-proxy-agent@5.0.0: - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - - iconv-corefoundation@1.1.7: - dependencies: - cli-truncate: 2.1.0 - node-addon-api: 1.7.2 - optional: true - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - ignore@5.3.2: {} ignore@7.0.5: {} @@ -6227,27 +4711,10 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - - infer-owner@1.0.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ip-address@10.1.0: {} - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-ci@3.0.1: - dependencies: - ci-info: 3.9.0 - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -6256,34 +4723,12 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-interactive@1.0.0: {} - - is-lambda@1.0.1: {} - is-number@7.0.0: {} - is-unicode-supported@0.1.0: {} - - isbinaryfile@4.0.10: {} - - isbinaryfile@5.0.6: {} - isbot@5.1.32: {} isexe@2.0.0: {} - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.4 - picocolors: 1.1.1 - jiti@2.6.1: {} joi@18.0.1: @@ -6298,7 +4743,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.0: + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -6310,27 +4755,12 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-safe@5.0.1: - optional: true - json5@2.2.3: {} - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 - lazy-val@1.0.5: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -6393,25 +4823,12 @@ snapshots: lodash@4.17.21: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - lowercase-keys@2.0.0: {} - - lru-cache@10.4.3: {} + loglevel@1.9.2: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lru-cache@7.18.3: {} - lucide-react@0.548.0(react@19.2.0): dependencies: react: 19.2.0 @@ -6422,35 +4839,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - make-fetch-happen@10.2.1: - dependencies: - agentkeepalive: 4.6.0 - cacache: 16.1.3 - http-cache-semantics: 4.2.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 7.18.3 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 2.1.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.4 - promise-retry: 2.0.1 - socks-proxy-agent: 7.0.0 - ssri: 9.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - - marked@14.0.0: {} - - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - optional: true - math-intrinsics@1.1.0: {} merge2@1.4.1: {} @@ -6466,135 +4854,48 @@ snapshots: dependencies: mime-db: 1.52.0 - mime@2.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-response@1.0.1: {} - - mimic-response@3.1.0: {} - - minimatch@10.1.1: - dependencies: - '@isaacs/brace-expansion': 5.0.0 - minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 minimist@1.2.8: {} - minipass-collect@1.0.2: - dependencies: - minipass: 3.3.6 - - minipass-fetch@2.1.2: - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mkdirp@1.0.4: {} - - monaco-editor@0.54.0: - dependencies: - dompurify: 3.1.7 - marked: 14.0.0 + monaco-editor@0.52.2: {} - monaco-graphql@1.7.2(graphql@16.11.0)(monaco-editor@0.54.0)(prettier@3.6.2): + monaco-graphql@1.7.2(graphql@16.11.0)(monaco-editor@0.52.2)(prettier@3.6.2): dependencies: graphql: 16.11.0 graphql-language-service: 5.5.0(graphql@16.11.0) - monaco-editor: 0.54.0 + monaco-editor: 0.52.2 picomatch-browser: 2.2.6 prettier: 3.6.2 + monacopilot@1.2.7(monaco-editor@0.52.2): + dependencies: + '@monacopilot/core': 1.2.7 + monaco-editor: 0.52.2 + ms@2.1.3: {} nanoid@3.3.11: {} natural-compare@1.4.0: {} - negotiator@0.6.4: {} - next-themes@0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - node-abi@3.80.0: - dependencies: - semver: 7.7.3 - - node-addon-api@1.7.2: - optional: true - - node-api-version@0.2.1: - dependencies: - semver: 7.7.3 - node-releases@2.0.26: {} - nopt@6.0.0: - dependencies: - abbrev: 1.1.1 - normalize-path@3.0.0: {} - normalize-url@6.1.0: {} - nullthrows@1.1.1: {} - object-keys@1.1.1: - optional: true - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -6604,20 +4905,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - - p-cancelable@2.1.1: {} - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -6626,33 +4913,16 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - - package-json-from-dist@1.0.1: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - pathe@2.0.3: {} - pe-library@0.4.1: {} - - pend@1.2.0: {} - picocolors@1.1.1: {} picomatch-browser@2.2.6: {} @@ -6661,51 +4931,22 @@ snapshots: picomatch@4.0.3: {} - plist@3.1.0: - dependencies: - '@xmldom/xmldom': 0.8.11 - base64-js: 1.5.1 - xmlbuilder: 15.1.1 - postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - postject@1.0.0-alpha.6: - dependencies: - commander: 9.5.0 - optional: true - prelude-ls@1.2.1: {} prettier@3.6.2: {} - proc-log@2.0.1: {} - - progress@2.0.3: {} - - promise-inflight@1.0.1: {} - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - proxy-from-env@1.1.0: {} - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - punycode@2.3.1: {} queue-microtask@1.2.3: {} - quick-lru@5.1.1: {} - react-dom@19.2.0(react@19.2.0): dependencies: react: 19.2.0 @@ -6747,18 +4988,6 @@ snapshots: react@19.2.0: {} - read-binary-file-arch@1.0.6: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -6773,47 +5002,12 @@ snapshots: require-directory@2.1.1: {} - resedit@1.7.2: - dependencies: - pe-library: 0.4.1 - - resolve-alpn@1.2.1: {} - resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retry@0.12.0: {} - reusify@1.1.0: {} - rimraf@2.6.3: - dependencies: - glob: 7.2.3 - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - roarr@2.15.4: - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.4 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - optional: true - rolldown-vite@7.1.14(@types/node@24.9.1)(esbuild@0.25.11)(jiti@2.6.1)(tsx@4.20.6): dependencies: '@oxc-project/runtime': 0.92.0 @@ -6859,32 +5053,12 @@ snapshots: dependencies: tslib: 2.8.1 - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - sanitize-filename@1.6.3: - dependencies: - truncate-utf8-bytes: 1.0.2 - - sax@1.4.3: {} - scheduler@0.27.0: {} - semver-compare@1.0.0: - optional: true - - semver@5.7.2: {} - semver@6.3.1: {} semver@7.7.3: {} - serialize-error@7.0.1: - dependencies: - type-fest: 0.13.1 - optional: true - seroval-plugins@1.3.3(seroval@1.3.2): dependencies: seroval: 1.3.2 @@ -6899,36 +5073,6 @@ snapshots: shell-quote@1.8.3: {} - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-update-notifier@2.0.0: - dependencies: - semver: 7.7.3 - - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - optional: true - - smart-buffer@4.2.0: {} - - socks-proxy-agent@7.0.0: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.1.0 - smart-buffer: 4.2.0 - solid-js@1.9.10: dependencies: csstype: 3.1.3 @@ -6942,24 +5086,10 @@ snapshots: source-map-js@1.2.1: {} - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map@0.6.1: {} source-map@0.7.6: {} - sprintf-js@1.1.3: - optional: true - - ssri@9.0.1: - dependencies: - minipass: 3.3.6 - - stat-mode@1.0.0: {} - state-local@1.0.7: {} string-width@4.2.3: @@ -6968,32 +5098,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - strip-json-comments@3.1.1: {} - sumchecker@3.0.1: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -7008,29 +5118,6 @@ snapshots: tapable@2.3.0: {} - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - temp-file@3.4.0: - dependencies: - async-exit-hook: 2.0.1 - fs-extra: 10.1.0 - - temp@0.9.4: - dependencies: - mkdirp: 0.5.6 - rimraf: 2.6.3 - - tiny-async-pool@1.3.0: - dependencies: - semver: 5.7.2 - tiny-invariant@1.3.3: {} tiny-warning@1.0.3: {} @@ -7040,22 +5127,12 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tmp-promise@3.0.3: - dependencies: - tmp: 0.2.5 - - tmp@0.2.5: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 tree-kill@1.2.2: {} - truncate-utf8-bytes@1.0.2: - dependencies: - utf8-byte-length: 1.0.5 - ts-api-utils@2.1.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -7075,9 +5152,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.13.1: - optional: true - typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -7091,22 +5165,8 @@ snapshots: typescript@5.9.3: {} - undici-types@6.21.0: {} - undici-types@7.16.0: {} - unique-filename@2.0.1: - dependencies: - unique-slug: 3.0.0 - - unique-slug@3.0.0: - dependencies: - imurmurhash: 0.1.4 - - universalify@0.1.2: {} - - universalify@2.0.1: {} - unplugin@2.3.10: dependencies: '@jridgewell/remapping': 2.3.5 @@ -7143,20 +5203,9 @@ snapshots: dependencies: react: 19.2.0 - utf8-byte-length@1.0.5: {} - - util-deprecate@1.0.2: {} - - verror@1.10.1: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - optional: true - - vite-plugin-monaco-editor@1.1.0(monaco-editor@0.54.0): + vite-plugin-monaco-editor@1.1.0(monaco-editor@0.52.2): dependencies: - monaco-editor: 0.54.0 + monaco-editor: 0.52.2 vscode-languageserver-types@3.17.5: {} @@ -7170,10 +5219,6 @@ snapshots: transitivePeerDependencies: - debug - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - webpack-virtual-modules@0.6.2: {} which@2.0.2: @@ -7188,22 +5233,10 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - xmlbuilder@15.1.1: {} - y18n@5.0.8: {} yallist@3.1.1: {} - yallist@4.0.0: {} - yargs-parser@21.1.1: {} yargs@17.7.2: @@ -7216,13 +5249,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - yocto-queue@0.1.0: {} zod@3.25.76: {} zod@4.1.12: {} + + zustand@4.5.7(@types/react@19.2.2)(react@19.2.0): + dependencies: + use-sync-external-store: 1.6.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + react: 19.2.0 diff --git a/src/components/labaratory/builder.tsx b/src/components/labaratory/builder.tsx index 9ca7bf2..aedf277 100644 --- a/src/components/labaratory/builder.tsx +++ b/src/components/labaratory/builder.tsx @@ -16,6 +16,7 @@ import { EmptyContent, } from "@/components/ui/empty"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { TooltipContent } from "@/components/ui/tooltip"; import { Tooltip, TooltipTrigger } from "@/components/ui/tooltip"; import type { LabaratoryOperation } from "@/lib/operations"; @@ -163,7 +164,6 @@ export const BuilderScalarField = (props: { return ( @@ -177,13 +177,17 @@ export const BuilderScalarField = (props: { } )} style={{ - top: `${(props.path.length - 1) * 32}px`, + top: `${(props.path.length - 2) * 32}px`, }} size="sm" >
- + e.stopPropagation()} checked={isInQuery} @@ -220,7 +224,14 @@ export const BuilderScalarField = (props: { }} size="sm" > - + e.stopPropagation()} checked={hasArgs} @@ -344,12 +355,7 @@ export const BuilderObjectField = (props: { }, [operation?.query, path]); return ( - + - - - - - Are you sure you want to delete operation{" "} - {operation.name}? - - - {operation.name} will be permanently deleted. - - - - Cancel - - - - - - - - Delete operation - - - ); - })} + setActiveTab(tab); + } + }} + > + + {operation.name} + + + + + + + + + + Are you sure you want to delete operation{" "} + {operation.name}? + + + {operation.name} will be permanently deleted. + + + + Cancel + + + + + + + + Delete operation + + + ); + })} ); }; +export interface CollectionsSearchResultItem + extends LabaratoryCollectionOperation { + parent: LabaratoryCollection; +} + +export const CollectionsSearchResult = (props: { + items: CollectionsSearchResultItem[]; +}) => { + const { + activeOperation, + operations, + addOperation, + setActiveOperation, + addTab, + setActiveTab, + } = useLabaratory(); + + return ( +
+ {props.items.map((operation) => { + const isActive = activeOperation?.id === operation.id; + + return ( + + ); + })} +
+ ); +}; + export const Collections = () => { + const [search, setSearch] = useState(""); const { collections, openAddCollectionDialog } = useLabaratory(); + const searchResults = useMemo(() => { + return collections + .reduce((acc, collection) => { + return [ + ...acc, + ...collection.operations.map((operation) => ({ + ...operation, + parent: collection, + })), + ]; + }, [] as CollectionsSearchResultItem[]) + .filter((item) => { + return item.name.toLowerCase().includes(search.toLowerCase()); + }); + }, [collections, search]); + return (
-
+
Collections
@@ -223,19 +302,49 @@ export const Collections = () => {
-
- +
+ setSearch(e.target.value)} /> + {search.length > 0 && ( + + )}
-
- {collections.length > 0 ? ( +
+ {search.length > 0 ? ( + searchResults.length > 0 ? ( + + ) : ( + + + + + + + No results found + + + No collections found matching your search. + + + + ) + ) : collections.length > 0 ? ( collections.map((item) => ( )) diff --git a/src/components/labaratory/context.tsx b/src/components/labaratory/context.tsx index 0e0a798..6661387 100644 --- a/src/components/labaratory/context.tsx +++ b/src/components/labaratory/context.tsx @@ -1,6 +1,7 @@ import { createContext, useContext } from "react"; import { type LabaratoryCollection, + type LabaratoryCollectionOperation, type LabaratoryCollectionsActions, type LabaratoryCollectionsState, } from "@/lib/collections"; @@ -33,6 +34,16 @@ import type { LabaratoryEnvActions, LabaratoryEnvState, } from "@/lib/env"; +import type { + LabaratorySettings, + LabaratorySettingsActions, + LabaratorySettingsState, +} from "@/lib/settings"; +import type { + LabaratoryTest, + LabaratoryTestActions, + LabaratoryTestState, +} from "@/lib/tests"; type LabaratoryContextState = LabaratoryCollectionsState & LabaratoryEndpointState & @@ -40,16 +51,26 @@ type LabaratoryContextState = LabaratoryCollectionsState & LabaratoryHistoryState & LabaratoryTabsState & LabaratoryPreflightState & - LabaratoryEnvState; + LabaratoryEnvState & + LabaratorySettingsState & + LabaratoryTestState; type LabaratoryContextActions = LabaratoryCollectionsActions & LabaratoryEndpointActions & LabaratoryOperationsActions & LabaratoryHistoryActions & LabaratoryTabsActions & LabaratoryPreflightActions & - LabaratoryEnvActions & { + LabaratoryEnvActions & + LabaratorySettingsActions & + LabaratoryTestActions & { openAddCollectionDialog?: () => void; openUpdateEndpointDialog?: () => void; + openAddTestDialog?: () => void; + openPreflightPromptModal?: (props: { + placeholder: string; + defaultValue?: string; + onSubmit?: (value: string | null) => void; + }) => void; }; const LabaratoryContext = createContext< @@ -61,29 +82,63 @@ export const useLabaratory = () => { return useContext(LabaratoryContext); }; +export interface LabaratoryApi { + defaultEndpoint?: string | null; + onEndpointChange?: (endpoint: string | null) => void; + defaultCollections?: LabaratoryCollection[]; + onCollectionsChange?: (collections: LabaratoryCollection[]) => void; + onCollectionCreate?: (collection: LabaratoryCollection) => void; + onCollectionUpdate?: (collection: LabaratoryCollection) => void; + onCollectionDelete?: (collection: LabaratoryCollection) => void; + onCollectionOperationCreate?: ( + collection: LabaratoryCollection, + operation: LabaratoryCollectionOperation + ) => void; + onCollectionOperationUpdate?: ( + collection: LabaratoryCollection, + operation: LabaratoryCollectionOperation + ) => void; + onCollectionOperationDelete?: ( + collection: LabaratoryCollection, + operation: LabaratoryCollectionOperation + ) => void; + defaultOperations?: LabaratoryOperation[]; + defaultActiveOperationId?: string; + onOperationsChange?: (operations: LabaratoryOperation[]) => void; + onActiveOperationIdChange?: (operationId: string) => void; + onOperationCreate?: (operation: LabaratoryOperation) => void; + onOperationUpdate?: (operation: LabaratoryOperation) => void; + onOperationDelete?: (operation: LabaratoryOperation) => void; + defaultHistory?: LabaratoryHistory[]; + onHistoryChange?: (history: LabaratoryHistory[]) => void; + onHistoryCreate?: (history: LabaratoryHistory) => void; + onHistoryUpdate?: (history: LabaratoryHistory) => void; + onHistoryDelete?: (history: LabaratoryHistory) => void; + openAddCollectionDialog?: () => void; + openUpdateEndpointDialog?: () => void; + openAddTestDialog?: () => void; + openPreflightPromptModal?: (props: { + placeholder: string; + defaultValue?: string; + onSubmit?: (value: string | null) => void; + }) => void; + defaultPreflight?: LabaratoryPreflight | null; + onPreflightChange?: (preflight: LabaratoryPreflight | null) => void; + defaultTabs?: LabaratoryTab[]; + onTabsChange?: (tabs: LabaratoryTab[]) => void; + defaultActiveTabId?: string | null; + onActiveTabIdChange?: (tabId: string | null) => void; + defaultEnv?: LabaratoryEnv | null; + onEnvChange?: (env: LabaratoryEnv | null) => void; + defaultSettings?: LabaratorySettings | null; + onSettingsChange?: (settings: LabaratorySettings | null) => void; + defaultTests?: LabaratoryTest[]; + onTestsChange?: (tests: LabaratoryTest[]) => void; +} + export type LabaratoryContextProps = LabaratoryContextState & - LabaratoryContextActions & { - defaultEndpoint?: string | null; - onEndpointChange?: (endpoint: string | null) => void; - defaultCollections?: LabaratoryCollection[]; - onCollectionsChange?: (collections: LabaratoryCollection[]) => void; - defaultOperations?: LabaratoryOperation[]; - defaultActiveOperationId?: string; - onOperationsChange?: (operations: LabaratoryOperation[]) => void; - onActiveOperationIdChange?: (operationId: string) => void; - defaultHistory?: LabaratoryHistory[]; - onHistoryChange?: (history: LabaratoryHistory[]) => void; - openAddCollectionDialog?: () => void; - openUpdateEndpointDialog?: () => void; - defaultPreflight?: LabaratoryPreflight | null; - onPreflightChange?: (preflight: LabaratoryPreflight | null) => void; - defaultTabs?: LabaratoryTab[]; - onTabsChange?: (tabs: LabaratoryTab[]) => void; - defaultActiveTabId?: string | null; - onActiveTabIdChange?: (tabId: string | null) => void; - defaultEnv?: LabaratoryEnv | null; - onEnvChange?: (env: LabaratoryEnv | null) => void; - }; + LabaratoryContextActions & + LabaratoryApi; export const LabaratoryProvider = ( props: React.PropsWithChildren diff --git a/src/components/labaratory/editor.tsx b/src/components/labaratory/editor.tsx index 91cd7c3..e32c171 100644 --- a/src/components/labaratory/editor.tsx +++ b/src/components/labaratory/editor.tsx @@ -46,7 +46,7 @@ const darkTheme: monaco.editor.IStandaloneThemeData = { { token: "string.value.json", foreground: "fdba74" }, { token: "attribute.name", foreground: "FF0000" }, - { token: "attribute.value", foreground: "0451A5" }, + { token: "attribute.value", foreground: "34d399" }, { token: "attribute.value.number", foreground: "fdba74" }, { token: "attribute.value.unit", foreground: "fdba74" }, { token: "attribute.value.html", foreground: "facc15" }, @@ -55,10 +55,10 @@ const darkTheme: monaco.editor.IStandaloneThemeData = { { token: "string", foreground: "2dd4bf" }, { token: "string.html", foreground: "facc15" }, { token: "string.sql", foreground: "FF0000" }, - { token: "string.yaml", foreground: "0451A5" }, + { token: "string.yaml", foreground: "34d399" }, { token: "keyword", foreground: "60a5fa" }, - { token: "keyword.json", foreground: "0451A5" }, + { token: "keyword.json", foreground: "34d399" }, { token: "keyword.flow", foreground: "AF00DB" }, { token: "keyword.flow.scss", foreground: "facc15" }, diff --git a/src/components/labaratory/history.tsx b/src/components/labaratory/history.tsx index 1c84881..b88e2ce 100644 --- a/src/components/labaratory/history.tsx +++ b/src/components/labaratory/history.tsx @@ -1,5 +1,11 @@ import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; -import { CircleCheckIcon, CircleXIcon, ClockIcon } from "lucide-react"; +import { + ClockIcon, + FolderClockIcon, + FolderOpenIcon, + HistoryIcon, + TrashIcon, +} from "lucide-react"; import { useLabaratory } from "@/components/labaratory/context"; import { Empty, @@ -8,21 +14,66 @@ import { EmptyMedia, EmptyTitle, } from "@/components/ui/empty"; -import { useMemo } from "react"; +import { useCallback, useMemo, useState } from "react"; import { cn } from "@/lib/utils"; import { format } from "date-fns"; -import { Badge } from "@/components/ui/badge"; -import type { LabaratoryHistoryRequest } from "@/lib/history"; +import type { + LabaratoryHistory, + LabaratoryHistoryRequest, +} from "@/lib/history"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "@/components/ui/collapsible"; +import { Button } from "@/components/ui/button"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog"; export const HistoryOperationItem = (props: { historyItem: LabaratoryHistoryRequest; }) => { - const { addTab, setActiveTab } = useLabaratory(); + const { activeTab, addTab, setActiveTab, deleteHistory } = useLabaratory(); + + const isActive = useMemo(() => { + return ( + activeTab?.type === "history" && + activeTab.data.id === props.historyItem.id + ); + }, [activeTab, props.historyItem]); + + const isError = useMemo(() => { + return ( + props.historyItem.status < 200 || + props.historyItem.status >= 300 || + ("response" in props.historyItem && + JSON.parse(props.historyItem.response).errors) + ); + }, [props.historyItem]); return ( -
{ setActiveTab( @@ -34,30 +85,153 @@ export const HistoryOperationItem = (props: { ); }} > - = 300, + = 200 && props.historyItem.status < 300, + "text-red-500": isError, })} - > - {props.historyItem.status >= 200 && props.historyItem.status < 300 ? ( - - ) : ( - - )} - + /> + + {format(new Date(props.historyItem.createdAt), "HH:mm")} +
{props.historyItem.operation.name || "Untitled"}
- {format(new Date(props.historyItem.createdAt), "HH:mm")} + + + + + + + + + + Are you sure you want to delete history? + + + This history operation will be permanently deleted. + + + + Cancel + + + + + + + + Delete history +
-
+ + ); +}; + +export const HistoryGroup = (props: { + group: { date: string; items: LabaratoryHistory[] }; +}) => { + const { deleteHistoryByDay } = useLabaratory(); + const [isOpen, setIsOpen] = useState(false); + + return ( + + + + + + + + Are you sure you want to delete history? + + + All history for {props.group.date} will be permanently + deleted. + + + + Cancel + + + + + + + + Delete history + + + + + {props.group.items.map((h) => { + return ( + + ); + })} + + ); }; export const History = () => { - const { history } = useLabaratory(); + const { history, deleteAllHistory, tabs, setTabs, setActiveTab } = + useLabaratory(); const historyItems = useMemo(() => { return history.sort( @@ -66,22 +240,88 @@ export const History = () => { ); }, [history]); + const goupedByDate = useMemo(() => { + return historyItems.reduce((acc, h) => { + const date = format(new Date(h.createdAt), "dd MMM yyyy"); + let item = acc.find((i) => i.date === date); + + if (!item) { + item = { date, items: [] }; + + acc.push(item); + } + + item.items.push(h); + + return acc; + }, [] as { date: string; items: LabaratoryHistory[] }[]); + }, [historyItems]); + + const handleDeleteAllHistory = useCallback(() => { + deleteAllHistory(); + setTabs(tabs.filter((t) => t.type !== "history")); + + const newTab = tabs.find((t) => t.type !== "history"); + + if (newTab) { + setActiveTab(newTab); + } + }, [deleteAllHistory, setTabs, tabs, setActiveTab]); + return (
History +
+ + + + + + + + + + Are you sure you want to delete all history? + + + All history will be permanently deleted. + + + + Cancel + + + + + + + + Delete all + +
- {historyItems.length > 0 ? ( - historyItems.map((h) => { - return ( - - ); + {goupedByDate.length > 0 ? ( + goupedByDate.map((group) => { + return ; }) ) : ( diff --git a/src/components/labaratory/labaratory-desktop.tsx b/src/components/labaratory/labaratory.tsx similarity index 65% rename from src/components/labaratory/labaratory-desktop.tsx rename to src/components/labaratory/labaratory.tsx index 6f9624c..dd0e956 100644 --- a/src/components/labaratory/labaratory-desktop.tsx +++ b/src/components/labaratory/labaratory.tsx @@ -1,12 +1,10 @@ -import { Builder } from "@/components/labaratory/builder"; import { Collections } from "@/components/labaratory/collections"; import { Command } from "@/components/labaratory/command"; import { LabaratoryProvider, useLabaratory, - type LabaratoryContextProps, + type LabaratoryApi, } from "@/components/labaratory/context"; -// import { History } from "@/components/labaratory/history"; import { Operation } from "@/components/labaratory/operation"; import { Tabs } from "@/components/labaratory/tabs"; import { Button } from "@/components/ui/button"; @@ -47,6 +45,7 @@ import { cn } from "@/lib/utils"; import { ArrowRightIcon, FileIcon, + FlaskConicalIcon, FoldersIcon, HistoryIcon, SettingsIcon, @@ -71,6 +70,17 @@ import { usePreflight } from "@/lib/preflight"; import { useEnv } from "@/lib/env"; import { Env } from "@/components/labaratory/env"; import { History } from "@/components/labaratory/history"; +import { HistoryItem } from "@/components/labaratory/history-item"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { useSettings } from "@/lib/settings"; +import { Settings } from "@/components/labaratory/settings"; +import { useTests } from "@/lib/tests"; +import { Tests } from "@/components/labaratory/tests"; +import { Test } from "@/components/labaratory/test"; const addCollectionFormSchema = z.object({ name: z.string().min(1, "Name is required"), @@ -80,6 +90,101 @@ const updateEndpointFormSchema = z.object({ endpoint: z.string().min(1, "Endpoint is required"), }); +const addTestFormSchema = z.object({ + name: z.string().min(1, "Name is required"), +}); + +const PreflightPromptModal = (props: { + open: boolean; + onOpenChange: (open: boolean) => void; + placeholder: string; + defaultValue?: string; + onSubmit?: (value: string | null) => void; +}) => { + const form = useForm({ + defaultValues: { + value: props.defaultValue || null, + }, + validators: { + onSubmit: z.object({ + value: z.string().min(1, "Value is required").nullable(), + }), + }, + onSubmit: ({ value }) => { + props.onSubmit?.(value.value || null); + props.onOpenChange(false); + form.reset(); + }, + }); + + return ( + { + if (!form.state.isSubmitted) { + form.handleSubmit(); + } + + props.onOpenChange(open); + }} + > + + + Preflight prompt + + + Enter values for the preflight script. + +
{ + e.preventDefault(); + form.handleSubmit(); + }} + > + + { + const isInvalid = + field.state.meta.isTouched && !field.state.meta.isValid; + return ( + + field.handleChange(e.target.value)} + aria-invalid={isInvalid} + placeholder={props.placeholder} + autoComplete="off" + /> + {isInvalid && ( + + )} + + ); + }} + /> + +
+ + + +
+
+ ); +}; + const LabaratoryContent = () => { const { activeTab, @@ -92,7 +197,7 @@ const LabaratoryContent = () => { env, } = useLabaratory(); const [activePanel, setActivePanel] = useState< - "collections" | "history" | "settings" | null + "collections" | "history" | "tests" | "settings" | null >(collections.length > 0 ? "collections" : null); const [commandOpen, setCommandOpen] = useState(false); @@ -104,6 +209,12 @@ const LabaratoryContent = () => { return ; case "env": return ; + case "history": + return ; + case "settings": + return ; + case "test": + return ; default: return ( @@ -149,60 +260,44 @@ const LabaratoryContent = () => {
-
- -
-
- -
-
- - + + +
+ +
+
+ Collections +
+ + +
- - + + History + + + +
- - setCommandOpen(true)}> - Command Palette... - ⌘J + +
+
+ Tests +
+
+ + + + + + + + + + setCommandOpen(true)}> + Command Palette... + ⌘J + + + + { + const tab = + tabs.find((t) => t.type === "env") ?? + addTab({ + type: "env", + data: env ?? { variables: {} }, + }); + + setActiveTab(tab); + }} + > + Environment Variables - - - { - const tab = - tabs.find((t) => t.type === "env") ?? - addTab({ - type: "env", - data: env ?? { variables: {} }, - }); + { + const tab = + tabs.find((t) => t.type === "preflight") ?? + addTab({ + type: "preflight", + data: preflight ?? { script: "" }, + }); - setActiveTab(tab); - }} - > - Environment Variables - - { - const tab = - tabs.find((t) => t.type === "preflight") ?? - addTab({ - type: "preflight", - data: preflight ?? { script: "" }, - }); + setActiveTab(tab); + }} + > + Preflight Script + + + { + const tab = + tabs.find((t) => t.type === "settings") ?? + addTab({ + type: "settings", + data: {}, + }); - setActiveTab(tab); - }} - > - Preflight Script - - - + setActiveTab(tab); + }} + > + Settings + + + + Settings +
- - - - - +
- {contentNode} +
{contentNode}
); }; -export type LabaratoryProps = LabaratoryContextProps; +export type LabaratoryProps = LabaratoryApi; export const Labaratory = ( props: Pick< @@ -295,12 +464,24 @@ export const Labaratory = ( | "onEndpointChange" | "defaultCollections" | "onCollectionsChange" + | "onCollectionCreate" + | "onCollectionUpdate" + | "onCollectionDelete" + | "onCollectionOperationCreate" + | "onCollectionOperationUpdate" + | "onCollectionOperationDelete" | "defaultOperations" | "onOperationsChange" | "defaultActiveOperationId" | "onActiveOperationIdChange" + | "onOperationCreate" + | "onOperationUpdate" + | "onOperationDelete" | "defaultHistory" | "onHistoryChange" + | "onHistoryCreate" + | "onHistoryUpdate" + | "onHistoryDelete" | "defaultTabs" | "onTabsChange" | "defaultPreflight" @@ -309,13 +490,19 @@ export const Labaratory = ( | "onEnvChange" | "defaultActiveTabId" | "onActiveTabIdChange" + | "defaultSettings" + | "onSettingsChange" + | "defaultTests" + | "onTestsChange" > ) => { + const settingsApi = useSettings(props); const envApi = useEnv(props); const preflightApi = usePreflight({ ...props, envApi, }); + const testsApi = useTests(props); const tabsApi = useTabs(props); const endpointApi = useEndpoint(props); const collectionsApi = useCollections({ @@ -337,6 +524,8 @@ export const Labaratory = ( const [isUpdateEndpointDialogOpen, setIsUpdateEndpointDialogOpen] = useState(false); + const [isAddTestDialogOpen, setIsAddTestDialogOpen] = useState(false); + const openAddCollectionDialog = useCallback(() => { setIsCollectionDialogOpen(true); }, []); @@ -345,6 +534,10 @@ export const Labaratory = ( setIsUpdateEndpointDialogOpen(true); }, []); + const openAddTestDialog = useCallback(() => { + setIsAddTestDialogOpen(true); + }, []); + const addCollectionForm = useForm({ defaultValues: { name: "", @@ -373,6 +566,51 @@ export const Labaratory = ( }, }); + const addTestForm = useForm({ + defaultValues: { + name: "", + }, + validators: { + onSubmit: addTestFormSchema, + }, + onSubmit: ({ value }) => { + testsApi.addTest({ name: value.name }); + setIsAddTestDialogOpen(false); + }, + }); + + const [isPreflightPromptModalOpen, setIsPreflightPromptModalOpen] = + useState(false); + + const [preflightPromptModalProps, setPreflightPromptModalProps] = useState<{ + placeholder: string; + defaultValue?: string; + onSubmit?: (value: string | null) => void; + }>({ + placeholder: "", + defaultValue: undefined, + onSubmit: undefined, + }); + + const openPreflightPromptModal = useCallback( + (props: { + placeholder: string; + defaultValue?: string; + onSubmit?: (value: string | null) => void; + }) => { + setIsPreflightPromptModalOpen(true); + + setPreflightPromptModalProps({ + placeholder: props.placeholder, + defaultValue: props.defaultValue, + onSubmit: props.onSubmit, + }); + + setIsPreflightPromptModalOpen(true); + }, + [] + ); + let result: React.ReactNode = null; if (!endpointApi.endpoint) { @@ -598,6 +836,11 @@ export const Labaratory = ( + + + + + Add test + + Add a new test to your labaratory. + + +
+
{ + e.preventDefault(); + addTestForm.handleSubmit(); + }} + > + + { + const isInvalid = + field.state.meta.isTouched && !field.state.meta.isValid; + return ( + + Name + field.handleChange(e.target.value)} + aria-invalid={isInvalid} + placeholder="Enter name of the test" + autoComplete="off" + /> + {isInvalid && ( + + )} + + ); + }} + /> + +
+
+ + + + + + +
+
diff --git a/src/components/labaratory/operation.tsx b/src/components/labaratory/operation.tsx index a34f076..4b326d0 100644 --- a/src/components/labaratory/operation.tsx +++ b/src/components/labaratory/operation.tsx @@ -3,7 +3,6 @@ import { useLabaratory } from "@/components/labaratory/context"; import { Editor } from "@/components/labaratory/editor"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; -import { ButtonGroup } from "@/components/ui/button-group"; import { DropdownMenu, DropdownMenuContent, @@ -22,7 +21,6 @@ import { CircleXIcon, ClockIcon, FileTextIcon, - MoreHorizontalIcon, PlayIcon, SquarePenIcon, } from "lucide-react"; @@ -293,6 +291,18 @@ export const Response = ({ }: { historyItem?: LabaratoryHistoryRequest | null; }) => { + const isError = useMemo(() => { + if (!historyItem) { + return false; + } + + return ( + historyItem.status < 200 || + historyItem.status >= 300 || + ("response" in historyItem && JSON.parse(historyItem.response).errors) + ); + }, [historyItem]); + return ( = 300, + "bg-red-400/10 text-red-500": isError, })} > - {(historyItem as LabaratoryHistoryRequest).status >= 200 && - (historyItem as LabaratoryHistoryRequest).status < 300 ? ( + {!isError ? ( ) : ( @@ -609,39 +616,30 @@ export const Query = (props: { {isActiveOperationSavedToCollection ? "Saved" : "Save"}
- - - - - - - - share({ variables: true })}> - Share with variables - - share({ variables: true, extensions: true })} - > - Share with variables and extensions - - - share({ variables: true, headers: true, extensions: true }) - } - > - Share with variables, extensions, headers - - - - + + + + + + share({ variables: true })}> + Share with variables + + share({ variables: true, extensions: true })} + > + Share with variables and extensions + + + share({ variables: true, headers: true, extensions: true }) + } + > + Share with variables, extensions, headers + + + {!props.isReadOnly ? ( + + + + + Are you sure you want to delete task {operation.name}? + + + {operation.name} will be deleted from the test. + + + + Cancel + + + + + + + + + +
+ ); +}; + +const dagreGraph = new dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})); + +const getLayoutedElements = (nodes: Node[], edges: Edge[]) => { + const direction = "LR"; + + if (nodes.every((node) => node.measured)) { + dagreGraph.setGraph({ rankdir: direction }); + + nodes.forEach((node) => { + dagreGraph.setNode(node.id, node.measured!); + }); + + edges.forEach((edge) => { + dagreGraph.setEdge(edge.source, edge.target); + }); + + dagre.layout(dagreGraph); + } + + const newNodes = nodes.map((node) => { + const nodeWithPosition = dagreGraph.node(node.id); + const newNode = { + ...node, + position: node.measured + ? { + x: nodeWithPosition.x - node.measured.width! / 2, + y: nodeWithPosition.y - node.measured.height! / 2, + } + : node.position, + }; + + return newNode; + }); + + return { nodes: newNodes, edges }; +}; + +export const TestTaskCollectionItem = (props: { + collection: LabaratoryCollection; + onOperationClick: (operationId: string) => void; +}) => { + const [isOpen, setIsOpen] = useState(false); + + return ( + + + + + + {isOpen && + props.collection.operations.map((operation) => { + return ( + + ); + })} + + + ); +}; + +export const Test = () => { + const { activeTab, tests, collections, addTaskToTest } = useLabaratory(); + const [search, setSearch] = useState(""); + + const [isUtilitiesOpen, setIsUtilitiesOpen] = useState(false); + const [isOperationsOpen, setIsOperationsOpen] = useState(false); + + const test = useMemo(() => { + if (activeTab?.type !== "test") { + return null; + } + + return tests.find((t) => t.id === (activeTab as LabaratoryTabTest).data.id); + }, [activeTab, tests]); + + const [nodes, setNodes, onNodesChange] = useNodesState([]); + const [edges, setEdges, onEdgesChange] = useEdgesState([]); + + useLayoutEffect(() => { + if (test) { + setNodes( + test.tasks.map((task) => ({ + id: task.id, + type: task.type, + data: { + label: task.id, + task, + }, + position: { + x: -1, + y: -1, + }, + style: { + width: 240, + }, + })) + ); + setEdges( + test?.tasks + ?.map((task) => { + if (!task.next) { + return null; + } + + return { + id: `${task.id}-${task.next}`, + source: task.id, + target: task.next, + type: ConnectionLineType.SmoothStep, + animated: true, + }; + }) + .filter((edge) => edge !== null) ?? [] + ); + } + }, [setEdges, setNodes, test]); + + const onLayout = useCallback(() => { + const { nodes: layoutedNodes, edges: layoutedEdges } = getLayoutedElements( + nodes, + edges + ); + + setNodes(layoutedNodes); + setEdges(layoutedEdges); + }, [nodes, edges, setNodes, setEdges]); + + useEffect(() => { + if ( + nodes.length > 0 && + nodes.every( + (node) => + node.position.x === -1 && node.position.y === -1 && node.measured + ) + ) { + onLayout(); + } + }, [onLayout, nodes, edges]); + + const onConnect = useCallback( + (connection: Connection) => + setEdges((eds) => + addEdge( + { + ...connection, + type: ConnectionLineType.SmoothStep, + animated: true, + }, + eds + ) + ), + [setEdges] + ); + + if (!test) { + return null; + } + + return ( +
+ + +
+
+
+ Tasks +
+
+ + setSearch(e.target.value)} + /> + {search.length > 0 && ( + + )} +
+
+
+ +
+ + + + + + + + + + +
+ {collections.map((collection) => ( + { + addTaskToTest(test.id, { + type: "operation", + data: { + id: operationId, + }, + }); + }} + /> + ))} +
+
+
+
+ +
+
+
+
+ + + ( + + ), + }} + onNodesChange={onNodesChange} + onEdgesChange={onEdgesChange} + onConnect={onConnect} + fitView + fitViewOptions={{ + maxZoom: 1, + minZoom: 1, + }} + > + {/* */} + + +
+
+ ); +}; diff --git a/src/components/labaratory/tests.tsx b/src/components/labaratory/tests.tsx new file mode 100644 index 0000000..92a5928 --- /dev/null +++ b/src/components/labaratory/tests.tsx @@ -0,0 +1,258 @@ +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; +import { Tooltip, TooltipContent } from "@/components/ui/tooltip"; +import { TooltipTrigger } from "@radix-ui/react-tooltip"; +import { + FlaskConicalIcon, + PlusIcon, + SearchIcon, + TrashIcon, + XIcon, +} from "lucide-react"; +import { useLabaratory } from "@/components/labaratory/context"; +import { + Empty, + EmptyContent, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/components/ui/empty"; +import { cn } from "@/lib/utils"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog"; +import { useMemo, useState } from "react"; +import { type LabaratoryTest } from "@/lib/tests"; + +export const TestItem = (props: { test: LabaratoryTest }) => { + const { deleteTest, tabs, activeTab, addTab, setActiveTab } = useLabaratory(); + + const isActive = useMemo(() => { + return activeTab?.type === "test" && activeTab.data.id === props.test.id; + }, [activeTab, props.test]); + + return ( + + + + + + Are you sure you want to delete test {props.test.name}? + + + {props.test.name} will be permanently deleted. + + + + Cancel + + + + + + + + Delete test + + + ); +}; + +export const TestsSearchResult = (props: { items: LabaratoryTest[] }) => { + const { tabs, addTab, setActiveTab } = useLabaratory(); + + return ( +
+ {props.items.map((test) => { + return ( + + ); + })} +
+ ); +}; + +export const Tests = () => { + const [search, setSearch] = useState(""); + const { tests, openAddTestDialog } = useLabaratory(); + + const searchResults = useMemo(() => { + return tests.filter((item) => { + return item.name.toLowerCase().includes(search.toLowerCase()); + }); + }, [tests, search]); + + return ( +
+
+
+ Tests +
+ + + + + Add test + +
+
+
+ + setSearch(e.target.value)} + /> + {search.length > 0 && ( + + )} +
+
+
+ +
+ {search.length > 0 ? ( + searchResults.length > 0 ? ( + + ) : ( + + + + + + + No results found + + + No tests found matching your search. + + + + ) + ) : tests.length > 0 ? ( + tests.map((item) => ) + ) : ( + + + + + + No tests yet + + You haven't created any tests yet. Get started by adding + your first test. + + + + + + + )} +
+ +
+
+
+ ); +}; diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..681ad98 --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,92 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +function Card({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardDescription({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardAction({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardContent({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardAction, + CardDescription, + CardContent, +} diff --git a/src/index.css b/src/index.css index b9eb92f..cfbd4df 100644 --- a/src/index.css +++ b/src/index.css @@ -119,9 +119,19 @@ app-region: drag; } + .monaco-editor { position: absolute !important; } + + .bg-dots { + background-image: radial-gradient(circle, var(--border) 1px, #0000 0); + background-size: 24px 24px; + } + + .react-flow__panel { + display: none; + } } @keyframes slide-to-left { diff --git a/src/lib/collections.ts b/src/lib/collections.ts index 333ede4..268ed65 100644 --- a/src/lib/collections.ts +++ b/src/lib/collections.ts @@ -45,11 +45,30 @@ export interface LabaratoryCollectionsState { collections: LabaratoryCollection[]; } +export interface LabaratoryCollectionsCallbacks { + onCollectionCreate?: (collection: LabaratoryCollection) => void; + onCollectionUpdate?: (collection: LabaratoryCollection) => void; + onCollectionDelete?: (collection: LabaratoryCollection) => void; + onCollectionOperationCreate?: ( + collection: LabaratoryCollection, + operation: LabaratoryCollectionOperation + ) => void; + onCollectionOperationUpdate?: ( + collection: LabaratoryCollection, + operation: LabaratoryCollectionOperation + ) => void; + onCollectionOperationDelete?: ( + collection: LabaratoryCollection, + operation: LabaratoryCollectionOperation + ) => void; +} + export const useCollections = (props: { defaultCollections?: LabaratoryCollection[]; onCollectionsChange?: (collections: LabaratoryCollection[]) => void; tabsApi?: LabaratoryTabsState & LabaratoryTabsActions; -}): LabaratoryCollectionsState & LabaratoryCollectionsActions => { +} & LabaratoryCollectionsCallbacks): LabaratoryCollectionsState & + LabaratoryCollectionsActions => { const [collections, setCollections] = useState( props.defaultCollections ?? [] ); @@ -58,17 +77,19 @@ export const useCollections = (props: { ( collection: Omit ) => { + const newCollection: LabaratoryCollection = { + ...collection, + id: crypto.randomUUID(), + createdAt: new Date().toISOString(), + operations: [], + }; const newCollections = [ ...collections, - { - ...collection, - id: crypto.randomUUID(), - createdAt: new Date().toISOString(), - operations: [], - }, + newCollection, ]; setCollections(newCollections); props.onCollectionsChange?.(newCollections); + props.onCollectionCreate?.(newCollection); }, [collections, props] ); @@ -78,16 +99,17 @@ export const useCollections = (props: { collectionId: string, operation: Omit ) => { + const newOperation: LabaratoryCollectionOperation = { + ...operation, + createdAt: new Date().toISOString(), + }; const newCollections = collections.map((collection) => collection.id === collectionId ? { ...collection, operations: [ ...collection.operations, - { - ...operation, - createdAt: new Date().toISOString(), - }, + newOperation, ], } : collection @@ -95,35 +117,65 @@ export const useCollections = (props: { setCollections(newCollections); props.onCollectionsChange?.(newCollections); + const updatedCollection = newCollections.find( + (collection) => collection.id === collectionId + ); + if (updatedCollection) { + props.onCollectionUpdate?.(updatedCollection); + props.onCollectionOperationCreate?.(updatedCollection, newOperation); + } }, [collections, props] ); const deleteCollection = useCallback( (collectionId: string) => { + const collectionToDelete = collections.find( + (collection) => collection.id === collectionId + ); const newCollections = collections.filter( (collection) => collection.id !== collectionId ); setCollections(newCollections); props.onCollectionsChange?.(newCollections); + if (collectionToDelete) { + props.onCollectionDelete?.(collectionToDelete); + } }, [collections, props] ); const deleteOperation = useCallback( (collectionId: string, operationId: string) => { + let operationToDelete: LabaratoryCollectionOperation | undefined; const newCollections = collections.map((collection) => collection.id === collectionId ? { ...collection, - operations: collection.operations.filter( - (operation) => operation.id !== operationId - ), + operations: collection.operations.filter((operation) => { + if (operation.id === operationId) { + operationToDelete = operation; + return false; + } + return true; + }), } : collection ); setCollections(newCollections); props.onCollectionsChange?.(newCollections); + const updatedCollection = newCollections.find( + (collection) => collection.id === collectionId + ); + if (updatedCollection) { + props.onCollectionUpdate?.(updatedCollection); + if (operationToDelete) { + props.onCollectionOperationDelete?.( + updatedCollection, + operationToDelete + ); + } + } }, [collections, props] ); @@ -138,6 +190,12 @@ export const useCollections = (props: { ); setCollections(newCollections); props.onCollectionsChange?.(newCollections); + const updatedCollection = newCollections.find( + (collection) => collection.id === collectionId + ); + if (updatedCollection) { + props.onCollectionUpdate?.(updatedCollection); + } }, [collections, props] ); @@ -148,18 +206,38 @@ export const useCollections = (props: { operationId: string, operation: Omit ) => { - const newCollections = collections.map((c) => - c.id === collectionId - ? { - ...c, - operations: c.operations.map((o) => - o.id === operationId ? { ...o, ...operation } : o - ), + let updatedOperation: LabaratoryCollectionOperation | undefined; + const newCollections = collections.map((c) => { + if (c.id !== collectionId) { + return c; + } + + return { + ...c, + operations: c.operations.map((o) => { + if (o.id === operationId) { + updatedOperation = { ...o, ...operation }; + return updatedOperation; } - : c - ); + + return o; + }), + }; + }); setCollections(newCollections); props.onCollectionsChange?.(newCollections); + const updatedCollection = newCollections.find( + (collection) => collection.id === collectionId + ); + if (updatedCollection) { + props.onCollectionUpdate?.(updatedCollection); + if (updatedOperation) { + props.onCollectionOperationUpdate?.( + updatedCollection, + updatedOperation + ); + } + } }, [collections, props] ); diff --git a/src/lib/history.ts b/src/lib/history.ts index ccf191a..6a6b89b 100644 --- a/src/lib/history.ts +++ b/src/lib/history.ts @@ -1,5 +1,6 @@ import type { LabaratoryOperation } from "@/lib/operations"; import type { LabaratoryPreflightLog } from "@/lib/preflight"; +import { format } from "date-fns"; import { useCallback, useEffect, useRef, useState } from "react"; export interface LabaratoryHistoryRequest { @@ -36,12 +37,22 @@ export interface LabaratoryHistoryState { export interface LabaratoryHistoryActions { addHistory: (history: Omit) => LabaratoryHistory; addResponseToHistory: (historyId: string, response: string) => void; + deleteHistory: (historyId: string) => void; + deleteHistoryByDay: (day: string) => void; + deleteAllHistory: () => void; +} + +export interface LabaratoryHistoryCallbacks { + onHistoryCreate?: (history: LabaratoryHistory) => void; + onHistoryUpdate?: (history: LabaratoryHistory) => void; + onHistoryDelete?: (history: LabaratoryHistory) => void; } export const useHistory = (props: { defaultHistory?: LabaratoryHistory[]; onHistoryChange?: (history: LabaratoryHistory[]) => void; -}): LabaratoryHistoryState & LabaratoryHistoryActions => { +} & LabaratoryHistoryCallbacks): LabaratoryHistoryState & + LabaratoryHistoryActions => { const [history, setHistory] = useState( props.defaultHistory ?? [] ); @@ -62,6 +73,7 @@ export const useHistory = (props: { setHistory(newHistory); props.onHistoryChange?.(newHistory); + props.onHistoryCreate?.(newItem); return newItem; }, @@ -85,17 +97,72 @@ export const useHistory = (props: { }, ]; - const newHistory = [...historyRef.current.map((item) => item.id === historyId ? { ...item, responses: newResponses } : item)]; + const updatedHistoryItem = { + ...historyItem, + responses: newResponses, + }; + const newHistory = [ + ...historyRef.current.map((item) => + item.id === historyId ? updatedHistoryItem : item + ), + ]; setHistory(newHistory); props.onHistoryChange?.(newHistory); + props.onHistoryUpdate?.(updatedHistoryItem); + } + }, + [props] + ); + + const deleteHistory = useCallback( + (historyId: string) => { + const historyToDelete = historyRef.current.find( + (item) => item.id === historyId + ); + const newHistory = historyRef.current.filter( + (item) => item.id !== historyId + ); + setHistory(newHistory); + props.onHistoryChange?.(newHistory); + if (historyToDelete) { + props.onHistoryDelete?.(historyToDelete); } }, [props] ); + const deleteAllHistory = useCallback( + () => { + const removedItems = [...historyRef.current]; + setHistory([]); + props.onHistoryChange?.([]); + removedItems.forEach((item) => props.onHistoryDelete?.(item)); + }, + [props] + ); + + const deleteHistoryByDay = useCallback( + (day: string) => { + const removedItems = historyRef.current.filter( + (item) => format(new Date(item.createdAt), "dd MMM yyyy") === day + ); + const newHistory = historyRef.current.filter( + (item) => + format(new Date(item.createdAt), "dd MMM yyyy") !== day + ); + setHistory(newHistory); + props.onHistoryChange?.(newHistory); + removedItems.forEach((item) => props.onHistoryDelete?.(item)); + }, + [props] + ); + return { history, addHistory, addResponseToHistory, + deleteHistory, + deleteAllHistory, + deleteHistoryByDay, }; }; diff --git a/src/lib/operations.ts b/src/lib/operations.ts index 506bc38..158c842 100644 --- a/src/lib/operations.ts +++ b/src/lib/operations.ts @@ -72,6 +72,12 @@ export interface LabaratoryOperationsActions { isActiveOperationSubscription: boolean; } +export interface LabaratoryOperationsCallbacks { + onOperationCreate?: (operation: LabaratoryOperation) => void; + onOperationUpdate?: (operation: LabaratoryOperation) => void; + onOperationDelete?: (operation: LabaratoryOperation) => void; +} + export const useOperations = (props: { defaultOperations?: LabaratoryOperation[]; defaultActiveOperationId?: string; @@ -81,7 +87,8 @@ export const useOperations = (props: { tabsApi?: LabaratoryTabsState & LabaratoryTabsActions; envApi?: LabaratoryEnvState & LabaratoryEnvActions; preflightApi?: LabaratoryPreflightState & LabaratoryPreflightActions; -}): LabaratoryOperationsState & LabaratoryOperationsActions => { +} & LabaratoryOperationsCallbacks): LabaratoryOperationsState & + LabaratoryOperationsActions => { const [operations, _setOperations] = useState( props.defaultOperations ?? [] ); @@ -127,12 +134,15 @@ export const useOperations = (props: { const addOperation = useCallback( (operation: Omit & { id?: string }) => { const newOperation = { id: crypto.randomUUID(), ...operation }; + const newOperations = [...operations, newOperation]; + _setOperations(newOperations); + props.onOperationsChange?.(newOperations); - _setOperations((prev) => [...prev, newOperation]); + props.onOperationCreate?.(newOperation); return newOperation; }, - [] + [operations, props] ); useEffect(() => { @@ -182,6 +192,9 @@ export const useOperations = (props: { _setOperations(newOperations); props.onOperationsChange?.(newOperations); + if (updatedOperation.id) { + props.onOperationUpdate?.(updatedOperation as LabaratoryOperation); + } if (props.collectionsApi && activeOperation?.id) { const collectionId = @@ -201,10 +214,14 @@ export const useOperations = (props: { const deleteOperation = useCallback( (operationId: string) => { + const operationToDelete = operations.find((o) => o.id === operationId); const newOperations = operations.filter((o) => o.id !== operationId); _setOperations(newOperations); props.onOperationsChange?.(newOperations); + if (operationToDelete) { + props.onOperationDelete?.(operationToDelete); + } if (activeOperation?.id === operationId) { setActiveOperation(newOperations[0]?.id ?? ""); @@ -299,18 +316,23 @@ export const useOperations = (props: { return null; } - const env: LabaratoryEnv = options?.env ?? + let env: LabaratoryEnv = options?.env ?? (await props.preflightApi ?.runPreflight?.() ?.then((result) => result?.env ?? { variables: {} })) ?? { variables: {}, }; - props.envApi?.setEnv(env); + if (env && Object.keys(env.variables).length > 0) { + props.envApi?.setEnv(env); + } else { + env = props.envApi?.env ?? { variables: {} }; + } const headers = activeOperation.headers ? JSON.parse(handleTemplate(activeOperation.headers, env)) : {}; + const variables = activeOperation.variables ? JSON.parse(handleTemplate(activeOperation.variables, env)) : {}; diff --git a/src/lib/operations.utils.ts b/src/lib/operations.utils.ts index 3bffeb0..7667f54 100644 --- a/src/lib/operations.utils.ts +++ b/src/lib/operations.utils.ts @@ -40,8 +40,8 @@ export function isPathInQuery(query: string, path: string, operationName?: strin try { doc = parse(query); - } catch (error) { - console.error(error); + } catch { + // console.error(error); } if (!doc) { @@ -103,8 +103,8 @@ export function addPathToQuery(query: string, path: string, operationName?: stri try { doc = parse(query); - } catch (error) { - console.error(error); + } catch { + // console.error(error); } doc ??= { @@ -249,8 +249,8 @@ export function deletePathFromQuery(query: string, path: string, operationName?: try { doc = parse(query); - } catch (error) { - console.error(error); + } catch { + // console.error(error); } if (!doc) { @@ -357,8 +357,8 @@ export async function getOperationHash(operation: Pick b.toString(16).padStart(2, "0")).join(""); return hashHex; - } catch (error) { - console.error(error); + } catch { + // console.error(error); return null; } } @@ -368,8 +368,8 @@ export function getOperationName(query: string) { const doc = parse(query); const operationDefinition = doc.definitions.find(v => v.kind === Kind.OPERATION_DEFINITION); return operationDefinition?.name?.value; - } catch (error) { - console.error(error); + } catch { + // console.error(error); const match = query.match(/(query|mutation|subscription)\s+([a-zA-Z0-9_]+)/); @@ -377,6 +377,16 @@ export function getOperationName(query: string) { } } +export function getOperationType(query: string) { + try { + const doc = parse(query); + const operationDefinition = doc.definitions.find(v => v.kind === Kind.OPERATION_DEFINITION); + return operationDefinition?.operation; + } catch { + return null; + } +} + export function isArgInQuery( query: string, path: string, @@ -398,8 +408,8 @@ export function isArgInQuery( try { doc = parse(query); - } catch (error) { - console.error(error); + } catch { + // console.error(error); } if (!doc) { @@ -536,8 +546,8 @@ export function addArgToField( try { doc = parse(query); - } catch (error) { - console.error(error); + } catch { + // console.error(error); } if (!doc) { @@ -830,8 +840,8 @@ export function removeArgFromField( try { doc = parse(query); - } catch (error) { - console.error(error); + } catch { + // console.error(error); } if (!doc) { diff --git a/src/lib/preflight.ts b/src/lib/preflight.ts index 3f040b5..428f66d 100644 --- a/src/lib/preflight.ts +++ b/src/lib/preflight.ts @@ -72,29 +72,27 @@ export const usePreflight = (props: { export async function runIsolatedLabScript( script: string, - env: LabaratoryEnv + env: LabaratoryEnv, + prompt?: (placeholder: string, defaultValue: string) => Promise ): Promise { return new Promise((resolve, reject) => { const blob = new Blob( [ - ` + /* javascript */` + import CryptoJS from 'https://cdn.jsdelivr.net/npm/crypto-js@4.2.0/+esm'; + const env = ${JSON.stringify(env)}; + let promptResolve = null; + self.onmessage = async (event) => { - try { - const lab = Object.freeze({ - fetch, - graphql: (endpoint, query, options) => { - return fetch(endpoint, { - method: 'POST', - body: JSON.stringify({ query, variables: options?.variables, extensions: options?.extensions }), - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - }, - }); - }, - console: { + if (event.data.type === 'prompt:result') { + promptResolve?.(event.data.value || null); + } + + if (event.data.type === 'init') { + try { + self.console = { log: (...args) => { self.postMessage({ type: 'log', level: 'log', message: args }); }, @@ -104,24 +102,45 @@ export async function runIsolatedLabScript( error: (...args) => { self.postMessage({ type: 'log', level: 'error', message: args }); }, - }, - env: { - get: (key) => env.variables[key], - set: (key, value) => { - env.variables[key] = value; + }; + + const lab = Object.freeze({ + request: (endpoint, query, options) => { + return fetch(endpoint, { + method: 'POST', + body: JSON.stringify({ query, variables: options?.variables, extensions: options?.extensions }), + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + }); + }, + environment: { + get: (key) => env.variables[key], + set: (key, value) => { + env.variables[key] = value; + }, + delete: (key) => { + delete env.variables[key]; + } + }, + prompt: (placeholder, defaultValue) => { + return new Promise((resolve) => { + promptResolve = resolve; + self.postMessage({ type: 'prompt', placeholder, defaultValue }); + }); }, - delete: (key) => { - delete env.variables[key]; - } - } - }); - - const AsyncFunction = async function () {}.constructor; - await new AsyncFunction('lab', 'with(lab){' + event.data.script + '}')(lab); - - self.postMessage({ type: 'result', status: 'success', env: env }); - } catch (err) { - self.postMessage({ type: 'result', status: 'error', error: err.message || String(err) }); + CryptoJS: CryptoJS + }); + + // Make CryptoJS available globally in the script context + const AsyncFunction = async function () {}.constructor; + await new AsyncFunction('lab', 'CryptoJS', 'with(lab){' + event.data.script + '}')(lab, CryptoJS); + + self.postMessage({ type: 'result', status: 'success', env: env }); + } catch (err) { + self.postMessage({ type: 'result', status: 'error', error: err.message || String(err) }); + } } }; `, @@ -159,11 +178,14 @@ export async function runIsolatedLabScript( } else if (data.level === "error") { logs.push({ level: "error", message: data.message, createdAt: new Date().toISOString() }); } + } else if (data.type === "prompt") { + prompt?.(data.placeholder, data.defaultValue).then((value) => { + worker.postMessage({ type: 'prompt:result', value }); + }); } }; worker.onerror = (error) => { - console.error(error); reject({ status: "error", error: error.message, @@ -171,6 +193,6 @@ export async function runIsolatedLabScript( }); }; - worker.postMessage({ script }); + worker.postMessage({ type: 'init', script }); }); } diff --git a/src/lib/settings.ts b/src/lib/settings.ts new file mode 100644 index 0000000..57097d3 --- /dev/null +++ b/src/lib/settings.ts @@ -0,0 +1,33 @@ +import { useCallback, useState } from "react"; + +export type LabaratorySettings = object + +export interface LabaratorySettingsState { + settings: LabaratorySettings; +} + +export interface LabaratorySettingsActions { + setSettings: (settings: LabaratorySettings) => void; +} + +export const useSettings = (props: { + defaultSettings?: LabaratorySettings | null; + onSettingsChange?: (settings: LabaratorySettings | null) => void; +}): LabaratorySettingsState & LabaratorySettingsActions => { + const [settings, _setSettings] = useState( + props.defaultSettings ?? {} + ); + + const setSettings = useCallback( + (settings: LabaratorySettings) => { + _setSettings(settings); + props.onSettingsChange?.(settings); + }, + [props] + ); + + return { + settings, + setSettings, + }; +}; \ No newline at end of file diff --git a/src/lib/tabs.ts b/src/lib/tabs.ts index 2032b1a..778f209 100644 --- a/src/lib/tabs.ts +++ b/src/lib/tabs.ts @@ -2,6 +2,7 @@ import type { LabaratoryEnv } from "@/lib/env"; import type { LabaratoryHistoryRequest } from "@/lib/history"; import type { LabaratoryOperation } from "@/lib/operations"; import type { LabaratoryPreflight } from "@/lib/preflight"; +import type { LabaratoryTest } from "@/lib/tests"; import { useCallback, useState } from "react"; export interface LabaratoryTabOperation { @@ -32,6 +33,20 @@ export interface LabaratoryTabEnv { readOnly?: boolean; } +export interface LabaratoryTabTest { + id: string; + type: "test"; + data: Pick; + readOnly?: boolean; +} + +export interface LabaratoryTabSettings { + id: string; + type: "settings"; + data: unknown; + readOnly?: boolean; +} + export type LabaratoryTabData = | Pick | Pick @@ -41,7 +56,9 @@ export type LabaratoryTab = | LabaratoryTabOperation | LabaratoryTabPreflight | LabaratoryTabEnv - | LabaratoryTabHistory; + | LabaratoryTabHistory + | LabaratoryTabSettings + | LabaratoryTabTest; export interface LabaratoryTabsState { tabs: LabaratoryTab[]; @@ -73,7 +90,7 @@ export const useTabs = (props: { const setActiveTab = useCallback( (tab: LabaratoryTab) => { _setActiveTab(tab); - props.onActiveTabIdChange?.(tab.id); + props.onActiveTabIdChange?.(tab?.id ?? null); }, [props] ); diff --git a/src/lib/tests.ts b/src/lib/tests.ts new file mode 100644 index 0000000..7ed5238 --- /dev/null +++ b/src/lib/tests.ts @@ -0,0 +1,113 @@ +import type { LabaratoryOperation } from "@/lib/operations"; +import { useCallback, useEffect, useRef, useState } from "react"; + +export interface LabaratoryTestTaskBase { + id: string; + next: string | null; +} + +export interface LabaratoryTestTaskOperation extends LabaratoryTestTaskBase { + type: "operation"; + data: Pick; +} + +export interface LabaratoryTestTaskUtlity extends LabaratoryTestTaskBase { + type: "utility"; + data: unknown; +} + +export type LabaratoryTestTask = LabaratoryTestTaskOperation | LabaratoryTestTaskUtlity; + +export interface LabaratoryTest { + id: string; + name: string; + description?: string; + createdAt: string; + tasks: LabaratoryTestTask[]; +} + +export interface LabaratoryTestState { + tests: LabaratoryTest[]; +} + +export interface LabaratoryTestActions { + addTest: (test: Omit) => LabaratoryTest; + addTaskToTest: (testId: string, task: Pick) => void; + deleteTaskFromTest: (testId: string, taskId: string) => void; + deleteTest: (testId: string) => void; +} + +export const useTests = (props: { + defaultTests?: LabaratoryTest[]; + onTestsChange?: (test: LabaratoryTest[]) => void; +}): LabaratoryTestState & LabaratoryTestActions => { + const [tests, setTests] = useState( + props.defaultTests ?? [] + ); + + const testRef = useRef(tests); + + useEffect(() => { + testRef.current = tests; + }, [tests]); + + const addTest = useCallback( + (item: Omit) => { + const newItem: LabaratoryTest = { + ...item, + id: crypto.randomUUID(), + createdAt: new Date().toISOString(), + tasks: [], + } as LabaratoryTest; + + const newTest = [...tests, newItem]; + setTests(newTest); + + props.onTestsChange?.(newTest); + + return newItem; + }, + [tests, props] + ); + + const deleteTest = useCallback( + (testId: string) => { + const newTest = testRef.current.filter((item) => item.id !== testId); + setTests(newTest); + props.onTestsChange?.(newTest); + }, + [props] + ); + + const addTaskToTest = useCallback( + (testId: string, task: Pick) => { + const newTask: LabaratoryTestTask = { + ...task, + id: crypto.randomUUID(), + next: null, + } as LabaratoryTestTask; + + const newTest = testRef.current.map((item) => item.id === testId ? { ...item, tasks: [...item.tasks, newTask] } : item); + setTests(newTest); + props.onTestsChange?.(newTest); + }, + [props] + ); + + const deleteTaskFromTest = useCallback( + (testId: string, taskId: string) => { + const newTest = testRef.current.map((item) => item.id === testId ? { ...item, tasks: item.tasks.filter((task) => task.id !== taskId) } : item); + setTests(newTest); + props.onTestsChange?.(newTest); + }, + [props] + ); + + return { + tests, + addTest, + deleteTest, + addTaskToTest, + deleteTaskFromTest, + }; +}; \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index 7f6448d..cbf0d43 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,13 +1,15 @@ import { createRoot } from "react-dom/client"; import "./index.css"; -import { Labaratory } from "@/components/labaratory/labaratory-desktop"; -import type { LabaratoryOperation } from "@/lib/operations"; -import type { LabaratoryHistory } from "@/lib/history"; -import type { LabaratoryCollection } from "@/lib/collections"; -import type { LabaratoryPreflight } from "@/lib/preflight"; -import type { LabaratoryTab } from "@/lib/tabs"; -import type { LabaratoryEnv } from "@/lib/env"; +import { Labaratory } from "./components/labaratory/labaratory"; +import type { LabaratoryOperation } from "./lib/operations"; +import type { LabaratoryHistory } from "./lib/history"; +import type { LabaratoryCollection } from "./lib/collections"; +import type { LabaratoryPreflight } from "./lib/preflight"; +import type { LabaratoryTab } from "./lib/tabs"; +import type { LabaratoryEnv } from "./lib/env"; +import type { LabaratorySettings } from "./lib/settings"; import { throttle } from "lodash"; +import type { LabaratoryTest } from "./lib/tests"; const localEndpoint = localStorage.getItem("endpoint"); const defaultEndpoint = localEndpoint ?? null; @@ -23,14 +25,6 @@ const onOperationsChange = throttle((operations: LabaratoryOperation[]) => { localStorage.setItem("operations", JSON.stringify(operations)); }, 1000); -const localActiveOperationId = localStorage.getItem("activeOperationId"); -const defaultActiveOperationId = - localActiveOperationId ?? defaultOperations[0]?.id ?? ""; - -const onActiveOperationIdChange = throttle((operationId: string) => { - localStorage.setItem("activeOperationId", operationId); -}, 1000); - const localHistory = localStorage.getItem("history"); const defaultHistory = localHistory ? JSON.parse(localHistory) : []; @@ -73,19 +67,67 @@ const onActiveTabIdChange = throttle((tabId: string | null) => { localStorage.setItem("activeTabId", tabId ?? ""); }, 1000); +const localSettings = localStorage.getItem("settings"); +const defaultSettings = localSettings ? JSON.parse(localSettings) : {}; + +const onSettingsChange = throttle((settings: LabaratorySettings | null) => { + localStorage.setItem("settings", JSON.stringify(settings)); +}, 1000); + +const localTests = localStorage.getItem("tests"); +const defaultTests = localTests ? JSON.parse(localTests) : []; + +const onTestsChange = throttle((tests: LabaratoryTest[]) => { + localStorage.setItem("tests", JSON.stringify(tests)); +}, 1000); + createRoot(document.getElementById("root")!).render(
+ console.log("onOperationCreate", args) + } + onOperationUpdate={(...args: unknown[]) => + console.log("onOperationUpdate", args) + } + onOperationDelete={(...args: unknown[]) => + console.log("onOperationDelete", args) + } defaultHistory={defaultHistory} onHistoryChange={onHistoryChange} + onHistoryCreate={(...args: unknown[]) => + console.log("onHistoryCreate", args) + } + onHistoryUpdate={(...args: unknown[]) => + console.log("onHistoryUpdate", args) + } + onHistoryDelete={(...args: unknown[]) => + console.log("onHistoryDelete", args) + } defaultCollections={defaultCollections} onCollectionsChange={onCollectionsChange} + onCollectionCreate={(...args: unknown[]) => + console.log("onCollectionCreate", args) + } + onCollectionUpdate={(...args: unknown[]) => + console.log("onCollectionUpdate", args) + } + onCollectionDelete={(...args: unknown[]) => + console.log("onCollectionDelete", args) + } + onCollectionOperationCreate={(...args: unknown[]) => + console.log("onCollectionOperationCreate", args) + } + onCollectionOperationUpdate={(...args: unknown[]) => + console.log("onCollectionOperationUpdate", args) + } + onCollectionOperationDelete={(...args: unknown[]) => + console.log("onCollectionOperationDelete", args) + } defaultPreflight={defaultPreflight} onPreflightChange={onPreflightChange} defaultTabs={defaultTabs} @@ -94,6 +136,10 @@ createRoot(document.getElementById("root")!).render( onActiveTabIdChange={onActiveTabIdChange} defaultEnv={defaultEnv} onEnvChange={onEnvChange} + defaultSettings={defaultSettings} + onSettingsChange={onSettingsChange} + defaultTests={defaultTests} + onTestsChange={onTestsChange} />
); diff --git a/tsconfig.app.json b/tsconfig.app.json index 468b1cf..08dd302 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -30,5 +30,5 @@ ] } }, - "include": ["src"] + "include": ["src", "lib"] } diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..30314c0 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["lib"] +} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 98d953d..c03c77e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,35 +1,46 @@ -import path from 'path'; -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; -import tailwindcss from '@tailwindcss/vite'; -import monacoEditor from 'vite-plugin-monaco-editor'; +import path from "path"; +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import tailwindcss from "@tailwindcss/vite"; +import monacoEditor from "vite-plugin-monaco-editor"; // https://vite.dev/config/ -export default defineConfig({ - plugins: [ - react({ - babel: { - plugins: ['babel-plugin-react-compiler'], +export default defineConfig(({ command }) => { + const enableReactCompiler = command === "serve"; + + return { + plugins: [ + react({ + babel: { + plugins: enableReactCompiler ? ["babel-plugin-react-compiler"] : [], + }, + }), + tailwindcss(), + // @ts-expect-error temp + monacoEditor.default({ + languageWorkers: ["json", "typescript", "editorWorkerService"], + customWorkers: [ + { + label: "graphql", + entry: "monaco-graphql/dist/graphql.worker", + }, + ], + }), + ], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, + build: { + lib: { + entry: path.resolve(__dirname, "./src/main.ts"), + formats: ["es"], + }, + copyPublicDir: false, + rollupOptions: { + external: ["react", "react-dom"], }, - }), - tailwindcss(), - // @ts-expect-error temp - monacoEditor.default({ - languageWorkers: ['json', 'typescript', 'editorWorkerService'], - customWorkers: [ - { - label: 'graphql', - entry: 'monaco-graphql/dist/graphql.worker', - } - ] - }), - ], - resolve: { - alias: { - "@": path.resolve(__dirname, "./src"), }, - }, - build: { - outDir: 'dist', - } + }; });