├── .github └── workflows │ └── npm-publish.yml ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── diagrams ├── mermaid_component_architecture.png ├── mermaid_generation_sequence.png └── renderMermaidPng_flow.png ├── index.ts ├── package-lock.json ├── package.json ├── scripts └── release.sh ├── smithery.yaml └── tsconfig.json /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish to npm 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*' # Run workflow on version tags, e.g. v1.0.0 7 | 8 | jobs: 9 | build-and-publish: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout code 13 | uses: actions/checkout@v4 14 | 15 | - name: Setup Node.js 16 | uses: actions/setup-node@v4 17 | with: 18 | node-version: '18' 19 | registry-url: 'https://registry.npmjs.org' 20 | 21 | - name: Install dependencies 22 | run: npm ci 23 | 24 | - name: Build 25 | run: npm run build 26 | 27 | - name: Publish to npm 28 | run: npm publish --access public 29 | env: 30 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .cursor/* -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Generated by https://smithery.ai. See: https://smithery.ai/docs/config#dockerfile 2 | # Use node:lts-slim (Debian-based) instead of Alpine for better Chrome compatibility 3 | FROM node:lts-slim 4 | 5 | # Set working directory 6 | WORKDIR /app 7 | 8 | # Install Chromium with its dependencies 9 | RUN apt-get update && apt-get install -y \ 10 | chromium \ 11 | --no-install-recommends \ 12 | && rm -rf /var/lib/apt/lists/* 13 | 14 | # Copy package files and install dependencies 15 | # Use PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true to avoid downloading Chromium again 16 | ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true 17 | COPY package.json package-lock.json ./ 18 | RUN npm install 19 | 20 | # Copy the rest of the application files 21 | COPY . . 22 | 23 | # Build the TypeScript code 24 | RUN npm run build 25 | 26 | # Command to run the MCP server 27 | CMD [ "node", "dist/index.js" ] 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Shawn Peng 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mermaid MCP Server 2 | 3 | 4 | A Model Context Protocol (MCP) server that converts Mermaid diagrams to PNG images. This server allows AI assistants and other applications to generate visual diagrams from textual descriptions using the Mermaid markdown syntax. 5 | 6 | ## Features 7 | 8 | - Converts Mermaid diagram code to PNG images 9 | - Supports multiple diagram themes (default, forest, dark, neutral) 10 | - Customizable background colors 11 | - Uses Puppeteer for high-quality headless browser rendering 12 | - Implements the MCP protocol for seamless integration with AI assistants 13 | - Flexible output options: return images directly or save to disk 14 | - Error handling with detailed error messages 15 | 16 | ## How It Works 17 | 18 | The server uses Puppeteer to launch a headless browser, render the Mermaid diagram to SVG, and capture a screenshot of the rendered diagram. The process involves: 19 | 20 | 1. Launching a headless browser instance 21 | 2. Creating an HTML template with the Mermaid code 22 | 3. Loading the Mermaid.js library 23 | 4. Rendering the diagram to SVG 24 | 5. Taking a screenshot of the rendered SVG as PNG 25 | 6. Either returning the image directly or saving it to disk 26 | 27 | ## Build 28 | 29 | ```bash 30 | npx tsc 31 | ``` 32 | 33 | ## Usage 34 | 35 | ### Use with Claude desktop 36 | 37 | ```json 38 | "mcpServers": { 39 | "mermaid": { 40 | "command": "npx", 41 | "args": [ 42 | "-y @peng-shawn/mermaid-mcp-server" 43 | ] 44 | } 45 | } 46 | ``` 47 | 48 | ### Use with Cursor and Cline 49 | 50 | ```bash 51 | env CONTENT_IMAGE_SUPPORTED=false npx -y @peng-shawn/mermaid-mcp-server 52 | ``` 53 | 54 | You can find a list of mermaid diagrams under `./diagrams`, they are created using Cursor agent with prompt: "generate mermaid diagrams and save them in a separate diagrams folder explaining how renderMermaidPng work" 55 | 56 | ### Run with inspector 57 | 58 | Run the server with inspector for testing and debugging: 59 | 60 | ```bash 61 | npx @modelcontextprotocol/inspector node dist/index.js 62 | ``` 63 | 64 | The server will start and listen on stdio for MCP protocol messages. 65 | 66 | Learn more about inspector [here](https://modelcontextprotocol.io/docs/tools/inspector). 67 | 68 | ### Installing via Smithery 69 | 70 | To install Mermaid Diagram Generator for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@peng-shawn/mermaid-mcp-server): 71 | 72 | ```bash 73 | npx -y @smithery/cli install @peng-shawn/mermaid-mcp-server --client claude 74 | ``` 75 | 76 | ### Docker and Smithery Environments 77 | 78 | When running in Docker containers (including via Smithery), you may need to handle Chrome dependencies: 79 | 80 | 1. The server now attempts to use Puppeteer's bundled browser by default 81 | 2. If you encounter browser-related errors, you have two options: 82 | 83 | **Option 1: During Docker image build:** 84 | - Set `PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true` when installing Puppeteer 85 | - Install Chrome/Chromium in your Docker container 86 | - Set `PUPPETEER_EXECUTABLE_PATH` at runtime to point to the Chrome installation 87 | 88 | **Option 2: Use Puppeteer's bundled Chrome:** 89 | - Ensure your Docker container has the necessary dependencies for Chrome 90 | - No need to set `PUPPETEER_SKIP_CHROMIUM_DOWNLOAD` 91 | - The code will use the bundled browser automatically 92 | 93 | For Smithery users, the latest version should work without additional configuration. 94 | 95 | ## API 96 | 97 | The server exposes a single tool: 98 | 99 | - `generate`: Converts Mermaid diagram code to a PNG image 100 | - Parameters: 101 | - `code`: The Mermaid diagram code to render 102 | - `theme`: (optional) Theme for the diagram. Options: "default", "forest", "dark", "neutral" 103 | - `backgroundColor`: (optional) Background color for the diagram, e.g. 'white', 'transparent', '#F0F0F0' 104 | - `name`: Name for the generated file (required when CONTENT_IMAGE_SUPPORTED=false) 105 | - `folder`: Absolute path to save the image to (required when CONTENT_IMAGE_SUPPORTED=false) 106 | 107 | The behavior of the `generate` tool depends on the `CONTENT_IMAGE_SUPPORTED` environment variable: 108 | 109 | - When `CONTENT_IMAGE_SUPPORTED=true` (default): The tool returns the image directly in the response 110 | - When `CONTENT_IMAGE_SUPPORTED=false`: The tool saves the image to the specified folder and returns the file path 111 | 112 | ## Environment Variables 113 | 114 | - `CONTENT_IMAGE_SUPPORTED`: Controls whether images are returned directly in the response or saved to disk 115 | - `true` (default): Images are returned directly in the response 116 | - `false`: Images are saved to disk, requiring `name` and `folder` parameters 117 | 118 | ## Examples 119 | 120 | ### Basic Usage 121 | 122 | ```javascript 123 | // Generate a flowchart with default settings 124 | { 125 | "code": "flowchart TD\n A[Start] --> B{Is it?}\n B -->|Yes| C[OK]\n B -->|No| D[End]" 126 | } 127 | ``` 128 | 129 | ### With Theme and Background Color 130 | 131 | ```javascript 132 | // Generate a sequence diagram with forest theme and light gray background 133 | { 134 | "code": "sequenceDiagram\n Alice->>John: Hello John, how are you?\n John-->>Alice: Great!", 135 | "theme": "forest", 136 | "backgroundColor": "#F0F0F0" 137 | } 138 | ``` 139 | 140 | ### Saving to Disk (when CONTENT_IMAGE_SUPPORTED=false) 141 | 142 | ```javascript 143 | // Generate a class diagram and save it to disk 144 | { 145 | "code": "classDiagram\n Class01 <|-- AveryLongClass\n Class03 *-- Class04\n Class05 o-- Class06", 146 | "theme": "dark", 147 | "name": "class_diagram", 148 | "folder": "/path/to/diagrams" 149 | } 150 | ``` 151 | 152 | ## FAQ 153 | 154 | ### Doesn't Claude desktop already support mermaid via canvas? 155 | 156 | Yes, but it doesn't support the `theme` and `backgroundColor` options. Plus, having a dedicated server makes it easier to create mermaid diagrams with different MCP clients. 157 | 158 | ### Why do I need to specify CONTENT_IMAGE_SUPPORTED=false when using with Cursor? 159 | 160 | Cursor doesn't support inline images in responses yet. 161 | 162 | 163 | ## Publishing 164 | 165 | This project uses GitHub Actions to automate the publishing process to npm. 166 | 167 | ### Method 1: Using the Release Script (Recommended) 168 | 169 | 1. Make sure all your changes are committed and pushed 170 | 2. Run the release script with either a specific version number or a semantic version increment: 171 | ```bash 172 | # Using a specific version number 173 | npm run release 0.1.4 174 | 175 | # Using semantic version increments 176 | npm run release patch # Increments the patch version (e.g., 0.1.3 → 0.1.4) 177 | npm run release minor # Increments the minor version (e.g., 0.1.3 → 0.2.0) 178 | npm run release major # Increments the major version (e.g., 0.1.3 → 1.0.0) 179 | ``` 180 | 3. The script will: 181 | - Validate the version format or semantic increment 182 | - Check if you're on the main branch 183 | - Detect and warn about version mismatches between files 184 | - Update all version references consistently (package.json, package-lock.json, and index.ts) 185 | - Create a single commit with all version changes 186 | - Create and push a git tag 187 | - The GitHub workflow will then automatically build and publish to npm 188 | 189 | ### Method 2: Manual Process 190 | 191 | 1. Update your code and commit the changes 192 | 2. Create and push a new tag with the version number: 193 | ```bash 194 | git tag v0.1.4 # Use the appropriate version number 195 | git push origin v0.1.4 196 | ``` 197 | 3. The GitHub workflow will automatically: 198 | - Build the project 199 | - Publish to npm with the version from the tag 200 | 201 | Note: You need to set up the `NPM_TOKEN` secret in your GitHub repository settings. To do this: 202 | 1. Generate an npm access token with publish permissions 203 | 2. Go to your GitHub repository → Settings → Secrets and variables → Actions 204 | 3. Create a new repository secret named `NPM_TOKEN` with your npm token as the value 205 | 206 | ## Badges 207 | 208 | [![smithery badge](https://smithery.ai/badge/@peng-shawn/mermaid-mcp-server)](https://smithery.ai/server/@peng-shawn/mermaid-mcp-server) 209 | 210 | 211 | mermaid-mcp-server MCP server 212 | 213 | 214 | 215 | ## License 216 | 217 | MIT -------------------------------------------------------------------------------- /diagrams/mermaid_component_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peng-shawn/mermaid-mcp-server/7d6c55e89577a3af876d3b9b8577344bfe105db2/diagrams/mermaid_component_architecture.png -------------------------------------------------------------------------------- /diagrams/mermaid_generation_sequence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peng-shawn/mermaid-mcp-server/7d6c55e89577a3af876d3b9b8577344bfe105db2/diagrams/mermaid_generation_sequence.png -------------------------------------------------------------------------------- /diagrams/renderMermaidPng_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peng-shawn/mermaid-mcp-server/7d6c55e89577a3af876d3b9b8577344bfe105db2/diagrams/renderMermaidPng_flow.png -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import puppeteer from 'puppeteer'; 4 | import path from 'path'; 5 | import url from 'url'; 6 | import fs from 'fs'; 7 | import { resolve } from 'import-meta-resolve'; 8 | import { Server } from "@modelcontextprotocol/sdk/server/index.js"; 9 | import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; 10 | import { 11 | CallToolRequestSchema, 12 | ListToolsRequestSchema, 13 | Tool, 14 | } from "@modelcontextprotocol/sdk/types.js"; 15 | 16 | /** 17 | * Mermaid MCP Server 18 | * 19 | * This server provides a tool to render Mermaid diagrams as PNG images. 20 | * 21 | * Environment Variables: 22 | * - MERMAID_LOG_VERBOSITY: Controls the verbosity of logging (default: 2) 23 | * 0 = EMERGENCY - Only the most critical errors 24 | * 1 = CRITICAL - Critical errors that require immediate attention 25 | * 2 = ERROR - Error conditions (default) 26 | * 3 = WARNING - Warning conditions 27 | * 4 = INFO - Informational messages 28 | * 5 = DEBUG - Debug-level messages 29 | * - CONTENT_IMAGE_SUPPORTED: Controls whether images can be returned directly in the response (default: true) 30 | * When set to 'false', the 'name' and 'folder' parameters become mandatory, and all images must be saved to disk. 31 | * 32 | * Example: 33 | * MERMAID_LOG_VERBOSITY=2 node index.js # Only show ERROR and more severe logs (default) 34 | * MERMAID_LOG_VERBOSITY=4 node index.js # Show INFO and more severe logs 35 | * MERMAID_LOG_VERBOSITY=5 node index.js # Show DEBUG and more severe logs 36 | * CONTENT_IMAGE_SUPPORTED=false node index.js # Require all images to be saved to disk 37 | * 38 | * Tool Parameters: 39 | * - code: The mermaid markdown to generate an image from (required) 40 | * - theme: Theme for the diagram (optional, one of: "default", "forest", "dark", "neutral") 41 | * - backgroundColor: Background color for the diagram (optional, e.g., "white", "transparent", "#F0F0F0") 42 | * - name: Name for the generated file (required when saving to folder or when CONTENT_IMAGE_SUPPORTED=false) 43 | * - folder: Folder path to save the image to (optional, but required when CONTENT_IMAGE_SUPPORTED=false) 44 | * 45 | * File Saving Behavior: 46 | * - When 'folder' is specified, the image will be saved to disk instead of returned in the response 47 | * - The 'name' parameter is required when 'folder' is specified 48 | * - If a file with the same name already exists, a timestamp will be appended to the filename 49 | * - When CONTENT_IMAGE_SUPPORTED=false, all images must be saved to disk, and 'name' and 'folder' are required 50 | */ 51 | 52 | // __dirname is not available in ESM modules by default 53 | const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); 54 | 55 | // Define log levels with numeric values for comparison 56 | enum LogLevel { 57 | EMERGENCY = 0, 58 | CRITICAL = 1, 59 | ERROR = 2, 60 | WARNING = 3, 61 | INFO = 4, 62 | DEBUG = 5, 63 | } 64 | 65 | // Get verbosity level from environment variable, default to INFO (4) 66 | const LOG_VERBOSITY = process.env.MERMAID_LOG_VERBOSITY 67 | ? parseInt(process.env.MERMAID_LOG_VERBOSITY, 10) 68 | : LogLevel.ERROR; 69 | 70 | // Check if content images are supported (default: true) 71 | const CONTENT_IMAGE_SUPPORTED = process.env.CONTENT_IMAGE_SUPPORTED !== 'false'; 72 | 73 | // Convert LogLevel to MCP log level string 74 | function getMcpLogLevel(level: LogLevel): "error" | "info" | "debug" | "warning" | "critical" | "emergency" { 75 | switch (level) { 76 | case LogLevel.EMERGENCY: return "emergency"; 77 | case LogLevel.CRITICAL: return "critical"; 78 | case LogLevel.ERROR: return "error"; 79 | case LogLevel.WARNING: return "warning"; 80 | case LogLevel.DEBUG: return "debug"; 81 | case LogLevel.INFO: 82 | default: return "info"; 83 | } 84 | } 85 | 86 | function log(level: LogLevel, message: string) { 87 | // Only log if the current level is less than or equal to the verbosity setting 88 | if (level <= LOG_VERBOSITY) { 89 | // Get the appropriate MCP log level 90 | const mcpLevel = getMcpLogLevel(level); 91 | 92 | server.sendLoggingMessage({ 93 | level: mcpLevel, 94 | data: message 95 | }); 96 | 97 | // Only console.error is consumed by MCP inspector 98 | console.error(`${LogLevel[level]} - ${message}`); 99 | } 100 | } 101 | 102 | // Define tools 103 | const GENERATE_TOOL: Tool = { 104 | name: "generate", 105 | description: "Generate PNG image from mermaid markdown", 106 | inputSchema: { 107 | type: "object", 108 | properties: { 109 | code: { 110 | type: "string", 111 | description: "The mermaid markdown to generate an image from" 112 | }, 113 | theme: { 114 | type: "string", 115 | enum: ["default", "forest", "dark", "neutral"], 116 | description: "Theme for the diagram (optional)" 117 | }, 118 | backgroundColor: { 119 | type: "string", 120 | description: "Background color for the diagram, e.g. 'white', 'transparent', '#F0F0F0' (optional)" 121 | }, 122 | name: { 123 | type: "string", 124 | description: CONTENT_IMAGE_SUPPORTED ? "Name of the diagram (optional)" : "Name for the generated file (required)" 125 | }, 126 | folder: { 127 | type: "string", 128 | description: CONTENT_IMAGE_SUPPORTED ? "Absolute path to save the image to (optional)" : "Absolute path to save the image to (required)" 129 | } 130 | }, 131 | required: CONTENT_IMAGE_SUPPORTED ? ["code"] : ["code", "name", "folder"] 132 | } 133 | }; 134 | 135 | // Server implementation 136 | const server = new Server( 137 | { 138 | name: "mermaid-mcp-server", 139 | version: "0.1.4", 140 | }, 141 | { 142 | capabilities: { 143 | tools: {}, 144 | logging: {} 145 | }, 146 | } 147 | ); 148 | 149 | function isGenerateArgs(args: unknown): args is { 150 | code: string; 151 | theme?: 'default' | 'forest' | 'dark' | 'neutral'; 152 | backgroundColor?: string; 153 | name?: string; 154 | folder?: string; 155 | } { 156 | return ( 157 | typeof args === 'object' && 158 | args !== null && 159 | 'code' in args && 160 | typeof (args as any).code === 'string' && 161 | (!(args as any).theme || ['default', 'forest', 'dark', 'neutral'].includes((args as any).theme)) && 162 | (!(args as any).backgroundColor || typeof (args as any).backgroundColor === 'string') && 163 | (!(args as any).name || typeof (args as any).name === 'string') && 164 | (!(args as any).folder || typeof (args as any).folder === 'string') 165 | ); 166 | } 167 | 168 | async function renderMermaidPng(code: string, config: { 169 | theme?: 'default' | 'forest' | 'dark' | 'neutral'; 170 | backgroundColor?: string; 171 | } = {}): Promise { 172 | log(LogLevel.INFO, "Launching Puppeteer"); 173 | log(LogLevel.DEBUG, `Rendering with config: ${JSON.stringify(config)}`); 174 | 175 | // Resolve the path to the local mermaid.js file 176 | const distPath = path.dirname(url.fileURLToPath(resolve('mermaid', import.meta.url))); 177 | const mermaidPath = path.resolve(distPath, 'mermaid.min.js'); 178 | log(LogLevel.DEBUG, `Using Mermaid from: ${mermaidPath}`); 179 | 180 | const browser = await puppeteer.launch({ 181 | headless: true, 182 | // Use the bundled browser instead of looking for Chrome on the system 183 | executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined, 184 | args: ['--no-sandbox', '--disable-setuid-sandbox'], 185 | }); 186 | 187 | // Declare page outside try block so it's accessible in catch and finally 188 | let page: puppeteer.Page | null = null; 189 | // Store console messages for error reporting 190 | const consoleMessages: string[] = []; 191 | 192 | try { 193 | page = await browser.newPage(); 194 | log(LogLevel.DEBUG, "Browser page created"); 195 | 196 | // Capture browser console messages for better error reporting 197 | page.on('console', (msg) => { 198 | const text = msg.text(); 199 | consoleMessages.push(text); 200 | log(LogLevel.DEBUG, text); 201 | }); 202 | 203 | // Create a simple HTML template without the CDN reference 204 | const htmlContent = ` 205 | 206 | 207 | 208 | Mermaid Renderer 209 | 220 | 221 | 222 |
223 | 224 | 225 | `; 226 | // 注意:要在 page.goto() **之前** 设置 227 | await page.setViewport({ 228 | width: 1200, // 视口尺寸保持和原来相同即可 229 | height: 800, 230 | deviceScaleFactor: 3 // 2~4 皆可,越大 PNG 越清晰也越大 231 | }); 232 | 233 | // Write the HTML to a temporary file 234 | const tempHtmlPath = path.join(__dirname, 'temp-mermaid.html'); 235 | fs.writeFileSync(tempHtmlPath, htmlContent); 236 | 237 | log(LogLevel.INFO, `Rendering mermaid code: ${code.substring(0, 50)}...`); 238 | log(LogLevel.DEBUG, `Full mermaid code: ${code}`); 239 | 240 | // Navigate to the HTML file 241 | await page.goto(`file://${tempHtmlPath}`); 242 | log(LogLevel.DEBUG, "Navigated to HTML template"); 243 | 244 | // Add the mermaid script to the page 245 | await page.addScriptTag({ path: mermaidPath }); 246 | log(LogLevel.DEBUG, "Added Mermaid script to page"); 247 | 248 | // Render the mermaid diagram using a more robust approach similar to the CLI 249 | log(LogLevel.DEBUG, "Starting Mermaid rendering in browser"); 250 | const screenshot = await page.$eval('#container', async (container, mermaidCode, mermaidConfig) => { 251 | try { 252 | // @ts-ignore - mermaid is loaded by the script tag 253 | window.mermaid.initialize({ 254 | startOnLoad: false, 255 | theme: mermaidConfig.theme || 'default', 256 | securityLevel: 'loose', 257 | logLevel: 5 258 | }); 259 | 260 | // This will throw an error if the mermaid syntax is invalid 261 | // @ts-ignore - mermaid is loaded by the script tag 262 | const { svg: svgText } = await window.mermaid.render('mermaid-svg', mermaidCode, container); 263 | container.innerHTML = svgText; 264 | 265 | const svg = container.querySelector('svg'); 266 | if (!svg) { 267 | throw new Error('SVG element not found after rendering'); 268 | } 269 | 270 | // Apply any necessary styling to the SVG 271 | svg.style.backgroundColor = mermaidConfig.backgroundColor || 'white'; 272 | 273 | // Return the dimensions for screenshot 274 | const rect = svg.getBoundingClientRect(); 275 | return { 276 | width: Math.ceil(rect.width), 277 | height: Math.ceil(rect.height), 278 | success: true 279 | }; 280 | } catch (error) { 281 | // Return the error to be handled outside 282 | return { 283 | success: false, 284 | error: error instanceof Error ? error.message : String(error) 285 | }; 286 | } 287 | }, code, { theme: config.theme, backgroundColor: config.backgroundColor }); 288 | 289 | // Check if rendering was successful 290 | if (!screenshot.success) { 291 | log(LogLevel.ERROR, `Mermaid rendering failed in browser: ${screenshot.error}`); 292 | throw new Error(`Mermaid rendering failed: ${screenshot.error}`); 293 | } 294 | 295 | log(LogLevel.DEBUG, "Mermaid rendered successfully in browser"); 296 | 297 | // Take a screenshot of the SVG 298 | const svgElement = await page.$('#container svg'); 299 | if (!svgElement) { 300 | log(LogLevel.ERROR, "SVG element not found after successful rendering"); 301 | throw new Error('SVG element not found'); 302 | } 303 | 304 | log(LogLevel.DEBUG, "Taking screenshot of SVG"); 305 | // Take a screenshot with the correct dimensions 306 | const base64Image = await svgElement.screenshot({ 307 | omitBackground: false, 308 | type: 'png', 309 | encoding: 'base64' 310 | }); 311 | 312 | // Clean up the temporary file 313 | fs.unlinkSync(tempHtmlPath); 314 | log(LogLevel.DEBUG, "Temporary HTML file cleaned up"); 315 | 316 | log(LogLevel.INFO, "Mermaid rendered successfully"); 317 | 318 | return base64Image; 319 | } catch (error) { 320 | log(LogLevel.ERROR, `Error in renderMermaidPng: ${error instanceof Error ? error.message : String(error)}`); 321 | log(LogLevel.ERROR, `Error stack: ${error instanceof Error ? error.stack : 'No stack trace'}`); 322 | 323 | // Include console messages in the error for better debugging 324 | if (page && page.isClosed() === false) { 325 | log(LogLevel.ERROR, "Browser console messages:"); 326 | consoleMessages.forEach(msg => log(LogLevel.ERROR, ` ${msg}`)); 327 | } 328 | 329 | throw error; 330 | } finally { 331 | await browser.close(); 332 | log(LogLevel.DEBUG, "Puppeteer browser closed"); 333 | } 334 | } 335 | 336 | /** 337 | * Saves a generated Mermaid diagram to a file 338 | * 339 | * @param base64Image - The base64-encoded PNG image 340 | * @param name - The name to use for the file (without extension) 341 | * @param folder - The folder to save the file in 342 | * @returns The full path to the saved file 343 | */ 344 | async function saveMermaidImageToFile(base64Image: string, name: string, folder: string): Promise { 345 | // Create the folder if it doesn't exist 346 | if (!fs.existsSync(folder)) { 347 | log(LogLevel.INFO, `Creating folder: ${folder}`); 348 | fs.mkdirSync(folder, { recursive: true }); 349 | } 350 | 351 | // Generate a filename, adding timestamp if file already exists 352 | let filename = `${name}.png`; 353 | const filePath = path.join(folder, filename); 354 | 355 | if (fs.existsSync(filePath)) { 356 | const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); 357 | filename = `${name}-${timestamp}.png`; 358 | log(LogLevel.INFO, `File already exists, using filename: ${filename}`); 359 | } 360 | 361 | // Save the image to the file 362 | const imageBuffer = Buffer.from(base64Image, 'base64'); 363 | const fullPath = path.join(folder, filename); 364 | fs.writeFileSync(fullPath, imageBuffer); 365 | 366 | log(LogLevel.INFO, `Image saved to: ${fullPath}`); 367 | return fullPath; 368 | } 369 | 370 | /** 371 | * Handles Mermaid syntax errors and other errors 372 | * 373 | * @param error - The error that occurred 374 | * @returns A response object with the error message 375 | */ 376 | function handleMermaidError(error: unknown): { 377 | content: Array<{ type: "text"; text: string }>, 378 | isError: boolean 379 | } { 380 | const errorMessage = error instanceof Error ? error.message : String(error); 381 | const isSyntaxError = errorMessage.includes("Syntax error") || 382 | errorMessage.includes("Parse error") || 383 | errorMessage.includes("Mermaid rendering failed"); 384 | 385 | return { 386 | content: [ 387 | { 388 | type: "text", 389 | text: isSyntaxError 390 | ? `Mermaid syntax error: ${errorMessage}\n\nPlease check your diagram syntax.` 391 | : `Error generating diagram: ${errorMessage}`, 392 | } 393 | ], 394 | isError: true, 395 | }; 396 | } 397 | 398 | /** 399 | * Processes a generate request to create a Mermaid diagram 400 | * 401 | * @param args - The arguments for the generate request 402 | * @returns A response object with the generated image or file path 403 | */ 404 | async function processGenerateRequest(args: { 405 | code: string; 406 | theme?: 'default' | 'forest' | 'dark' | 'neutral'; 407 | backgroundColor?: string; 408 | name?: string; 409 | folder?: string; 410 | }): Promise<{ 411 | content: Array< 412 | | { type: "text"; text: string } 413 | | { type: "image"; data: string; mimeType: string } 414 | >, 415 | isError: boolean 416 | }> { 417 | try { 418 | const base64Image = await renderMermaidPng(args.code, { 419 | theme: args.theme, 420 | backgroundColor: args.backgroundColor 421 | }); 422 | 423 | // Check if we need to save the image to a folder 424 | if (!CONTENT_IMAGE_SUPPORTED) { 425 | if (!args.folder) { 426 | throw new Error("Folder parameter is required when CONTENT_IMAGE_SUPPORTED is false"); 427 | } 428 | 429 | // Save the image to a file 430 | const fullPath = await saveMermaidImageToFile(base64Image, args.name!, args.folder!); 431 | 432 | return { 433 | content: [ 434 | { 435 | type: "text", 436 | text: `Image saved to: ${fullPath}`, 437 | } 438 | ], 439 | isError: false, 440 | }; 441 | } 442 | 443 | // If folder is provided and CONTENT_IMAGE_SUPPORTED is true, save the image to the folder 444 | // but also return the image in the response 445 | let savedMessage = ""; 446 | if (args.folder && args.name) { 447 | try { 448 | const fullPath = await saveMermaidImageToFile(base64Image, args.name, args.folder); 449 | savedMessage = `Image also saved to: ${fullPath}`; 450 | log(LogLevel.INFO, savedMessage); 451 | } catch (saveError) { 452 | log(LogLevel.ERROR, `Failed to save image to folder: ${(saveError as Error).message}`); 453 | savedMessage = `Note: Failed to save image to folder: ${(saveError as Error).message}`; 454 | } 455 | } 456 | 457 | // Return the image in the response 458 | return { 459 | content: [ 460 | { 461 | type: "text", 462 | text: savedMessage ? `Here is the generated image. ${savedMessage}` : "Here is the generated image", 463 | }, 464 | { 465 | type: "image", 466 | data: base64Image, 467 | mimeType: "image/png", 468 | }, 469 | ], 470 | isError: false, 471 | }; 472 | } catch (error) { 473 | return handleMermaidError(error); 474 | } 475 | } 476 | 477 | // Tool handlers 478 | server.setRequestHandler(ListToolsRequestSchema, async () => ({ 479 | tools: [GENERATE_TOOL], 480 | })); 481 | 482 | // Set up the request handler for tool calls 483 | server.setRequestHandler(CallToolRequestSchema, async (request) => { 484 | try { 485 | const { name, arguments: args } = request.params; 486 | 487 | if (!args) { 488 | throw new Error("No arguments provided"); 489 | } 490 | 491 | log(LogLevel.INFO, `Received request: ${name} with args: ${JSON.stringify(args)}`); 492 | 493 | if (name === "generate") { 494 | log(LogLevel.INFO, "Rendering Mermaid PNG"); 495 | if (!isGenerateArgs(args)) { 496 | throw new Error("Invalid arguments for generate"); 497 | } 498 | 499 | // Process the generate request 500 | return await processGenerateRequest(args); 501 | } 502 | 503 | return { 504 | content: [{ type: "text", text: `Unknown tool: ${name}` }], 505 | isError: true, 506 | }; 507 | } catch (error) { 508 | return { 509 | content: [ 510 | { 511 | type: "text", 512 | text: `Error: ${error instanceof Error ? error.message : String(error)}`, 513 | }, 514 | ], 515 | isError: true, 516 | }; 517 | } 518 | }); 519 | 520 | async function runServer() { 521 | const transport = new StdioServerTransport(); 522 | await server.connect(transport); 523 | log(LogLevel.INFO, "Mermaid MCP Server running on stdio"); 524 | } 525 | 526 | runServer().catch((error) => { 527 | log(LogLevel.CRITICAL, `Fatal error running server: ${error instanceof Error ? error.message : String(error)}`); 528 | process.exit(1); 529 | }); 530 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@peng-shawn/mermaid-mcp-server", 3 | "version": "0.1.4", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@peng-shawn/mermaid-mcp-server", 9 | "version": "0.1.4", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@modelcontextprotocol/sdk": "^1.6.1", 13 | "import-meta-resolve": "^4.1.0", 14 | "mermaid": "^11.4.1", 15 | "puppeteer": "^24.3.1" 16 | }, 17 | "bin": { 18 | "mermaid-mcp-server": "dist/index.js" 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^22.13.9", 22 | "typescript": "^5.8.2" 23 | }, 24 | "engines": { 25 | "node": ">=18.0.0" 26 | } 27 | }, 28 | "node_modules/@antfu/install-pkg": { 29 | "version": "1.0.0", 30 | "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz", 31 | "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==", 32 | "license": "MIT", 33 | "dependencies": { 34 | "package-manager-detector": "^0.2.8", 35 | "tinyexec": "^0.3.2" 36 | }, 37 | "funding": { 38 | "url": "https://github.com/sponsors/antfu" 39 | } 40 | }, 41 | "node_modules/@antfu/utils": { 42 | "version": "8.1.1", 43 | "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", 44 | "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", 45 | "license": "MIT", 46 | "funding": { 47 | "url": "https://github.com/sponsors/antfu" 48 | } 49 | }, 50 | "node_modules/@babel/code-frame": { 51 | "version": "7.26.2", 52 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 53 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 54 | "license": "MIT", 55 | "dependencies": { 56 | "@babel/helper-validator-identifier": "^7.25.9", 57 | "js-tokens": "^4.0.0", 58 | "picocolors": "^1.0.0" 59 | }, 60 | "engines": { 61 | "node": ">=6.9.0" 62 | } 63 | }, 64 | "node_modules/@babel/helper-validator-identifier": { 65 | "version": "7.25.9", 66 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 67 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 68 | "license": "MIT", 69 | "engines": { 70 | "node": ">=6.9.0" 71 | } 72 | }, 73 | "node_modules/@braintree/sanitize-url": { 74 | "version": "7.1.1", 75 | "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz", 76 | "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==", 77 | "license": "MIT" 78 | }, 79 | "node_modules/@chevrotain/cst-dts-gen": { 80 | "version": "11.0.3", 81 | "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", 82 | "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", 83 | "license": "Apache-2.0", 84 | "dependencies": { 85 | "@chevrotain/gast": "11.0.3", 86 | "@chevrotain/types": "11.0.3", 87 | "lodash-es": "4.17.21" 88 | } 89 | }, 90 | "node_modules/@chevrotain/gast": { 91 | "version": "11.0.3", 92 | "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz", 93 | "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", 94 | "license": "Apache-2.0", 95 | "dependencies": { 96 | "@chevrotain/types": "11.0.3", 97 | "lodash-es": "4.17.21" 98 | } 99 | }, 100 | "node_modules/@chevrotain/regexp-to-ast": { 101 | "version": "11.0.3", 102 | "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", 103 | "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", 104 | "license": "Apache-2.0" 105 | }, 106 | "node_modules/@chevrotain/types": { 107 | "version": "11.0.3", 108 | "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz", 109 | "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", 110 | "license": "Apache-2.0" 111 | }, 112 | "node_modules/@chevrotain/utils": { 113 | "version": "11.0.3", 114 | "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz", 115 | "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", 116 | "license": "Apache-2.0" 117 | }, 118 | "node_modules/@iconify/types": { 119 | "version": "2.0.0", 120 | "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", 121 | "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", 122 | "license": "MIT" 123 | }, 124 | "node_modules/@iconify/utils": { 125 | "version": "2.3.0", 126 | "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", 127 | "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", 128 | "license": "MIT", 129 | "dependencies": { 130 | "@antfu/install-pkg": "^1.0.0", 131 | "@antfu/utils": "^8.1.0", 132 | "@iconify/types": "^2.0.0", 133 | "debug": "^4.4.0", 134 | "globals": "^15.14.0", 135 | "kolorist": "^1.8.0", 136 | "local-pkg": "^1.0.0", 137 | "mlly": "^1.7.4" 138 | } 139 | }, 140 | "node_modules/@iconify/utils/node_modules/debug": { 141 | "version": "4.4.0", 142 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 143 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 144 | "license": "MIT", 145 | "dependencies": { 146 | "ms": "^2.1.3" 147 | }, 148 | "engines": { 149 | "node": ">=6.0" 150 | }, 151 | "peerDependenciesMeta": { 152 | "supports-color": { 153 | "optional": true 154 | } 155 | } 156 | }, 157 | "node_modules/@iconify/utils/node_modules/ms": { 158 | "version": "2.1.3", 159 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 160 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 161 | "license": "MIT" 162 | }, 163 | "node_modules/@mermaid-js/parser": { 164 | "version": "0.3.0", 165 | "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.3.0.tgz", 166 | "integrity": "sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==", 167 | "license": "MIT", 168 | "dependencies": { 169 | "langium": "3.0.0" 170 | } 171 | }, 172 | "node_modules/@modelcontextprotocol/sdk": { 173 | "version": "1.6.1", 174 | "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.6.1.tgz", 175 | "integrity": "sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA==", 176 | "license": "MIT", 177 | "dependencies": { 178 | "content-type": "^1.0.5", 179 | "cors": "^2.8.5", 180 | "eventsource": "^3.0.2", 181 | "express": "^5.0.1", 182 | "express-rate-limit": "^7.5.0", 183 | "pkce-challenge": "^4.1.0", 184 | "raw-body": "^3.0.0", 185 | "zod": "^3.23.8", 186 | "zod-to-json-schema": "^3.24.1" 187 | }, 188 | "engines": { 189 | "node": ">=18" 190 | } 191 | }, 192 | "node_modules/@puppeteer/browsers": { 193 | "version": "2.7.1", 194 | "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.7.1.tgz", 195 | "integrity": "sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ==", 196 | "license": "Apache-2.0", 197 | "dependencies": { 198 | "debug": "^4.4.0", 199 | "extract-zip": "^2.0.1", 200 | "progress": "^2.0.3", 201 | "proxy-agent": "^6.5.0", 202 | "semver": "^7.7.0", 203 | "tar-fs": "^3.0.8", 204 | "yargs": "^17.7.2" 205 | }, 206 | "bin": { 207 | "browsers": "lib/cjs/main-cli.js" 208 | }, 209 | "engines": { 210 | "node": ">=18" 211 | } 212 | }, 213 | "node_modules/@puppeteer/browsers/node_modules/debug": { 214 | "version": "4.4.0", 215 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 216 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 217 | "license": "MIT", 218 | "dependencies": { 219 | "ms": "^2.1.3" 220 | }, 221 | "engines": { 222 | "node": ">=6.0" 223 | }, 224 | "peerDependenciesMeta": { 225 | "supports-color": { 226 | "optional": true 227 | } 228 | } 229 | }, 230 | "node_modules/@puppeteer/browsers/node_modules/ms": { 231 | "version": "2.1.3", 232 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 233 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 234 | "license": "MIT" 235 | }, 236 | "node_modules/@tootallnate/quickjs-emscripten": { 237 | "version": "0.23.0", 238 | "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", 239 | "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", 240 | "license": "MIT" 241 | }, 242 | "node_modules/@types/d3": { 243 | "version": "7.4.3", 244 | "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", 245 | "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", 246 | "license": "MIT", 247 | "dependencies": { 248 | "@types/d3-array": "*", 249 | "@types/d3-axis": "*", 250 | "@types/d3-brush": "*", 251 | "@types/d3-chord": "*", 252 | "@types/d3-color": "*", 253 | "@types/d3-contour": "*", 254 | "@types/d3-delaunay": "*", 255 | "@types/d3-dispatch": "*", 256 | "@types/d3-drag": "*", 257 | "@types/d3-dsv": "*", 258 | "@types/d3-ease": "*", 259 | "@types/d3-fetch": "*", 260 | "@types/d3-force": "*", 261 | "@types/d3-format": "*", 262 | "@types/d3-geo": "*", 263 | "@types/d3-hierarchy": "*", 264 | "@types/d3-interpolate": "*", 265 | "@types/d3-path": "*", 266 | "@types/d3-polygon": "*", 267 | "@types/d3-quadtree": "*", 268 | "@types/d3-random": "*", 269 | "@types/d3-scale": "*", 270 | "@types/d3-scale-chromatic": "*", 271 | "@types/d3-selection": "*", 272 | "@types/d3-shape": "*", 273 | "@types/d3-time": "*", 274 | "@types/d3-time-format": "*", 275 | "@types/d3-timer": "*", 276 | "@types/d3-transition": "*", 277 | "@types/d3-zoom": "*" 278 | } 279 | }, 280 | "node_modules/@types/d3-array": { 281 | "version": "3.2.1", 282 | "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", 283 | "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", 284 | "license": "MIT" 285 | }, 286 | "node_modules/@types/d3-axis": { 287 | "version": "3.0.6", 288 | "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", 289 | "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", 290 | "license": "MIT", 291 | "dependencies": { 292 | "@types/d3-selection": "*" 293 | } 294 | }, 295 | "node_modules/@types/d3-brush": { 296 | "version": "3.0.6", 297 | "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", 298 | "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", 299 | "license": "MIT", 300 | "dependencies": { 301 | "@types/d3-selection": "*" 302 | } 303 | }, 304 | "node_modules/@types/d3-chord": { 305 | "version": "3.0.6", 306 | "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", 307 | "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", 308 | "license": "MIT" 309 | }, 310 | "node_modules/@types/d3-color": { 311 | "version": "3.1.3", 312 | "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", 313 | "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", 314 | "license": "MIT" 315 | }, 316 | "node_modules/@types/d3-contour": { 317 | "version": "3.0.6", 318 | "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", 319 | "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", 320 | "license": "MIT", 321 | "dependencies": { 322 | "@types/d3-array": "*", 323 | "@types/geojson": "*" 324 | } 325 | }, 326 | "node_modules/@types/d3-delaunay": { 327 | "version": "6.0.4", 328 | "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", 329 | "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", 330 | "license": "MIT" 331 | }, 332 | "node_modules/@types/d3-dispatch": { 333 | "version": "3.0.6", 334 | "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", 335 | "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", 336 | "license": "MIT" 337 | }, 338 | "node_modules/@types/d3-drag": { 339 | "version": "3.0.7", 340 | "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", 341 | "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", 342 | "license": "MIT", 343 | "dependencies": { 344 | "@types/d3-selection": "*" 345 | } 346 | }, 347 | "node_modules/@types/d3-dsv": { 348 | "version": "3.0.7", 349 | "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", 350 | "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", 351 | "license": "MIT" 352 | }, 353 | "node_modules/@types/d3-ease": { 354 | "version": "3.0.2", 355 | "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", 356 | "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", 357 | "license": "MIT" 358 | }, 359 | "node_modules/@types/d3-fetch": { 360 | "version": "3.0.7", 361 | "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", 362 | "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", 363 | "license": "MIT", 364 | "dependencies": { 365 | "@types/d3-dsv": "*" 366 | } 367 | }, 368 | "node_modules/@types/d3-force": { 369 | "version": "3.0.10", 370 | "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", 371 | "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", 372 | "license": "MIT" 373 | }, 374 | "node_modules/@types/d3-format": { 375 | "version": "3.0.4", 376 | "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", 377 | "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", 378 | "license": "MIT" 379 | }, 380 | "node_modules/@types/d3-geo": { 381 | "version": "3.1.0", 382 | "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", 383 | "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", 384 | "license": "MIT", 385 | "dependencies": { 386 | "@types/geojson": "*" 387 | } 388 | }, 389 | "node_modules/@types/d3-hierarchy": { 390 | "version": "3.1.7", 391 | "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", 392 | "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", 393 | "license": "MIT" 394 | }, 395 | "node_modules/@types/d3-interpolate": { 396 | "version": "3.0.4", 397 | "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", 398 | "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", 399 | "license": "MIT", 400 | "dependencies": { 401 | "@types/d3-color": "*" 402 | } 403 | }, 404 | "node_modules/@types/d3-path": { 405 | "version": "3.1.1", 406 | "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", 407 | "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", 408 | "license": "MIT" 409 | }, 410 | "node_modules/@types/d3-polygon": { 411 | "version": "3.0.2", 412 | "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", 413 | "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", 414 | "license": "MIT" 415 | }, 416 | "node_modules/@types/d3-quadtree": { 417 | "version": "3.0.6", 418 | "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", 419 | "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", 420 | "license": "MIT" 421 | }, 422 | "node_modules/@types/d3-random": { 423 | "version": "3.0.3", 424 | "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", 425 | "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", 426 | "license": "MIT" 427 | }, 428 | "node_modules/@types/d3-scale": { 429 | "version": "4.0.9", 430 | "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", 431 | "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", 432 | "license": "MIT", 433 | "dependencies": { 434 | "@types/d3-time": "*" 435 | } 436 | }, 437 | "node_modules/@types/d3-scale-chromatic": { 438 | "version": "3.1.0", 439 | "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", 440 | "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", 441 | "license": "MIT" 442 | }, 443 | "node_modules/@types/d3-selection": { 444 | "version": "3.0.11", 445 | "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", 446 | "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", 447 | "license": "MIT" 448 | }, 449 | "node_modules/@types/d3-shape": { 450 | "version": "3.1.7", 451 | "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", 452 | "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", 453 | "license": "MIT", 454 | "dependencies": { 455 | "@types/d3-path": "*" 456 | } 457 | }, 458 | "node_modules/@types/d3-time": { 459 | "version": "3.0.4", 460 | "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", 461 | "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", 462 | "license": "MIT" 463 | }, 464 | "node_modules/@types/d3-time-format": { 465 | "version": "4.0.3", 466 | "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", 467 | "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", 468 | "license": "MIT" 469 | }, 470 | "node_modules/@types/d3-timer": { 471 | "version": "3.0.2", 472 | "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", 473 | "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", 474 | "license": "MIT" 475 | }, 476 | "node_modules/@types/d3-transition": { 477 | "version": "3.0.9", 478 | "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", 479 | "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", 480 | "license": "MIT", 481 | "dependencies": { 482 | "@types/d3-selection": "*" 483 | } 484 | }, 485 | "node_modules/@types/d3-zoom": { 486 | "version": "3.0.8", 487 | "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", 488 | "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", 489 | "license": "MIT", 490 | "dependencies": { 491 | "@types/d3-interpolate": "*", 492 | "@types/d3-selection": "*" 493 | } 494 | }, 495 | "node_modules/@types/geojson": { 496 | "version": "7946.0.16", 497 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", 498 | "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", 499 | "license": "MIT" 500 | }, 501 | "node_modules/@types/node": { 502 | "version": "22.13.9", 503 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", 504 | "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", 505 | "devOptional": true, 506 | "license": "MIT", 507 | "dependencies": { 508 | "undici-types": "~6.20.0" 509 | } 510 | }, 511 | "node_modules/@types/trusted-types": { 512 | "version": "2.0.7", 513 | "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", 514 | "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", 515 | "license": "MIT", 516 | "optional": true 517 | }, 518 | "node_modules/@types/yauzl": { 519 | "version": "2.10.3", 520 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", 521 | "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", 522 | "license": "MIT", 523 | "optional": true, 524 | "dependencies": { 525 | "@types/node": "*" 526 | } 527 | }, 528 | "node_modules/accepts": { 529 | "version": "2.0.0", 530 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", 531 | "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", 532 | "license": "MIT", 533 | "dependencies": { 534 | "mime-types": "^3.0.0", 535 | "negotiator": "^1.0.0" 536 | }, 537 | "engines": { 538 | "node": ">= 0.6" 539 | } 540 | }, 541 | "node_modules/acorn": { 542 | "version": "8.14.1", 543 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", 544 | "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", 545 | "license": "MIT", 546 | "bin": { 547 | "acorn": "bin/acorn" 548 | }, 549 | "engines": { 550 | "node": ">=0.4.0" 551 | } 552 | }, 553 | "node_modules/agent-base": { 554 | "version": "7.1.3", 555 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", 556 | "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", 557 | "license": "MIT", 558 | "engines": { 559 | "node": ">= 14" 560 | } 561 | }, 562 | "node_modules/ansi-regex": { 563 | "version": "5.0.1", 564 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 565 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 566 | "license": "MIT", 567 | "engines": { 568 | "node": ">=8" 569 | } 570 | }, 571 | "node_modules/ansi-styles": { 572 | "version": "4.3.0", 573 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 574 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 575 | "license": "MIT", 576 | "dependencies": { 577 | "color-convert": "^2.0.1" 578 | }, 579 | "engines": { 580 | "node": ">=8" 581 | }, 582 | "funding": { 583 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 584 | } 585 | }, 586 | "node_modules/argparse": { 587 | "version": "2.0.1", 588 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 589 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 590 | "license": "Python-2.0" 591 | }, 592 | "node_modules/ast-types": { 593 | "version": "0.13.4", 594 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", 595 | "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", 596 | "license": "MIT", 597 | "dependencies": { 598 | "tslib": "^2.0.1" 599 | }, 600 | "engines": { 601 | "node": ">=4" 602 | } 603 | }, 604 | "node_modules/b4a": { 605 | "version": "1.6.7", 606 | "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", 607 | "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", 608 | "license": "Apache-2.0" 609 | }, 610 | "node_modules/bare-events": { 611 | "version": "2.5.4", 612 | "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", 613 | "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", 614 | "license": "Apache-2.0", 615 | "optional": true 616 | }, 617 | "node_modules/bare-fs": { 618 | "version": "4.0.1", 619 | "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.1.tgz", 620 | "integrity": "sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==", 621 | "license": "Apache-2.0", 622 | "optional": true, 623 | "dependencies": { 624 | "bare-events": "^2.0.0", 625 | "bare-path": "^3.0.0", 626 | "bare-stream": "^2.0.0" 627 | }, 628 | "engines": { 629 | "bare": ">=1.7.0" 630 | } 631 | }, 632 | "node_modules/bare-os": { 633 | "version": "3.5.1", 634 | "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.5.1.tgz", 635 | "integrity": "sha512-LvfVNDcWLw2AnIw5f2mWUgumW3I3N/WYGiWeimhQC1Ybt71n2FjlS9GJKeCnFeg1MKZHxzIFmpFnBXDI+sBeFg==", 636 | "license": "Apache-2.0", 637 | "optional": true, 638 | "engines": { 639 | "bare": ">=1.14.0" 640 | } 641 | }, 642 | "node_modules/bare-path": { 643 | "version": "3.0.0", 644 | "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", 645 | "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", 646 | "license": "Apache-2.0", 647 | "optional": true, 648 | "dependencies": { 649 | "bare-os": "^3.0.1" 650 | } 651 | }, 652 | "node_modules/bare-stream": { 653 | "version": "2.6.5", 654 | "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", 655 | "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", 656 | "license": "Apache-2.0", 657 | "optional": true, 658 | "dependencies": { 659 | "streamx": "^2.21.0" 660 | }, 661 | "peerDependencies": { 662 | "bare-buffer": "*", 663 | "bare-events": "*" 664 | }, 665 | "peerDependenciesMeta": { 666 | "bare-buffer": { 667 | "optional": true 668 | }, 669 | "bare-events": { 670 | "optional": true 671 | } 672 | } 673 | }, 674 | "node_modules/basic-ftp": { 675 | "version": "5.0.5", 676 | "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", 677 | "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", 678 | "license": "MIT", 679 | "engines": { 680 | "node": ">=10.0.0" 681 | } 682 | }, 683 | "node_modules/body-parser": { 684 | "version": "2.1.0", 685 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.1.0.tgz", 686 | "integrity": "sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==", 687 | "license": "MIT", 688 | "dependencies": { 689 | "bytes": "^3.1.2", 690 | "content-type": "^1.0.5", 691 | "debug": "^4.4.0", 692 | "http-errors": "^2.0.0", 693 | "iconv-lite": "^0.5.2", 694 | "on-finished": "^2.4.1", 695 | "qs": "^6.14.0", 696 | "raw-body": "^3.0.0", 697 | "type-is": "^2.0.0" 698 | }, 699 | "engines": { 700 | "node": ">=18" 701 | } 702 | }, 703 | "node_modules/body-parser/node_modules/debug": { 704 | "version": "4.4.0", 705 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 706 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 707 | "license": "MIT", 708 | "dependencies": { 709 | "ms": "^2.1.3" 710 | }, 711 | "engines": { 712 | "node": ">=6.0" 713 | }, 714 | "peerDependenciesMeta": { 715 | "supports-color": { 716 | "optional": true 717 | } 718 | } 719 | }, 720 | "node_modules/body-parser/node_modules/ms": { 721 | "version": "2.1.3", 722 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 723 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 724 | "license": "MIT" 725 | }, 726 | "node_modules/body-parser/node_modules/qs": { 727 | "version": "6.14.0", 728 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", 729 | "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", 730 | "license": "BSD-3-Clause", 731 | "dependencies": { 732 | "side-channel": "^1.1.0" 733 | }, 734 | "engines": { 735 | "node": ">=0.6" 736 | }, 737 | "funding": { 738 | "url": "https://github.com/sponsors/ljharb" 739 | } 740 | }, 741 | "node_modules/buffer-crc32": { 742 | "version": "0.2.13", 743 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 744 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 745 | "license": "MIT", 746 | "engines": { 747 | "node": "*" 748 | } 749 | }, 750 | "node_modules/bytes": { 751 | "version": "3.1.2", 752 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 753 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 754 | "license": "MIT", 755 | "engines": { 756 | "node": ">= 0.8" 757 | } 758 | }, 759 | "node_modules/call-bind-apply-helpers": { 760 | "version": "1.0.2", 761 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 762 | "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 763 | "license": "MIT", 764 | "dependencies": { 765 | "es-errors": "^1.3.0", 766 | "function-bind": "^1.1.2" 767 | }, 768 | "engines": { 769 | "node": ">= 0.4" 770 | } 771 | }, 772 | "node_modules/call-bound": { 773 | "version": "1.0.4", 774 | "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 775 | "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 776 | "license": "MIT", 777 | "dependencies": { 778 | "call-bind-apply-helpers": "^1.0.2", 779 | "get-intrinsic": "^1.3.0" 780 | }, 781 | "engines": { 782 | "node": ">= 0.4" 783 | }, 784 | "funding": { 785 | "url": "https://github.com/sponsors/ljharb" 786 | } 787 | }, 788 | "node_modules/callsites": { 789 | "version": "3.1.0", 790 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 791 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 792 | "license": "MIT", 793 | "engines": { 794 | "node": ">=6" 795 | } 796 | }, 797 | "node_modules/chevrotain": { 798 | "version": "11.0.3", 799 | "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", 800 | "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", 801 | "license": "Apache-2.0", 802 | "dependencies": { 803 | "@chevrotain/cst-dts-gen": "11.0.3", 804 | "@chevrotain/gast": "11.0.3", 805 | "@chevrotain/regexp-to-ast": "11.0.3", 806 | "@chevrotain/types": "11.0.3", 807 | "@chevrotain/utils": "11.0.3", 808 | "lodash-es": "4.17.21" 809 | } 810 | }, 811 | "node_modules/chevrotain-allstar": { 812 | "version": "0.3.1", 813 | "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", 814 | "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", 815 | "license": "MIT", 816 | "dependencies": { 817 | "lodash-es": "^4.17.21" 818 | }, 819 | "peerDependencies": { 820 | "chevrotain": "^11.0.0" 821 | } 822 | }, 823 | "node_modules/chromium-bidi": { 824 | "version": "2.1.2", 825 | "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-2.1.2.tgz", 826 | "integrity": "sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw==", 827 | "license": "Apache-2.0", 828 | "dependencies": { 829 | "mitt": "^3.0.1", 830 | "zod": "^3.24.1" 831 | }, 832 | "peerDependencies": { 833 | "devtools-protocol": "*" 834 | } 835 | }, 836 | "node_modules/cliui": { 837 | "version": "8.0.1", 838 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 839 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 840 | "license": "ISC", 841 | "dependencies": { 842 | "string-width": "^4.2.0", 843 | "strip-ansi": "^6.0.1", 844 | "wrap-ansi": "^7.0.0" 845 | }, 846 | "engines": { 847 | "node": ">=12" 848 | } 849 | }, 850 | "node_modules/color-convert": { 851 | "version": "2.0.1", 852 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 853 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 854 | "license": "MIT", 855 | "dependencies": { 856 | "color-name": "~1.1.4" 857 | }, 858 | "engines": { 859 | "node": ">=7.0.0" 860 | } 861 | }, 862 | "node_modules/color-name": { 863 | "version": "1.1.4", 864 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 865 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 866 | "license": "MIT" 867 | }, 868 | "node_modules/commander": { 869 | "version": "7.2.0", 870 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 871 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 872 | "license": "MIT", 873 | "engines": { 874 | "node": ">= 10" 875 | } 876 | }, 877 | "node_modules/confbox": { 878 | "version": "0.2.1", 879 | "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.1.tgz", 880 | "integrity": "sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==", 881 | "license": "MIT" 882 | }, 883 | "node_modules/content-disposition": { 884 | "version": "1.0.0", 885 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", 886 | "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", 887 | "license": "MIT", 888 | "dependencies": { 889 | "safe-buffer": "5.2.1" 890 | }, 891 | "engines": { 892 | "node": ">= 0.6" 893 | } 894 | }, 895 | "node_modules/content-type": { 896 | "version": "1.0.5", 897 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 898 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 899 | "license": "MIT", 900 | "engines": { 901 | "node": ">= 0.6" 902 | } 903 | }, 904 | "node_modules/cookie": { 905 | "version": "0.7.1", 906 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", 907 | "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", 908 | "license": "MIT", 909 | "engines": { 910 | "node": ">= 0.6" 911 | } 912 | }, 913 | "node_modules/cookie-signature": { 914 | "version": "1.2.2", 915 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", 916 | "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", 917 | "license": "MIT", 918 | "engines": { 919 | "node": ">=6.6.0" 920 | } 921 | }, 922 | "node_modules/cors": { 923 | "version": "2.8.5", 924 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 925 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 926 | "license": "MIT", 927 | "dependencies": { 928 | "object-assign": "^4", 929 | "vary": "^1" 930 | }, 931 | "engines": { 932 | "node": ">= 0.10" 933 | } 934 | }, 935 | "node_modules/cose-base": { 936 | "version": "1.0.3", 937 | "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", 938 | "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", 939 | "license": "MIT", 940 | "dependencies": { 941 | "layout-base": "^1.0.0" 942 | } 943 | }, 944 | "node_modules/cosmiconfig": { 945 | "version": "9.0.0", 946 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", 947 | "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", 948 | "license": "MIT", 949 | "dependencies": { 950 | "env-paths": "^2.2.1", 951 | "import-fresh": "^3.3.0", 952 | "js-yaml": "^4.1.0", 953 | "parse-json": "^5.2.0" 954 | }, 955 | "engines": { 956 | "node": ">=14" 957 | }, 958 | "funding": { 959 | "url": "https://github.com/sponsors/d-fischer" 960 | }, 961 | "peerDependencies": { 962 | "typescript": ">=4.9.5" 963 | }, 964 | "peerDependenciesMeta": { 965 | "typescript": { 966 | "optional": true 967 | } 968 | } 969 | }, 970 | "node_modules/cytoscape": { 971 | "version": "3.31.1", 972 | "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.31.1.tgz", 973 | "integrity": "sha512-Hx5Mtb1+hnmAKaZZ/7zL1Y5HTFYOjdDswZy/jD+1WINRU8KVi1B7+vlHdsTwY+VCFucTreoyu1RDzQJ9u0d2Hw==", 974 | "license": "MIT", 975 | "engines": { 976 | "node": ">=0.10" 977 | } 978 | }, 979 | "node_modules/cytoscape-cose-bilkent": { 980 | "version": "4.1.0", 981 | "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", 982 | "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", 983 | "license": "MIT", 984 | "dependencies": { 985 | "cose-base": "^1.0.0" 986 | }, 987 | "peerDependencies": { 988 | "cytoscape": "^3.2.0" 989 | } 990 | }, 991 | "node_modules/cytoscape-fcose": { 992 | "version": "2.2.0", 993 | "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", 994 | "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", 995 | "license": "MIT", 996 | "dependencies": { 997 | "cose-base": "^2.2.0" 998 | }, 999 | "peerDependencies": { 1000 | "cytoscape": "^3.2.0" 1001 | } 1002 | }, 1003 | "node_modules/cytoscape-fcose/node_modules/cose-base": { 1004 | "version": "2.2.0", 1005 | "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", 1006 | "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", 1007 | "license": "MIT", 1008 | "dependencies": { 1009 | "layout-base": "^2.0.0" 1010 | } 1011 | }, 1012 | "node_modules/cytoscape-fcose/node_modules/layout-base": { 1013 | "version": "2.0.1", 1014 | "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", 1015 | "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", 1016 | "license": "MIT" 1017 | }, 1018 | "node_modules/d3": { 1019 | "version": "7.9.0", 1020 | "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", 1021 | "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", 1022 | "license": "ISC", 1023 | "dependencies": { 1024 | "d3-array": "3", 1025 | "d3-axis": "3", 1026 | "d3-brush": "3", 1027 | "d3-chord": "3", 1028 | "d3-color": "3", 1029 | "d3-contour": "4", 1030 | "d3-delaunay": "6", 1031 | "d3-dispatch": "3", 1032 | "d3-drag": "3", 1033 | "d3-dsv": "3", 1034 | "d3-ease": "3", 1035 | "d3-fetch": "3", 1036 | "d3-force": "3", 1037 | "d3-format": "3", 1038 | "d3-geo": "3", 1039 | "d3-hierarchy": "3", 1040 | "d3-interpolate": "3", 1041 | "d3-path": "3", 1042 | "d3-polygon": "3", 1043 | "d3-quadtree": "3", 1044 | "d3-random": "3", 1045 | "d3-scale": "4", 1046 | "d3-scale-chromatic": "3", 1047 | "d3-selection": "3", 1048 | "d3-shape": "3", 1049 | "d3-time": "3", 1050 | "d3-time-format": "4", 1051 | "d3-timer": "3", 1052 | "d3-transition": "3", 1053 | "d3-zoom": "3" 1054 | }, 1055 | "engines": { 1056 | "node": ">=12" 1057 | } 1058 | }, 1059 | "node_modules/d3-array": { 1060 | "version": "3.2.4", 1061 | "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", 1062 | "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", 1063 | "license": "ISC", 1064 | "dependencies": { 1065 | "internmap": "1 - 2" 1066 | }, 1067 | "engines": { 1068 | "node": ">=12" 1069 | } 1070 | }, 1071 | "node_modules/d3-axis": { 1072 | "version": "3.0.0", 1073 | "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", 1074 | "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", 1075 | "license": "ISC", 1076 | "engines": { 1077 | "node": ">=12" 1078 | } 1079 | }, 1080 | "node_modules/d3-brush": { 1081 | "version": "3.0.0", 1082 | "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", 1083 | "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", 1084 | "license": "ISC", 1085 | "dependencies": { 1086 | "d3-dispatch": "1 - 3", 1087 | "d3-drag": "2 - 3", 1088 | "d3-interpolate": "1 - 3", 1089 | "d3-selection": "3", 1090 | "d3-transition": "3" 1091 | }, 1092 | "engines": { 1093 | "node": ">=12" 1094 | } 1095 | }, 1096 | "node_modules/d3-chord": { 1097 | "version": "3.0.1", 1098 | "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", 1099 | "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", 1100 | "license": "ISC", 1101 | "dependencies": { 1102 | "d3-path": "1 - 3" 1103 | }, 1104 | "engines": { 1105 | "node": ">=12" 1106 | } 1107 | }, 1108 | "node_modules/d3-color": { 1109 | "version": "3.1.0", 1110 | "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", 1111 | "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", 1112 | "license": "ISC", 1113 | "engines": { 1114 | "node": ">=12" 1115 | } 1116 | }, 1117 | "node_modules/d3-contour": { 1118 | "version": "4.0.2", 1119 | "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", 1120 | "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", 1121 | "license": "ISC", 1122 | "dependencies": { 1123 | "d3-array": "^3.2.0" 1124 | }, 1125 | "engines": { 1126 | "node": ">=12" 1127 | } 1128 | }, 1129 | "node_modules/d3-delaunay": { 1130 | "version": "6.0.4", 1131 | "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", 1132 | "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", 1133 | "license": "ISC", 1134 | "dependencies": { 1135 | "delaunator": "5" 1136 | }, 1137 | "engines": { 1138 | "node": ">=12" 1139 | } 1140 | }, 1141 | "node_modules/d3-dispatch": { 1142 | "version": "3.0.1", 1143 | "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", 1144 | "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", 1145 | "license": "ISC", 1146 | "engines": { 1147 | "node": ">=12" 1148 | } 1149 | }, 1150 | "node_modules/d3-drag": { 1151 | "version": "3.0.0", 1152 | "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", 1153 | "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", 1154 | "license": "ISC", 1155 | "dependencies": { 1156 | "d3-dispatch": "1 - 3", 1157 | "d3-selection": "3" 1158 | }, 1159 | "engines": { 1160 | "node": ">=12" 1161 | } 1162 | }, 1163 | "node_modules/d3-dsv": { 1164 | "version": "3.0.1", 1165 | "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", 1166 | "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", 1167 | "license": "ISC", 1168 | "dependencies": { 1169 | "commander": "7", 1170 | "iconv-lite": "0.6", 1171 | "rw": "1" 1172 | }, 1173 | "bin": { 1174 | "csv2json": "bin/dsv2json.js", 1175 | "csv2tsv": "bin/dsv2dsv.js", 1176 | "dsv2dsv": "bin/dsv2dsv.js", 1177 | "dsv2json": "bin/dsv2json.js", 1178 | "json2csv": "bin/json2dsv.js", 1179 | "json2dsv": "bin/json2dsv.js", 1180 | "json2tsv": "bin/json2dsv.js", 1181 | "tsv2csv": "bin/dsv2dsv.js", 1182 | "tsv2json": "bin/dsv2json.js" 1183 | }, 1184 | "engines": { 1185 | "node": ">=12" 1186 | } 1187 | }, 1188 | "node_modules/d3-dsv/node_modules/iconv-lite": { 1189 | "version": "0.6.3", 1190 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 1191 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 1192 | "license": "MIT", 1193 | "dependencies": { 1194 | "safer-buffer": ">= 2.1.2 < 3.0.0" 1195 | }, 1196 | "engines": { 1197 | "node": ">=0.10.0" 1198 | } 1199 | }, 1200 | "node_modules/d3-ease": { 1201 | "version": "3.0.1", 1202 | "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", 1203 | "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", 1204 | "license": "BSD-3-Clause", 1205 | "engines": { 1206 | "node": ">=12" 1207 | } 1208 | }, 1209 | "node_modules/d3-fetch": { 1210 | "version": "3.0.1", 1211 | "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", 1212 | "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", 1213 | "license": "ISC", 1214 | "dependencies": { 1215 | "d3-dsv": "1 - 3" 1216 | }, 1217 | "engines": { 1218 | "node": ">=12" 1219 | } 1220 | }, 1221 | "node_modules/d3-force": { 1222 | "version": "3.0.0", 1223 | "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", 1224 | "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", 1225 | "license": "ISC", 1226 | "dependencies": { 1227 | "d3-dispatch": "1 - 3", 1228 | "d3-quadtree": "1 - 3", 1229 | "d3-timer": "1 - 3" 1230 | }, 1231 | "engines": { 1232 | "node": ">=12" 1233 | } 1234 | }, 1235 | "node_modules/d3-format": { 1236 | "version": "3.1.0", 1237 | "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", 1238 | "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", 1239 | "license": "ISC", 1240 | "engines": { 1241 | "node": ">=12" 1242 | } 1243 | }, 1244 | "node_modules/d3-geo": { 1245 | "version": "3.1.1", 1246 | "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", 1247 | "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", 1248 | "license": "ISC", 1249 | "dependencies": { 1250 | "d3-array": "2.5.0 - 3" 1251 | }, 1252 | "engines": { 1253 | "node": ">=12" 1254 | } 1255 | }, 1256 | "node_modules/d3-hierarchy": { 1257 | "version": "3.1.2", 1258 | "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", 1259 | "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", 1260 | "license": "ISC", 1261 | "engines": { 1262 | "node": ">=12" 1263 | } 1264 | }, 1265 | "node_modules/d3-interpolate": { 1266 | "version": "3.0.1", 1267 | "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", 1268 | "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", 1269 | "license": "ISC", 1270 | "dependencies": { 1271 | "d3-color": "1 - 3" 1272 | }, 1273 | "engines": { 1274 | "node": ">=12" 1275 | } 1276 | }, 1277 | "node_modules/d3-path": { 1278 | "version": "3.1.0", 1279 | "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", 1280 | "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", 1281 | "license": "ISC", 1282 | "engines": { 1283 | "node": ">=12" 1284 | } 1285 | }, 1286 | "node_modules/d3-polygon": { 1287 | "version": "3.0.1", 1288 | "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", 1289 | "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", 1290 | "license": "ISC", 1291 | "engines": { 1292 | "node": ">=12" 1293 | } 1294 | }, 1295 | "node_modules/d3-quadtree": { 1296 | "version": "3.0.1", 1297 | "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", 1298 | "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", 1299 | "license": "ISC", 1300 | "engines": { 1301 | "node": ">=12" 1302 | } 1303 | }, 1304 | "node_modules/d3-random": { 1305 | "version": "3.0.1", 1306 | "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", 1307 | "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", 1308 | "license": "ISC", 1309 | "engines": { 1310 | "node": ">=12" 1311 | } 1312 | }, 1313 | "node_modules/d3-sankey": { 1314 | "version": "0.12.3", 1315 | "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", 1316 | "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", 1317 | "license": "BSD-3-Clause", 1318 | "dependencies": { 1319 | "d3-array": "1 - 2", 1320 | "d3-shape": "^1.2.0" 1321 | } 1322 | }, 1323 | "node_modules/d3-sankey/node_modules/d3-array": { 1324 | "version": "2.12.1", 1325 | "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", 1326 | "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", 1327 | "license": "BSD-3-Clause", 1328 | "dependencies": { 1329 | "internmap": "^1.0.0" 1330 | } 1331 | }, 1332 | "node_modules/d3-sankey/node_modules/d3-path": { 1333 | "version": "1.0.9", 1334 | "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", 1335 | "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", 1336 | "license": "BSD-3-Clause" 1337 | }, 1338 | "node_modules/d3-sankey/node_modules/d3-shape": { 1339 | "version": "1.3.7", 1340 | "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", 1341 | "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", 1342 | "license": "BSD-3-Clause", 1343 | "dependencies": { 1344 | "d3-path": "1" 1345 | } 1346 | }, 1347 | "node_modules/d3-sankey/node_modules/internmap": { 1348 | "version": "1.0.1", 1349 | "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", 1350 | "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", 1351 | "license": "ISC" 1352 | }, 1353 | "node_modules/d3-scale": { 1354 | "version": "4.0.2", 1355 | "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", 1356 | "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", 1357 | "license": "ISC", 1358 | "dependencies": { 1359 | "d3-array": "2.10.0 - 3", 1360 | "d3-format": "1 - 3", 1361 | "d3-interpolate": "1.2.0 - 3", 1362 | "d3-time": "2.1.1 - 3", 1363 | "d3-time-format": "2 - 4" 1364 | }, 1365 | "engines": { 1366 | "node": ">=12" 1367 | } 1368 | }, 1369 | "node_modules/d3-scale-chromatic": { 1370 | "version": "3.1.0", 1371 | "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", 1372 | "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", 1373 | "license": "ISC", 1374 | "dependencies": { 1375 | "d3-color": "1 - 3", 1376 | "d3-interpolate": "1 - 3" 1377 | }, 1378 | "engines": { 1379 | "node": ">=12" 1380 | } 1381 | }, 1382 | "node_modules/d3-selection": { 1383 | "version": "3.0.0", 1384 | "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", 1385 | "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", 1386 | "license": "ISC", 1387 | "engines": { 1388 | "node": ">=12" 1389 | } 1390 | }, 1391 | "node_modules/d3-shape": { 1392 | "version": "3.2.0", 1393 | "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", 1394 | "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", 1395 | "license": "ISC", 1396 | "dependencies": { 1397 | "d3-path": "^3.1.0" 1398 | }, 1399 | "engines": { 1400 | "node": ">=12" 1401 | } 1402 | }, 1403 | "node_modules/d3-time": { 1404 | "version": "3.1.0", 1405 | "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", 1406 | "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", 1407 | "license": "ISC", 1408 | "dependencies": { 1409 | "d3-array": "2 - 3" 1410 | }, 1411 | "engines": { 1412 | "node": ">=12" 1413 | } 1414 | }, 1415 | "node_modules/d3-time-format": { 1416 | "version": "4.1.0", 1417 | "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", 1418 | "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", 1419 | "license": "ISC", 1420 | "dependencies": { 1421 | "d3-time": "1 - 3" 1422 | }, 1423 | "engines": { 1424 | "node": ">=12" 1425 | } 1426 | }, 1427 | "node_modules/d3-timer": { 1428 | "version": "3.0.1", 1429 | "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", 1430 | "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", 1431 | "license": "ISC", 1432 | "engines": { 1433 | "node": ">=12" 1434 | } 1435 | }, 1436 | "node_modules/d3-transition": { 1437 | "version": "3.0.1", 1438 | "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", 1439 | "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", 1440 | "license": "ISC", 1441 | "dependencies": { 1442 | "d3-color": "1 - 3", 1443 | "d3-dispatch": "1 - 3", 1444 | "d3-ease": "1 - 3", 1445 | "d3-interpolate": "1 - 3", 1446 | "d3-timer": "1 - 3" 1447 | }, 1448 | "engines": { 1449 | "node": ">=12" 1450 | }, 1451 | "peerDependencies": { 1452 | "d3-selection": "2 - 3" 1453 | } 1454 | }, 1455 | "node_modules/d3-zoom": { 1456 | "version": "3.0.0", 1457 | "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", 1458 | "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", 1459 | "license": "ISC", 1460 | "dependencies": { 1461 | "d3-dispatch": "1 - 3", 1462 | "d3-drag": "2 - 3", 1463 | "d3-interpolate": "1 - 3", 1464 | "d3-selection": "2 - 3", 1465 | "d3-transition": "2 - 3" 1466 | }, 1467 | "engines": { 1468 | "node": ">=12" 1469 | } 1470 | }, 1471 | "node_modules/dagre-d3-es": { 1472 | "version": "7.0.11", 1473 | "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz", 1474 | "integrity": "sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==", 1475 | "license": "MIT", 1476 | "dependencies": { 1477 | "d3": "^7.9.0", 1478 | "lodash-es": "^4.17.21" 1479 | } 1480 | }, 1481 | "node_modules/data-uri-to-buffer": { 1482 | "version": "6.0.2", 1483 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", 1484 | "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", 1485 | "license": "MIT", 1486 | "engines": { 1487 | "node": ">= 14" 1488 | } 1489 | }, 1490 | "node_modules/dayjs": { 1491 | "version": "1.11.13", 1492 | "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", 1493 | "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", 1494 | "license": "MIT" 1495 | }, 1496 | "node_modules/debug": { 1497 | "version": "4.3.6", 1498 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 1499 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 1500 | "license": "MIT", 1501 | "dependencies": { 1502 | "ms": "2.1.2" 1503 | }, 1504 | "engines": { 1505 | "node": ">=6.0" 1506 | }, 1507 | "peerDependenciesMeta": { 1508 | "supports-color": { 1509 | "optional": true 1510 | } 1511 | } 1512 | }, 1513 | "node_modules/degenerator": { 1514 | "version": "5.0.1", 1515 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", 1516 | "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", 1517 | "license": "MIT", 1518 | "dependencies": { 1519 | "ast-types": "^0.13.4", 1520 | "escodegen": "^2.1.0", 1521 | "esprima": "^4.0.1" 1522 | }, 1523 | "engines": { 1524 | "node": ">= 14" 1525 | } 1526 | }, 1527 | "node_modules/delaunator": { 1528 | "version": "5.0.1", 1529 | "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", 1530 | "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", 1531 | "license": "ISC", 1532 | "dependencies": { 1533 | "robust-predicates": "^3.0.2" 1534 | } 1535 | }, 1536 | "node_modules/depd": { 1537 | "version": "2.0.0", 1538 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1539 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 1540 | "license": "MIT", 1541 | "engines": { 1542 | "node": ">= 0.8" 1543 | } 1544 | }, 1545 | "node_modules/destroy": { 1546 | "version": "1.2.0", 1547 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 1548 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 1549 | "license": "MIT", 1550 | "engines": { 1551 | "node": ">= 0.8", 1552 | "npm": "1.2.8000 || >= 1.4.16" 1553 | } 1554 | }, 1555 | "node_modules/devtools-protocol": { 1556 | "version": "0.0.1402036", 1557 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1402036.tgz", 1558 | "integrity": "sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg==", 1559 | "license": "BSD-3-Clause" 1560 | }, 1561 | "node_modules/dompurify": { 1562 | "version": "3.2.4", 1563 | "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", 1564 | "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", 1565 | "license": "(MPL-2.0 OR Apache-2.0)", 1566 | "optionalDependencies": { 1567 | "@types/trusted-types": "^2.0.7" 1568 | } 1569 | }, 1570 | "node_modules/dunder-proto": { 1571 | "version": "1.0.1", 1572 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 1573 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 1574 | "license": "MIT", 1575 | "dependencies": { 1576 | "call-bind-apply-helpers": "^1.0.1", 1577 | "es-errors": "^1.3.0", 1578 | "gopd": "^1.2.0" 1579 | }, 1580 | "engines": { 1581 | "node": ">= 0.4" 1582 | } 1583 | }, 1584 | "node_modules/ee-first": { 1585 | "version": "1.1.1", 1586 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1587 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 1588 | "license": "MIT" 1589 | }, 1590 | "node_modules/emoji-regex": { 1591 | "version": "8.0.0", 1592 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1593 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1594 | "license": "MIT" 1595 | }, 1596 | "node_modules/encodeurl": { 1597 | "version": "2.0.0", 1598 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 1599 | "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 1600 | "license": "MIT", 1601 | "engines": { 1602 | "node": ">= 0.8" 1603 | } 1604 | }, 1605 | "node_modules/end-of-stream": { 1606 | "version": "1.4.4", 1607 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1608 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1609 | "license": "MIT", 1610 | "dependencies": { 1611 | "once": "^1.4.0" 1612 | } 1613 | }, 1614 | "node_modules/env-paths": { 1615 | "version": "2.2.1", 1616 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 1617 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 1618 | "license": "MIT", 1619 | "engines": { 1620 | "node": ">=6" 1621 | } 1622 | }, 1623 | "node_modules/error-ex": { 1624 | "version": "1.3.2", 1625 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1626 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1627 | "license": "MIT", 1628 | "dependencies": { 1629 | "is-arrayish": "^0.2.1" 1630 | } 1631 | }, 1632 | "node_modules/es-define-property": { 1633 | "version": "1.0.1", 1634 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 1635 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 1636 | "license": "MIT", 1637 | "engines": { 1638 | "node": ">= 0.4" 1639 | } 1640 | }, 1641 | "node_modules/es-errors": { 1642 | "version": "1.3.0", 1643 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1644 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1645 | "license": "MIT", 1646 | "engines": { 1647 | "node": ">= 0.4" 1648 | } 1649 | }, 1650 | "node_modules/es-object-atoms": { 1651 | "version": "1.1.1", 1652 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 1653 | "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 1654 | "license": "MIT", 1655 | "dependencies": { 1656 | "es-errors": "^1.3.0" 1657 | }, 1658 | "engines": { 1659 | "node": ">= 0.4" 1660 | } 1661 | }, 1662 | "node_modules/escalade": { 1663 | "version": "3.2.0", 1664 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1665 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1666 | "license": "MIT", 1667 | "engines": { 1668 | "node": ">=6" 1669 | } 1670 | }, 1671 | "node_modules/escape-html": { 1672 | "version": "1.0.3", 1673 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1674 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 1675 | "license": "MIT" 1676 | }, 1677 | "node_modules/escodegen": { 1678 | "version": "2.1.0", 1679 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", 1680 | "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", 1681 | "license": "BSD-2-Clause", 1682 | "dependencies": { 1683 | "esprima": "^4.0.1", 1684 | "estraverse": "^5.2.0", 1685 | "esutils": "^2.0.2" 1686 | }, 1687 | "bin": { 1688 | "escodegen": "bin/escodegen.js", 1689 | "esgenerate": "bin/esgenerate.js" 1690 | }, 1691 | "engines": { 1692 | "node": ">=6.0" 1693 | }, 1694 | "optionalDependencies": { 1695 | "source-map": "~0.6.1" 1696 | } 1697 | }, 1698 | "node_modules/esprima": { 1699 | "version": "4.0.1", 1700 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1701 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1702 | "license": "BSD-2-Clause", 1703 | "bin": { 1704 | "esparse": "bin/esparse.js", 1705 | "esvalidate": "bin/esvalidate.js" 1706 | }, 1707 | "engines": { 1708 | "node": ">=4" 1709 | } 1710 | }, 1711 | "node_modules/estraverse": { 1712 | "version": "5.3.0", 1713 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1714 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1715 | "license": "BSD-2-Clause", 1716 | "engines": { 1717 | "node": ">=4.0" 1718 | } 1719 | }, 1720 | "node_modules/esutils": { 1721 | "version": "2.0.3", 1722 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1723 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1724 | "license": "BSD-2-Clause", 1725 | "engines": { 1726 | "node": ">=0.10.0" 1727 | } 1728 | }, 1729 | "node_modules/etag": { 1730 | "version": "1.8.1", 1731 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1732 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 1733 | "license": "MIT", 1734 | "engines": { 1735 | "node": ">= 0.6" 1736 | } 1737 | }, 1738 | "node_modules/eventsource": { 1739 | "version": "3.0.5", 1740 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz", 1741 | "integrity": "sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==", 1742 | "license": "MIT", 1743 | "dependencies": { 1744 | "eventsource-parser": "^3.0.0" 1745 | }, 1746 | "engines": { 1747 | "node": ">=18.0.0" 1748 | } 1749 | }, 1750 | "node_modules/eventsource-parser": { 1751 | "version": "3.0.0", 1752 | "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.0.tgz", 1753 | "integrity": "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==", 1754 | "license": "MIT", 1755 | "engines": { 1756 | "node": ">=18.0.0" 1757 | } 1758 | }, 1759 | "node_modules/express": { 1760 | "version": "5.0.1", 1761 | "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", 1762 | "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", 1763 | "license": "MIT", 1764 | "dependencies": { 1765 | "accepts": "^2.0.0", 1766 | "body-parser": "^2.0.1", 1767 | "content-disposition": "^1.0.0", 1768 | "content-type": "~1.0.4", 1769 | "cookie": "0.7.1", 1770 | "cookie-signature": "^1.2.1", 1771 | "debug": "4.3.6", 1772 | "depd": "2.0.0", 1773 | "encodeurl": "~2.0.0", 1774 | "escape-html": "~1.0.3", 1775 | "etag": "~1.8.1", 1776 | "finalhandler": "^2.0.0", 1777 | "fresh": "2.0.0", 1778 | "http-errors": "2.0.0", 1779 | "merge-descriptors": "^2.0.0", 1780 | "methods": "~1.1.2", 1781 | "mime-types": "^3.0.0", 1782 | "on-finished": "2.4.1", 1783 | "once": "1.4.0", 1784 | "parseurl": "~1.3.3", 1785 | "proxy-addr": "~2.0.7", 1786 | "qs": "6.13.0", 1787 | "range-parser": "~1.2.1", 1788 | "router": "^2.0.0", 1789 | "safe-buffer": "5.2.1", 1790 | "send": "^1.1.0", 1791 | "serve-static": "^2.1.0", 1792 | "setprototypeof": "1.2.0", 1793 | "statuses": "2.0.1", 1794 | "type-is": "^2.0.0", 1795 | "utils-merge": "1.0.1", 1796 | "vary": "~1.1.2" 1797 | }, 1798 | "engines": { 1799 | "node": ">= 18" 1800 | } 1801 | }, 1802 | "node_modules/express-rate-limit": { 1803 | "version": "7.5.0", 1804 | "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", 1805 | "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", 1806 | "license": "MIT", 1807 | "engines": { 1808 | "node": ">= 16" 1809 | }, 1810 | "funding": { 1811 | "url": "https://github.com/sponsors/express-rate-limit" 1812 | }, 1813 | "peerDependencies": { 1814 | "express": "^4.11 || 5 || ^5.0.0-beta.1" 1815 | } 1816 | }, 1817 | "node_modules/exsolve": { 1818 | "version": "1.0.2", 1819 | "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.2.tgz", 1820 | "integrity": "sha512-ZEcIMbthn2zeX4/wD/DLxDUjuCltHXT8Htvm/JFlTkdYgWh2+HGppgwwNUnIVxzxP7yJOPtuBAec0dLx6lVY8w==", 1821 | "license": "MIT" 1822 | }, 1823 | "node_modules/extract-zip": { 1824 | "version": "2.0.1", 1825 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 1826 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 1827 | "license": "BSD-2-Clause", 1828 | "dependencies": { 1829 | "debug": "^4.1.1", 1830 | "get-stream": "^5.1.0", 1831 | "yauzl": "^2.10.0" 1832 | }, 1833 | "bin": { 1834 | "extract-zip": "cli.js" 1835 | }, 1836 | "engines": { 1837 | "node": ">= 10.17.0" 1838 | }, 1839 | "optionalDependencies": { 1840 | "@types/yauzl": "^2.9.1" 1841 | } 1842 | }, 1843 | "node_modules/fast-fifo": { 1844 | "version": "1.3.2", 1845 | "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", 1846 | "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", 1847 | "license": "MIT" 1848 | }, 1849 | "node_modules/fd-slicer": { 1850 | "version": "1.1.0", 1851 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 1852 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 1853 | "license": "MIT", 1854 | "dependencies": { 1855 | "pend": "~1.2.0" 1856 | } 1857 | }, 1858 | "node_modules/finalhandler": { 1859 | "version": "2.1.0", 1860 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", 1861 | "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", 1862 | "license": "MIT", 1863 | "dependencies": { 1864 | "debug": "^4.4.0", 1865 | "encodeurl": "^2.0.0", 1866 | "escape-html": "^1.0.3", 1867 | "on-finished": "^2.4.1", 1868 | "parseurl": "^1.3.3", 1869 | "statuses": "^2.0.1" 1870 | }, 1871 | "engines": { 1872 | "node": ">= 0.8" 1873 | } 1874 | }, 1875 | "node_modules/finalhandler/node_modules/debug": { 1876 | "version": "4.4.0", 1877 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1878 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1879 | "license": "MIT", 1880 | "dependencies": { 1881 | "ms": "^2.1.3" 1882 | }, 1883 | "engines": { 1884 | "node": ">=6.0" 1885 | }, 1886 | "peerDependenciesMeta": { 1887 | "supports-color": { 1888 | "optional": true 1889 | } 1890 | } 1891 | }, 1892 | "node_modules/finalhandler/node_modules/ms": { 1893 | "version": "2.1.3", 1894 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1895 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1896 | "license": "MIT" 1897 | }, 1898 | "node_modules/forwarded": { 1899 | "version": "0.2.0", 1900 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1901 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 1902 | "license": "MIT", 1903 | "engines": { 1904 | "node": ">= 0.6" 1905 | } 1906 | }, 1907 | "node_modules/fresh": { 1908 | "version": "2.0.0", 1909 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", 1910 | "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", 1911 | "license": "MIT", 1912 | "engines": { 1913 | "node": ">= 0.8" 1914 | } 1915 | }, 1916 | "node_modules/function-bind": { 1917 | "version": "1.1.2", 1918 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1919 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1920 | "license": "MIT", 1921 | "funding": { 1922 | "url": "https://github.com/sponsors/ljharb" 1923 | } 1924 | }, 1925 | "node_modules/get-caller-file": { 1926 | "version": "2.0.5", 1927 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1928 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1929 | "license": "ISC", 1930 | "engines": { 1931 | "node": "6.* || 8.* || >= 10.*" 1932 | } 1933 | }, 1934 | "node_modules/get-intrinsic": { 1935 | "version": "1.3.0", 1936 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 1937 | "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 1938 | "license": "MIT", 1939 | "dependencies": { 1940 | "call-bind-apply-helpers": "^1.0.2", 1941 | "es-define-property": "^1.0.1", 1942 | "es-errors": "^1.3.0", 1943 | "es-object-atoms": "^1.1.1", 1944 | "function-bind": "^1.1.2", 1945 | "get-proto": "^1.0.1", 1946 | "gopd": "^1.2.0", 1947 | "has-symbols": "^1.1.0", 1948 | "hasown": "^2.0.2", 1949 | "math-intrinsics": "^1.1.0" 1950 | }, 1951 | "engines": { 1952 | "node": ">= 0.4" 1953 | }, 1954 | "funding": { 1955 | "url": "https://github.com/sponsors/ljharb" 1956 | } 1957 | }, 1958 | "node_modules/get-proto": { 1959 | "version": "1.0.1", 1960 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 1961 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 1962 | "license": "MIT", 1963 | "dependencies": { 1964 | "dunder-proto": "^1.0.1", 1965 | "es-object-atoms": "^1.0.0" 1966 | }, 1967 | "engines": { 1968 | "node": ">= 0.4" 1969 | } 1970 | }, 1971 | "node_modules/get-stream": { 1972 | "version": "5.2.0", 1973 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1974 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1975 | "license": "MIT", 1976 | "dependencies": { 1977 | "pump": "^3.0.0" 1978 | }, 1979 | "engines": { 1980 | "node": ">=8" 1981 | }, 1982 | "funding": { 1983 | "url": "https://github.com/sponsors/sindresorhus" 1984 | } 1985 | }, 1986 | "node_modules/get-uri": { 1987 | "version": "6.0.4", 1988 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", 1989 | "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", 1990 | "license": "MIT", 1991 | "dependencies": { 1992 | "basic-ftp": "^5.0.2", 1993 | "data-uri-to-buffer": "^6.0.2", 1994 | "debug": "^4.3.4" 1995 | }, 1996 | "engines": { 1997 | "node": ">= 14" 1998 | } 1999 | }, 2000 | "node_modules/globals": { 2001 | "version": "15.15.0", 2002 | "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", 2003 | "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", 2004 | "license": "MIT", 2005 | "engines": { 2006 | "node": ">=18" 2007 | }, 2008 | "funding": { 2009 | "url": "https://github.com/sponsors/sindresorhus" 2010 | } 2011 | }, 2012 | "node_modules/gopd": { 2013 | "version": "1.2.0", 2014 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 2015 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 2016 | "license": "MIT", 2017 | "engines": { 2018 | "node": ">= 0.4" 2019 | }, 2020 | "funding": { 2021 | "url": "https://github.com/sponsors/ljharb" 2022 | } 2023 | }, 2024 | "node_modules/hachure-fill": { 2025 | "version": "0.5.2", 2026 | "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", 2027 | "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", 2028 | "license": "MIT" 2029 | }, 2030 | "node_modules/has-symbols": { 2031 | "version": "1.1.0", 2032 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 2033 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 2034 | "license": "MIT", 2035 | "engines": { 2036 | "node": ">= 0.4" 2037 | }, 2038 | "funding": { 2039 | "url": "https://github.com/sponsors/ljharb" 2040 | } 2041 | }, 2042 | "node_modules/hasown": { 2043 | "version": "2.0.2", 2044 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2045 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2046 | "license": "MIT", 2047 | "dependencies": { 2048 | "function-bind": "^1.1.2" 2049 | }, 2050 | "engines": { 2051 | "node": ">= 0.4" 2052 | } 2053 | }, 2054 | "node_modules/http-errors": { 2055 | "version": "2.0.0", 2056 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 2057 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 2058 | "license": "MIT", 2059 | "dependencies": { 2060 | "depd": "2.0.0", 2061 | "inherits": "2.0.4", 2062 | "setprototypeof": "1.2.0", 2063 | "statuses": "2.0.1", 2064 | "toidentifier": "1.0.1" 2065 | }, 2066 | "engines": { 2067 | "node": ">= 0.8" 2068 | } 2069 | }, 2070 | "node_modules/http-proxy-agent": { 2071 | "version": "7.0.2", 2072 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", 2073 | "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", 2074 | "license": "MIT", 2075 | "dependencies": { 2076 | "agent-base": "^7.1.0", 2077 | "debug": "^4.3.4" 2078 | }, 2079 | "engines": { 2080 | "node": ">= 14" 2081 | } 2082 | }, 2083 | "node_modules/https-proxy-agent": { 2084 | "version": "7.0.6", 2085 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", 2086 | "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", 2087 | "license": "MIT", 2088 | "dependencies": { 2089 | "agent-base": "^7.1.2", 2090 | "debug": "4" 2091 | }, 2092 | "engines": { 2093 | "node": ">= 14" 2094 | } 2095 | }, 2096 | "node_modules/iconv-lite": { 2097 | "version": "0.5.2", 2098 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", 2099 | "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", 2100 | "license": "MIT", 2101 | "dependencies": { 2102 | "safer-buffer": ">= 2.1.2 < 3" 2103 | }, 2104 | "engines": { 2105 | "node": ">=0.10.0" 2106 | } 2107 | }, 2108 | "node_modules/import-fresh": { 2109 | "version": "3.3.1", 2110 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 2111 | "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 2112 | "license": "MIT", 2113 | "dependencies": { 2114 | "parent-module": "^1.0.0", 2115 | "resolve-from": "^4.0.0" 2116 | }, 2117 | "engines": { 2118 | "node": ">=6" 2119 | }, 2120 | "funding": { 2121 | "url": "https://github.com/sponsors/sindresorhus" 2122 | } 2123 | }, 2124 | "node_modules/import-meta-resolve": { 2125 | "version": "4.1.0", 2126 | "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", 2127 | "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", 2128 | "license": "MIT", 2129 | "funding": { 2130 | "type": "github", 2131 | "url": "https://github.com/sponsors/wooorm" 2132 | } 2133 | }, 2134 | "node_modules/inherits": { 2135 | "version": "2.0.4", 2136 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2137 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2138 | "license": "ISC" 2139 | }, 2140 | "node_modules/internmap": { 2141 | "version": "2.0.3", 2142 | "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", 2143 | "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", 2144 | "license": "ISC", 2145 | "engines": { 2146 | "node": ">=12" 2147 | } 2148 | }, 2149 | "node_modules/ip-address": { 2150 | "version": "9.0.5", 2151 | "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", 2152 | "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", 2153 | "license": "MIT", 2154 | "dependencies": { 2155 | "jsbn": "1.1.0", 2156 | "sprintf-js": "^1.1.3" 2157 | }, 2158 | "engines": { 2159 | "node": ">= 12" 2160 | } 2161 | }, 2162 | "node_modules/ipaddr.js": { 2163 | "version": "1.9.1", 2164 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2165 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 2166 | "license": "MIT", 2167 | "engines": { 2168 | "node": ">= 0.10" 2169 | } 2170 | }, 2171 | "node_modules/is-arrayish": { 2172 | "version": "0.2.1", 2173 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 2174 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 2175 | "license": "MIT" 2176 | }, 2177 | "node_modules/is-fullwidth-code-point": { 2178 | "version": "3.0.0", 2179 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2180 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2181 | "license": "MIT", 2182 | "engines": { 2183 | "node": ">=8" 2184 | } 2185 | }, 2186 | "node_modules/is-promise": { 2187 | "version": "4.0.0", 2188 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 2189 | "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 2190 | "license": "MIT" 2191 | }, 2192 | "node_modules/js-tokens": { 2193 | "version": "4.0.0", 2194 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2195 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2196 | "license": "MIT" 2197 | }, 2198 | "node_modules/js-yaml": { 2199 | "version": "4.1.0", 2200 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2201 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2202 | "license": "MIT", 2203 | "dependencies": { 2204 | "argparse": "^2.0.1" 2205 | }, 2206 | "bin": { 2207 | "js-yaml": "bin/js-yaml.js" 2208 | } 2209 | }, 2210 | "node_modules/jsbn": { 2211 | "version": "1.1.0", 2212 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", 2213 | "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", 2214 | "license": "MIT" 2215 | }, 2216 | "node_modules/json-parse-even-better-errors": { 2217 | "version": "2.3.1", 2218 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 2219 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 2220 | "license": "MIT" 2221 | }, 2222 | "node_modules/katex": { 2223 | "version": "0.16.21", 2224 | "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", 2225 | "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", 2226 | "funding": [ 2227 | "https://opencollective.com/katex", 2228 | "https://github.com/sponsors/katex" 2229 | ], 2230 | "license": "MIT", 2231 | "dependencies": { 2232 | "commander": "^8.3.0" 2233 | }, 2234 | "bin": { 2235 | "katex": "cli.js" 2236 | } 2237 | }, 2238 | "node_modules/katex/node_modules/commander": { 2239 | "version": "8.3.0", 2240 | "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", 2241 | "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", 2242 | "license": "MIT", 2243 | "engines": { 2244 | "node": ">= 12" 2245 | } 2246 | }, 2247 | "node_modules/khroma": { 2248 | "version": "2.1.0", 2249 | "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", 2250 | "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" 2251 | }, 2252 | "node_modules/kolorist": { 2253 | "version": "1.8.0", 2254 | "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", 2255 | "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", 2256 | "license": "MIT" 2257 | }, 2258 | "node_modules/langium": { 2259 | "version": "3.0.0", 2260 | "resolved": "https://registry.npmjs.org/langium/-/langium-3.0.0.tgz", 2261 | "integrity": "sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==", 2262 | "license": "MIT", 2263 | "dependencies": { 2264 | "chevrotain": "~11.0.3", 2265 | "chevrotain-allstar": "~0.3.0", 2266 | "vscode-languageserver": "~9.0.1", 2267 | "vscode-languageserver-textdocument": "~1.0.11", 2268 | "vscode-uri": "~3.0.8" 2269 | }, 2270 | "engines": { 2271 | "node": ">=16.0.0" 2272 | } 2273 | }, 2274 | "node_modules/layout-base": { 2275 | "version": "1.0.2", 2276 | "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", 2277 | "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", 2278 | "license": "MIT" 2279 | }, 2280 | "node_modules/lines-and-columns": { 2281 | "version": "1.2.4", 2282 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2283 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2284 | "license": "MIT" 2285 | }, 2286 | "node_modules/local-pkg": { 2287 | "version": "1.1.1", 2288 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", 2289 | "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", 2290 | "license": "MIT", 2291 | "dependencies": { 2292 | "mlly": "^1.7.4", 2293 | "pkg-types": "^2.0.1", 2294 | "quansync": "^0.2.8" 2295 | }, 2296 | "engines": { 2297 | "node": ">=14" 2298 | }, 2299 | "funding": { 2300 | "url": "https://github.com/sponsors/antfu" 2301 | } 2302 | }, 2303 | "node_modules/lodash-es": { 2304 | "version": "4.17.21", 2305 | "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", 2306 | "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", 2307 | "license": "MIT" 2308 | }, 2309 | "node_modules/lru-cache": { 2310 | "version": "7.18.3", 2311 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", 2312 | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", 2313 | "license": "ISC", 2314 | "engines": { 2315 | "node": ">=12" 2316 | } 2317 | }, 2318 | "node_modules/marked": { 2319 | "version": "13.0.3", 2320 | "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz", 2321 | "integrity": "sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==", 2322 | "license": "MIT", 2323 | "bin": { 2324 | "marked": "bin/marked.js" 2325 | }, 2326 | "engines": { 2327 | "node": ">= 18" 2328 | } 2329 | }, 2330 | "node_modules/math-intrinsics": { 2331 | "version": "1.1.0", 2332 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 2333 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 2334 | "license": "MIT", 2335 | "engines": { 2336 | "node": ">= 0.4" 2337 | } 2338 | }, 2339 | "node_modules/media-typer": { 2340 | "version": "1.1.0", 2341 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 2342 | "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", 2343 | "license": "MIT", 2344 | "engines": { 2345 | "node": ">= 0.8" 2346 | } 2347 | }, 2348 | "node_modules/merge-descriptors": { 2349 | "version": "2.0.0", 2350 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", 2351 | "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", 2352 | "license": "MIT", 2353 | "engines": { 2354 | "node": ">=18" 2355 | }, 2356 | "funding": { 2357 | "url": "https://github.com/sponsors/sindresorhus" 2358 | } 2359 | }, 2360 | "node_modules/mermaid": { 2361 | "version": "11.4.1", 2362 | "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.4.1.tgz", 2363 | "integrity": "sha512-Mb01JT/x6CKDWaxigwfZYuYmDZ6xtrNwNlidKZwkSrDaY9n90tdrJTV5Umk+wP1fZscGptmKFXHsXMDEVZ+Q6A==", 2364 | "license": "MIT", 2365 | "dependencies": { 2366 | "@braintree/sanitize-url": "^7.0.1", 2367 | "@iconify/utils": "^2.1.32", 2368 | "@mermaid-js/parser": "^0.3.0", 2369 | "@types/d3": "^7.4.3", 2370 | "cytoscape": "^3.29.2", 2371 | "cytoscape-cose-bilkent": "^4.1.0", 2372 | "cytoscape-fcose": "^2.2.0", 2373 | "d3": "^7.9.0", 2374 | "d3-sankey": "^0.12.3", 2375 | "dagre-d3-es": "7.0.11", 2376 | "dayjs": "^1.11.10", 2377 | "dompurify": "^3.2.1", 2378 | "katex": "^0.16.9", 2379 | "khroma": "^2.1.0", 2380 | "lodash-es": "^4.17.21", 2381 | "marked": "^13.0.2", 2382 | "roughjs": "^4.6.6", 2383 | "stylis": "^4.3.1", 2384 | "ts-dedent": "^2.2.0", 2385 | "uuid": "^9.0.1" 2386 | } 2387 | }, 2388 | "node_modules/methods": { 2389 | "version": "1.1.2", 2390 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2391 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 2392 | "license": "MIT", 2393 | "engines": { 2394 | "node": ">= 0.6" 2395 | } 2396 | }, 2397 | "node_modules/mime-db": { 2398 | "version": "1.53.0", 2399 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", 2400 | "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", 2401 | "license": "MIT", 2402 | "engines": { 2403 | "node": ">= 0.6" 2404 | } 2405 | }, 2406 | "node_modules/mime-types": { 2407 | "version": "3.0.0", 2408 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", 2409 | "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", 2410 | "license": "MIT", 2411 | "dependencies": { 2412 | "mime-db": "^1.53.0" 2413 | }, 2414 | "engines": { 2415 | "node": ">= 0.6" 2416 | } 2417 | }, 2418 | "node_modules/mitt": { 2419 | "version": "3.0.1", 2420 | "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 2421 | "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", 2422 | "license": "MIT" 2423 | }, 2424 | "node_modules/mlly": { 2425 | "version": "1.7.4", 2426 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", 2427 | "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", 2428 | "license": "MIT", 2429 | "dependencies": { 2430 | "acorn": "^8.14.0", 2431 | "pathe": "^2.0.1", 2432 | "pkg-types": "^1.3.0", 2433 | "ufo": "^1.5.4" 2434 | } 2435 | }, 2436 | "node_modules/mlly/node_modules/confbox": { 2437 | "version": "0.1.8", 2438 | "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", 2439 | "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", 2440 | "license": "MIT" 2441 | }, 2442 | "node_modules/mlly/node_modules/pkg-types": { 2443 | "version": "1.3.1", 2444 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", 2445 | "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", 2446 | "license": "MIT", 2447 | "dependencies": { 2448 | "confbox": "^0.1.8", 2449 | "mlly": "^1.7.4", 2450 | "pathe": "^2.0.1" 2451 | } 2452 | }, 2453 | "node_modules/ms": { 2454 | "version": "2.1.2", 2455 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2456 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2457 | "license": "MIT" 2458 | }, 2459 | "node_modules/negotiator": { 2460 | "version": "1.0.0", 2461 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", 2462 | "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", 2463 | "license": "MIT", 2464 | "engines": { 2465 | "node": ">= 0.6" 2466 | } 2467 | }, 2468 | "node_modules/netmask": { 2469 | "version": "2.0.2", 2470 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", 2471 | "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", 2472 | "license": "MIT", 2473 | "engines": { 2474 | "node": ">= 0.4.0" 2475 | } 2476 | }, 2477 | "node_modules/object-assign": { 2478 | "version": "4.1.1", 2479 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2480 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 2481 | "license": "MIT", 2482 | "engines": { 2483 | "node": ">=0.10.0" 2484 | } 2485 | }, 2486 | "node_modules/object-inspect": { 2487 | "version": "1.13.4", 2488 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 2489 | "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 2490 | "license": "MIT", 2491 | "engines": { 2492 | "node": ">= 0.4" 2493 | }, 2494 | "funding": { 2495 | "url": "https://github.com/sponsors/ljharb" 2496 | } 2497 | }, 2498 | "node_modules/on-finished": { 2499 | "version": "2.4.1", 2500 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 2501 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 2502 | "license": "MIT", 2503 | "dependencies": { 2504 | "ee-first": "1.1.1" 2505 | }, 2506 | "engines": { 2507 | "node": ">= 0.8" 2508 | } 2509 | }, 2510 | "node_modules/once": { 2511 | "version": "1.4.0", 2512 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2513 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2514 | "license": "ISC", 2515 | "dependencies": { 2516 | "wrappy": "1" 2517 | } 2518 | }, 2519 | "node_modules/pac-proxy-agent": { 2520 | "version": "7.2.0", 2521 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", 2522 | "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", 2523 | "license": "MIT", 2524 | "dependencies": { 2525 | "@tootallnate/quickjs-emscripten": "^0.23.0", 2526 | "agent-base": "^7.1.2", 2527 | "debug": "^4.3.4", 2528 | "get-uri": "^6.0.1", 2529 | "http-proxy-agent": "^7.0.0", 2530 | "https-proxy-agent": "^7.0.6", 2531 | "pac-resolver": "^7.0.1", 2532 | "socks-proxy-agent": "^8.0.5" 2533 | }, 2534 | "engines": { 2535 | "node": ">= 14" 2536 | } 2537 | }, 2538 | "node_modules/pac-resolver": { 2539 | "version": "7.0.1", 2540 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", 2541 | "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", 2542 | "license": "MIT", 2543 | "dependencies": { 2544 | "degenerator": "^5.0.0", 2545 | "netmask": "^2.0.2" 2546 | }, 2547 | "engines": { 2548 | "node": ">= 14" 2549 | } 2550 | }, 2551 | "node_modules/package-manager-detector": { 2552 | "version": "0.2.11", 2553 | "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", 2554 | "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", 2555 | "license": "MIT", 2556 | "dependencies": { 2557 | "quansync": "^0.2.7" 2558 | } 2559 | }, 2560 | "node_modules/parent-module": { 2561 | "version": "1.0.1", 2562 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2563 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2564 | "license": "MIT", 2565 | "dependencies": { 2566 | "callsites": "^3.0.0" 2567 | }, 2568 | "engines": { 2569 | "node": ">=6" 2570 | } 2571 | }, 2572 | "node_modules/parse-json": { 2573 | "version": "5.2.0", 2574 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 2575 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 2576 | "license": "MIT", 2577 | "dependencies": { 2578 | "@babel/code-frame": "^7.0.0", 2579 | "error-ex": "^1.3.1", 2580 | "json-parse-even-better-errors": "^2.3.0", 2581 | "lines-and-columns": "^1.1.6" 2582 | }, 2583 | "engines": { 2584 | "node": ">=8" 2585 | }, 2586 | "funding": { 2587 | "url": "https://github.com/sponsors/sindresorhus" 2588 | } 2589 | }, 2590 | "node_modules/parseurl": { 2591 | "version": "1.3.3", 2592 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2593 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 2594 | "license": "MIT", 2595 | "engines": { 2596 | "node": ">= 0.8" 2597 | } 2598 | }, 2599 | "node_modules/path-data-parser": { 2600 | "version": "0.1.0", 2601 | "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", 2602 | "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", 2603 | "license": "MIT" 2604 | }, 2605 | "node_modules/path-to-regexp": { 2606 | "version": "8.2.0", 2607 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", 2608 | "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", 2609 | "license": "MIT", 2610 | "engines": { 2611 | "node": ">=16" 2612 | } 2613 | }, 2614 | "node_modules/pathe": { 2615 | "version": "2.0.3", 2616 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", 2617 | "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", 2618 | "license": "MIT" 2619 | }, 2620 | "node_modules/pend": { 2621 | "version": "1.2.0", 2622 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 2623 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 2624 | "license": "MIT" 2625 | }, 2626 | "node_modules/picocolors": { 2627 | "version": "1.1.1", 2628 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2629 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2630 | "license": "ISC" 2631 | }, 2632 | "node_modules/pkce-challenge": { 2633 | "version": "4.1.0", 2634 | "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-4.1.0.tgz", 2635 | "integrity": "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==", 2636 | "license": "MIT", 2637 | "engines": { 2638 | "node": ">=16.20.0" 2639 | } 2640 | }, 2641 | "node_modules/pkg-types": { 2642 | "version": "2.1.0", 2643 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", 2644 | "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", 2645 | "license": "MIT", 2646 | "dependencies": { 2647 | "confbox": "^0.2.1", 2648 | "exsolve": "^1.0.1", 2649 | "pathe": "^2.0.3" 2650 | } 2651 | }, 2652 | "node_modules/points-on-curve": { 2653 | "version": "0.2.0", 2654 | "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", 2655 | "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", 2656 | "license": "MIT" 2657 | }, 2658 | "node_modules/points-on-path": { 2659 | "version": "0.2.1", 2660 | "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", 2661 | "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", 2662 | "license": "MIT", 2663 | "dependencies": { 2664 | "path-data-parser": "0.1.0", 2665 | "points-on-curve": "0.2.0" 2666 | } 2667 | }, 2668 | "node_modules/progress": { 2669 | "version": "2.0.3", 2670 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2671 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2672 | "license": "MIT", 2673 | "engines": { 2674 | "node": ">=0.4.0" 2675 | } 2676 | }, 2677 | "node_modules/proxy-addr": { 2678 | "version": "2.0.7", 2679 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 2680 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 2681 | "license": "MIT", 2682 | "dependencies": { 2683 | "forwarded": "0.2.0", 2684 | "ipaddr.js": "1.9.1" 2685 | }, 2686 | "engines": { 2687 | "node": ">= 0.10" 2688 | } 2689 | }, 2690 | "node_modules/proxy-agent": { 2691 | "version": "6.5.0", 2692 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", 2693 | "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", 2694 | "license": "MIT", 2695 | "dependencies": { 2696 | "agent-base": "^7.1.2", 2697 | "debug": "^4.3.4", 2698 | "http-proxy-agent": "^7.0.1", 2699 | "https-proxy-agent": "^7.0.6", 2700 | "lru-cache": "^7.14.1", 2701 | "pac-proxy-agent": "^7.1.0", 2702 | "proxy-from-env": "^1.1.0", 2703 | "socks-proxy-agent": "^8.0.5" 2704 | }, 2705 | "engines": { 2706 | "node": ">= 14" 2707 | } 2708 | }, 2709 | "node_modules/proxy-from-env": { 2710 | "version": "1.1.0", 2711 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 2712 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 2713 | "license": "MIT" 2714 | }, 2715 | "node_modules/pump": { 2716 | "version": "3.0.2", 2717 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", 2718 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", 2719 | "license": "MIT", 2720 | "dependencies": { 2721 | "end-of-stream": "^1.1.0", 2722 | "once": "^1.3.1" 2723 | } 2724 | }, 2725 | "node_modules/puppeteer": { 2726 | "version": "24.3.1", 2727 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.3.1.tgz", 2728 | "integrity": "sha512-k0OJ7itRwkr06owp0CP3f/PsRD7Pdw4DjoCUZvjGr+aNgS1z6n/61VajIp0uBjl+V5XAQO1v/3k9bzeZLWs9OQ==", 2729 | "hasInstallScript": true, 2730 | "license": "Apache-2.0", 2731 | "dependencies": { 2732 | "@puppeteer/browsers": "2.7.1", 2733 | "chromium-bidi": "2.1.2", 2734 | "cosmiconfig": "^9.0.0", 2735 | "devtools-protocol": "0.0.1402036", 2736 | "puppeteer-core": "24.3.1", 2737 | "typed-query-selector": "^2.12.0" 2738 | }, 2739 | "bin": { 2740 | "puppeteer": "lib/cjs/puppeteer/node/cli.js" 2741 | }, 2742 | "engines": { 2743 | "node": ">=18" 2744 | } 2745 | }, 2746 | "node_modules/puppeteer-core": { 2747 | "version": "24.3.1", 2748 | "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.3.1.tgz", 2749 | "integrity": "sha512-585ccfcTav4KmlSmYbwwOSeC8VdutQHn2Fuk0id/y/9OoeO7Gg5PK1aUGdZjEmos0TAq+pCpChqFurFbpNd3wA==", 2750 | "license": "Apache-2.0", 2751 | "dependencies": { 2752 | "@puppeteer/browsers": "2.7.1", 2753 | "chromium-bidi": "2.1.2", 2754 | "debug": "^4.4.0", 2755 | "devtools-protocol": "0.0.1402036", 2756 | "typed-query-selector": "^2.12.0", 2757 | "ws": "^8.18.1" 2758 | }, 2759 | "engines": { 2760 | "node": ">=18" 2761 | } 2762 | }, 2763 | "node_modules/puppeteer-core/node_modules/debug": { 2764 | "version": "4.4.0", 2765 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 2766 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 2767 | "license": "MIT", 2768 | "dependencies": { 2769 | "ms": "^2.1.3" 2770 | }, 2771 | "engines": { 2772 | "node": ">=6.0" 2773 | }, 2774 | "peerDependenciesMeta": { 2775 | "supports-color": { 2776 | "optional": true 2777 | } 2778 | } 2779 | }, 2780 | "node_modules/puppeteer-core/node_modules/ms": { 2781 | "version": "2.1.3", 2782 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2783 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2784 | "license": "MIT" 2785 | }, 2786 | "node_modules/qs": { 2787 | "version": "6.13.0", 2788 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 2789 | "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 2790 | "license": "BSD-3-Clause", 2791 | "dependencies": { 2792 | "side-channel": "^1.0.6" 2793 | }, 2794 | "engines": { 2795 | "node": ">=0.6" 2796 | }, 2797 | "funding": { 2798 | "url": "https://github.com/sponsors/ljharb" 2799 | } 2800 | }, 2801 | "node_modules/quansync": { 2802 | "version": "0.2.8", 2803 | "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.8.tgz", 2804 | "integrity": "sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==", 2805 | "funding": [ 2806 | { 2807 | "type": "individual", 2808 | "url": "https://github.com/sponsors/antfu" 2809 | }, 2810 | { 2811 | "type": "individual", 2812 | "url": "https://github.com/sponsors/sxzz" 2813 | } 2814 | ], 2815 | "license": "MIT" 2816 | }, 2817 | "node_modules/range-parser": { 2818 | "version": "1.2.1", 2819 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2820 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 2821 | "license": "MIT", 2822 | "engines": { 2823 | "node": ">= 0.6" 2824 | } 2825 | }, 2826 | "node_modules/raw-body": { 2827 | "version": "3.0.0", 2828 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", 2829 | "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", 2830 | "license": "MIT", 2831 | "dependencies": { 2832 | "bytes": "3.1.2", 2833 | "http-errors": "2.0.0", 2834 | "iconv-lite": "0.6.3", 2835 | "unpipe": "1.0.0" 2836 | }, 2837 | "engines": { 2838 | "node": ">= 0.8" 2839 | } 2840 | }, 2841 | "node_modules/raw-body/node_modules/iconv-lite": { 2842 | "version": "0.6.3", 2843 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 2844 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 2845 | "license": "MIT", 2846 | "dependencies": { 2847 | "safer-buffer": ">= 2.1.2 < 3.0.0" 2848 | }, 2849 | "engines": { 2850 | "node": ">=0.10.0" 2851 | } 2852 | }, 2853 | "node_modules/require-directory": { 2854 | "version": "2.1.1", 2855 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2856 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 2857 | "license": "MIT", 2858 | "engines": { 2859 | "node": ">=0.10.0" 2860 | } 2861 | }, 2862 | "node_modules/resolve-from": { 2863 | "version": "4.0.0", 2864 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2865 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2866 | "license": "MIT", 2867 | "engines": { 2868 | "node": ">=4" 2869 | } 2870 | }, 2871 | "node_modules/robust-predicates": { 2872 | "version": "3.0.2", 2873 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", 2874 | "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", 2875 | "license": "Unlicense" 2876 | }, 2877 | "node_modules/roughjs": { 2878 | "version": "4.6.6", 2879 | "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", 2880 | "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", 2881 | "license": "MIT", 2882 | "dependencies": { 2883 | "hachure-fill": "^0.5.2", 2884 | "path-data-parser": "^0.1.0", 2885 | "points-on-curve": "^0.2.0", 2886 | "points-on-path": "^0.2.1" 2887 | } 2888 | }, 2889 | "node_modules/router": { 2890 | "version": "2.1.0", 2891 | "resolved": "https://registry.npmjs.org/router/-/router-2.1.0.tgz", 2892 | "integrity": "sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==", 2893 | "license": "MIT", 2894 | "dependencies": { 2895 | "is-promise": "^4.0.0", 2896 | "parseurl": "^1.3.3", 2897 | "path-to-regexp": "^8.0.0" 2898 | }, 2899 | "engines": { 2900 | "node": ">= 18" 2901 | } 2902 | }, 2903 | "node_modules/rw": { 2904 | "version": "1.3.3", 2905 | "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", 2906 | "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", 2907 | "license": "BSD-3-Clause" 2908 | }, 2909 | "node_modules/safe-buffer": { 2910 | "version": "5.2.1", 2911 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2912 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2913 | "funding": [ 2914 | { 2915 | "type": "github", 2916 | "url": "https://github.com/sponsors/feross" 2917 | }, 2918 | { 2919 | "type": "patreon", 2920 | "url": "https://www.patreon.com/feross" 2921 | }, 2922 | { 2923 | "type": "consulting", 2924 | "url": "https://feross.org/support" 2925 | } 2926 | ], 2927 | "license": "MIT" 2928 | }, 2929 | "node_modules/safer-buffer": { 2930 | "version": "2.1.2", 2931 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2932 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2933 | "license": "MIT" 2934 | }, 2935 | "node_modules/semver": { 2936 | "version": "7.7.1", 2937 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 2938 | "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 2939 | "license": "ISC", 2940 | "bin": { 2941 | "semver": "bin/semver.js" 2942 | }, 2943 | "engines": { 2944 | "node": ">=10" 2945 | } 2946 | }, 2947 | "node_modules/send": { 2948 | "version": "1.1.0", 2949 | "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", 2950 | "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", 2951 | "license": "MIT", 2952 | "dependencies": { 2953 | "debug": "^4.3.5", 2954 | "destroy": "^1.2.0", 2955 | "encodeurl": "^2.0.0", 2956 | "escape-html": "^1.0.3", 2957 | "etag": "^1.8.1", 2958 | "fresh": "^0.5.2", 2959 | "http-errors": "^2.0.0", 2960 | "mime-types": "^2.1.35", 2961 | "ms": "^2.1.3", 2962 | "on-finished": "^2.4.1", 2963 | "range-parser": "^1.2.1", 2964 | "statuses": "^2.0.1" 2965 | }, 2966 | "engines": { 2967 | "node": ">= 18" 2968 | } 2969 | }, 2970 | "node_modules/send/node_modules/fresh": { 2971 | "version": "0.5.2", 2972 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 2973 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 2974 | "license": "MIT", 2975 | "engines": { 2976 | "node": ">= 0.6" 2977 | } 2978 | }, 2979 | "node_modules/send/node_modules/mime-db": { 2980 | "version": "1.52.0", 2981 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2982 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2983 | "license": "MIT", 2984 | "engines": { 2985 | "node": ">= 0.6" 2986 | } 2987 | }, 2988 | "node_modules/send/node_modules/mime-types": { 2989 | "version": "2.1.35", 2990 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2991 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2992 | "license": "MIT", 2993 | "dependencies": { 2994 | "mime-db": "1.52.0" 2995 | }, 2996 | "engines": { 2997 | "node": ">= 0.6" 2998 | } 2999 | }, 3000 | "node_modules/send/node_modules/ms": { 3001 | "version": "2.1.3", 3002 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3003 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3004 | "license": "MIT" 3005 | }, 3006 | "node_modules/serve-static": { 3007 | "version": "2.1.0", 3008 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", 3009 | "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", 3010 | "license": "MIT", 3011 | "dependencies": { 3012 | "encodeurl": "^2.0.0", 3013 | "escape-html": "^1.0.3", 3014 | "parseurl": "^1.3.3", 3015 | "send": "^1.0.0" 3016 | }, 3017 | "engines": { 3018 | "node": ">= 18" 3019 | } 3020 | }, 3021 | "node_modules/setprototypeof": { 3022 | "version": "1.2.0", 3023 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 3024 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 3025 | "license": "ISC" 3026 | }, 3027 | "node_modules/side-channel": { 3028 | "version": "1.1.0", 3029 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 3030 | "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 3031 | "license": "MIT", 3032 | "dependencies": { 3033 | "es-errors": "^1.3.0", 3034 | "object-inspect": "^1.13.3", 3035 | "side-channel-list": "^1.0.0", 3036 | "side-channel-map": "^1.0.1", 3037 | "side-channel-weakmap": "^1.0.2" 3038 | }, 3039 | "engines": { 3040 | "node": ">= 0.4" 3041 | }, 3042 | "funding": { 3043 | "url": "https://github.com/sponsors/ljharb" 3044 | } 3045 | }, 3046 | "node_modules/side-channel-list": { 3047 | "version": "1.0.0", 3048 | "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 3049 | "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 3050 | "license": "MIT", 3051 | "dependencies": { 3052 | "es-errors": "^1.3.0", 3053 | "object-inspect": "^1.13.3" 3054 | }, 3055 | "engines": { 3056 | "node": ">= 0.4" 3057 | }, 3058 | "funding": { 3059 | "url": "https://github.com/sponsors/ljharb" 3060 | } 3061 | }, 3062 | "node_modules/side-channel-map": { 3063 | "version": "1.0.1", 3064 | "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 3065 | "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 3066 | "license": "MIT", 3067 | "dependencies": { 3068 | "call-bound": "^1.0.2", 3069 | "es-errors": "^1.3.0", 3070 | "get-intrinsic": "^1.2.5", 3071 | "object-inspect": "^1.13.3" 3072 | }, 3073 | "engines": { 3074 | "node": ">= 0.4" 3075 | }, 3076 | "funding": { 3077 | "url": "https://github.com/sponsors/ljharb" 3078 | } 3079 | }, 3080 | "node_modules/side-channel-weakmap": { 3081 | "version": "1.0.2", 3082 | "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 3083 | "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 3084 | "license": "MIT", 3085 | "dependencies": { 3086 | "call-bound": "^1.0.2", 3087 | "es-errors": "^1.3.0", 3088 | "get-intrinsic": "^1.2.5", 3089 | "object-inspect": "^1.13.3", 3090 | "side-channel-map": "^1.0.1" 3091 | }, 3092 | "engines": { 3093 | "node": ">= 0.4" 3094 | }, 3095 | "funding": { 3096 | "url": "https://github.com/sponsors/ljharb" 3097 | } 3098 | }, 3099 | "node_modules/smart-buffer": { 3100 | "version": "4.2.0", 3101 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 3102 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 3103 | "license": "MIT", 3104 | "engines": { 3105 | "node": ">= 6.0.0", 3106 | "npm": ">= 3.0.0" 3107 | } 3108 | }, 3109 | "node_modules/socks": { 3110 | "version": "2.8.4", 3111 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", 3112 | "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", 3113 | "license": "MIT", 3114 | "dependencies": { 3115 | "ip-address": "^9.0.5", 3116 | "smart-buffer": "^4.2.0" 3117 | }, 3118 | "engines": { 3119 | "node": ">= 10.0.0", 3120 | "npm": ">= 3.0.0" 3121 | } 3122 | }, 3123 | "node_modules/socks-proxy-agent": { 3124 | "version": "8.0.5", 3125 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", 3126 | "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", 3127 | "license": "MIT", 3128 | "dependencies": { 3129 | "agent-base": "^7.1.2", 3130 | "debug": "^4.3.4", 3131 | "socks": "^2.8.3" 3132 | }, 3133 | "engines": { 3134 | "node": ">= 14" 3135 | } 3136 | }, 3137 | "node_modules/source-map": { 3138 | "version": "0.6.1", 3139 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3140 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3141 | "license": "BSD-3-Clause", 3142 | "optional": true, 3143 | "engines": { 3144 | "node": ">=0.10.0" 3145 | } 3146 | }, 3147 | "node_modules/sprintf-js": { 3148 | "version": "1.1.3", 3149 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", 3150 | "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", 3151 | "license": "BSD-3-Clause" 3152 | }, 3153 | "node_modules/statuses": { 3154 | "version": "2.0.1", 3155 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 3156 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 3157 | "license": "MIT", 3158 | "engines": { 3159 | "node": ">= 0.8" 3160 | } 3161 | }, 3162 | "node_modules/streamx": { 3163 | "version": "2.22.0", 3164 | "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", 3165 | "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", 3166 | "license": "MIT", 3167 | "dependencies": { 3168 | "fast-fifo": "^1.3.2", 3169 | "text-decoder": "^1.1.0" 3170 | }, 3171 | "optionalDependencies": { 3172 | "bare-events": "^2.2.0" 3173 | } 3174 | }, 3175 | "node_modules/string-width": { 3176 | "version": "4.2.3", 3177 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3178 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3179 | "license": "MIT", 3180 | "dependencies": { 3181 | "emoji-regex": "^8.0.0", 3182 | "is-fullwidth-code-point": "^3.0.0", 3183 | "strip-ansi": "^6.0.1" 3184 | }, 3185 | "engines": { 3186 | "node": ">=8" 3187 | } 3188 | }, 3189 | "node_modules/strip-ansi": { 3190 | "version": "6.0.1", 3191 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3192 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3193 | "license": "MIT", 3194 | "dependencies": { 3195 | "ansi-regex": "^5.0.1" 3196 | }, 3197 | "engines": { 3198 | "node": ">=8" 3199 | } 3200 | }, 3201 | "node_modules/stylis": { 3202 | "version": "4.3.6", 3203 | "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", 3204 | "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", 3205 | "license": "MIT" 3206 | }, 3207 | "node_modules/tar-fs": { 3208 | "version": "3.0.8", 3209 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", 3210 | "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", 3211 | "license": "MIT", 3212 | "dependencies": { 3213 | "pump": "^3.0.0", 3214 | "tar-stream": "^3.1.5" 3215 | }, 3216 | "optionalDependencies": { 3217 | "bare-fs": "^4.0.1", 3218 | "bare-path": "^3.0.0" 3219 | } 3220 | }, 3221 | "node_modules/tar-stream": { 3222 | "version": "3.1.7", 3223 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", 3224 | "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", 3225 | "license": "MIT", 3226 | "dependencies": { 3227 | "b4a": "^1.6.4", 3228 | "fast-fifo": "^1.2.0", 3229 | "streamx": "^2.15.0" 3230 | } 3231 | }, 3232 | "node_modules/text-decoder": { 3233 | "version": "1.2.3", 3234 | "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", 3235 | "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", 3236 | "license": "Apache-2.0", 3237 | "dependencies": { 3238 | "b4a": "^1.6.4" 3239 | } 3240 | }, 3241 | "node_modules/tinyexec": { 3242 | "version": "0.3.2", 3243 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", 3244 | "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", 3245 | "license": "MIT" 3246 | }, 3247 | "node_modules/toidentifier": { 3248 | "version": "1.0.1", 3249 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3250 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 3251 | "license": "MIT", 3252 | "engines": { 3253 | "node": ">=0.6" 3254 | } 3255 | }, 3256 | "node_modules/ts-dedent": { 3257 | "version": "2.2.0", 3258 | "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", 3259 | "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", 3260 | "license": "MIT", 3261 | "engines": { 3262 | "node": ">=6.10" 3263 | } 3264 | }, 3265 | "node_modules/tslib": { 3266 | "version": "2.8.1", 3267 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 3268 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 3269 | "license": "0BSD" 3270 | }, 3271 | "node_modules/type-is": { 3272 | "version": "2.0.0", 3273 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", 3274 | "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", 3275 | "license": "MIT", 3276 | "dependencies": { 3277 | "content-type": "^1.0.5", 3278 | "media-typer": "^1.1.0", 3279 | "mime-types": "^3.0.0" 3280 | }, 3281 | "engines": { 3282 | "node": ">= 0.6" 3283 | } 3284 | }, 3285 | "node_modules/typed-query-selector": { 3286 | "version": "2.12.0", 3287 | "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", 3288 | "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", 3289 | "license": "MIT" 3290 | }, 3291 | "node_modules/typescript": { 3292 | "version": "5.8.2", 3293 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", 3294 | "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", 3295 | "devOptional": true, 3296 | "license": "Apache-2.0", 3297 | "bin": { 3298 | "tsc": "bin/tsc", 3299 | "tsserver": "bin/tsserver" 3300 | }, 3301 | "engines": { 3302 | "node": ">=14.17" 3303 | } 3304 | }, 3305 | "node_modules/ufo": { 3306 | "version": "1.5.4", 3307 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", 3308 | "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", 3309 | "license": "MIT" 3310 | }, 3311 | "node_modules/undici-types": { 3312 | "version": "6.20.0", 3313 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 3314 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 3315 | "devOptional": true, 3316 | "license": "MIT" 3317 | }, 3318 | "node_modules/unpipe": { 3319 | "version": "1.0.0", 3320 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3321 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 3322 | "license": "MIT", 3323 | "engines": { 3324 | "node": ">= 0.8" 3325 | } 3326 | }, 3327 | "node_modules/utils-merge": { 3328 | "version": "1.0.1", 3329 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3330 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 3331 | "license": "MIT", 3332 | "engines": { 3333 | "node": ">= 0.4.0" 3334 | } 3335 | }, 3336 | "node_modules/uuid": { 3337 | "version": "9.0.1", 3338 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", 3339 | "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", 3340 | "funding": [ 3341 | "https://github.com/sponsors/broofa", 3342 | "https://github.com/sponsors/ctavan" 3343 | ], 3344 | "license": "MIT", 3345 | "bin": { 3346 | "uuid": "dist/bin/uuid" 3347 | } 3348 | }, 3349 | "node_modules/vary": { 3350 | "version": "1.1.2", 3351 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3352 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 3353 | "license": "MIT", 3354 | "engines": { 3355 | "node": ">= 0.8" 3356 | } 3357 | }, 3358 | "node_modules/vscode-jsonrpc": { 3359 | "version": "8.2.0", 3360 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", 3361 | "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", 3362 | "license": "MIT", 3363 | "engines": { 3364 | "node": ">=14.0.0" 3365 | } 3366 | }, 3367 | "node_modules/vscode-languageserver": { 3368 | "version": "9.0.1", 3369 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", 3370 | "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", 3371 | "license": "MIT", 3372 | "dependencies": { 3373 | "vscode-languageserver-protocol": "3.17.5" 3374 | }, 3375 | "bin": { 3376 | "installServerIntoExtension": "bin/installServerIntoExtension" 3377 | } 3378 | }, 3379 | "node_modules/vscode-languageserver-protocol": { 3380 | "version": "3.17.5", 3381 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", 3382 | "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", 3383 | "license": "MIT", 3384 | "dependencies": { 3385 | "vscode-jsonrpc": "8.2.0", 3386 | "vscode-languageserver-types": "3.17.5" 3387 | } 3388 | }, 3389 | "node_modules/vscode-languageserver-textdocument": { 3390 | "version": "1.0.12", 3391 | "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", 3392 | "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", 3393 | "license": "MIT" 3394 | }, 3395 | "node_modules/vscode-languageserver-types": { 3396 | "version": "3.17.5", 3397 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", 3398 | "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", 3399 | "license": "MIT" 3400 | }, 3401 | "node_modules/vscode-uri": { 3402 | "version": "3.0.8", 3403 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", 3404 | "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", 3405 | "license": "MIT" 3406 | }, 3407 | "node_modules/wrap-ansi": { 3408 | "version": "7.0.0", 3409 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3410 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3411 | "license": "MIT", 3412 | "dependencies": { 3413 | "ansi-styles": "^4.0.0", 3414 | "string-width": "^4.1.0", 3415 | "strip-ansi": "^6.0.0" 3416 | }, 3417 | "engines": { 3418 | "node": ">=10" 3419 | }, 3420 | "funding": { 3421 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3422 | } 3423 | }, 3424 | "node_modules/wrappy": { 3425 | "version": "1.0.2", 3426 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3427 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3428 | "license": "ISC" 3429 | }, 3430 | "node_modules/ws": { 3431 | "version": "8.18.1", 3432 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", 3433 | "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", 3434 | "license": "MIT", 3435 | "engines": { 3436 | "node": ">=10.0.0" 3437 | }, 3438 | "peerDependencies": { 3439 | "bufferutil": "^4.0.1", 3440 | "utf-8-validate": ">=5.0.2" 3441 | }, 3442 | "peerDependenciesMeta": { 3443 | "bufferutil": { 3444 | "optional": true 3445 | }, 3446 | "utf-8-validate": { 3447 | "optional": true 3448 | } 3449 | } 3450 | }, 3451 | "node_modules/y18n": { 3452 | "version": "5.0.8", 3453 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3454 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3455 | "license": "ISC", 3456 | "engines": { 3457 | "node": ">=10" 3458 | } 3459 | }, 3460 | "node_modules/yargs": { 3461 | "version": "17.7.2", 3462 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 3463 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 3464 | "license": "MIT", 3465 | "dependencies": { 3466 | "cliui": "^8.0.1", 3467 | "escalade": "^3.1.1", 3468 | "get-caller-file": "^2.0.5", 3469 | "require-directory": "^2.1.1", 3470 | "string-width": "^4.2.3", 3471 | "y18n": "^5.0.5", 3472 | "yargs-parser": "^21.1.1" 3473 | }, 3474 | "engines": { 3475 | "node": ">=12" 3476 | } 3477 | }, 3478 | "node_modules/yargs-parser": { 3479 | "version": "21.1.1", 3480 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 3481 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 3482 | "license": "ISC", 3483 | "engines": { 3484 | "node": ">=12" 3485 | } 3486 | }, 3487 | "node_modules/yauzl": { 3488 | "version": "2.10.0", 3489 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 3490 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 3491 | "license": "MIT", 3492 | "dependencies": { 3493 | "buffer-crc32": "~0.2.3", 3494 | "fd-slicer": "~1.1.0" 3495 | } 3496 | }, 3497 | "node_modules/zod": { 3498 | "version": "3.24.2", 3499 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", 3500 | "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", 3501 | "license": "MIT", 3502 | "funding": { 3503 | "url": "https://github.com/sponsors/colinhacks" 3504 | } 3505 | }, 3506 | "node_modules/zod-to-json-schema": { 3507 | "version": "3.24.3", 3508 | "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.3.tgz", 3509 | "integrity": "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==", 3510 | "license": "ISC", 3511 | "peerDependencies": { 3512 | "zod": "^3.24.1" 3513 | } 3514 | } 3515 | } 3516 | } 3517 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@peng-shawn/mermaid-mcp-server", 3 | "version": "0.1.4", 4 | "description": "A Model Context Protocol (MCP) server that converts Mermaid diagrams to PNG images", 5 | "main": "dist/index.js", 6 | "type": "module", 7 | "scripts": { 8 | "build": "tsc", 9 | "start": "node dist/index.js", 10 | "release": "scripts/release.sh" 11 | }, 12 | "bin": { 13 | "mermaid-mcp-server": "dist/index.js" 14 | }, 15 | "files": [ 16 | "dist", 17 | "README.md", 18 | "LICENSE" 19 | ], 20 | "keywords": [ 21 | "mermaid", 22 | "diagram", 23 | "mcp", 24 | "model-context-protocol", 25 | "ai", 26 | "visualization" 27 | ], 28 | "author": "Shawn Peng", 29 | "license": "MIT", 30 | "dependencies": { 31 | "@modelcontextprotocol/sdk": "^1.6.1", 32 | "import-meta-resolve": "^4.1.0", 33 | "mermaid": "^11.4.1", 34 | "puppeteer": "^24.3.1" 35 | }, 36 | "devDependencies": { 37 | "@types/node": "^22.13.9", 38 | "typescript": "^5.8.2" 39 | }, 40 | "engines": { 41 | "node": ">=18.0.0" 42 | }, 43 | "repository": { 44 | "type": "git", 45 | "url": "git+https://github.com/peng-shawn/mermaid-mcp-server.git" 46 | }, 47 | "bugs": { 48 | "url": "https://github.com/peng-shawn/mermaid-mcp-server/issues" 49 | }, 50 | "homepage": "https://github.com/peng-shawn/mermaid-mcp-server#readme" 51 | } 52 | -------------------------------------------------------------------------------- /scripts/release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Script to help with the release process 4 | 5 | # Check if a version argument was provided 6 | if [ -z "$1" ]; then 7 | echo "Error: No version specified" 8 | echo "Usage: ./scripts/release.sh " 9 | echo "Examples:" 10 | echo " ./scripts/release.sh 0.1.4 # Set specific version" 11 | echo " ./scripts/release.sh patch # Increment patch version (0.1.3 -> 0.1.4)" 12 | echo " ./scripts/release.sh minor # Increment minor version (0.1.3 -> 0.2.0)" 13 | echo " ./scripts/release.sh major # Increment major version (0.1.3 -> 1.0.0)" 14 | exit 1 15 | fi 16 | 17 | VERSION_ARG=$1 18 | 19 | # Check if the version is a semantic increment or specific version 20 | if [[ "$VERSION_ARG" =~ ^(patch|minor|major)$ ]]; then 21 | # It's a semantic increment 22 | INCREMENT_TYPE=$VERSION_ARG 23 | # Get the current version to display in logs 24 | CURRENT_VERSION=$(grep -o '"version": "[^"]*"' package.json | cut -d'"' -f4) 25 | echo "Using semantic increment: $INCREMENT_TYPE (current version: $CURRENT_VERSION)" 26 | else 27 | # It's a specific version - validate semver format 28 | if ! [[ $VERSION_ARG =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z-]+)?(\+[0-9A-Za-z-]+)?$ ]]; then 29 | echo "Error: Version must follow semantic versioning (e.g., 1.2.3, 1.2.3-beta, etc.)" 30 | echo "Or use one of: patch, minor, major" 31 | exit 1 32 | fi 33 | # Store the specific version 34 | SPECIFIC_VERSION=$VERSION_ARG 35 | echo "Using specific version: $SPECIFIC_VERSION" 36 | fi 37 | 38 | # Check if we're on the main branch 39 | CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) 40 | if [ "$CURRENT_BRANCH" != "main" ]; then 41 | echo "Warning: You are not on the main branch. Current branch: $CURRENT_BRANCH" 42 | read -p "Do you want to continue? (y/n) " -n 1 -r 43 | echo 44 | if [[ ! $REPLY =~ ^[Yy]$ ]]; then 45 | exit 1 46 | fi 47 | fi 48 | 49 | # Check if working directory is clean 50 | if [ -n "$(git status --porcelain)" ]; then 51 | echo "Error: Working directory is not clean. Please commit or stash your changes." 52 | exit 1 53 | fi 54 | 55 | # Pull latest changes 56 | echo "Pulling latest changes from origin..." 57 | git pull origin main 58 | 59 | # Check current versions in files 60 | PACKAGE_VERSION=$(grep -o '"version": "[^"]*"' package.json | cut -d'"' -f4) 61 | PACKAGE_LOCK_VERSION=$(grep -o '"version": "[^"]*"' package-lock.json | head -1 | cut -d'"' -f4) 62 | INDEX_VERSION=$(grep -o 'version: "[^"]*"' index.ts | cut -d'"' -f2) 63 | 64 | echo "Current versions:" 65 | echo "- package.json: $PACKAGE_VERSION" 66 | echo "- package-lock.json: $PACKAGE_LOCK_VERSION" 67 | echo "- index.ts: $INDEX_VERSION" 68 | 69 | # Function to update index.ts version 70 | update_index_version() { 71 | local old_version=$1 72 | local new_version=$2 73 | local commit_msg=$3 74 | 75 | echo "Updating version in index.ts from $old_version to $new_version..." 76 | sed -i '' "s/version: \"$old_version\"/version: \"$new_version\"/" index.ts 77 | git add index.ts 78 | 79 | if [ -n "$commit_msg" ]; then 80 | git commit -m "$commit_msg" 81 | fi 82 | } 83 | 84 | if [ "$PACKAGE_VERSION" != "$PACKAGE_LOCK_VERSION" ] || [ "$PACKAGE_VERSION" != "$INDEX_VERSION" ]; then 85 | echo "Warning: Version mismatch detected between files." 86 | 87 | if [ -n "$SPECIFIC_VERSION" ]; then 88 | echo "Will update all files to version: $SPECIFIC_VERSION" 89 | else 90 | echo "Will update all files using increment: $INCREMENT_TYPE" 91 | fi 92 | 93 | read -p "Do you want to continue? (y/n) " -n 1 -r 94 | echo 95 | if [[ ! $REPLY =~ ^[Yy]$ ]]; then 96 | exit 1 97 | fi 98 | fi 99 | 100 | # Handle version updates based on increment type or specific version 101 | if [ -n "$INCREMENT_TYPE" ]; then 102 | # For semantic increments 103 | echo "Incrementing version ($INCREMENT_TYPE)..." 104 | 105 | # Use npm version to increment the version 106 | npm version $INCREMENT_TYPE --no-git-tag-version 107 | 108 | # Get the new version 109 | NEW_VERSION=$(grep -o '"version": "[^"]*"' package.json | cut -d'"' -f4) 110 | 111 | # Update index.ts with the new version 112 | update_index_version "$INDEX_VERSION" "$NEW_VERSION" 113 | 114 | # Commit all changes and create tag 115 | git add package.json package-lock.json 116 | git commit -m "chore: release version $NEW_VERSION" 117 | git tag -a "v$NEW_VERSION" -m "Version $NEW_VERSION" 118 | else 119 | # For specific version 120 | # Use npm version to update package.json and package-lock.json without git operations 121 | echo "Updating version in package.json and package-lock.json..." 122 | npm version $SPECIFIC_VERSION --no-git-tag-version 123 | 124 | # Update index.ts 125 | update_index_version "$INDEX_VERSION" "$SPECIFIC_VERSION" 126 | 127 | # Commit all changes and create tag 128 | git add package.json package-lock.json 129 | git commit -m "chore: release version $SPECIFIC_VERSION" 130 | git tag -a "v$SPECIFIC_VERSION" -m "Version $SPECIFIC_VERSION" 131 | fi 132 | 133 | # Get the final version for pushing the tag 134 | FINAL_VERSION=$(grep -o '"version": "[^"]*"' package.json | cut -d'"' -f4) 135 | 136 | # Push changes and tag to remote 137 | echo "Pushing changes and tag to remote..." 138 | git push origin main 139 | git push origin v$FINAL_VERSION 140 | 141 | echo "Release process completed for version $FINAL_VERSION" 142 | echo "The GitHub workflow will now build and publish the package to npm" 143 | echo "Check the Actions tab in your GitHub repository for progress" -------------------------------------------------------------------------------- /smithery.yaml: -------------------------------------------------------------------------------- 1 | # Smithery configuration file: https://smithery.ai/docs/config#smitheryyaml 2 | 3 | startCommand: 4 | type: stdio 5 | configSchema: 6 | # JSON Schema defining the configuration options for the MCP. 7 | type: object 8 | required: [] 9 | properties: 10 | contentImageSupported: 11 | type: boolean 12 | default: true 13 | description: Set to true if images should be returned directly in the response. 14 | Set to false if images should be saved to disk, requiring 'name' and 15 | 'folder' parameters. 16 | commandFunction: 17 | # A JS function that produces the CLI command based on the given config to start the MCP on stdio. 18 | |- 19 | (config) => ({ 20 | command: 'node', 21 | args: ['dist/index.js'], 22 | env: { 23 | CONTENT_IMAGE_SUPPORTED: config.contentImageSupported ? 'true' : 'false', 24 | PUPPETEER_EXECUTABLE_PATH: '/usr/bin/chromium' 25 | } 26 | }) 27 | exampleConfig: 28 | contentImageSupported: true 29 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "Node16", 5 | "moduleResolution": "Node16", 6 | "outDir": "./dist", 7 | "rootDir": ".", 8 | "strict": true, 9 | "esModuleInterop": true, 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true 12 | }, 13 | "include": ["index.ts"] 14 | } --------------------------------------------------------------------------------