├── .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 | [](https://smithery.ai/server/@peng-shawn/mermaid-mcp-server)
209 |
210 |
211 |
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 | }
--------------------------------------------------------------------------------