alaselababatunde commited on
Commit
72372f3
·
1 Parent(s): d1a0ab0
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. Dockerfile +20 -4
  2. README.md +0 -11
  3. {frontend/src/assets → assets}/logo.png +0 -0
  4. chat_service.py +0 -70
  5. Internet-banking-manual-updated-may-15-2020.pdf → data/Internet-banking-manual-updated-may-15-2020.pdf +0 -0
  6. Product-manual.pdf → data/Product-manual.pdf +0 -0
  7. UBA-Service-Charges.pdf → data/UBA-Service-Charges.pdf +0 -0
  8. docker-compose.yml +6 -22
  9. frontend/.gitignore +0 -24
  10. frontend/Dockerfile +0 -28
  11. frontend/README.md +0 -16
  12. frontend/eslint.config.js +0 -29
  13. frontend/index.html +0 -13
  14. frontend/nginx.conf +0 -19
  15. frontend/package-lock.json +0 -0
  16. frontend/package.json +0 -28
  17. frontend/public/vite.svg +0 -1
  18. frontend/src/App.css +0 -42
  19. frontend/src/App.jsx +87 -70
  20. frontend/src/assets/react.svg +0 -1
  21. frontend/src/index.css +188 -80
  22. frontend/src/main.jsx +7 -7
  23. frontend/vite.config.js +14 -2
  24. llm.py +51 -0
  25. logo.png +0 -0
  26. main.py +65 -18
  27. memory.py +34 -0
  28. node_modules/.package-lock.json +1246 -0
  29. node_modules/@types/debug/LICENSE +21 -0
  30. node_modules/@types/debug/README.md +69 -0
  31. node_modules/@types/debug/index.d.ts +50 -0
  32. node_modules/@types/debug/package.json +57 -0
  33. node_modules/@types/estree-jsx/LICENSE +21 -0
  34. node_modules/@types/estree-jsx/README.md +15 -0
  35. node_modules/@types/estree-jsx/index.d.ts +114 -0
  36. node_modules/@types/estree-jsx/package.json +27 -0
  37. node_modules/@types/estree/LICENSE +21 -0
  38. node_modules/@types/estree/README.md +15 -0
  39. node_modules/@types/estree/flow.d.ts +167 -0
  40. node_modules/@types/estree/index.d.ts +694 -0
  41. node_modules/@types/estree/package.json +27 -0
  42. node_modules/@types/hast/LICENSE +21 -0
  43. node_modules/@types/hast/README.md +15 -0
  44. node_modules/@types/hast/index.d.ts +282 -0
  45. node_modules/@types/hast/package.json +42 -0
  46. node_modules/@types/mdast/LICENSE +21 -0
  47. node_modules/@types/mdast/README.md +15 -0
  48. node_modules/@types/mdast/index.d.ts +1123 -0
  49. node_modules/@types/mdast/package.json +47 -0
  50. node_modules/@types/ms/LICENSE +21 -0
Dockerfile CHANGED
@@ -1,11 +1,27 @@
1
- FROM python:3.10-slim
 
 
 
 
 
 
2
 
 
 
3
  WORKDIR /app
4
 
 
 
 
 
 
5
  COPY requirements.txt .
6
- RUN pip install --no-cache-dir torch --index-url https://download.pytorch.org/whl/cpu && \
7
- pip install --no-cache-dir -r requirements.txt
8
 
9
  COPY . .
 
 
 
 
10
 
11
- CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
 
1
+ # Build Frontend
2
+ FROM node:20-slim AS frontend-build
3
+ WORKDIR /app/frontend
4
+ COPY frontend/package*.json ./
5
+ RUN npm install
6
+ COPY frontend/ ./
7
+ RUN npm run build
8
 
9
+ # Run Backend
10
+ FROM python:3.10-slim
11
  WORKDIR /app
12
 
13
+ # Install system dependencies for sentence-transformers/chromadb
14
+ RUN apt-get update && apt-get install -y \
15
+ build-essential \
16
+ && rm -rf /var/lib/apt/lists/*
17
+
18
  COPY requirements.txt .
19
+ RUN pip install --no-cache-dir -r requirements.txt
 
20
 
21
  COPY . .
22
+ # Copy built frontend from stage 1
23
+ COPY --from=frontend-build /app/frontend/dist /app/frontend/dist
24
+
25
+ EXPOSE 7860
26
 
27
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
README.md DELETED
@@ -1,11 +0,0 @@
1
- ---
2
- title: UBA AI Support
3
- emoji: 🏆
4
- colorFrom: green
5
- colorTo: blue
6
- sdk: docker
7
- pinned: false
8
- license: apache-2.0
9
- ---
10
-
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
{frontend/src/assets → assets}/logo.png RENAMED
File without changes
chat_service.py DELETED
@@ -1,70 +0,0 @@
1
- from fastapi import APIRouter, Depends, HTTPException, Body
2
- from fastapi.responses import StreamingResponse
3
- from pydantic import BaseModel
4
- import os
5
- import json
6
- import asyncio
7
- from typing import Dict, List
8
- import uuid
9
- import logging
10
-
11
- router = APIRouter()
12
-
13
- # In-memory session storage
14
- sessions: Dict[str, List[Dict]] = {}
15
-
16
- # Mock XAI Client if key not present
17
- XAI_API_KEY = os.getenv("XAI_API_KEY")
18
-
19
- class ChatRequest(BaseModel):
20
- session_id: str
21
- message: str
22
-
23
- def get_session_history(session_id: str):
24
- if session_id not in sessions:
25
- sessions[session_id] = [
26
- {"role": "system", "content": "You are UBA AI Support, a professional customer service agent for UBA Bank. You are helpful, calm, and professional. Never say you are an AI."}
27
- ]
28
- return sessions[session_id]
29
-
30
- async def mock_xai_stream(messages):
31
- """Mock streaming response generator"""
32
- response = "Thank you for contacting UBA Support. I can help you with transfers, loans, and account services. How may I assist you today?"
33
- for word in response.split():
34
- yield f"data: {json.dumps({'content': word + ' '})}\n\n"
35
- await asyncio.sleep(0.1)
36
- yield "data: [DONE]\n\n"
37
-
38
- async def real_xai_stream(messages):
39
- """Real XAI streaming response generator (Placeholder)"""
40
- # TODO: Implement actual XAI client call
41
- # This is a placeholder to show where the real logic goes
42
- yield f"data: {json.dumps({'content': 'I am connecting to XAI... (Feature coming soon)'})}\n\n"
43
- yield "data: [DONE]\n\n"
44
-
45
- @router.post("/chat")
46
- async def chat_endpoint(request: ChatRequest):
47
- history = get_session_history(request.session_id)
48
- history.append({"role": "user", "content": request.message})
49
-
50
- # RAG Retrieval
51
- from rag_service import rag_service
52
- context = rag_service.retrieve(request.message)
53
- if context:
54
- system_update = f"Relevant Context from UBA Database:\n{context}\n\nUse this context to answer the user if relevant."
55
- # Append context as specialized system message or user context
56
- history.append({"role": "system", "content": system_update})
57
-
58
- async def event_generator():
59
- stream_func = real_xai_stream if XAI_API_KEY else mock_xai_stream
60
- full_response = ""
61
- async for chunk in stream_func(history):
62
- if "content" in chunk:
63
- # Extract content locally to save to history (simplified)
64
- pass
65
- yield chunk
66
-
67
- # Save assistant response to history (simplified)
68
- # history.append({"role": "assistant", "content": full_response})
69
-
70
- return StreamingResponse(event_generator(), media_type="text/event-stream")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Internet-banking-manual-updated-may-15-2020.pdf → data/Internet-banking-manual-updated-may-15-2020.pdf RENAMED
File without changes
Product-manual.pdf → data/Product-manual.pdf RENAMED
File without changes
UBA-Service-Charges.pdf → data/UBA-Service-Charges.pdf RENAMED
File without changes
docker-compose.yml CHANGED
@@ -1,26 +1,10 @@
1
  services:
2
- backend:
3
  build: .
4
  ports:
5
- - "8000:8000"
 
 
6
  volumes:
7
- - .:/app
8
- environment:
9
- - XAI_API_KEY=\${XAI_API_KEY}
10
- networks:
11
- - uba_network
12
-
13
- frontend:
14
- build:
15
- context: ./frontend
16
- dockerfile: Dockerfile
17
- ports:
18
- - "3000:80"
19
- depends_on:
20
- - backend
21
- networks:
22
- - uba_network
23
-
24
- networks:
25
- uba_network:
26
- driver: bridge
 
1
  services:
2
+ uba-ai-support:
3
  build: .
4
  ports:
5
+ - "7860:7860"
6
+ env_file:
7
+ - .env
8
  volumes:
9
+ - ./chroma_db:/app/chroma_db
10
+ restart: always
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/.gitignore DELETED
@@ -1,24 +0,0 @@
1
- # Logs
2
- logs
3
- *.log
4
- npm-debug.log*
5
- yarn-debug.log*
6
- yarn-error.log*
7
- pnpm-debug.log*
8
- lerna-debug.log*
9
-
10
- node_modules
11
- dist
12
- dist-ssr
13
- *.local
14
-
15
- # Editor directories and files
16
- .vscode/*
17
- !.vscode/extensions.json
18
- .idea
19
- .DS_Store
20
- *.suo
21
- *.ntvs*
22
- *.njsproj
23
- *.sln
24
- *.sw?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/Dockerfile DELETED
@@ -1,28 +0,0 @@
1
- FROM node:18-alpine AS builder
2
-
3
- WORKDIR /app
4
-
5
- # Copy package files
6
- COPY package*.json ./
7
-
8
- # Install dependencies
9
- RUN npm ci
10
-
11
- # Copy source files
12
- COPY . .
13
-
14
- # Build the app
15
- RUN npm run build
16
-
17
- # Production stage
18
- FROM nginx:alpine
19
-
20
- # Copy built files to nginx
21
- COPY --from=builder /app/dist /usr/share/nginx/html
22
-
23
- # Copy nginx configuration
24
- COPY nginx.conf /etc/nginx/conf.d/default.conf
25
-
26
- EXPOSE 80
27
-
28
- CMD ["nginx", "-g", "daemon off;"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/README.md DELETED
@@ -1,16 +0,0 @@
1
- # React + Vite
2
-
3
- This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
4
-
5
- Currently, two official plugins are available:
6
-
7
- - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
8
- - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
9
-
10
- ## React Compiler
11
-
12
- The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
13
-
14
- ## Expanding the ESLint configuration
15
-
16
- If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/eslint.config.js DELETED
@@ -1,29 +0,0 @@
1
- import js from '@eslint/js'
2
- import globals from 'globals'
3
- import reactHooks from 'eslint-plugin-react-hooks'
4
- import reactRefresh from 'eslint-plugin-react-refresh'
5
- import { defineConfig, globalIgnores } from 'eslint/config'
6
-
7
- export default defineConfig([
8
- globalIgnores(['dist']),
9
- {
10
- files: ['**/*.{js,jsx}'],
11
- extends: [
12
- js.configs.recommended,
13
- reactHooks.configs.flat.recommended,
14
- reactRefresh.configs.vite,
15
- ],
16
- languageOptions: {
17
- ecmaVersion: 2020,
18
- globals: globals.browser,
19
- parserOptions: {
20
- ecmaVersion: 'latest',
21
- ecmaFeatures: { jsx: true },
22
- sourceType: 'module',
23
- },
24
- },
25
- rules: {
26
- 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
27
- },
28
- },
29
- ])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/index.html DELETED
@@ -1,13 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>frontend</title>
8
- </head>
9
- <body>
10
- <div id="root"></div>
11
- <script type="module" src="/src/main.jsx"></script>
12
- </body>
13
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/nginx.conf DELETED
@@ -1,19 +0,0 @@
1
- server {
2
- listen 80;
3
- server_name localhost;
4
- root /usr/share/nginx/html;
5
- index index.html;
6
-
7
- location / {
8
- try_files $uri $uri/ /index.html;
9
- }
10
-
11
- location /api {
12
- proxy_pass http://backend:8000;
13
- proxy_http_version 1.1;
14
- proxy_set_header Upgrade $http_upgrade;
15
- proxy_set_header Connection 'upgrade';
16
- proxy_set_header Host $host;
17
- proxy_cache_bypass $http_upgrade;
18
- }
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/package-lock.json DELETED
The diff for this file is too large to render. See raw diff
 
frontend/package.json DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "name": "frontend",
3
- "private": true,
4
- "version": "0.0.0",
5
- "type": "module",
6
- "scripts": {
7
- "dev": "vite",
8
- "build": "vite build",
9
- "lint": "eslint .",
10
- "preview": "vite preview"
11
- },
12
- "dependencies": {
13
- "react": "^19.2.0",
14
- "react-dom": "^19.2.0",
15
- "uuid": "^13.0.0"
16
- },
17
- "devDependencies": {
18
- "@eslint/js": "^9.39.1",
19
- "@types/react": "^19.2.5",
20
- "@types/react-dom": "^19.2.3",
21
- "@vitejs/plugin-react": "^5.1.1",
22
- "eslint": "^9.39.1",
23
- "eslint-plugin-react-hooks": "^7.0.1",
24
- "eslint-plugin-react-refresh": "^0.4.24",
25
- "globals": "^16.5.0",
26
- "vite": "^7.2.4"
27
- }
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/public/vite.svg DELETED
frontend/src/App.css DELETED
@@ -1,42 +0,0 @@
1
- #root {
2
- max-width: 1280px;
3
- margin: 0 auto;
4
- padding: 2rem;
5
- text-align: center;
6
- }
7
-
8
- .logo {
9
- height: 6em;
10
- padding: 1.5em;
11
- will-change: filter;
12
- transition: filter 300ms;
13
- }
14
- .logo:hover {
15
- filter: drop-shadow(0 0 2em #646cffaa);
16
- }
17
- .logo.react:hover {
18
- filter: drop-shadow(0 0 2em #61dafbaa);
19
- }
20
-
21
- @keyframes logo-spin {
22
- from {
23
- transform: rotate(0deg);
24
- }
25
- to {
26
- transform: rotate(360deg);
27
- }
28
- }
29
-
30
- @media (prefers-reduced-motion: no-preference) {
31
- a:nth-of-type(2) .logo {
32
- animation: logo-spin infinite 20s linear;
33
- }
34
- }
35
-
36
- .card {
37
- padding: 2em;
38
- }
39
-
40
- .read-the-docs {
41
- color: #888;
42
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
frontend/src/App.jsx CHANGED
@@ -1,60 +1,53 @@
1
- import { useState, useRef, useEffect } from 'react';
2
- import ubaLogo from './assets/logo.png';
3
- import { v4 as uuidv4 } from 'uuid';
4
 
5
- function App() {
6
  const [messages, setMessages] = useState([
7
  {
8
  role: 'assistant',
9
- content: 'Hello! Welcome to UBA Support. I can help you with account services, transfers, loans, and more. How can I assist you today?'
 
10
  }
11
  ]);
12
  const [input, setInput] = useState('');
13
  const [isLoading, setIsLoading] = useState(false);
14
- const messagesEndRef = useRef(null);
15
- const [sessionId] = useState(() => localStorage.getItem('uba_session_id') || uuidv4());
16
 
17
  useEffect(() => {
18
- localStorage.setItem('uba_session_id', sessionId);
19
- }, [sessionId]);
20
-
21
- const scrollToBottom = () => {
22
- messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
23
- };
24
-
25
- useEffect(() => {
26
- scrollToBottom();
27
- }, [messages]);
28
 
29
  const handleSubmit = async (e) => {
30
  e.preventDefault();
31
  if (!input.trim() || isLoading) return;
32
 
33
- const userMessage = input.trim();
 
34
  setInput('');
35
- setMessages(prev => [...prev, { role: 'user', content: userMessage }]);
36
  setIsLoading(true);
37
 
38
  try {
39
- const response = await fetch('http://localhost:8000/api/chat', {
40
  method: 'POST',
41
- headers: {
42
- 'Content-Type': 'application/json',
43
- },
44
- body: JSON.stringify({
45
- session_id: sessionId,
46
- message: userMessage
47
- }),
48
  });
49
 
50
- if (!response.ok) throw new Error('Network response was not ok');
51
 
52
  const reader = response.body.getReader();
53
  const decoder = new TextDecoder();
54
- let assistantMessage = '';
 
55
 
56
- // Add placeholder for assistant message
57
- setMessages(prev => [...prev, { role: 'assistant', content: '' }]);
58
 
59
  while (true) {
60
  const { done, value } = await reader.read();
@@ -65,70 +58,94 @@ function App() {
65
 
66
  for (const line of lines) {
67
  if (line.startsWith('data: ')) {
68
- const data = line.slice(6);
69
- if (data === '[DONE]') continue;
 
 
 
 
70
 
71
  try {
72
- const parsed = JSON.parse(data);
73
- if (parsed.content) {
74
- assistantMessage += parsed.content;
75
- setMessages(prev => {
76
- const newMessages = [...prev];
77
- newMessages[newMessages.length - 1].content = assistantMessage;
78
- return newMessages;
79
- });
 
 
 
 
80
  }
81
  } catch (e) {
82
- console.error('Error parsing JSON:', e);
83
  }
84
  }
85
  }
86
  }
87
  } catch (error) {
88
- console.error('Error:', error);
89
- setMessages(prev => [...prev, { role: 'assistant', content: 'I apologize, but I am having trouble connecting to the server. Please check your connection and try again.' }]);
90
- } finally {
 
 
 
91
  setIsLoading(false);
92
  }
93
  };
94
 
95
  return (
96
  <div className="app-container">
97
- <header className="uba-header">
98
- <img src={ubaLogo} alt="UBA Logo" className="uba-logo" />
99
- <h1>UBA AI Support</h1>
 
 
100
  </header>
101
 
102
- <main className="chat-container">
103
- <div className="messages-area">
104
- {messages.map((msg, index) => (
105
- <div key={index} className={`message-bubble message-${msg.role}`}>
106
- {msg.content.split('\n').map((line, i) => (
107
- <p key={i} style={{ margin: line.trim() === '' ? '10px 0' : '5px 0' }}>
108
- {line}
109
- </p>
110
- ))}
111
  </div>
112
- ))}
113
- <div ref={messagesEndRef} />
114
- </div>
115
-
116
- <form className="input-area" onSubmit={handleSubmit}>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  <input
118
  type="text"
119
- className="chat-input"
120
  value={input}
121
  onChange={(e) => setInput(e.target.value)}
122
- placeholder="Type your message here..."
123
  disabled={isLoading}
124
  />
125
- <button type="submit" className="send-button" disabled={isLoading || !input.trim()}>
126
- {isLoading ? '...' : '➤'}
127
- </button>
128
- </form>
129
- </main>
130
  </div>
131
  );
132
- }
133
 
134
  export default App;
 
1
+ import React, { useState, useEffect, useRef } from 'react';
2
+ import ReactMarkdown from 'react-markdown';
3
+ import { Send, User, Bot, Loader2 } from 'lucide-react';
4
 
5
+ const App = () => {
6
  const [messages, setMessages] = useState([
7
  {
8
  role: 'assistant',
9
+ content: "Hello! I am UBA AI Support. How can I assist you with your banking needs today?",
10
+ id: 'welcome'
11
  }
12
  ]);
13
  const [input, setInput] = useState('');
14
  const [isLoading, setIsLoading] = useState(false);
15
+ const [sessionId, setSessionId] = useState(localStorage.getItem('uba_session_id') || null);
16
+ const scrollRef = useRef(null);
17
 
18
  useEffect(() => {
19
+ if (scrollRef.current) {
20
+ scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
21
+ }
22
+ }, [messages, isLoading]);
 
 
 
 
 
 
23
 
24
  const handleSubmit = async (e) => {
25
  e.preventDefault();
26
  if (!input.trim() || isLoading) return;
27
 
28
+ const userMessage = { role: 'user', content: input, id: Date.now() };
29
+ setMessages(prev => [...prev, userMessage]);
30
  setInput('');
 
31
  setIsLoading(true);
32
 
33
  try {
34
+ const response = await fetch('/chat', {
35
  method: 'POST',
36
+ headers: { 'Content-Type': 'application/json' },
37
+ body: json.stringify({
38
+ message: input,
39
+ session_id: sessionId
40
+ })
 
 
41
  });
42
 
43
+ if (!response.ok) throw new Error('Failed to connect to server');
44
 
45
  const reader = response.body.getReader();
46
  const decoder = new TextDecoder();
47
+ let assistantMsgId = Date.now() + 1;
48
+ let assistantContent = '';
49
 
50
+ setMessages(prev => [...prev, { role: 'assistant', content: '', id: assistantMsgId }]);
 
51
 
52
  while (true) {
53
  const { done, value } = await reader.read();
 
58
 
59
  for (const line of lines) {
60
  if (line.startsWith('data: ')) {
61
+ const dataStr = line.replace('data: ', '').trim();
62
+
63
+ if (dataStr === '[DONE]') {
64
+ setIsLoading(false);
65
+ continue;
66
+ }
67
 
68
  try {
69
+ const data = JSON.parse(dataStr);
70
+
71
+ if (data.session_id && !sessionId) {
72
+ setSessionId(data.session_id);
73
+ localStorage.setItem('uba_session_id', data.session_id);
74
+ }
75
+
76
+ if (data.content) {
77
+ assistantContent += data.content;
78
+ setMessages(prev => prev.map(msg =>
79
+ msg.id === assistantMsgId ? { ...msg, content: assistantContent } : msg
80
+ ));
81
  }
82
  } catch (e) {
83
+ console.error('Error parsing SSE data', e);
84
  }
85
  }
86
  }
87
  }
88
  } catch (error) {
89
+ console.error('Chat error:', error);
90
+ setMessages(prev => [...prev, {
91
+ role: 'assistant',
92
+ content: "I'm sorry, I'm experiencing some technical difficulties. Please try again later.",
93
+ id: Date.now() + 2
94
+ }]);
95
  setIsLoading(false);
96
  }
97
  };
98
 
99
  return (
100
  <div className="app-container">
101
+ <header>
102
+ <div className="header-logo">
103
+ <img src="/assets/logo.png" alt="UBA Logo" />
104
+ <span className="header-title">UBA AI Support</span>
105
+ </div>
106
  </header>
107
 
108
+ <div className="chat-window" ref={scrollRef}>
109
+ {messages.map((msg) => (
110
+ <div key={msg.id} className={`message ${msg.role}`}>
111
+ <div className="message-sender">
112
+ {msg.role === 'user' ? 'You' : 'UBA Support'}
 
 
 
 
113
  </div>
114
+ <div className="message-bubble">
115
+ <div className="message-content">
116
+ <ReactMarkdown>{msg.content}</ReactMarkdown>
117
+ </div>
118
+ </div>
119
+ </div>
120
+ ))}
121
+ {isLoading && (
122
+ <div className="message assistant">
123
+ <div className="message-sender">UBA Support</div>
124
+ <div className="typing-indicator">
125
+ <div className="dot"></div>
126
+ <div className="dot"></div>
127
+ <div className="dot"></div>
128
+ </div>
129
+ </div>
130
+ )}
131
+ </div>
132
+
133
+ <form className="input-area" onSubmit={handleSubmit}>
134
+ <div className="input-container">
135
  <input
136
  type="text"
 
137
  value={input}
138
  onChange={(e) => setInput(e.target.value)}
139
+ placeholder="Ask about UBA services, accounts, or support..."
140
  disabled={isLoading}
141
  />
142
+ </div>
143
+ <button type="submit" className="send-btn" disabled={isLoading || !input.trim()}>
144
+ {isLoading ? <Loader2 className="animate-spin" /> : <Send size={20} />}
145
+ </button>
146
+ </form>
147
  </div>
148
  );
149
+ };
150
 
151
  export default App;
frontend/src/assets/react.svg DELETED
frontend/src/index.css CHANGED
@@ -1,142 +1,250 @@
 
 
1
  :root {
2
- --uba-red: #B81104;
3
- --uba-white: #FFFFFF;
4
- --uba-gray: #F5F5F5;
5
- --text-dark: #333333;
 
 
 
 
 
 
6
  }
7
 
8
- body {
 
9
  margin: 0;
10
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
11
- -webkit-font-smoothing: antialiased;
12
- -moz-osx-font-smoothing: grayscale;
13
- background-color: var(--uba-gray);
14
- color: var(--text-dark);
15
  }
16
 
17
- .uba-header {
18
- background-color: var(--uba-red);
19
- color: var(--uba-white);
20
- padding: 1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  display: flex;
22
  align-items: center;
23
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
24
  position: sticky;
25
  top: 0;
26
- z-index: 100;
27
  }
28
 
29
- .uba-logo {
30
  height: 40px;
31
- margin-right: 1rem;
32
- background-color: white;
33
- padding: 5px;
34
- border-radius: 4px;
35
  }
36
 
37
- .chat-container {
38
- max-width: 800px;
39
- margin: 2rem auto;
40
- background-color: var(--uba-white);
41
- border-radius: 8px;
42
- box-shadow: 0 4px 6px rgba(0,0,0,0.05);
43
- display: flex;
44
- flex-direction: column;
45
- height: 80vh;
46
- overflow: hidden;
47
  }
48
 
49
- .messages-area {
50
  flex: 1;
51
- padding: 1.5rem;
52
  overflow-y: auto;
 
53
  display: flex;
54
  flex-direction: column;
55
- gap: 1rem;
56
- background-image: url('data:image/svg+xml;utf8,<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><g fill="%23f7f7f7" fill-rule="evenodd"><path d="M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z"/></g></svg>');
57
  }
58
 
59
- .message-bubble {
 
 
60
  max-width: 80%;
61
- padding: 1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  border-radius: 12px;
63
- line-height: 1.5;
 
64
  position: relative;
65
- word-wrap: break-word;
66
  }
67
 
68
- .message-user {
69
- align-self: flex-end;
70
- background-color: var(--uba-white);
71
- color: var(--text-dark);
72
- border: 1px solid #e0e0e0;
73
  border-bottom-right-radius: 2px;
74
  }
75
 
76
- .message-assistant {
77
- align-self: flex-start;
78
- background-color: #FFF5F5; /* Light Red tint */
79
- color: var(--text-dark);
80
- border: 1px solid #ffe0e0;
81
  border-bottom-left-radius: 2px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  }
83
 
84
  .input-area {
85
- padding: 1rem;
86
- background-color: var(--uba-white);
87
- border-top: 1px solid #eee;
88
  display: flex;
89
- gap: 10px;
90
  }
91
 
92
- .chat-input {
93
  flex: 1;
94
- padding: 12px;
95
- border: 1px solid #ddd;
96
- border-radius: 24px;
 
 
 
 
 
97
  font-size: 1rem;
98
  outline: none;
99
- transition: border-color 0.2s;
 
100
  }
101
 
102
- .chat-input:focus {
103
- border-color: var(--uba-red);
 
104
  }
105
 
106
- .send-button {
107
- background-color: var(--uba-red);
108
- color: var(--uba-white);
109
  border: none;
110
- width: 48px;
111
- height: 48px;
112
  border-radius: 50%;
113
- cursor: pointer;
114
  display: flex;
115
  align-items: center;
116
  justify-content: center;
117
- transition: background-color 0.2s;
 
 
 
 
 
118
  }
119
 
120
- .send-button:hover {
121
- background-color: #960e03;
122
  }
123
 
124
- .send-button:disabled {
125
- background-color: #ccc;
126
  cursor: not-allowed;
127
  }
128
 
129
- /* Scrollbar styling */
130
- .messages-area::-webkit-scrollbar {
131
- width: 8px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  }
133
- .messages-area::-webkit-scrollbar-track {
134
- background: #f1f1f1;
 
 
 
 
 
 
 
135
  }
136
- .messages-area::-webkit-scrollbar-thumb {
137
- background: #ccc;
 
 
138
  border-radius: 4px;
 
139
  }
140
- .messages-area::-webkit-scrollbar-thumb:hover {
141
- background: #bbb;
 
 
 
 
 
142
  }
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
2
+
3
  :root {
4
+ --primary: #B81104; /* Milano Red */
5
+ --primary-hover: #9a0e03;
6
+ --secondary: #FFFFFF;
7
+ --bg-color: #f8f9fa;
8
+ --text-main: #212529;
9
+ --text-muted: #6c757d;
10
+ --border-color: #dee2e6;
11
+ --bubble-user: #B81104;
12
+ --bubble-bot: #FFFFFF;
13
+ --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
14
  }
15
 
16
+ * {
17
+ box-sizing: border-box;
18
  margin: 0;
19
+ padding: 0;
 
 
 
 
20
  }
21
 
22
+ body {
23
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
24
+ background-color: var(--bg-color);
25
+ color: var(--text-main);
26
+ height: 100vh;
27
+ display: flex;
28
+ flex-direction: column;
29
+ }
30
+
31
+ #root {
32
+ height: 100%;
33
+ display: flex;
34
+ flex-direction: column;
35
+ }
36
+
37
+ .app-container {
38
+ max-width: 900px;
39
+ margin: 0 auto;
40
+ width: 100%;
41
+ height: 100%;
42
+ display: flex;
43
+ flex-direction: column;
44
+ background: white;
45
+ box-shadow: var(--shadow);
46
+ }
47
+
48
+ header {
49
+ padding: 1rem 2rem;
50
+ background-color: var(--secondary);
51
+ border-bottom: 2px solid var(--primary);
52
  display: flex;
53
  align-items: center;
54
+ justify-content: space-between;
55
  position: sticky;
56
  top: 0;
57
+ z-index: 10;
58
  }
59
 
60
+ .header-logo {
61
  height: 40px;
62
+ display: flex;
63
+ align-items: center;
64
+ gap: 12px;
 
65
  }
66
 
67
+ .header-logo img {
68
+ height: 100%;
69
+ object-fit: contain;
70
+ }
71
+
72
+ .header-title {
73
+ font-weight: 700;
74
+ color: var(--primary);
75
+ font-size: 1.25rem;
 
76
  }
77
 
78
+ .chat-window {
79
  flex: 1;
 
80
  overflow-y: auto;
81
+ padding: 2rem;
82
  display: flex;
83
  flex-direction: column;
84
+ gap: 1.5rem;
85
+ background: #fdfdfd;
86
  }
87
 
88
+ .message {
89
+ display: flex;
90
+ flex-direction: column;
91
  max-width: 80%;
92
+ animation: fadeIn 0.3s ease;
93
+ }
94
+
95
+ @keyframes fadeIn {
96
+ from { opacity: 0; transform: translateY(10px); }
97
+ to { opacity: 1; transform: translateY(0); }
98
+ }
99
+
100
+ .message.user {
101
+ align-self: flex-end;
102
+ }
103
+
104
+ .message.assistant {
105
+ align-self: flex-start;
106
+ }
107
+
108
+ .message-bubble {
109
+ padding: 1rem 1.25rem;
110
  border-radius: 12px;
111
+ line-height: 1.6;
112
+ font-size: 1rem;
113
  position: relative;
 
114
  }
115
 
116
+ .user .message-bubble {
117
+ background-color: var(--bubble-user);
118
+ color: white;
 
 
119
  border-bottom-right-radius: 2px;
120
  }
121
 
122
+ .assistant .message-bubble {
123
+ background-color: var(--bubble-bot);
124
+ color: var(--text-main);
125
+ border: 1px solid var(--border-color);
 
126
  border-bottom-left-radius: 2px;
127
+ box-shadow: 0 2px 5px rgba(0,0,0,0.05);
128
+ }
129
+
130
+ .message-sender {
131
+ font-size: 0.75rem;
132
+ font-weight: 600;
133
+ margin-bottom: 4px;
134
+ color: var(--text-muted);
135
+ }
136
+
137
+ .message-content p {
138
+ margin-bottom: 0.75rem;
139
+ }
140
+
141
+ .message-content p:last-child {
142
+ margin-bottom: 0;
143
  }
144
 
145
  .input-area {
146
+ padding: 1.5rem 2rem;
147
+ background: white;
148
+ border-top: 1px solid var(--border-color);
149
  display: flex;
150
+ gap: 1rem;
151
  }
152
 
153
+ .input-container {
154
  flex: 1;
155
+ position: relative;
156
+ }
157
+
158
+ input {
159
+ width: 100%;
160
+ padding: 1rem 1.25rem;
161
+ border: 1px solid var(--border-color);
162
+ border-radius: 30px;
163
  font-size: 1rem;
164
  outline: none;
165
+ transition: border-color 0.2s, box-shadow 0.2s;
166
+ font-family: inherit;
167
  }
168
 
169
+ input:focus {
170
+ border-color: var(--primary);
171
+ box-shadow: 0 0 0 3px rgba(184, 17, 4, 0.1);
172
  }
173
 
174
+ button.send-btn {
175
+ background-color: var(--primary);
176
+ color: white;
177
  border: none;
178
+ width: 50px;
179
+ height: 50px;
180
  border-radius: 50%;
 
181
  display: flex;
182
  align-items: center;
183
  justify-content: center;
184
+ cursor: pointer;
185
+ transition: background-color 0.2s, transform 0.1s;
186
+ }
187
+
188
+ button.send-btn:hover {
189
+ background-color: var(--primary-hover);
190
  }
191
 
192
+ button.send-btn:active {
193
+ transform: scale(0.95);
194
  }
195
 
196
+ button.send-btn:disabled {
197
+ background-color: var(--border-color);
198
  cursor: not-allowed;
199
  }
200
 
201
+ .typing-indicator {
202
+ display: flex;
203
+ gap: 4px;
204
+ padding: 8px 12px;
205
+ background: #f0f0f0;
206
+ border-radius: 12px;
207
+ width: fit-content;
208
+ margin-bottom: 1rem;
209
+ }
210
+
211
+ .dot {
212
+ width: 6px;
213
+ height: 6px;
214
+ background: var(--text-muted);
215
+ border-radius: 50%;
216
+ animation: bounce 1.4s infinite ease-in-out both;
217
+ }
218
+
219
+ .dot:nth-child(1) { animation-delay: -0.32s; }
220
+ .dot:nth-child(2) { animation-delay: -0.16s; }
221
+
222
+ @keyframes bounce {
223
+ 0%, 80%, 100% { transform: scale(0); }
224
+ 40% { transform: scale(1.0); }
225
  }
226
+
227
+ /* Markdown styling */
228
+ .assistant .message-bubble ul, .assistant .message-bubble ol {
229
+ margin-left: 1.5rem;
230
+ margin-bottom: 0.75rem;
231
+ }
232
+
233
+ .assistant .message-bubble li {
234
+ margin-bottom: 0.25rem;
235
  }
236
+
237
+ code {
238
+ background: #f1f3f5;
239
+ padding: 0.2rem 0.4rem;
240
  border-radius: 4px;
241
+ font-family: monospace;
242
  }
243
+
244
+ pre {
245
+ background: #f1f3f5;
246
+ padding: 1rem;
247
+ border-radius: 8px;
248
+ overflow-x: auto;
249
+ margin: 1rem 0;
250
  }
frontend/src/main.jsx CHANGED
@@ -1,10 +1,10 @@
1
- import { StrictMode } from 'react'
2
- import { createRoot } from 'react-dom/client'
3
- import './index.css'
4
  import App from './App.jsx'
 
5
 
6
- createRoot(document.getElementById('root')).render(
7
- <StrictMode>
8
- <App />
9
- </StrictMode>,
10
  )
 
1
+ import React from 'react'
2
+ import ReactDOM from 'react-dom/client'
 
3
  import App from './App.jsx'
4
+ import './index.css'
5
 
6
+ ReactDOM.createRoot(document.getElementById('root')).render(
7
+ <React.StrictMode>
8
+ <App />
9
+ </React.StrictMode>,
10
  )
frontend/vite.config.js CHANGED
@@ -1,7 +1,19 @@
1
  import { defineConfig } from 'vite'
2
  import react from '@vitejs/plugin-react'
3
 
4
- // https://vite.dev/config/
5
  export default defineConfig({
6
- plugins: [react()],
 
 
 
 
 
 
 
 
 
 
 
 
7
  })
 
1
  import { defineConfig } from 'vite'
2
  import react from '@vitejs/plugin-react'
3
 
4
+ // https://vitejs.dev/config/
5
  export default defineConfig({
6
+ plugins: [react()],
7
+ server: {
8
+ proxy: {
9
+ '/chat': {
10
+ target: 'http://localhost:7860',
11
+ changeOrigin: true,
12
+ },
13
+ '/assets': {
14
+ target: 'http://localhost:7860',
15
+ changeOrigin: true,
16
+ }
17
+ }
18
+ }
19
  })
llm.py ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import json
3
+ from typing import AsyncGenerator, List, Dict
4
+ from openai import AsyncOpenAI
5
+ from dotenv import load_dotenv
6
+
7
+ load_dotenv()
8
+
9
+ XAI_API_KEY = os.getenv("XAI_API_KEY")
10
+ MODEL_NAME = "grok-4-1-fast-reasoning"
11
+
12
+ client = AsyncOpenAI(
13
+ api_key=XAI_API_KEY,
14
+ base_url="https://api.x.ai/v1",
15
+ )
16
+
17
+ SYSTEM_PROMPT = """You are UBA AI Support, a professional, calm, and reassuring customer support agent for UBA Bank.
18
+ You adhere to Nigerian banking standards.
19
+ Rules:
20
+ - Never say "as an AI".
21
+ - Never expose internal system details.
22
+ - Reason logically.
23
+ - Sound like a real UBA support staff.
24
+ - Use the provided context (RAG) to answer questions.
25
+ - If information is missing from the context, use web search results if provided.
26
+ - If you still don't know, suggest visiting a UBA branch or calling the official help line.
27
+ - Use proper formatting (paragraphs, bullet points) for readability.
28
+ - Maintain a helpful and polite tone.
29
+ """
30
+
31
+ async def get_streaming_response(messages: List[Dict[str, str]]) -> AsyncGenerator[str, None]:
32
+ """
33
+ Streams responses from Grok with the UBA persona.
34
+ """
35
+ # Prepend system prompt if not present
36
+ if not any(m.get("role") == "system" for m in messages):
37
+ messages = [{"role": "system", "content": SYSTEM_PROMPT}] + messages
38
+
39
+ try:
40
+ response = await client.chat.completions.create(
41
+ model=MODEL_NAME,
42
+ messages=messages,
43
+ stream=True,
44
+ )
45
+
46
+ async for chunk in response:
47
+ content = chunk.choices[0].delta.content or ""
48
+ if content:
49
+ yield content
50
+ except Exception as e:
51
+ yield f"I apologize, but I'm having trouble connecting to my systems right now. Please try again in a moment. (Error: {str(e)})"
logo.png DELETED
Binary file (3.95 kB)
 
main.py CHANGED
@@ -1,36 +1,83 @@
1
- from fastapi import FastAPI, HTTPException
 
 
 
 
2
  from fastapi.middleware.cors import CORSMiddleware
 
3
  from pydantic import BaseModel
4
- from typing import List, Optional
5
- import os
6
- from dotenv import load_dotenv
7
 
8
- # Load environment variables
9
- load_dotenv()
 
 
10
 
11
- app = FastAPI(title="UBA AI Support", description="Backend for UBA AI Support System")
12
 
13
- # CORS Middleware
14
  app.add_middleware(
15
  CORSMiddleware,
16
- allow_origins=["*"], # In production, specify the frontend domain
17
- allow_credentials=True,
18
  allow_methods=["*"],
19
  allow_headers=["*"],
20
  )
21
 
22
  class ChatRequest(BaseModel):
23
- session_id: str
24
  message: str
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
- @app.get("/health")
27
- async def health_check():
28
- return {"status": "healthy"}
29
 
30
- # Import chat router (will be created next)
31
- from chat_service import router as chat_router
32
- app.include_router(chat_router, prefix="/api")
33
 
34
  if __name__ == "__main__":
35
  import uvicorn
36
- uvicorn.run(app, host="0.0.0.0", port=8000)
 
1
+ import os
2
+ import json
3
+ import uuid
4
+ from fastapi import FastAPI, Request, HTTPException
5
+ from fastapi.responses import StreamingResponse
6
  from fastapi.middleware.cors import CORSMiddleware
7
+ from fastapi.staticfiles import StaticFiles
8
  from pydantic import BaseModel
9
+ from typing import Optional
 
 
10
 
11
+ from llm import get_streaming_response
12
+ from rag import rag_system
13
+ from web_search import perform_web_search
14
+ from memory import memory_system
15
 
16
+ app = FastAPI(title="UBA AI Support")
17
 
18
+ # CORS
19
  app.add_middleware(
20
  CORSMiddleware,
21
+ allow_origins=["*"],
 
22
  allow_methods=["*"],
23
  allow_headers=["*"],
24
  )
25
 
26
  class ChatRequest(BaseModel):
 
27
  message: str
28
+ session_id: Optional[str] = None
29
+
30
+ @app.post("/chat")
31
+ async def chat_endpoint(request: ChatRequest):
32
+ session_id = request.session_id or str(uuid.uuid4())
33
+ user_query = request.message
34
+
35
+ # 1. Get history
36
+ history = memory_system.get_history(session_id)
37
+
38
+ # 2. Query RAG
39
+ context = rag_system.query(user_query)
40
+
41
+ # 3. If RAG context is weak, try web search (simplified logic for now)
42
+ web_context = ""
43
+ if len(context) < 100:
44
+ web_context = await perform_web_search(user_query)
45
+
46
+ # 4. Prepare prompt
47
+ augmented_query = user_query
48
+ if context or web_context:
49
+ augmented_query = f"Context from UBA Documentation:\n{context}\n\nWeb Search Info:\n{web_context}\n\nUser Question: {user_query}"
50
+
51
+ # 5. Add to memory
52
+ memory_system.add_message(session_id, "user", user_query)
53
+
54
+ # 6. Stream response
55
+ async def event_generator():
56
+ # First send the session_id
57
+ yield f"data: {json.dumps({'session_id': session_id})}\n\n"
58
+
59
+ full_response = ""
60
+ # We pass history[:-1] + [augmented_query] to present the augmented query as the last message
61
+ messages_for_llm = history[:-1] + [{"role": "user", "content": augmented_query}]
62
+
63
+ async for chunk in get_streaming_response(messages_for_llm):
64
+ full_response += chunk
65
+ yield f"data: {json.dumps({'content': chunk})}\n\n"
66
+
67
+ # Save assistant response to memory
68
+ memory_system.add_message(session_id, "assistant", full_response)
69
+ yield "data: [DONE]\n\n"
70
+
71
+ return StreamingResponse(event_generator(), media_type="text/event-stream")
72
 
73
+ # Mount assets and frontend
74
+ if os.path.exists("./assets"):
75
+ app.mount("/assets", StaticFiles(directory="assets"), name="assets")
76
 
77
+ # The frontend should be built and placed in a 'dist' folder or served directly if in dev
78
+ if os.path.exists("./frontend/dist"):
79
+ app.mount("/", StaticFiles(directory="./frontend/dist", html=True), name="frontend")
80
 
81
  if __name__ == "__main__":
82
  import uvicorn
83
+ uvicorn.run(app, host="0.0.0.0", port=7860)
memory.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Dict
2
+ import time
3
+
4
+ class SessionMemory:
5
+ def __init__(self):
6
+ # session_id -> list of messages
7
+ self.sessions: Dict[str, List[Dict[str, str]]] = {}
8
+ # session_id -> last update timestamp
9
+ self.last_update: Dict[str, float] = {}
10
+
11
+ def get_history(self, session_id: str) -> List[Dict[str, str]]:
12
+ if session_id not in self.sessions:
13
+ self.sessions[session_id] = []
14
+ return self.sessions[session_id]
15
+
16
+ def add_message(self, session_id: str, role: str, content: str):
17
+ if session_id not in self.sessions:
18
+ self.sessions[session_id] = []
19
+
20
+ self.sessions[session_id].append({"role": role, "content": content})
21
+ self.last_update[session_id] = time.time()
22
+
23
+ # Limit history to last 10 messages to keep context size manageable
24
+ if len(self.sessions[session_id]) > 10:
25
+ self.sessions[session_id] = self.sessions[session_id][-10:]
26
+
27
+ def clear_session(self, session_id: str):
28
+ if session_id in self.sessions:
29
+ del self.sessions[session_id]
30
+ if session_id in self.last_update:
31
+ del self.last_update[session_id]
32
+
33
+ # Singleton instance
34
+ memory_system = SessionMemory()
node_modules/.package-lock.json ADDED
@@ -0,0 +1,1246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "UBA_AI_Support",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "node_modules/@types/debug": {
7
+ "version": "4.1.12",
8
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
9
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
10
+ "license": "MIT",
11
+ "dependencies": {
12
+ "@types/ms": "*"
13
+ }
14
+ },
15
+ "node_modules/@types/estree": {
16
+ "version": "1.0.8",
17
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
18
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
19
+ "license": "MIT"
20
+ },
21
+ "node_modules/@types/estree-jsx": {
22
+ "version": "1.0.5",
23
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
24
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "@types/estree": "*"
28
+ }
29
+ },
30
+ "node_modules/@types/hast": {
31
+ "version": "3.0.4",
32
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
33
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
34
+ "license": "MIT",
35
+ "dependencies": {
36
+ "@types/unist": "*"
37
+ }
38
+ },
39
+ "node_modules/@types/mdast": {
40
+ "version": "4.0.4",
41
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
42
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
43
+ "license": "MIT",
44
+ "dependencies": {
45
+ "@types/unist": "*"
46
+ }
47
+ },
48
+ "node_modules/@types/ms": {
49
+ "version": "2.1.0",
50
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
51
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
52
+ "license": "MIT"
53
+ },
54
+ "node_modules/@types/react": {
55
+ "version": "19.2.8",
56
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz",
57
+ "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==",
58
+ "license": "MIT",
59
+ "peer": true,
60
+ "dependencies": {
61
+ "csstype": "^3.2.2"
62
+ }
63
+ },
64
+ "node_modules/@types/unist": {
65
+ "version": "3.0.3",
66
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
67
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
68
+ "license": "MIT"
69
+ },
70
+ "node_modules/@ungap/structured-clone": {
71
+ "version": "1.3.0",
72
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
73
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
74
+ "license": "ISC"
75
+ },
76
+ "node_modules/bail": {
77
+ "version": "2.0.2",
78
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
79
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
80
+ "license": "MIT",
81
+ "funding": {
82
+ "type": "github",
83
+ "url": "https://github.com/sponsors/wooorm"
84
+ }
85
+ },
86
+ "node_modules/ccount": {
87
+ "version": "2.0.1",
88
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
89
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
90
+ "license": "MIT",
91
+ "funding": {
92
+ "type": "github",
93
+ "url": "https://github.com/sponsors/wooorm"
94
+ }
95
+ },
96
+ "node_modules/character-entities": {
97
+ "version": "2.0.2",
98
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
99
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
100
+ "license": "MIT",
101
+ "funding": {
102
+ "type": "github",
103
+ "url": "https://github.com/sponsors/wooorm"
104
+ }
105
+ },
106
+ "node_modules/character-entities-html4": {
107
+ "version": "2.1.0",
108
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
109
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
110
+ "license": "MIT",
111
+ "funding": {
112
+ "type": "github",
113
+ "url": "https://github.com/sponsors/wooorm"
114
+ }
115
+ },
116
+ "node_modules/character-entities-legacy": {
117
+ "version": "3.0.0",
118
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
119
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
120
+ "license": "MIT",
121
+ "funding": {
122
+ "type": "github",
123
+ "url": "https://github.com/sponsors/wooorm"
124
+ }
125
+ },
126
+ "node_modules/character-reference-invalid": {
127
+ "version": "2.0.1",
128
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
129
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
130
+ "license": "MIT",
131
+ "funding": {
132
+ "type": "github",
133
+ "url": "https://github.com/sponsors/wooorm"
134
+ }
135
+ },
136
+ "node_modules/comma-separated-tokens": {
137
+ "version": "2.0.3",
138
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
139
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
140
+ "license": "MIT",
141
+ "funding": {
142
+ "type": "github",
143
+ "url": "https://github.com/sponsors/wooorm"
144
+ }
145
+ },
146
+ "node_modules/csstype": {
147
+ "version": "3.2.3",
148
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
149
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
150
+ "license": "MIT",
151
+ "peer": true
152
+ },
153
+ "node_modules/debug": {
154
+ "version": "4.4.3",
155
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
156
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
157
+ "license": "MIT",
158
+ "dependencies": {
159
+ "ms": "^2.1.3"
160
+ },
161
+ "engines": {
162
+ "node": ">=6.0"
163
+ },
164
+ "peerDependenciesMeta": {
165
+ "supports-color": {
166
+ "optional": true
167
+ }
168
+ }
169
+ },
170
+ "node_modules/decode-named-character-reference": {
171
+ "version": "1.2.0",
172
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
173
+ "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
174
+ "license": "MIT",
175
+ "dependencies": {
176
+ "character-entities": "^2.0.0"
177
+ },
178
+ "funding": {
179
+ "type": "github",
180
+ "url": "https://github.com/sponsors/wooorm"
181
+ }
182
+ },
183
+ "node_modules/dequal": {
184
+ "version": "2.0.3",
185
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
186
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
187
+ "license": "MIT",
188
+ "engines": {
189
+ "node": ">=6"
190
+ }
191
+ },
192
+ "node_modules/devlop": {
193
+ "version": "1.1.0",
194
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
195
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
196
+ "license": "MIT",
197
+ "dependencies": {
198
+ "dequal": "^2.0.0"
199
+ },
200
+ "funding": {
201
+ "type": "github",
202
+ "url": "https://github.com/sponsors/wooorm"
203
+ }
204
+ },
205
+ "node_modules/estree-util-is-identifier-name": {
206
+ "version": "3.0.0",
207
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
208
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
209
+ "license": "MIT",
210
+ "funding": {
211
+ "type": "opencollective",
212
+ "url": "https://opencollective.com/unified"
213
+ }
214
+ },
215
+ "node_modules/extend": {
216
+ "version": "3.0.2",
217
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
218
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
219
+ "license": "MIT"
220
+ },
221
+ "node_modules/hast-util-to-jsx-runtime": {
222
+ "version": "2.3.6",
223
+ "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
224
+ "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==",
225
+ "license": "MIT",
226
+ "dependencies": {
227
+ "@types/estree": "^1.0.0",
228
+ "@types/hast": "^3.0.0",
229
+ "@types/unist": "^3.0.0",
230
+ "comma-separated-tokens": "^2.0.0",
231
+ "devlop": "^1.0.0",
232
+ "estree-util-is-identifier-name": "^3.0.0",
233
+ "hast-util-whitespace": "^3.0.0",
234
+ "mdast-util-mdx-expression": "^2.0.0",
235
+ "mdast-util-mdx-jsx": "^3.0.0",
236
+ "mdast-util-mdxjs-esm": "^2.0.0",
237
+ "property-information": "^7.0.0",
238
+ "space-separated-tokens": "^2.0.0",
239
+ "style-to-js": "^1.0.0",
240
+ "unist-util-position": "^5.0.0",
241
+ "vfile-message": "^4.0.0"
242
+ },
243
+ "funding": {
244
+ "type": "opencollective",
245
+ "url": "https://opencollective.com/unified"
246
+ }
247
+ },
248
+ "node_modules/hast-util-whitespace": {
249
+ "version": "3.0.0",
250
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
251
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
252
+ "license": "MIT",
253
+ "dependencies": {
254
+ "@types/hast": "^3.0.0"
255
+ },
256
+ "funding": {
257
+ "type": "opencollective",
258
+ "url": "https://opencollective.com/unified"
259
+ }
260
+ },
261
+ "node_modules/html-url-attributes": {
262
+ "version": "3.0.1",
263
+ "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
264
+ "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==",
265
+ "license": "MIT",
266
+ "funding": {
267
+ "type": "opencollective",
268
+ "url": "https://opencollective.com/unified"
269
+ }
270
+ },
271
+ "node_modules/inline-style-parser": {
272
+ "version": "0.2.7",
273
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz",
274
+ "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==",
275
+ "license": "MIT"
276
+ },
277
+ "node_modules/is-alphabetical": {
278
+ "version": "2.0.1",
279
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
280
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
281
+ "license": "MIT",
282
+ "funding": {
283
+ "type": "github",
284
+ "url": "https://github.com/sponsors/wooorm"
285
+ }
286
+ },
287
+ "node_modules/is-alphanumerical": {
288
+ "version": "2.0.1",
289
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
290
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
291
+ "license": "MIT",
292
+ "dependencies": {
293
+ "is-alphabetical": "^2.0.0",
294
+ "is-decimal": "^2.0.0"
295
+ },
296
+ "funding": {
297
+ "type": "github",
298
+ "url": "https://github.com/sponsors/wooorm"
299
+ }
300
+ },
301
+ "node_modules/is-decimal": {
302
+ "version": "2.0.1",
303
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
304
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
305
+ "license": "MIT",
306
+ "funding": {
307
+ "type": "github",
308
+ "url": "https://github.com/sponsors/wooorm"
309
+ }
310
+ },
311
+ "node_modules/is-hexadecimal": {
312
+ "version": "2.0.1",
313
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
314
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
315
+ "license": "MIT",
316
+ "funding": {
317
+ "type": "github",
318
+ "url": "https://github.com/sponsors/wooorm"
319
+ }
320
+ },
321
+ "node_modules/is-plain-obj": {
322
+ "version": "4.1.0",
323
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
324
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
325
+ "license": "MIT",
326
+ "engines": {
327
+ "node": ">=12"
328
+ },
329
+ "funding": {
330
+ "url": "https://github.com/sponsors/sindresorhus"
331
+ }
332
+ },
333
+ "node_modules/longest-streak": {
334
+ "version": "3.1.0",
335
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
336
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
337
+ "license": "MIT",
338
+ "funding": {
339
+ "type": "github",
340
+ "url": "https://github.com/sponsors/wooorm"
341
+ }
342
+ },
343
+ "node_modules/lucide-react": {
344
+ "version": "0.562.0",
345
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz",
346
+ "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==",
347
+ "license": "ISC",
348
+ "peerDependencies": {
349
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
350
+ }
351
+ },
352
+ "node_modules/mdast-util-from-markdown": {
353
+ "version": "2.0.2",
354
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
355
+ "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
356
+ "license": "MIT",
357
+ "dependencies": {
358
+ "@types/mdast": "^4.0.0",
359
+ "@types/unist": "^3.0.0",
360
+ "decode-named-character-reference": "^1.0.0",
361
+ "devlop": "^1.0.0",
362
+ "mdast-util-to-string": "^4.0.0",
363
+ "micromark": "^4.0.0",
364
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
365
+ "micromark-util-decode-string": "^2.0.0",
366
+ "micromark-util-normalize-identifier": "^2.0.0",
367
+ "micromark-util-symbol": "^2.0.0",
368
+ "micromark-util-types": "^2.0.0",
369
+ "unist-util-stringify-position": "^4.0.0"
370
+ },
371
+ "funding": {
372
+ "type": "opencollective",
373
+ "url": "https://opencollective.com/unified"
374
+ }
375
+ },
376
+ "node_modules/mdast-util-mdx-expression": {
377
+ "version": "2.0.1",
378
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
379
+ "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
380
+ "license": "MIT",
381
+ "dependencies": {
382
+ "@types/estree-jsx": "^1.0.0",
383
+ "@types/hast": "^3.0.0",
384
+ "@types/mdast": "^4.0.0",
385
+ "devlop": "^1.0.0",
386
+ "mdast-util-from-markdown": "^2.0.0",
387
+ "mdast-util-to-markdown": "^2.0.0"
388
+ },
389
+ "funding": {
390
+ "type": "opencollective",
391
+ "url": "https://opencollective.com/unified"
392
+ }
393
+ },
394
+ "node_modules/mdast-util-mdx-jsx": {
395
+ "version": "3.2.0",
396
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz",
397
+ "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==",
398
+ "license": "MIT",
399
+ "dependencies": {
400
+ "@types/estree-jsx": "^1.0.0",
401
+ "@types/hast": "^3.0.0",
402
+ "@types/mdast": "^4.0.0",
403
+ "@types/unist": "^3.0.0",
404
+ "ccount": "^2.0.0",
405
+ "devlop": "^1.1.0",
406
+ "mdast-util-from-markdown": "^2.0.0",
407
+ "mdast-util-to-markdown": "^2.0.0",
408
+ "parse-entities": "^4.0.0",
409
+ "stringify-entities": "^4.0.0",
410
+ "unist-util-stringify-position": "^4.0.0",
411
+ "vfile-message": "^4.0.0"
412
+ },
413
+ "funding": {
414
+ "type": "opencollective",
415
+ "url": "https://opencollective.com/unified"
416
+ }
417
+ },
418
+ "node_modules/mdast-util-mdxjs-esm": {
419
+ "version": "2.0.1",
420
+ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
421
+ "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
422
+ "license": "MIT",
423
+ "dependencies": {
424
+ "@types/estree-jsx": "^1.0.0",
425
+ "@types/hast": "^3.0.0",
426
+ "@types/mdast": "^4.0.0",
427
+ "devlop": "^1.0.0",
428
+ "mdast-util-from-markdown": "^2.0.0",
429
+ "mdast-util-to-markdown": "^2.0.0"
430
+ },
431
+ "funding": {
432
+ "type": "opencollective",
433
+ "url": "https://opencollective.com/unified"
434
+ }
435
+ },
436
+ "node_modules/mdast-util-phrasing": {
437
+ "version": "4.1.0",
438
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
439
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
440
+ "license": "MIT",
441
+ "dependencies": {
442
+ "@types/mdast": "^4.0.0",
443
+ "unist-util-is": "^6.0.0"
444
+ },
445
+ "funding": {
446
+ "type": "opencollective",
447
+ "url": "https://opencollective.com/unified"
448
+ }
449
+ },
450
+ "node_modules/mdast-util-to-hast": {
451
+ "version": "13.2.1",
452
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
453
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
454
+ "license": "MIT",
455
+ "dependencies": {
456
+ "@types/hast": "^3.0.0",
457
+ "@types/mdast": "^4.0.0",
458
+ "@ungap/structured-clone": "^1.0.0",
459
+ "devlop": "^1.0.0",
460
+ "micromark-util-sanitize-uri": "^2.0.0",
461
+ "trim-lines": "^3.0.0",
462
+ "unist-util-position": "^5.0.0",
463
+ "unist-util-visit": "^5.0.0",
464
+ "vfile": "^6.0.0"
465
+ },
466
+ "funding": {
467
+ "type": "opencollective",
468
+ "url": "https://opencollective.com/unified"
469
+ }
470
+ },
471
+ "node_modules/mdast-util-to-markdown": {
472
+ "version": "2.1.2",
473
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
474
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
475
+ "license": "MIT",
476
+ "dependencies": {
477
+ "@types/mdast": "^4.0.0",
478
+ "@types/unist": "^3.0.0",
479
+ "longest-streak": "^3.0.0",
480
+ "mdast-util-phrasing": "^4.0.0",
481
+ "mdast-util-to-string": "^4.0.0",
482
+ "micromark-util-classify-character": "^2.0.0",
483
+ "micromark-util-decode-string": "^2.0.0",
484
+ "unist-util-visit": "^5.0.0",
485
+ "zwitch": "^2.0.0"
486
+ },
487
+ "funding": {
488
+ "type": "opencollective",
489
+ "url": "https://opencollective.com/unified"
490
+ }
491
+ },
492
+ "node_modules/mdast-util-to-string": {
493
+ "version": "4.0.0",
494
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
495
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
496
+ "license": "MIT",
497
+ "dependencies": {
498
+ "@types/mdast": "^4.0.0"
499
+ },
500
+ "funding": {
501
+ "type": "opencollective",
502
+ "url": "https://opencollective.com/unified"
503
+ }
504
+ },
505
+ "node_modules/micromark": {
506
+ "version": "4.0.2",
507
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
508
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
509
+ "funding": [
510
+ {
511
+ "type": "GitHub Sponsors",
512
+ "url": "https://github.com/sponsors/unifiedjs"
513
+ },
514
+ {
515
+ "type": "OpenCollective",
516
+ "url": "https://opencollective.com/unified"
517
+ }
518
+ ],
519
+ "license": "MIT",
520
+ "dependencies": {
521
+ "@types/debug": "^4.0.0",
522
+ "debug": "^4.0.0",
523
+ "decode-named-character-reference": "^1.0.0",
524
+ "devlop": "^1.0.0",
525
+ "micromark-core-commonmark": "^2.0.0",
526
+ "micromark-factory-space": "^2.0.0",
527
+ "micromark-util-character": "^2.0.0",
528
+ "micromark-util-chunked": "^2.0.0",
529
+ "micromark-util-combine-extensions": "^2.0.0",
530
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
531
+ "micromark-util-encode": "^2.0.0",
532
+ "micromark-util-normalize-identifier": "^2.0.0",
533
+ "micromark-util-resolve-all": "^2.0.0",
534
+ "micromark-util-sanitize-uri": "^2.0.0",
535
+ "micromark-util-subtokenize": "^2.0.0",
536
+ "micromark-util-symbol": "^2.0.0",
537
+ "micromark-util-types": "^2.0.0"
538
+ }
539
+ },
540
+ "node_modules/micromark-core-commonmark": {
541
+ "version": "2.0.3",
542
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
543
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
544
+ "funding": [
545
+ {
546
+ "type": "GitHub Sponsors",
547
+ "url": "https://github.com/sponsors/unifiedjs"
548
+ },
549
+ {
550
+ "type": "OpenCollective",
551
+ "url": "https://opencollective.com/unified"
552
+ }
553
+ ],
554
+ "license": "MIT",
555
+ "dependencies": {
556
+ "decode-named-character-reference": "^1.0.0",
557
+ "devlop": "^1.0.0",
558
+ "micromark-factory-destination": "^2.0.0",
559
+ "micromark-factory-label": "^2.0.0",
560
+ "micromark-factory-space": "^2.0.0",
561
+ "micromark-factory-title": "^2.0.0",
562
+ "micromark-factory-whitespace": "^2.0.0",
563
+ "micromark-util-character": "^2.0.0",
564
+ "micromark-util-chunked": "^2.0.0",
565
+ "micromark-util-classify-character": "^2.0.0",
566
+ "micromark-util-html-tag-name": "^2.0.0",
567
+ "micromark-util-normalize-identifier": "^2.0.0",
568
+ "micromark-util-resolve-all": "^2.0.0",
569
+ "micromark-util-subtokenize": "^2.0.0",
570
+ "micromark-util-symbol": "^2.0.0",
571
+ "micromark-util-types": "^2.0.0"
572
+ }
573
+ },
574
+ "node_modules/micromark-factory-destination": {
575
+ "version": "2.0.1",
576
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
577
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
578
+ "funding": [
579
+ {
580
+ "type": "GitHub Sponsors",
581
+ "url": "https://github.com/sponsors/unifiedjs"
582
+ },
583
+ {
584
+ "type": "OpenCollective",
585
+ "url": "https://opencollective.com/unified"
586
+ }
587
+ ],
588
+ "license": "MIT",
589
+ "dependencies": {
590
+ "micromark-util-character": "^2.0.0",
591
+ "micromark-util-symbol": "^2.0.0",
592
+ "micromark-util-types": "^2.0.0"
593
+ }
594
+ },
595
+ "node_modules/micromark-factory-label": {
596
+ "version": "2.0.1",
597
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
598
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
599
+ "funding": [
600
+ {
601
+ "type": "GitHub Sponsors",
602
+ "url": "https://github.com/sponsors/unifiedjs"
603
+ },
604
+ {
605
+ "type": "OpenCollective",
606
+ "url": "https://opencollective.com/unified"
607
+ }
608
+ ],
609
+ "license": "MIT",
610
+ "dependencies": {
611
+ "devlop": "^1.0.0",
612
+ "micromark-util-character": "^2.0.0",
613
+ "micromark-util-symbol": "^2.0.0",
614
+ "micromark-util-types": "^2.0.0"
615
+ }
616
+ },
617
+ "node_modules/micromark-factory-space": {
618
+ "version": "2.0.1",
619
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
620
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
621
+ "funding": [
622
+ {
623
+ "type": "GitHub Sponsors",
624
+ "url": "https://github.com/sponsors/unifiedjs"
625
+ },
626
+ {
627
+ "type": "OpenCollective",
628
+ "url": "https://opencollective.com/unified"
629
+ }
630
+ ],
631
+ "license": "MIT",
632
+ "dependencies": {
633
+ "micromark-util-character": "^2.0.0",
634
+ "micromark-util-types": "^2.0.0"
635
+ }
636
+ },
637
+ "node_modules/micromark-factory-title": {
638
+ "version": "2.0.1",
639
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
640
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
641
+ "funding": [
642
+ {
643
+ "type": "GitHub Sponsors",
644
+ "url": "https://github.com/sponsors/unifiedjs"
645
+ },
646
+ {
647
+ "type": "OpenCollective",
648
+ "url": "https://opencollective.com/unified"
649
+ }
650
+ ],
651
+ "license": "MIT",
652
+ "dependencies": {
653
+ "micromark-factory-space": "^2.0.0",
654
+ "micromark-util-character": "^2.0.0",
655
+ "micromark-util-symbol": "^2.0.0",
656
+ "micromark-util-types": "^2.0.0"
657
+ }
658
+ },
659
+ "node_modules/micromark-factory-whitespace": {
660
+ "version": "2.0.1",
661
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
662
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
663
+ "funding": [
664
+ {
665
+ "type": "GitHub Sponsors",
666
+ "url": "https://github.com/sponsors/unifiedjs"
667
+ },
668
+ {
669
+ "type": "OpenCollective",
670
+ "url": "https://opencollective.com/unified"
671
+ }
672
+ ],
673
+ "license": "MIT",
674
+ "dependencies": {
675
+ "micromark-factory-space": "^2.0.0",
676
+ "micromark-util-character": "^2.0.0",
677
+ "micromark-util-symbol": "^2.0.0",
678
+ "micromark-util-types": "^2.0.0"
679
+ }
680
+ },
681
+ "node_modules/micromark-util-character": {
682
+ "version": "2.1.1",
683
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
684
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
685
+ "funding": [
686
+ {
687
+ "type": "GitHub Sponsors",
688
+ "url": "https://github.com/sponsors/unifiedjs"
689
+ },
690
+ {
691
+ "type": "OpenCollective",
692
+ "url": "https://opencollective.com/unified"
693
+ }
694
+ ],
695
+ "license": "MIT",
696
+ "dependencies": {
697
+ "micromark-util-symbol": "^2.0.0",
698
+ "micromark-util-types": "^2.0.0"
699
+ }
700
+ },
701
+ "node_modules/micromark-util-chunked": {
702
+ "version": "2.0.1",
703
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
704
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
705
+ "funding": [
706
+ {
707
+ "type": "GitHub Sponsors",
708
+ "url": "https://github.com/sponsors/unifiedjs"
709
+ },
710
+ {
711
+ "type": "OpenCollective",
712
+ "url": "https://opencollective.com/unified"
713
+ }
714
+ ],
715
+ "license": "MIT",
716
+ "dependencies": {
717
+ "micromark-util-symbol": "^2.0.0"
718
+ }
719
+ },
720
+ "node_modules/micromark-util-classify-character": {
721
+ "version": "2.0.1",
722
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
723
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
724
+ "funding": [
725
+ {
726
+ "type": "GitHub Sponsors",
727
+ "url": "https://github.com/sponsors/unifiedjs"
728
+ },
729
+ {
730
+ "type": "OpenCollective",
731
+ "url": "https://opencollective.com/unified"
732
+ }
733
+ ],
734
+ "license": "MIT",
735
+ "dependencies": {
736
+ "micromark-util-character": "^2.0.0",
737
+ "micromark-util-symbol": "^2.0.0",
738
+ "micromark-util-types": "^2.0.0"
739
+ }
740
+ },
741
+ "node_modules/micromark-util-combine-extensions": {
742
+ "version": "2.0.1",
743
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
744
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
745
+ "funding": [
746
+ {
747
+ "type": "GitHub Sponsors",
748
+ "url": "https://github.com/sponsors/unifiedjs"
749
+ },
750
+ {
751
+ "type": "OpenCollective",
752
+ "url": "https://opencollective.com/unified"
753
+ }
754
+ ],
755
+ "license": "MIT",
756
+ "dependencies": {
757
+ "micromark-util-chunked": "^2.0.0",
758
+ "micromark-util-types": "^2.0.0"
759
+ }
760
+ },
761
+ "node_modules/micromark-util-decode-numeric-character-reference": {
762
+ "version": "2.0.2",
763
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
764
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
765
+ "funding": [
766
+ {
767
+ "type": "GitHub Sponsors",
768
+ "url": "https://github.com/sponsors/unifiedjs"
769
+ },
770
+ {
771
+ "type": "OpenCollective",
772
+ "url": "https://opencollective.com/unified"
773
+ }
774
+ ],
775
+ "license": "MIT",
776
+ "dependencies": {
777
+ "micromark-util-symbol": "^2.0.0"
778
+ }
779
+ },
780
+ "node_modules/micromark-util-decode-string": {
781
+ "version": "2.0.1",
782
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
783
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
784
+ "funding": [
785
+ {
786
+ "type": "GitHub Sponsors",
787
+ "url": "https://github.com/sponsors/unifiedjs"
788
+ },
789
+ {
790
+ "type": "OpenCollective",
791
+ "url": "https://opencollective.com/unified"
792
+ }
793
+ ],
794
+ "license": "MIT",
795
+ "dependencies": {
796
+ "decode-named-character-reference": "^1.0.0",
797
+ "micromark-util-character": "^2.0.0",
798
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
799
+ "micromark-util-symbol": "^2.0.0"
800
+ }
801
+ },
802
+ "node_modules/micromark-util-encode": {
803
+ "version": "2.0.1",
804
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
805
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
806
+ "funding": [
807
+ {
808
+ "type": "GitHub Sponsors",
809
+ "url": "https://github.com/sponsors/unifiedjs"
810
+ },
811
+ {
812
+ "type": "OpenCollective",
813
+ "url": "https://opencollective.com/unified"
814
+ }
815
+ ],
816
+ "license": "MIT"
817
+ },
818
+ "node_modules/micromark-util-html-tag-name": {
819
+ "version": "2.0.1",
820
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
821
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
822
+ "funding": [
823
+ {
824
+ "type": "GitHub Sponsors",
825
+ "url": "https://github.com/sponsors/unifiedjs"
826
+ },
827
+ {
828
+ "type": "OpenCollective",
829
+ "url": "https://opencollective.com/unified"
830
+ }
831
+ ],
832
+ "license": "MIT"
833
+ },
834
+ "node_modules/micromark-util-normalize-identifier": {
835
+ "version": "2.0.1",
836
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
837
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
838
+ "funding": [
839
+ {
840
+ "type": "GitHub Sponsors",
841
+ "url": "https://github.com/sponsors/unifiedjs"
842
+ },
843
+ {
844
+ "type": "OpenCollective",
845
+ "url": "https://opencollective.com/unified"
846
+ }
847
+ ],
848
+ "license": "MIT",
849
+ "dependencies": {
850
+ "micromark-util-symbol": "^2.0.0"
851
+ }
852
+ },
853
+ "node_modules/micromark-util-resolve-all": {
854
+ "version": "2.0.1",
855
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
856
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
857
+ "funding": [
858
+ {
859
+ "type": "GitHub Sponsors",
860
+ "url": "https://github.com/sponsors/unifiedjs"
861
+ },
862
+ {
863
+ "type": "OpenCollective",
864
+ "url": "https://opencollective.com/unified"
865
+ }
866
+ ],
867
+ "license": "MIT",
868
+ "dependencies": {
869
+ "micromark-util-types": "^2.0.0"
870
+ }
871
+ },
872
+ "node_modules/micromark-util-sanitize-uri": {
873
+ "version": "2.0.1",
874
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
875
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
876
+ "funding": [
877
+ {
878
+ "type": "GitHub Sponsors",
879
+ "url": "https://github.com/sponsors/unifiedjs"
880
+ },
881
+ {
882
+ "type": "OpenCollective",
883
+ "url": "https://opencollective.com/unified"
884
+ }
885
+ ],
886
+ "license": "MIT",
887
+ "dependencies": {
888
+ "micromark-util-character": "^2.0.0",
889
+ "micromark-util-encode": "^2.0.0",
890
+ "micromark-util-symbol": "^2.0.0"
891
+ }
892
+ },
893
+ "node_modules/micromark-util-subtokenize": {
894
+ "version": "2.1.0",
895
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
896
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
897
+ "funding": [
898
+ {
899
+ "type": "GitHub Sponsors",
900
+ "url": "https://github.com/sponsors/unifiedjs"
901
+ },
902
+ {
903
+ "type": "OpenCollective",
904
+ "url": "https://opencollective.com/unified"
905
+ }
906
+ ],
907
+ "license": "MIT",
908
+ "dependencies": {
909
+ "devlop": "^1.0.0",
910
+ "micromark-util-chunked": "^2.0.0",
911
+ "micromark-util-symbol": "^2.0.0",
912
+ "micromark-util-types": "^2.0.0"
913
+ }
914
+ },
915
+ "node_modules/micromark-util-symbol": {
916
+ "version": "2.0.1",
917
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
918
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
919
+ "funding": [
920
+ {
921
+ "type": "GitHub Sponsors",
922
+ "url": "https://github.com/sponsors/unifiedjs"
923
+ },
924
+ {
925
+ "type": "OpenCollective",
926
+ "url": "https://opencollective.com/unified"
927
+ }
928
+ ],
929
+ "license": "MIT"
930
+ },
931
+ "node_modules/micromark-util-types": {
932
+ "version": "2.0.2",
933
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
934
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
935
+ "funding": [
936
+ {
937
+ "type": "GitHub Sponsors",
938
+ "url": "https://github.com/sponsors/unifiedjs"
939
+ },
940
+ {
941
+ "type": "OpenCollective",
942
+ "url": "https://opencollective.com/unified"
943
+ }
944
+ ],
945
+ "license": "MIT"
946
+ },
947
+ "node_modules/ms": {
948
+ "version": "2.1.3",
949
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
950
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
951
+ "license": "MIT"
952
+ },
953
+ "node_modules/parse-entities": {
954
+ "version": "4.0.2",
955
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
956
+ "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
957
+ "license": "MIT",
958
+ "dependencies": {
959
+ "@types/unist": "^2.0.0",
960
+ "character-entities-legacy": "^3.0.0",
961
+ "character-reference-invalid": "^2.0.0",
962
+ "decode-named-character-reference": "^1.0.0",
963
+ "is-alphanumerical": "^2.0.0",
964
+ "is-decimal": "^2.0.0",
965
+ "is-hexadecimal": "^2.0.0"
966
+ },
967
+ "funding": {
968
+ "type": "github",
969
+ "url": "https://github.com/sponsors/wooorm"
970
+ }
971
+ },
972
+ "node_modules/parse-entities/node_modules/@types/unist": {
973
+ "version": "2.0.11",
974
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
975
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
976
+ "license": "MIT"
977
+ },
978
+ "node_modules/property-information": {
979
+ "version": "7.1.0",
980
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
981
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
982
+ "license": "MIT",
983
+ "funding": {
984
+ "type": "github",
985
+ "url": "https://github.com/sponsors/wooorm"
986
+ }
987
+ },
988
+ "node_modules/react": {
989
+ "version": "19.2.3",
990
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz",
991
+ "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==",
992
+ "license": "MIT",
993
+ "peer": true,
994
+ "engines": {
995
+ "node": ">=0.10.0"
996
+ }
997
+ },
998
+ "node_modules/react-markdown": {
999
+ "version": "10.1.0",
1000
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz",
1001
+ "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==",
1002
+ "license": "MIT",
1003
+ "dependencies": {
1004
+ "@types/hast": "^3.0.0",
1005
+ "@types/mdast": "^4.0.0",
1006
+ "devlop": "^1.0.0",
1007
+ "hast-util-to-jsx-runtime": "^2.0.0",
1008
+ "html-url-attributes": "^3.0.0",
1009
+ "mdast-util-to-hast": "^13.0.0",
1010
+ "remark-parse": "^11.0.0",
1011
+ "remark-rehype": "^11.0.0",
1012
+ "unified": "^11.0.0",
1013
+ "unist-util-visit": "^5.0.0",
1014
+ "vfile": "^6.0.0"
1015
+ },
1016
+ "funding": {
1017
+ "type": "opencollective",
1018
+ "url": "https://opencollective.com/unified"
1019
+ },
1020
+ "peerDependencies": {
1021
+ "@types/react": ">=18",
1022
+ "react": ">=18"
1023
+ }
1024
+ },
1025
+ "node_modules/remark-parse": {
1026
+ "version": "11.0.0",
1027
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
1028
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
1029
+ "license": "MIT",
1030
+ "dependencies": {
1031
+ "@types/mdast": "^4.0.0",
1032
+ "mdast-util-from-markdown": "^2.0.0",
1033
+ "micromark-util-types": "^2.0.0",
1034
+ "unified": "^11.0.0"
1035
+ },
1036
+ "funding": {
1037
+ "type": "opencollective",
1038
+ "url": "https://opencollective.com/unified"
1039
+ }
1040
+ },
1041
+ "node_modules/remark-rehype": {
1042
+ "version": "11.1.2",
1043
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
1044
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
1045
+ "license": "MIT",
1046
+ "dependencies": {
1047
+ "@types/hast": "^3.0.0",
1048
+ "@types/mdast": "^4.0.0",
1049
+ "mdast-util-to-hast": "^13.0.0",
1050
+ "unified": "^11.0.0",
1051
+ "vfile": "^6.0.0"
1052
+ },
1053
+ "funding": {
1054
+ "type": "opencollective",
1055
+ "url": "https://opencollective.com/unified"
1056
+ }
1057
+ },
1058
+ "node_modules/space-separated-tokens": {
1059
+ "version": "2.0.2",
1060
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
1061
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
1062
+ "license": "MIT",
1063
+ "funding": {
1064
+ "type": "github",
1065
+ "url": "https://github.com/sponsors/wooorm"
1066
+ }
1067
+ },
1068
+ "node_modules/stringify-entities": {
1069
+ "version": "4.0.4",
1070
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
1071
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
1072
+ "license": "MIT",
1073
+ "dependencies": {
1074
+ "character-entities-html4": "^2.0.0",
1075
+ "character-entities-legacy": "^3.0.0"
1076
+ },
1077
+ "funding": {
1078
+ "type": "github",
1079
+ "url": "https://github.com/sponsors/wooorm"
1080
+ }
1081
+ },
1082
+ "node_modules/style-to-js": {
1083
+ "version": "1.1.21",
1084
+ "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz",
1085
+ "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==",
1086
+ "license": "MIT",
1087
+ "dependencies": {
1088
+ "style-to-object": "1.0.14"
1089
+ }
1090
+ },
1091
+ "node_modules/style-to-object": {
1092
+ "version": "1.0.14",
1093
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz",
1094
+ "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==",
1095
+ "license": "MIT",
1096
+ "dependencies": {
1097
+ "inline-style-parser": "0.2.7"
1098
+ }
1099
+ },
1100
+ "node_modules/trim-lines": {
1101
+ "version": "3.0.1",
1102
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
1103
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
1104
+ "license": "MIT",
1105
+ "funding": {
1106
+ "type": "github",
1107
+ "url": "https://github.com/sponsors/wooorm"
1108
+ }
1109
+ },
1110
+ "node_modules/trough": {
1111
+ "version": "2.2.0",
1112
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
1113
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
1114
+ "license": "MIT",
1115
+ "funding": {
1116
+ "type": "github",
1117
+ "url": "https://github.com/sponsors/wooorm"
1118
+ }
1119
+ },
1120
+ "node_modules/unified": {
1121
+ "version": "11.0.5",
1122
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
1123
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
1124
+ "license": "MIT",
1125
+ "dependencies": {
1126
+ "@types/unist": "^3.0.0",
1127
+ "bail": "^2.0.0",
1128
+ "devlop": "^1.0.0",
1129
+ "extend": "^3.0.0",
1130
+ "is-plain-obj": "^4.0.0",
1131
+ "trough": "^2.0.0",
1132
+ "vfile": "^6.0.0"
1133
+ },
1134
+ "funding": {
1135
+ "type": "opencollective",
1136
+ "url": "https://opencollective.com/unified"
1137
+ }
1138
+ },
1139
+ "node_modules/unist-util-is": {
1140
+ "version": "6.0.1",
1141
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
1142
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
1143
+ "license": "MIT",
1144
+ "dependencies": {
1145
+ "@types/unist": "^3.0.0"
1146
+ },
1147
+ "funding": {
1148
+ "type": "opencollective",
1149
+ "url": "https://opencollective.com/unified"
1150
+ }
1151
+ },
1152
+ "node_modules/unist-util-position": {
1153
+ "version": "5.0.0",
1154
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
1155
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
1156
+ "license": "MIT",
1157
+ "dependencies": {
1158
+ "@types/unist": "^3.0.0"
1159
+ },
1160
+ "funding": {
1161
+ "type": "opencollective",
1162
+ "url": "https://opencollective.com/unified"
1163
+ }
1164
+ },
1165
+ "node_modules/unist-util-stringify-position": {
1166
+ "version": "4.0.0",
1167
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
1168
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
1169
+ "license": "MIT",
1170
+ "dependencies": {
1171
+ "@types/unist": "^3.0.0"
1172
+ },
1173
+ "funding": {
1174
+ "type": "opencollective",
1175
+ "url": "https://opencollective.com/unified"
1176
+ }
1177
+ },
1178
+ "node_modules/unist-util-visit": {
1179
+ "version": "5.0.0",
1180
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
1181
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
1182
+ "license": "MIT",
1183
+ "dependencies": {
1184
+ "@types/unist": "^3.0.0",
1185
+ "unist-util-is": "^6.0.0",
1186
+ "unist-util-visit-parents": "^6.0.0"
1187
+ },
1188
+ "funding": {
1189
+ "type": "opencollective",
1190
+ "url": "https://opencollective.com/unified"
1191
+ }
1192
+ },
1193
+ "node_modules/unist-util-visit-parents": {
1194
+ "version": "6.0.2",
1195
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
1196
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
1197
+ "license": "MIT",
1198
+ "dependencies": {
1199
+ "@types/unist": "^3.0.0",
1200
+ "unist-util-is": "^6.0.0"
1201
+ },
1202
+ "funding": {
1203
+ "type": "opencollective",
1204
+ "url": "https://opencollective.com/unified"
1205
+ }
1206
+ },
1207
+ "node_modules/vfile": {
1208
+ "version": "6.0.3",
1209
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
1210
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
1211
+ "license": "MIT",
1212
+ "dependencies": {
1213
+ "@types/unist": "^3.0.0",
1214
+ "vfile-message": "^4.0.0"
1215
+ },
1216
+ "funding": {
1217
+ "type": "opencollective",
1218
+ "url": "https://opencollective.com/unified"
1219
+ }
1220
+ },
1221
+ "node_modules/vfile-message": {
1222
+ "version": "4.0.3",
1223
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
1224
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
1225
+ "license": "MIT",
1226
+ "dependencies": {
1227
+ "@types/unist": "^3.0.0",
1228
+ "unist-util-stringify-position": "^4.0.0"
1229
+ },
1230
+ "funding": {
1231
+ "type": "opencollective",
1232
+ "url": "https://opencollective.com/unified"
1233
+ }
1234
+ },
1235
+ "node_modules/zwitch": {
1236
+ "version": "2.0.4",
1237
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
1238
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
1239
+ "license": "MIT",
1240
+ "funding": {
1241
+ "type": "github",
1242
+ "url": "https://github.com/sponsors/wooorm"
1243
+ }
1244
+ }
1245
+ }
1246
+ }
node_modules/@types/debug/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) Microsoft Corporation.
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
node_modules/@types/debug/README.md ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Installation
2
+ > `npm install --save @types/debug`
3
+
4
+ # Summary
5
+ This package contains type definitions for debug (https://github.com/debug-js/debug).
6
+
7
+ # Details
8
+ Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug.
9
+ ## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug/index.d.ts)
10
+ ````ts
11
+ declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug };
12
+
13
+ export = debug;
14
+ export as namespace debug;
15
+
16
+ declare namespace debug {
17
+ interface Debug {
18
+ (namespace: string): Debugger;
19
+ coerce: (val: any) => any;
20
+ disable: () => string;
21
+ enable: (namespaces: string) => void;
22
+ enabled: (namespaces: string) => boolean;
23
+ formatArgs: (this: Debugger, args: any[]) => void;
24
+ log: (...args: any[]) => any;
25
+ selectColor: (namespace: string) => string | number;
26
+ humanize: typeof import("ms");
27
+
28
+ names: RegExp[];
29
+ skips: RegExp[];
30
+
31
+ formatters: Formatters;
32
+
33
+ inspectOpts?: {
34
+ hideDate?: boolean | number | null;
35
+ colors?: boolean | number | null;
36
+ depth?: boolean | number | null;
37
+ showHidden?: boolean | number | null;
38
+ };
39
+ }
40
+
41
+ type IDebug = Debug;
42
+
43
+ interface Formatters {
44
+ [formatter: string]: (v: any) => string;
45
+ }
46
+
47
+ type IDebugger = Debugger;
48
+
49
+ interface Debugger {
50
+ (formatter: any, ...args: any[]): void;
51
+
52
+ color: string;
53
+ diff: number;
54
+ enabled: boolean;
55
+ log: (...args: any[]) => any;
56
+ namespace: string;
57
+ destroy: () => boolean;
58
+ extend: (namespace: string, delimiter?: string) => Debugger;
59
+ }
60
+ }
61
+
62
+ ````
63
+
64
+ ### Additional Details
65
+ * Last updated: Thu, 09 Nov 2023 03:06:57 GMT
66
+ * Dependencies: [@types/ms](https://npmjs.com/package/@types/ms)
67
+
68
+ # Credits
69
+ These definitions were written by [Seon-Wook Park](https://github.com/swook), [Gal Talmor](https://github.com/galtalmor), [John McLaughlin](https://github.com/zamb3zi), [Brasten Sager](https://github.com/brasten), [Nicolas Penin](https://github.com/npenin), [Kristian Brünn](https://github.com/kristianmitk), and [Caleb Gregory](https://github.com/calebgregory).
node_modules/@types/debug/index.d.ts ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug };
2
+
3
+ export = debug;
4
+ export as namespace debug;
5
+
6
+ declare namespace debug {
7
+ interface Debug {
8
+ (namespace: string): Debugger;
9
+ coerce: (val: any) => any;
10
+ disable: () => string;
11
+ enable: (namespaces: string) => void;
12
+ enabled: (namespaces: string) => boolean;
13
+ formatArgs: (this: Debugger, args: any[]) => void;
14
+ log: (...args: any[]) => any;
15
+ selectColor: (namespace: string) => string | number;
16
+ humanize: typeof import("ms");
17
+
18
+ names: RegExp[];
19
+ skips: RegExp[];
20
+
21
+ formatters: Formatters;
22
+
23
+ inspectOpts?: {
24
+ hideDate?: boolean | number | null;
25
+ colors?: boolean | number | null;
26
+ depth?: boolean | number | null;
27
+ showHidden?: boolean | number | null;
28
+ };
29
+ }
30
+
31
+ type IDebug = Debug;
32
+
33
+ interface Formatters {
34
+ [formatter: string]: (v: any) => string;
35
+ }
36
+
37
+ type IDebugger = Debugger;
38
+
39
+ interface Debugger {
40
+ (formatter: any, ...args: any[]): void;
41
+
42
+ color: string;
43
+ diff: number;
44
+ enabled: boolean;
45
+ log: (...args: any[]) => any;
46
+ namespace: string;
47
+ destroy: () => boolean;
48
+ extend: (namespace: string, delimiter?: string) => Debugger;
49
+ }
50
+ }
node_modules/@types/debug/package.json ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "@types/debug",
3
+ "version": "4.1.12",
4
+ "description": "TypeScript definitions for debug",
5
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug",
6
+ "license": "MIT",
7
+ "contributors": [
8
+ {
9
+ "name": "Seon-Wook Park",
10
+ "githubUsername": "swook",
11
+ "url": "https://github.com/swook"
12
+ },
13
+ {
14
+ "name": "Gal Talmor",
15
+ "githubUsername": "galtalmor",
16
+ "url": "https://github.com/galtalmor"
17
+ },
18
+ {
19
+ "name": "John McLaughlin",
20
+ "githubUsername": "zamb3zi",
21
+ "url": "https://github.com/zamb3zi"
22
+ },
23
+ {
24
+ "name": "Brasten Sager",
25
+ "githubUsername": "brasten",
26
+ "url": "https://github.com/brasten"
27
+ },
28
+ {
29
+ "name": "Nicolas Penin",
30
+ "githubUsername": "npenin",
31
+ "url": "https://github.com/npenin"
32
+ },
33
+ {
34
+ "name": "Kristian Brünn",
35
+ "githubUsername": "kristianmitk",
36
+ "url": "https://github.com/kristianmitk"
37
+ },
38
+ {
39
+ "name": "Caleb Gregory",
40
+ "githubUsername": "calebgregory",
41
+ "url": "https://github.com/calebgregory"
42
+ }
43
+ ],
44
+ "main": "",
45
+ "types": "index.d.ts",
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
49
+ "directory": "types/debug"
50
+ },
51
+ "scripts": {},
52
+ "dependencies": {
53
+ "@types/ms": "*"
54
+ },
55
+ "typesPublisherContentHash": "1053110a8e5e302f35fb57f45389304fa5a4f53bb8982b76b8065bcfd7083731",
56
+ "typeScriptVersion": "4.5"
57
+ }
node_modules/@types/estree-jsx/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) Microsoft Corporation.
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
node_modules/@types/estree-jsx/README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Installation
2
+ > `npm install --save @types/estree-jsx`
3
+
4
+ # Summary
5
+ This package contains type definitions for estree-jsx (https://github.com/facebook/jsx).
6
+
7
+ # Details
8
+ Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree-jsx.
9
+
10
+ ### Additional Details
11
+ * Last updated: Fri, 23 Feb 2024 02:11:41 GMT
12
+ * Dependencies: [@types/estree](https://npmjs.com/package/@types/estree)
13
+
14
+ # Credits
15
+ These definitions were written by [Tony Ross](https://github.com/antross).
node_modules/@types/estree-jsx/index.d.ts ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Based on https://github.com/facebook/jsx/blob/master/AST.md.
2
+ // Extends existing types for ESTree AST from `@types/estree`.
3
+
4
+ import { BaseExpression, BaseNode, Expression, Literal } from "estree";
5
+
6
+ export * from "estree";
7
+
8
+ declare module "estree" {
9
+ interface ExpressionMap {
10
+ JSXElement: JSXElement;
11
+ JSXFragment: JSXFragment;
12
+ }
13
+
14
+ interface NodeMap {
15
+ JSXIdentifier: JSXIdentifier;
16
+ JSXNamespacedName: JSXNamespacedName;
17
+ JSXMemberExpression: JSXMemberExpression;
18
+ JSXEmptyExpression: JSXEmptyExpression;
19
+ JSXExpressionContainer: JSXExpressionContainer;
20
+ JSXSpreadAttribute: JSXSpreadAttribute;
21
+ JSXAttribute: JSXAttribute;
22
+ JSXOpeningElement: JSXOpeningElement;
23
+ JSXOpeningFragment: JSXOpeningFragment;
24
+ JSXClosingElement: JSXClosingElement;
25
+ JSXClosingFragment: JSXClosingFragment;
26
+ JSXElement: JSXElement;
27
+ JSXFragment: JSXFragment;
28
+ JSXText: JSXText;
29
+ }
30
+ }
31
+
32
+ export interface JSXIdentifier extends BaseNode {
33
+ type: "JSXIdentifier";
34
+ name: string;
35
+ }
36
+
37
+ export interface JSXMemberExpression extends BaseExpression {
38
+ type: "JSXMemberExpression";
39
+ object: JSXMemberExpression | JSXIdentifier;
40
+ property: JSXIdentifier;
41
+ }
42
+
43
+ export interface JSXNamespacedName extends BaseExpression {
44
+ type: "JSXNamespacedName";
45
+ namespace: JSXIdentifier;
46
+ name: JSXIdentifier;
47
+ }
48
+
49
+ export interface JSXEmptyExpression extends BaseNode {
50
+ type: "JSXEmptyExpression";
51
+ }
52
+
53
+ export interface JSXExpressionContainer extends BaseNode {
54
+ type: "JSXExpressionContainer";
55
+ expression: Expression | JSXEmptyExpression;
56
+ }
57
+
58
+ export interface JSXSpreadChild extends BaseNode {
59
+ type: "JSXSpreadChild";
60
+ expression: Expression;
61
+ }
62
+
63
+ interface JSXBoundaryElement extends BaseNode {
64
+ name: JSXIdentifier | JSXMemberExpression | JSXNamespacedName;
65
+ }
66
+
67
+ export interface JSXOpeningElement extends JSXBoundaryElement {
68
+ type: "JSXOpeningElement";
69
+ attributes: Array<JSXAttribute | JSXSpreadAttribute>;
70
+ selfClosing: boolean;
71
+ }
72
+
73
+ export interface JSXClosingElement extends JSXBoundaryElement {
74
+ type: "JSXClosingElement";
75
+ }
76
+
77
+ export interface JSXAttribute extends BaseNode {
78
+ type: "JSXAttribute";
79
+ name: JSXIdentifier | JSXNamespacedName;
80
+ value: Literal | JSXExpressionContainer | JSXElement | JSXFragment | null;
81
+ }
82
+
83
+ export interface JSXSpreadAttribute extends BaseNode {
84
+ type: "JSXSpreadAttribute";
85
+ argument: Expression;
86
+ }
87
+
88
+ export interface JSXText extends BaseNode {
89
+ type: "JSXText";
90
+ value: string;
91
+ raw: string;
92
+ }
93
+
94
+ export interface JSXElement extends BaseExpression {
95
+ type: "JSXElement";
96
+ openingElement: JSXOpeningElement;
97
+ children: Array<JSXText | JSXExpressionContainer | JSXSpreadChild | JSXElement | JSXFragment>;
98
+ closingElement: JSXClosingElement | null;
99
+ }
100
+
101
+ export interface JSXFragment extends BaseExpression {
102
+ type: "JSXFragment";
103
+ openingFragment: JSXOpeningFragment;
104
+ children: Array<JSXText | JSXExpressionContainer | JSXSpreadChild | JSXElement | JSXFragment>;
105
+ closingFragment: JSXClosingFragment;
106
+ }
107
+
108
+ export interface JSXOpeningFragment extends BaseNode {
109
+ type: "JSXOpeningFragment";
110
+ }
111
+
112
+ export interface JSXClosingFragment extends BaseNode {
113
+ type: "JSXClosingFragment";
114
+ }
node_modules/@types/estree-jsx/package.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "@types/estree-jsx",
3
+ "version": "1.0.5",
4
+ "description": "TypeScript definitions for estree-jsx",
5
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree-jsx",
6
+ "license": "MIT",
7
+ "contributors": [
8
+ {
9
+ "name": "Tony Ross",
10
+ "githubUsername": "antross",
11
+ "url": "https://github.com/antross"
12
+ }
13
+ ],
14
+ "main": "",
15
+ "types": "index.d.ts",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
19
+ "directory": "types/estree-jsx"
20
+ },
21
+ "scripts": {},
22
+ "dependencies": {
23
+ "@types/estree": "*"
24
+ },
25
+ "typesPublisherContentHash": "42fda803cc34f935c5a60a45e66b78e18fac56ef350d2d47c00759e16d4fef7f",
26
+ "typeScriptVersion": "4.6"
27
+ }
node_modules/@types/estree/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) Microsoft Corporation.
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
node_modules/@types/estree/README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Installation
2
+ > `npm install --save @types/estree`
3
+
4
+ # Summary
5
+ This package contains type definitions for estree (https://github.com/estree/estree).
6
+
7
+ # Details
8
+ Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree.
9
+
10
+ ### Additional Details
11
+ * Last updated: Fri, 06 Jun 2025 00:04:33 GMT
12
+ * Dependencies: none
13
+
14
+ # Credits
15
+ These definitions were written by [RReverser](https://github.com/RReverser).
node_modules/@types/estree/flow.d.ts ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ declare namespace ESTree {
2
+ interface FlowTypeAnnotation extends Node {}
3
+
4
+ interface FlowBaseTypeAnnotation extends FlowTypeAnnotation {}
5
+
6
+ interface FlowLiteralTypeAnnotation extends FlowTypeAnnotation, Literal {}
7
+
8
+ interface FlowDeclaration extends Declaration {}
9
+
10
+ interface AnyTypeAnnotation extends FlowBaseTypeAnnotation {}
11
+
12
+ interface ArrayTypeAnnotation extends FlowTypeAnnotation {
13
+ elementType: FlowTypeAnnotation;
14
+ }
15
+
16
+ interface BooleanLiteralTypeAnnotation extends FlowLiteralTypeAnnotation {}
17
+
18
+ interface BooleanTypeAnnotation extends FlowBaseTypeAnnotation {}
19
+
20
+ interface ClassImplements extends Node {
21
+ id: Identifier;
22
+ typeParameters?: TypeParameterInstantiation | null;
23
+ }
24
+
25
+ interface ClassProperty {
26
+ key: Expression;
27
+ value?: Expression | null;
28
+ typeAnnotation?: TypeAnnotation | null;
29
+ computed: boolean;
30
+ static: boolean;
31
+ }
32
+
33
+ interface DeclareClass extends FlowDeclaration {
34
+ id: Identifier;
35
+ typeParameters?: TypeParameterDeclaration | null;
36
+ body: ObjectTypeAnnotation;
37
+ extends: InterfaceExtends[];
38
+ }
39
+
40
+ interface DeclareFunction extends FlowDeclaration {
41
+ id: Identifier;
42
+ }
43
+
44
+ interface DeclareModule extends FlowDeclaration {
45
+ id: Literal | Identifier;
46
+ body: BlockStatement;
47
+ }
48
+
49
+ interface DeclareVariable extends FlowDeclaration {
50
+ id: Identifier;
51
+ }
52
+
53
+ interface FunctionTypeAnnotation extends FlowTypeAnnotation {
54
+ params: FunctionTypeParam[];
55
+ returnType: FlowTypeAnnotation;
56
+ rest?: FunctionTypeParam | null;
57
+ typeParameters?: TypeParameterDeclaration | null;
58
+ }
59
+
60
+ interface FunctionTypeParam {
61
+ name: Identifier;
62
+ typeAnnotation: FlowTypeAnnotation;
63
+ optional: boolean;
64
+ }
65
+
66
+ interface GenericTypeAnnotation extends FlowTypeAnnotation {
67
+ id: Identifier | QualifiedTypeIdentifier;
68
+ typeParameters?: TypeParameterInstantiation | null;
69
+ }
70
+
71
+ interface InterfaceExtends extends Node {
72
+ id: Identifier | QualifiedTypeIdentifier;
73
+ typeParameters?: TypeParameterInstantiation | null;
74
+ }
75
+
76
+ interface InterfaceDeclaration extends FlowDeclaration {
77
+ id: Identifier;
78
+ typeParameters?: TypeParameterDeclaration | null;
79
+ extends: InterfaceExtends[];
80
+ body: ObjectTypeAnnotation;
81
+ }
82
+
83
+ interface IntersectionTypeAnnotation extends FlowTypeAnnotation {
84
+ types: FlowTypeAnnotation[];
85
+ }
86
+
87
+ interface MixedTypeAnnotation extends FlowBaseTypeAnnotation {}
88
+
89
+ interface NullableTypeAnnotation extends FlowTypeAnnotation {
90
+ typeAnnotation: TypeAnnotation;
91
+ }
92
+
93
+ interface NumberLiteralTypeAnnotation extends FlowLiteralTypeAnnotation {}
94
+
95
+ interface NumberTypeAnnotation extends FlowBaseTypeAnnotation {}
96
+
97
+ interface StringLiteralTypeAnnotation extends FlowLiteralTypeAnnotation {}
98
+
99
+ interface StringTypeAnnotation extends FlowBaseTypeAnnotation {}
100
+
101
+ interface TupleTypeAnnotation extends FlowTypeAnnotation {
102
+ types: FlowTypeAnnotation[];
103
+ }
104
+
105
+ interface TypeofTypeAnnotation extends FlowTypeAnnotation {
106
+ argument: FlowTypeAnnotation;
107
+ }
108
+
109
+ interface TypeAlias extends FlowDeclaration {
110
+ id: Identifier;
111
+ typeParameters?: TypeParameterDeclaration | null;
112
+ right: FlowTypeAnnotation;
113
+ }
114
+
115
+ interface TypeAnnotation extends Node {
116
+ typeAnnotation: FlowTypeAnnotation;
117
+ }
118
+
119
+ interface TypeCastExpression extends Expression {
120
+ expression: Expression;
121
+ typeAnnotation: TypeAnnotation;
122
+ }
123
+
124
+ interface TypeParameterDeclaration extends Node {
125
+ params: Identifier[];
126
+ }
127
+
128
+ interface TypeParameterInstantiation extends Node {
129
+ params: FlowTypeAnnotation[];
130
+ }
131
+
132
+ interface ObjectTypeAnnotation extends FlowTypeAnnotation {
133
+ properties: ObjectTypeProperty[];
134
+ indexers: ObjectTypeIndexer[];
135
+ callProperties: ObjectTypeCallProperty[];
136
+ }
137
+
138
+ interface ObjectTypeCallProperty extends Node {
139
+ value: FunctionTypeAnnotation;
140
+ static: boolean;
141
+ }
142
+
143
+ interface ObjectTypeIndexer extends Node {
144
+ id: Identifier;
145
+ key: FlowTypeAnnotation;
146
+ value: FlowTypeAnnotation;
147
+ static: boolean;
148
+ }
149
+
150
+ interface ObjectTypeProperty extends Node {
151
+ key: Expression;
152
+ value: FlowTypeAnnotation;
153
+ optional: boolean;
154
+ static: boolean;
155
+ }
156
+
157
+ interface QualifiedTypeIdentifier extends Node {
158
+ qualification: Identifier | QualifiedTypeIdentifier;
159
+ id: Identifier;
160
+ }
161
+
162
+ interface UnionTypeAnnotation extends FlowTypeAnnotation {
163
+ types: FlowTypeAnnotation[];
164
+ }
165
+
166
+ interface VoidTypeAnnotation extends FlowBaseTypeAnnotation {}
167
+ }
node_modules/@types/estree/index.d.ts ADDED
@@ -0,0 +1,694 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // This definition file follows a somewhat unusual format. ESTree allows
2
+ // runtime type checks based on the `type` parameter. In order to explain this
3
+ // to typescript we want to use discriminated union types:
4
+ // https://github.com/Microsoft/TypeScript/pull/9163
5
+ //
6
+ // For ESTree this is a bit tricky because the high level interfaces like
7
+ // Node or Function are pulling double duty. We want to pass common fields down
8
+ // to the interfaces that extend them (like Identifier or
9
+ // ArrowFunctionExpression), but you can't extend a type union or enforce
10
+ // common fields on them. So we've split the high level interfaces into two
11
+ // types, a base type which passes down inherited fields, and a type union of
12
+ // all types which extend the base type. Only the type union is exported, and
13
+ // the union is how other types refer to the collection of inheriting types.
14
+ //
15
+ // This makes the definitions file here somewhat more difficult to maintain,
16
+ // but it has the notable advantage of making ESTree much easier to use as
17
+ // an end user.
18
+
19
+ export interface BaseNodeWithoutComments {
20
+ // Every leaf interface that extends BaseNode must specify a type property.
21
+ // The type property should be a string literal. For example, Identifier
22
+ // has: `type: "Identifier"`
23
+ type: string;
24
+ loc?: SourceLocation | null | undefined;
25
+ range?: [number, number] | undefined;
26
+ }
27
+
28
+ export interface BaseNode extends BaseNodeWithoutComments {
29
+ leadingComments?: Comment[] | undefined;
30
+ trailingComments?: Comment[] | undefined;
31
+ }
32
+
33
+ export interface NodeMap {
34
+ AssignmentProperty: AssignmentProperty;
35
+ CatchClause: CatchClause;
36
+ Class: Class;
37
+ ClassBody: ClassBody;
38
+ Expression: Expression;
39
+ Function: Function;
40
+ Identifier: Identifier;
41
+ Literal: Literal;
42
+ MethodDefinition: MethodDefinition;
43
+ ModuleDeclaration: ModuleDeclaration;
44
+ ModuleSpecifier: ModuleSpecifier;
45
+ Pattern: Pattern;
46
+ PrivateIdentifier: PrivateIdentifier;
47
+ Program: Program;
48
+ Property: Property;
49
+ PropertyDefinition: PropertyDefinition;
50
+ SpreadElement: SpreadElement;
51
+ Statement: Statement;
52
+ Super: Super;
53
+ SwitchCase: SwitchCase;
54
+ TemplateElement: TemplateElement;
55
+ VariableDeclarator: VariableDeclarator;
56
+ }
57
+
58
+ export type Node = NodeMap[keyof NodeMap];
59
+
60
+ export interface Comment extends BaseNodeWithoutComments {
61
+ type: "Line" | "Block";
62
+ value: string;
63
+ }
64
+
65
+ export interface SourceLocation {
66
+ source?: string | null | undefined;
67
+ start: Position;
68
+ end: Position;
69
+ }
70
+
71
+ export interface Position {
72
+ /** >= 1 */
73
+ line: number;
74
+ /** >= 0 */
75
+ column: number;
76
+ }
77
+
78
+ export interface Program extends BaseNode {
79
+ type: "Program";
80
+ sourceType: "script" | "module";
81
+ body: Array<Directive | Statement | ModuleDeclaration>;
82
+ comments?: Comment[] | undefined;
83
+ }
84
+
85
+ export interface Directive extends BaseNode {
86
+ type: "ExpressionStatement";
87
+ expression: Literal;
88
+ directive: string;
89
+ }
90
+
91
+ export interface BaseFunction extends BaseNode {
92
+ params: Pattern[];
93
+ generator?: boolean | undefined;
94
+ async?: boolean | undefined;
95
+ // The body is either BlockStatement or Expression because arrow functions
96
+ // can have a body that's either. FunctionDeclarations and
97
+ // FunctionExpressions have only BlockStatement bodies.
98
+ body: BlockStatement | Expression;
99
+ }
100
+
101
+ export type Function = FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;
102
+
103
+ export type Statement =
104
+ | ExpressionStatement
105
+ | BlockStatement
106
+ | StaticBlock
107
+ | EmptyStatement
108
+ | DebuggerStatement
109
+ | WithStatement
110
+ | ReturnStatement
111
+ | LabeledStatement
112
+ | BreakStatement
113
+ | ContinueStatement
114
+ | IfStatement
115
+ | SwitchStatement
116
+ | ThrowStatement
117
+ | TryStatement
118
+ | WhileStatement
119
+ | DoWhileStatement
120
+ | ForStatement
121
+ | ForInStatement
122
+ | ForOfStatement
123
+ | Declaration;
124
+
125
+ export interface BaseStatement extends BaseNode {}
126
+
127
+ export interface EmptyStatement extends BaseStatement {
128
+ type: "EmptyStatement";
129
+ }
130
+
131
+ export interface BlockStatement extends BaseStatement {
132
+ type: "BlockStatement";
133
+ body: Statement[];
134
+ innerComments?: Comment[] | undefined;
135
+ }
136
+
137
+ export interface StaticBlock extends Omit<BlockStatement, "type"> {
138
+ type: "StaticBlock";
139
+ }
140
+
141
+ export interface ExpressionStatement extends BaseStatement {
142
+ type: "ExpressionStatement";
143
+ expression: Expression;
144
+ }
145
+
146
+ export interface IfStatement extends BaseStatement {
147
+ type: "IfStatement";
148
+ test: Expression;
149
+ consequent: Statement;
150
+ alternate?: Statement | null | undefined;
151
+ }
152
+
153
+ export interface LabeledStatement extends BaseStatement {
154
+ type: "LabeledStatement";
155
+ label: Identifier;
156
+ body: Statement;
157
+ }
158
+
159
+ export interface BreakStatement extends BaseStatement {
160
+ type: "BreakStatement";
161
+ label?: Identifier | null | undefined;
162
+ }
163
+
164
+ export interface ContinueStatement extends BaseStatement {
165
+ type: "ContinueStatement";
166
+ label?: Identifier | null | undefined;
167
+ }
168
+
169
+ export interface WithStatement extends BaseStatement {
170
+ type: "WithStatement";
171
+ object: Expression;
172
+ body: Statement;
173
+ }
174
+
175
+ export interface SwitchStatement extends BaseStatement {
176
+ type: "SwitchStatement";
177
+ discriminant: Expression;
178
+ cases: SwitchCase[];
179
+ }
180
+
181
+ export interface ReturnStatement extends BaseStatement {
182
+ type: "ReturnStatement";
183
+ argument?: Expression | null | undefined;
184
+ }
185
+
186
+ export interface ThrowStatement extends BaseStatement {
187
+ type: "ThrowStatement";
188
+ argument: Expression;
189
+ }
190
+
191
+ export interface TryStatement extends BaseStatement {
192
+ type: "TryStatement";
193
+ block: BlockStatement;
194
+ handler?: CatchClause | null | undefined;
195
+ finalizer?: BlockStatement | null | undefined;
196
+ }
197
+
198
+ export interface WhileStatement extends BaseStatement {
199
+ type: "WhileStatement";
200
+ test: Expression;
201
+ body: Statement;
202
+ }
203
+
204
+ export interface DoWhileStatement extends BaseStatement {
205
+ type: "DoWhileStatement";
206
+ body: Statement;
207
+ test: Expression;
208
+ }
209
+
210
+ export interface ForStatement extends BaseStatement {
211
+ type: "ForStatement";
212
+ init?: VariableDeclaration | Expression | null | undefined;
213
+ test?: Expression | null | undefined;
214
+ update?: Expression | null | undefined;
215
+ body: Statement;
216
+ }
217
+
218
+ export interface BaseForXStatement extends BaseStatement {
219
+ left: VariableDeclaration | Pattern;
220
+ right: Expression;
221
+ body: Statement;
222
+ }
223
+
224
+ export interface ForInStatement extends BaseForXStatement {
225
+ type: "ForInStatement";
226
+ }
227
+
228
+ export interface DebuggerStatement extends BaseStatement {
229
+ type: "DebuggerStatement";
230
+ }
231
+
232
+ export type Declaration = FunctionDeclaration | VariableDeclaration | ClassDeclaration;
233
+
234
+ export interface BaseDeclaration extends BaseStatement {}
235
+
236
+ export interface MaybeNamedFunctionDeclaration extends BaseFunction, BaseDeclaration {
237
+ type: "FunctionDeclaration";
238
+ /** It is null when a function declaration is a part of the `export default function` statement */
239
+ id: Identifier | null;
240
+ body: BlockStatement;
241
+ }
242
+
243
+ export interface FunctionDeclaration extends MaybeNamedFunctionDeclaration {
244
+ id: Identifier;
245
+ }
246
+
247
+ export interface VariableDeclaration extends BaseDeclaration {
248
+ type: "VariableDeclaration";
249
+ declarations: VariableDeclarator[];
250
+ kind: "var" | "let" | "const" | "using" | "await using";
251
+ }
252
+
253
+ export interface VariableDeclarator extends BaseNode {
254
+ type: "VariableDeclarator";
255
+ id: Pattern;
256
+ init?: Expression | null | undefined;
257
+ }
258
+
259
+ export interface ExpressionMap {
260
+ ArrayExpression: ArrayExpression;
261
+ ArrowFunctionExpression: ArrowFunctionExpression;
262
+ AssignmentExpression: AssignmentExpression;
263
+ AwaitExpression: AwaitExpression;
264
+ BinaryExpression: BinaryExpression;
265
+ CallExpression: CallExpression;
266
+ ChainExpression: ChainExpression;
267
+ ClassExpression: ClassExpression;
268
+ ConditionalExpression: ConditionalExpression;
269
+ FunctionExpression: FunctionExpression;
270
+ Identifier: Identifier;
271
+ ImportExpression: ImportExpression;
272
+ Literal: Literal;
273
+ LogicalExpression: LogicalExpression;
274
+ MemberExpression: MemberExpression;
275
+ MetaProperty: MetaProperty;
276
+ NewExpression: NewExpression;
277
+ ObjectExpression: ObjectExpression;
278
+ SequenceExpression: SequenceExpression;
279
+ TaggedTemplateExpression: TaggedTemplateExpression;
280
+ TemplateLiteral: TemplateLiteral;
281
+ ThisExpression: ThisExpression;
282
+ UnaryExpression: UnaryExpression;
283
+ UpdateExpression: UpdateExpression;
284
+ YieldExpression: YieldExpression;
285
+ }
286
+
287
+ export type Expression = ExpressionMap[keyof ExpressionMap];
288
+
289
+ export interface BaseExpression extends BaseNode {}
290
+
291
+ export type ChainElement = SimpleCallExpression | MemberExpression;
292
+
293
+ export interface ChainExpression extends BaseExpression {
294
+ type: "ChainExpression";
295
+ expression: ChainElement;
296
+ }
297
+
298
+ export interface ThisExpression extends BaseExpression {
299
+ type: "ThisExpression";
300
+ }
301
+
302
+ export interface ArrayExpression extends BaseExpression {
303
+ type: "ArrayExpression";
304
+ elements: Array<Expression | SpreadElement | null>;
305
+ }
306
+
307
+ export interface ObjectExpression extends BaseExpression {
308
+ type: "ObjectExpression";
309
+ properties: Array<Property | SpreadElement>;
310
+ }
311
+
312
+ export interface PrivateIdentifier extends BaseNode {
313
+ type: "PrivateIdentifier";
314
+ name: string;
315
+ }
316
+
317
+ export interface Property extends BaseNode {
318
+ type: "Property";
319
+ key: Expression | PrivateIdentifier;
320
+ value: Expression | Pattern; // Could be an AssignmentProperty
321
+ kind: "init" | "get" | "set";
322
+ method: boolean;
323
+ shorthand: boolean;
324
+ computed: boolean;
325
+ }
326
+
327
+ export interface PropertyDefinition extends BaseNode {
328
+ type: "PropertyDefinition";
329
+ key: Expression | PrivateIdentifier;
330
+ value?: Expression | null | undefined;
331
+ computed: boolean;
332
+ static: boolean;
333
+ }
334
+
335
+ export interface FunctionExpression extends BaseFunction, BaseExpression {
336
+ id?: Identifier | null | undefined;
337
+ type: "FunctionExpression";
338
+ body: BlockStatement;
339
+ }
340
+
341
+ export interface SequenceExpression extends BaseExpression {
342
+ type: "SequenceExpression";
343
+ expressions: Expression[];
344
+ }
345
+
346
+ export interface UnaryExpression extends BaseExpression {
347
+ type: "UnaryExpression";
348
+ operator: UnaryOperator;
349
+ prefix: true;
350
+ argument: Expression;
351
+ }
352
+
353
+ export interface BinaryExpression extends BaseExpression {
354
+ type: "BinaryExpression";
355
+ operator: BinaryOperator;
356
+ left: Expression | PrivateIdentifier;
357
+ right: Expression;
358
+ }
359
+
360
+ export interface AssignmentExpression extends BaseExpression {
361
+ type: "AssignmentExpression";
362
+ operator: AssignmentOperator;
363
+ left: Pattern | MemberExpression;
364
+ right: Expression;
365
+ }
366
+
367
+ export interface UpdateExpression extends BaseExpression {
368
+ type: "UpdateExpression";
369
+ operator: UpdateOperator;
370
+ argument: Expression;
371
+ prefix: boolean;
372
+ }
373
+
374
+ export interface LogicalExpression extends BaseExpression {
375
+ type: "LogicalExpression";
376
+ operator: LogicalOperator;
377
+ left: Expression;
378
+ right: Expression;
379
+ }
380
+
381
+ export interface ConditionalExpression extends BaseExpression {
382
+ type: "ConditionalExpression";
383
+ test: Expression;
384
+ alternate: Expression;
385
+ consequent: Expression;
386
+ }
387
+
388
+ export interface BaseCallExpression extends BaseExpression {
389
+ callee: Expression | Super;
390
+ arguments: Array<Expression | SpreadElement>;
391
+ }
392
+ export type CallExpression = SimpleCallExpression | NewExpression;
393
+
394
+ export interface SimpleCallExpression extends BaseCallExpression {
395
+ type: "CallExpression";
396
+ optional: boolean;
397
+ }
398
+
399
+ export interface NewExpression extends BaseCallExpression {
400
+ type: "NewExpression";
401
+ }
402
+
403
+ export interface MemberExpression extends BaseExpression, BasePattern {
404
+ type: "MemberExpression";
405
+ object: Expression | Super;
406
+ property: Expression | PrivateIdentifier;
407
+ computed: boolean;
408
+ optional: boolean;
409
+ }
410
+
411
+ export type Pattern = Identifier | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern | MemberExpression;
412
+
413
+ export interface BasePattern extends BaseNode {}
414
+
415
+ export interface SwitchCase extends BaseNode {
416
+ type: "SwitchCase";
417
+ test?: Expression | null | undefined;
418
+ consequent: Statement[];
419
+ }
420
+
421
+ export interface CatchClause extends BaseNode {
422
+ type: "CatchClause";
423
+ param: Pattern | null;
424
+ body: BlockStatement;
425
+ }
426
+
427
+ export interface Identifier extends BaseNode, BaseExpression, BasePattern {
428
+ type: "Identifier";
429
+ name: string;
430
+ }
431
+
432
+ export type Literal = SimpleLiteral | RegExpLiteral | BigIntLiteral;
433
+
434
+ export interface SimpleLiteral extends BaseNode, BaseExpression {
435
+ type: "Literal";
436
+ value: string | boolean | number | null;
437
+ raw?: string | undefined;
438
+ }
439
+
440
+ export interface RegExpLiteral extends BaseNode, BaseExpression {
441
+ type: "Literal";
442
+ value?: RegExp | null | undefined;
443
+ regex: {
444
+ pattern: string;
445
+ flags: string;
446
+ };
447
+ raw?: string | undefined;
448
+ }
449
+
450
+ export interface BigIntLiteral extends BaseNode, BaseExpression {
451
+ type: "Literal";
452
+ value?: bigint | null | undefined;
453
+ bigint: string;
454
+ raw?: string | undefined;
455
+ }
456
+
457
+ export type UnaryOperator = "-" | "+" | "!" | "~" | "typeof" | "void" | "delete";
458
+
459
+ export type BinaryOperator =
460
+ | "=="
461
+ | "!="
462
+ | "==="
463
+ | "!=="
464
+ | "<"
465
+ | "<="
466
+ | ">"
467
+ | ">="
468
+ | "<<"
469
+ | ">>"
470
+ | ">>>"
471
+ | "+"
472
+ | "-"
473
+ | "*"
474
+ | "/"
475
+ | "%"
476
+ | "**"
477
+ | "|"
478
+ | "^"
479
+ | "&"
480
+ | "in"
481
+ | "instanceof";
482
+
483
+ export type LogicalOperator = "||" | "&&" | "??";
484
+
485
+ export type AssignmentOperator =
486
+ | "="
487
+ | "+="
488
+ | "-="
489
+ | "*="
490
+ | "/="
491
+ | "%="
492
+ | "**="
493
+ | "<<="
494
+ | ">>="
495
+ | ">>>="
496
+ | "|="
497
+ | "^="
498
+ | "&="
499
+ | "||="
500
+ | "&&="
501
+ | "??=";
502
+
503
+ export type UpdateOperator = "++" | "--";
504
+
505
+ export interface ForOfStatement extends BaseForXStatement {
506
+ type: "ForOfStatement";
507
+ await: boolean;
508
+ }
509
+
510
+ export interface Super extends BaseNode {
511
+ type: "Super";
512
+ }
513
+
514
+ export interface SpreadElement extends BaseNode {
515
+ type: "SpreadElement";
516
+ argument: Expression;
517
+ }
518
+
519
+ export interface ArrowFunctionExpression extends BaseExpression, BaseFunction {
520
+ type: "ArrowFunctionExpression";
521
+ expression: boolean;
522
+ body: BlockStatement | Expression;
523
+ }
524
+
525
+ export interface YieldExpression extends BaseExpression {
526
+ type: "YieldExpression";
527
+ argument?: Expression | null | undefined;
528
+ delegate: boolean;
529
+ }
530
+
531
+ export interface TemplateLiteral extends BaseExpression {
532
+ type: "TemplateLiteral";
533
+ quasis: TemplateElement[];
534
+ expressions: Expression[];
535
+ }
536
+
537
+ export interface TaggedTemplateExpression extends BaseExpression {
538
+ type: "TaggedTemplateExpression";
539
+ tag: Expression;
540
+ quasi: TemplateLiteral;
541
+ }
542
+
543
+ export interface TemplateElement extends BaseNode {
544
+ type: "TemplateElement";
545
+ tail: boolean;
546
+ value: {
547
+ /** It is null when the template literal is tagged and the text has an invalid escape (e.g. - tag`\unicode and \u{55}`) */
548
+ cooked?: string | null | undefined;
549
+ raw: string;
550
+ };
551
+ }
552
+
553
+ export interface AssignmentProperty extends Property {
554
+ value: Pattern;
555
+ kind: "init";
556
+ method: boolean; // false
557
+ }
558
+
559
+ export interface ObjectPattern extends BasePattern {
560
+ type: "ObjectPattern";
561
+ properties: Array<AssignmentProperty | RestElement>;
562
+ }
563
+
564
+ export interface ArrayPattern extends BasePattern {
565
+ type: "ArrayPattern";
566
+ elements: Array<Pattern | null>;
567
+ }
568
+
569
+ export interface RestElement extends BasePattern {
570
+ type: "RestElement";
571
+ argument: Pattern;
572
+ }
573
+
574
+ export interface AssignmentPattern extends BasePattern {
575
+ type: "AssignmentPattern";
576
+ left: Pattern;
577
+ right: Expression;
578
+ }
579
+
580
+ export type Class = ClassDeclaration | ClassExpression;
581
+ export interface BaseClass extends BaseNode {
582
+ superClass?: Expression | null | undefined;
583
+ body: ClassBody;
584
+ }
585
+
586
+ export interface ClassBody extends BaseNode {
587
+ type: "ClassBody";
588
+ body: Array<MethodDefinition | PropertyDefinition | StaticBlock>;
589
+ }
590
+
591
+ export interface MethodDefinition extends BaseNode {
592
+ type: "MethodDefinition";
593
+ key: Expression | PrivateIdentifier;
594
+ value: FunctionExpression;
595
+ kind: "constructor" | "method" | "get" | "set";
596
+ computed: boolean;
597
+ static: boolean;
598
+ }
599
+
600
+ export interface MaybeNamedClassDeclaration extends BaseClass, BaseDeclaration {
601
+ type: "ClassDeclaration";
602
+ /** It is null when a class declaration is a part of the `export default class` statement */
603
+ id: Identifier | null;
604
+ }
605
+
606
+ export interface ClassDeclaration extends MaybeNamedClassDeclaration {
607
+ id: Identifier;
608
+ }
609
+
610
+ export interface ClassExpression extends BaseClass, BaseExpression {
611
+ type: "ClassExpression";
612
+ id?: Identifier | null | undefined;
613
+ }
614
+
615
+ export interface MetaProperty extends BaseExpression {
616
+ type: "MetaProperty";
617
+ meta: Identifier;
618
+ property: Identifier;
619
+ }
620
+
621
+ export type ModuleDeclaration =
622
+ | ImportDeclaration
623
+ | ExportNamedDeclaration
624
+ | ExportDefaultDeclaration
625
+ | ExportAllDeclaration;
626
+ export interface BaseModuleDeclaration extends BaseNode {}
627
+
628
+ export type ModuleSpecifier = ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier | ExportSpecifier;
629
+ export interface BaseModuleSpecifier extends BaseNode {
630
+ local: Identifier;
631
+ }
632
+
633
+ export interface ImportDeclaration extends BaseModuleDeclaration {
634
+ type: "ImportDeclaration";
635
+ specifiers: Array<ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier>;
636
+ attributes: ImportAttribute[];
637
+ source: Literal;
638
+ }
639
+
640
+ export interface ImportSpecifier extends BaseModuleSpecifier {
641
+ type: "ImportSpecifier";
642
+ imported: Identifier | Literal;
643
+ }
644
+
645
+ export interface ImportAttribute extends BaseNode {
646
+ type: "ImportAttribute";
647
+ key: Identifier | Literal;
648
+ value: Literal;
649
+ }
650
+
651
+ export interface ImportExpression extends BaseExpression {
652
+ type: "ImportExpression";
653
+ source: Expression;
654
+ options?: Expression | null | undefined;
655
+ }
656
+
657
+ export interface ImportDefaultSpecifier extends BaseModuleSpecifier {
658
+ type: "ImportDefaultSpecifier";
659
+ }
660
+
661
+ export interface ImportNamespaceSpecifier extends BaseModuleSpecifier {
662
+ type: "ImportNamespaceSpecifier";
663
+ }
664
+
665
+ export interface ExportNamedDeclaration extends BaseModuleDeclaration {
666
+ type: "ExportNamedDeclaration";
667
+ declaration?: Declaration | null | undefined;
668
+ specifiers: ExportSpecifier[];
669
+ attributes: ImportAttribute[];
670
+ source?: Literal | null | undefined;
671
+ }
672
+
673
+ export interface ExportSpecifier extends Omit<BaseModuleSpecifier, "local"> {
674
+ type: "ExportSpecifier";
675
+ local: Identifier | Literal;
676
+ exported: Identifier | Literal;
677
+ }
678
+
679
+ export interface ExportDefaultDeclaration extends BaseModuleDeclaration {
680
+ type: "ExportDefaultDeclaration";
681
+ declaration: MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration | Expression;
682
+ }
683
+
684
+ export interface ExportAllDeclaration extends BaseModuleDeclaration {
685
+ type: "ExportAllDeclaration";
686
+ exported: Identifier | Literal | null;
687
+ attributes: ImportAttribute[];
688
+ source: Literal;
689
+ }
690
+
691
+ export interface AwaitExpression extends BaseExpression {
692
+ type: "AwaitExpression";
693
+ argument: Expression;
694
+ }
node_modules/@types/estree/package.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "@types/estree",
3
+ "version": "1.0.8",
4
+ "description": "TypeScript definitions for estree",
5
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree",
6
+ "license": "MIT",
7
+ "contributors": [
8
+ {
9
+ "name": "RReverser",
10
+ "githubUsername": "RReverser",
11
+ "url": "https://github.com/RReverser"
12
+ }
13
+ ],
14
+ "main": "",
15
+ "types": "index.d.ts",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
19
+ "directory": "types/estree"
20
+ },
21
+ "scripts": {},
22
+ "dependencies": {},
23
+ "peerDependencies": {},
24
+ "typesPublisherContentHash": "7a167b6e4a4d9f6e9a2cb9fd3fc45c885f89cbdeb44b3e5961bb057a45c082fd",
25
+ "typeScriptVersion": "5.1",
26
+ "nonNpm": true
27
+ }
node_modules/@types/hast/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) Microsoft Corporation.
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
node_modules/@types/hast/README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Installation
2
+ > `npm install --save @types/hast`
3
+
4
+ # Summary
5
+ This package contains type definitions for hast (https://github.com/syntax-tree/hast).
6
+
7
+ # Details
8
+ Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/hast.
9
+
10
+ ### Additional Details
11
+ * Last updated: Tue, 30 Jan 2024 21:35:45 GMT
12
+ * Dependencies: [@types/unist](https://npmjs.com/package/@types/unist)
13
+
14
+ # Credits
15
+ These definitions were written by [lukeggchapman](https://github.com/lukeggchapman), [Junyoung Choi](https://github.com/rokt33r), [Christian Murphy](https://github.com/ChristianMurphy), and [Remco Haszing](https://github.com/remcohaszing).
node_modules/@types/hast/index.d.ts ADDED
@@ -0,0 +1,282 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { Data as UnistData, Literal as UnistLiteral, Node as UnistNode, Parent as UnistParent } from "unist";
2
+
3
+ // ## Interfaces
4
+
5
+ /**
6
+ * Info associated with hast nodes by the ecosystem.
7
+ *
8
+ * This space is guaranteed to never be specified by unist or hast.
9
+ * But you can use it in utilities and plugins to store data.
10
+ *
11
+ * This type can be augmented to register custom data.
12
+ * For example:
13
+ *
14
+ * ```ts
15
+ * declare module 'hast' {
16
+ * interface Data {
17
+ * // `someNode.data.myId` is typed as `number | undefined`
18
+ * myId?: number | undefined
19
+ * }
20
+ * }
21
+ * ```
22
+ */
23
+ export interface Data extends UnistData {}
24
+
25
+ /**
26
+ * Info associated with an element.
27
+ */
28
+ export interface Properties {
29
+ [PropertyName: string]: boolean | number | string | null | undefined | Array<string | number>;
30
+ }
31
+
32
+ // ## Content maps
33
+
34
+ /**
35
+ * Union of registered hast nodes that can occur in {@link Element}.
36
+ *
37
+ * To register mote custom hast nodes, add them to {@link ElementContentMap}.
38
+ * They will be automatically added here.
39
+ */
40
+ export type ElementContent = ElementContentMap[keyof ElementContentMap];
41
+
42
+ /**
43
+ * Registry of all hast nodes that can occur as children of {@link Element}.
44
+ *
45
+ * For a union of all {@link Element} children, see {@link ElementContent}.
46
+ */
47
+ export interface ElementContentMap {
48
+ comment: Comment;
49
+ element: Element;
50
+ text: Text;
51
+ }
52
+
53
+ /**
54
+ * Union of registered hast nodes that can occur in {@link Root}.
55
+ *
56
+ * To register custom hast nodes, add them to {@link RootContentMap}.
57
+ * They will be automatically added here.
58
+ */
59
+ export type RootContent = RootContentMap[keyof RootContentMap];
60
+
61
+ /**
62
+ * Registry of all hast nodes that can occur as children of {@link Root}.
63
+ *
64
+ * > 👉 **Note**: {@link Root} does not need to be an entire document.
65
+ * > it can also be a fragment.
66
+ *
67
+ * For a union of all {@link Root} children, see {@link RootContent}.
68
+ */
69
+ export interface RootContentMap {
70
+ comment: Comment;
71
+ doctype: Doctype;
72
+ element: Element;
73
+ text: Text;
74
+ }
75
+
76
+ // ### Special content types
77
+
78
+ /**
79
+ * Union of registered hast nodes that can occur in {@link Root}.
80
+ *
81
+ * @deprecated Use {@link RootContent} instead.
82
+ */
83
+ export type Content = RootContent;
84
+
85
+ /**
86
+ * Union of registered hast literals.
87
+ *
88
+ * To register custom hast nodes, add them to {@link RootContentMap} and other
89
+ * places where relevant.
90
+ * They will be automatically added here.
91
+ */
92
+ export type Literals = Extract<Nodes, UnistLiteral>;
93
+
94
+ /**
95
+ * Union of registered hast nodes.
96
+ *
97
+ * To register custom hast nodes, add them to {@link RootContentMap} and other
98
+ * places where relevant.
99
+ * They will be automatically added here.
100
+ */
101
+ export type Nodes = Root | RootContent;
102
+
103
+ /**
104
+ * Union of registered hast parents.
105
+ *
106
+ * To register custom hast nodes, add them to {@link RootContentMap} and other
107
+ * places where relevant.
108
+ * They will be automatically added here.
109
+ */
110
+ export type Parents = Extract<Nodes, UnistParent>;
111
+
112
+ // ## Abstract nodes
113
+
114
+ /**
115
+ * Abstract hast node.
116
+ *
117
+ * This interface is supposed to be extended.
118
+ * If you can use {@link Literal} or {@link Parent}, you should.
119
+ * But for example in HTML, a `Doctype` is neither literal nor parent, but
120
+ * still a node.
121
+ *
122
+ * To register custom hast nodes, add them to {@link RootContentMap} and other
123
+ * places where relevant (such as {@link ElementContentMap}).
124
+ *
125
+ * For a union of all registered hast nodes, see {@link Nodes}.
126
+ */
127
+ export interface Node extends UnistNode {
128
+ /**
129
+ * Info from the ecosystem.
130
+ */
131
+ data?: Data | undefined;
132
+ }
133
+
134
+ /**
135
+ * Abstract hast node that contains the smallest possible value.
136
+ *
137
+ * This interface is supposed to be extended if you make custom hast nodes.
138
+ *
139
+ * For a union of all registered hast literals, see {@link Literals}.
140
+ */
141
+ export interface Literal extends Node {
142
+ /**
143
+ * Plain-text value.
144
+ */
145
+ value: string;
146
+ }
147
+
148
+ /**
149
+ * Abstract hast node that contains other hast nodes (*children*).
150
+ *
151
+ * This interface is supposed to be extended if you make custom hast nodes.
152
+ *
153
+ * For a union of all registered hast parents, see {@link Parents}.
154
+ */
155
+ export interface Parent extends Node {
156
+ /**
157
+ * List of children.
158
+ */
159
+ children: RootContent[];
160
+ }
161
+
162
+ // ## Concrete nodes
163
+
164
+ /**
165
+ * HTML comment.
166
+ */
167
+ export interface Comment extends Literal {
168
+ /**
169
+ * Node type of HTML comments in hast.
170
+ */
171
+ type: "comment";
172
+ /**
173
+ * Data associated with the comment.
174
+ */
175
+ data?: CommentData | undefined;
176
+ }
177
+
178
+ /**
179
+ * Info associated with hast comments by the ecosystem.
180
+ */
181
+ export interface CommentData extends Data {}
182
+
183
+ /**
184
+ * HTML document type.
185
+ */
186
+ export interface Doctype extends UnistNode {
187
+ /**
188
+ * Node type of HTML document types in hast.
189
+ */
190
+ type: "doctype";
191
+ /**
192
+ * Data associated with the doctype.
193
+ */
194
+ data?: DoctypeData | undefined;
195
+ }
196
+
197
+ /**
198
+ * Info associated with hast doctypes by the ecosystem.
199
+ */
200
+ export interface DoctypeData extends Data {}
201
+
202
+ /**
203
+ * HTML element.
204
+ */
205
+ export interface Element extends Parent {
206
+ /**
207
+ * Node type of elements.
208
+ */
209
+ type: "element";
210
+ /**
211
+ * Tag name (such as `'body'`) of the element.
212
+ */
213
+ tagName: string;
214
+ /**
215
+ * Info associated with the element.
216
+ */
217
+ properties: Properties;
218
+ /**
219
+ * Children of element.
220
+ */
221
+ children: ElementContent[];
222
+ /**
223
+ * When the `tagName` field is `'template'`, a `content` field can be
224
+ * present.
225
+ */
226
+ content?: Root | undefined;
227
+ /**
228
+ * Data associated with the element.
229
+ */
230
+ data?: ElementData | undefined;
231
+ }
232
+
233
+ /**
234
+ * Info associated with hast elements by the ecosystem.
235
+ */
236
+ export interface ElementData extends Data {}
237
+
238
+ /**
239
+ * Document fragment or a whole document.
240
+ *
241
+ * Should be used as the root of a tree and must not be used as a child.
242
+ *
243
+ * Can also be used as the value for the content field on a `'template'` element.
244
+ */
245
+ export interface Root extends Parent {
246
+ /**
247
+ * Node type of hast root.
248
+ */
249
+ type: "root";
250
+ /**
251
+ * Children of root.
252
+ */
253
+ children: RootContent[];
254
+ /**
255
+ * Data associated with the hast root.
256
+ */
257
+ data?: RootData | undefined;
258
+ }
259
+
260
+ /**
261
+ * Info associated with hast root nodes by the ecosystem.
262
+ */
263
+ export interface RootData extends Data {}
264
+
265
+ /**
266
+ * HTML character data (plain text).
267
+ */
268
+ export interface Text extends Literal {
269
+ /**
270
+ * Node type of HTML character data (plain text) in hast.
271
+ */
272
+ type: "text";
273
+ /**
274
+ * Data associated with the text.
275
+ */
276
+ data?: TextData | undefined;
277
+ }
278
+
279
+ /**
280
+ * Info associated with hast texts by the ecosystem.
281
+ */
282
+ export interface TextData extends Data {}
node_modules/@types/hast/package.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "@types/hast",
3
+ "version": "3.0.4",
4
+ "description": "TypeScript definitions for hast",
5
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/hast",
6
+ "license": "MIT",
7
+ "contributors": [
8
+ {
9
+ "name": "lukeggchapman",
10
+ "githubUsername": "lukeggchapman",
11
+ "url": "https://github.com/lukeggchapman"
12
+ },
13
+ {
14
+ "name": "Junyoung Choi",
15
+ "githubUsername": "rokt33r",
16
+ "url": "https://github.com/rokt33r"
17
+ },
18
+ {
19
+ "name": "Christian Murphy",
20
+ "githubUsername": "ChristianMurphy",
21
+ "url": "https://github.com/ChristianMurphy"
22
+ },
23
+ {
24
+ "name": "Remco Haszing",
25
+ "githubUsername": "remcohaszing",
26
+ "url": "https://github.com/remcohaszing"
27
+ }
28
+ ],
29
+ "main": "",
30
+ "types": "index.d.ts",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
34
+ "directory": "types/hast"
35
+ },
36
+ "scripts": {},
37
+ "dependencies": {
38
+ "@types/unist": "*"
39
+ },
40
+ "typesPublisherContentHash": "3f3f73826d79157c12087f5bb36195319c6f435b9e218fa7a8de88d1cc64d097",
41
+ "typeScriptVersion": "4.6"
42
+ }
node_modules/@types/mdast/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) Microsoft Corporation.
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
node_modules/@types/mdast/README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Installation
2
+ > `npm install --save @types/mdast`
3
+
4
+ # Summary
5
+ This package contains type definitions for mdast (https://github.com/syntax-tree/mdast).
6
+
7
+ # Details
8
+ Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mdast.
9
+
10
+ ### Additional Details
11
+ * Last updated: Tue, 14 May 2024 07:35:36 GMT
12
+ * Dependencies: [@types/unist](https://npmjs.com/package/@types/unist)
13
+
14
+ # Credits
15
+ These definitions were written by [Christian Murphy](https://github.com/ChristianMurphy), [Jun Lu](https://github.com/lujun2), [Remco Haszing](https://github.com/remcohaszing), [Titus Wormer](https://github.com/wooorm), and [Remco Haszing](https://github.com/remcohaszing).
node_modules/@types/mdast/index.d.ts ADDED
@@ -0,0 +1,1123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { Data as UnistData, Literal as UnistLiteral, Node as UnistNode, Parent as UnistParent } from "unist";
2
+
3
+ // ## Enumeration
4
+
5
+ /**
6
+ * How phrasing content is aligned
7
+ * ({@link https://drafts.csswg.org/css-text/ | [CSSTEXT]}).
8
+ *
9
+ * * `'left'`: See the
10
+ * {@link https://drafts.csswg.org/css-text/#valdef-text-align-left | left}
11
+ * value of the `text-align` CSS property
12
+ * * `'right'`: See the
13
+ * {@link https://drafts.csswg.org/css-text/#valdef-text-align-right | right}
14
+ * value of the `text-align` CSS property
15
+ * * `'center'`: See the
16
+ * {@link https://drafts.csswg.org/css-text/#valdef-text-align-center | center}
17
+ * value of the `text-align` CSS property
18
+ * * `null`: phrasing content is aligned as defined by the host environment
19
+ *
20
+ * Used in GFM tables.
21
+ */
22
+ export type AlignType = "center" | "left" | "right" | null;
23
+
24
+ /**
25
+ * Explicitness of a reference.
26
+ *
27
+ * `'shortcut'`: the reference is implicit, its identifier inferred from its
28
+ * content
29
+ * `'collapsed'`: the reference is explicit, its identifier inferred from its
30
+ * content
31
+ * `'full'`: the reference is explicit, its identifier explicitly set
32
+ */
33
+ export type ReferenceType = "shortcut" | "collapsed" | "full";
34
+
35
+ // ## Mixin
36
+
37
+ /**
38
+ * Node with a fallback.
39
+ */
40
+ export interface Alternative {
41
+ /**
42
+ * Equivalent content for environments that cannot represent the node as
43
+ * intended.
44
+ */
45
+ alt?: string | null | undefined;
46
+ }
47
+
48
+ /**
49
+ * Internal relation from one node to another.
50
+ *
51
+ * Whether the value of `identifier` is expected to be a unique identifier or
52
+ * not depends on the type of node including the Association.
53
+ * An example of this is that they should be unique on {@link Definition},
54
+ * whereas multiple {@link LinkReference}s can be non-unique to be associated
55
+ * with one definition.
56
+ */
57
+ export interface Association {
58
+ /**
59
+ * Relation of association.
60
+ *
61
+ * `identifier` is a source value: character escapes and character
62
+ * references are not parsed.
63
+ *
64
+ * It can match another node.
65
+ *
66
+ * Its value must be normalized.
67
+ * To normalize a value, collapse markdown whitespace (`[\t\n\r ]+`) to a space,
68
+ * trim the optional initial and/or final space, and perform Unicode-aware
69
+ * case-folding.
70
+ */
71
+ identifier: string;
72
+
73
+ /**
74
+ * Relation of association, in parsed form.
75
+ *
76
+ * `label` is a `string` value: it works just like `title` on {@link Link}
77
+ * or a `lang` on {@link Code}: character escapes and character references
78
+ * are parsed.
79
+ *
80
+ * It can match another node.
81
+ */
82
+ label?: string | null | undefined;
83
+ }
84
+
85
+ /**
86
+ * Marker that is associated to another node.
87
+ */
88
+ export interface Reference extends Association {
89
+ /**
90
+ * Explicitness of the reference.
91
+ */
92
+ referenceType: ReferenceType;
93
+ }
94
+
95
+ /**
96
+ * Reference to resource.
97
+ */
98
+ export interface Resource {
99
+ /**
100
+ * URL to the referenced resource.
101
+ */
102
+ url: string;
103
+ /**
104
+ * Advisory information for the resource, such as would be appropriate for
105
+ * a tooltip.
106
+ */
107
+ title?: string | null | undefined;
108
+ }
109
+
110
+ // ## Interfaces
111
+
112
+ /**
113
+ * Info associated with mdast nodes by the ecosystem.
114
+ *
115
+ * This space is guaranteed to never be specified by unist or mdast.
116
+ * But you can use it in utilities and plugins to store data.
117
+ *
118
+ * This type can be augmented to register custom data.
119
+ * For example:
120
+ *
121
+ * ```ts
122
+ * declare module 'mdast' {
123
+ * interface Data {
124
+ * // `someNode.data.myId` is typed as `number | undefined`
125
+ * myId?: number | undefined
126
+ * }
127
+ * }
128
+ * ```
129
+ */
130
+ export interface Data extends UnistData {}
131
+
132
+ // ## Content maps
133
+
134
+ /**
135
+ * Union of registered mdast nodes that can occur where block content is
136
+ * expected.
137
+ *
138
+ * To register custom mdast nodes, add them to {@link BlockContentMap}.
139
+ * They will be automatically added here.
140
+ */
141
+ export type BlockContent = BlockContentMap[keyof BlockContentMap];
142
+
143
+ /**
144
+ * Registry of all mdast nodes that can occur where {@link BlockContent} is
145
+ * expected.
146
+ *
147
+ * This interface can be augmented to register custom node types:
148
+ *
149
+ * ```ts
150
+ * declare module 'mdast' {
151
+ * interface BlockContentMap {
152
+ * // Allow using MDX ESM nodes defined by `remark-mdx`.
153
+ * mdxjsEsm: MdxjsEsm;
154
+ * }
155
+ * }
156
+ * ```
157
+ *
158
+ * For a union of all block content, see {@link RootContent}.
159
+ */
160
+ export interface BlockContentMap {
161
+ blockquote: Blockquote;
162
+ code: Code;
163
+ heading: Heading;
164
+ html: Html;
165
+ list: List;
166
+ paragraph: Paragraph;
167
+ table: Table;
168
+ thematicBreak: ThematicBreak;
169
+ }
170
+
171
+ /**
172
+ * Union of registered mdast nodes that can occur where definition content is
173
+ * expected.
174
+ *
175
+ * To register custom mdast nodes, add them to {@link DefinitionContentMap}.
176
+ * They will be automatically added here.
177
+ */
178
+ export type DefinitionContent = DefinitionContentMap[keyof DefinitionContentMap];
179
+
180
+ /**
181
+ * Registry of all mdast nodes that can occur where {@link DefinitionContent}
182
+ * is expected.
183
+ *
184
+ * This interface can be augmented to register custom node types:
185
+ *
186
+ * ```ts
187
+ * declare module 'mdast' {
188
+ * interface DefinitionContentMap {
189
+ * custom: Custom;
190
+ * }
191
+ * }
192
+ * ```
193
+ *
194
+ * For a union of all definition content, see {@link RootContent}.
195
+ */
196
+ export interface DefinitionContentMap {
197
+ definition: Definition;
198
+ footnoteDefinition: FootnoteDefinition;
199
+ }
200
+
201
+ /**
202
+ * Union of registered mdast nodes that can occur where frontmatter content is
203
+ * expected.
204
+ *
205
+ * To register custom mdast nodes, add them to {@link FrontmatterContentMap}.
206
+ * They will be automatically added here.
207
+ */
208
+ export type FrontmatterContent = FrontmatterContentMap[keyof FrontmatterContentMap];
209
+
210
+ /**
211
+ * Registry of all mdast nodes that can occur where {@link FrontmatterContent}
212
+ * is expected.
213
+ *
214
+ * This interface can be augmented to register custom node types:
215
+ *
216
+ * ```ts
217
+ * declare module 'mdast' {
218
+ * interface FrontmatterContentMap {
219
+ * // Allow using toml nodes defined by `remark-frontmatter`.
220
+ * toml: TOML;
221
+ * }
222
+ * }
223
+ * ```
224
+ *
225
+ * For a union of all frontmatter content, see {@link RootContent}.
226
+ */
227
+ export interface FrontmatterContentMap {
228
+ yaml: Yaml;
229
+ }
230
+
231
+ /**
232
+ * Union of registered mdast nodes that can occur where list content is
233
+ * expected.
234
+ *
235
+ * To register custom mdast nodes, add them to {@link ListContentMap}.
236
+ * They will be automatically added here.
237
+ */
238
+ export type ListContent = ListContentMap[keyof ListContentMap];
239
+
240
+ /**
241
+ * Registry of all mdast nodes that can occur where {@link ListContent}
242
+ * is expected.
243
+ *
244
+ * This interface can be augmented to register custom node types:
245
+ *
246
+ * ```ts
247
+ * declare module 'mdast' {
248
+ * interface ListContentMap {
249
+ * custom: Custom;
250
+ * }
251
+ * }
252
+ * ```
253
+ *
254
+ * For a union of all list content, see {@link RootContent}.
255
+ */
256
+ export interface ListContentMap {
257
+ listItem: ListItem;
258
+ }
259
+
260
+ /**
261
+ * Union of registered mdast nodes that can occur where phrasing content is
262
+ * expected.
263
+ *
264
+ * To register custom mdast nodes, add them to {@link PhrasingContentMap}.
265
+ * They will be automatically added here.
266
+ */
267
+ export type PhrasingContent = PhrasingContentMap[keyof PhrasingContentMap];
268
+
269
+ /**
270
+ * Registry of all mdast nodes that can occur where {@link PhrasingContent}
271
+ * is expected.
272
+ *
273
+ * This interface can be augmented to register custom node types:
274
+ *
275
+ * ```ts
276
+ * declare module 'mdast' {
277
+ * interface PhrasingContentMap {
278
+ * // Allow using MDX JSX (text) nodes defined by `remark-mdx`.
279
+ * mdxJsxTextElement: MDXJSXTextElement;
280
+ * }
281
+ * }
282
+ * ```
283
+ *
284
+ * For a union of all phrasing content, see {@link RootContent}.
285
+ */
286
+ export interface PhrasingContentMap {
287
+ break: Break;
288
+ delete: Delete;
289
+ emphasis: Emphasis;
290
+ footnoteReference: FootnoteReference;
291
+ html: Html;
292
+ image: Image;
293
+ imageReference: ImageReference;
294
+ inlineCode: InlineCode;
295
+ link: Link;
296
+ linkReference: LinkReference;
297
+ strong: Strong;
298
+ text: Text;
299
+ }
300
+
301
+ /**
302
+ * Union of registered mdast nodes that can occur in {@link Root}.
303
+ *
304
+ * To register custom mdast nodes, add them to {@link RootContentMap}.
305
+ * They will be automatically added here.
306
+ */
307
+ export type RootContent = RootContentMap[keyof RootContentMap];
308
+
309
+ /**
310
+ * Registry of all mdast nodes that can occur as children of {@link Root}.
311
+ *
312
+ * > **Note**: {@link Root} does not need to be an entire document.
313
+ * > it can also be a fragment.
314
+ *
315
+ * This interface can be augmented to register custom node types:
316
+ *
317
+ * ```ts
318
+ * declare module 'mdast' {
319
+ * interface RootContentMap {
320
+ * // Allow using toml nodes defined by `remark-frontmatter`.
321
+ * toml: TOML;
322
+ * }
323
+ * }
324
+ * ```
325
+ *
326
+ * For a union of all {@link Root} children, see {@link RootContent}.
327
+ */
328
+ export interface RootContentMap {
329
+ blockquote: Blockquote;
330
+ break: Break;
331
+ code: Code;
332
+ definition: Definition;
333
+ delete: Delete;
334
+ emphasis: Emphasis;
335
+ footnoteDefinition: FootnoteDefinition;
336
+ footnoteReference: FootnoteReference;
337
+ heading: Heading;
338
+ html: Html;
339
+ image: Image;
340
+ imageReference: ImageReference;
341
+ inlineCode: InlineCode;
342
+ link: Link;
343
+ linkReference: LinkReference;
344
+ list: List;
345
+ listItem: ListItem;
346
+ paragraph: Paragraph;
347
+ strong: Strong;
348
+ table: Table;
349
+ tableCell: TableCell;
350
+ tableRow: TableRow;
351
+ text: Text;
352
+ thematicBreak: ThematicBreak;
353
+ yaml: Yaml;
354
+ }
355
+
356
+ /**
357
+ * Union of registered mdast nodes that can occur where row content is
358
+ * expected.
359
+ *
360
+ * To register custom mdast nodes, add them to {@link RowContentMap}.
361
+ * They will be automatically added here.
362
+ */
363
+ export type RowContent = RowContentMap[keyof RowContentMap];
364
+
365
+ /**
366
+ * Registry of all mdast nodes that can occur where {@link RowContent}
367
+ * is expected.
368
+ *
369
+ * This interface can be augmented to register custom node types:
370
+ *
371
+ * ```ts
372
+ * declare module 'mdast' {
373
+ * interface RowContentMap {
374
+ * custom: Custom;
375
+ * }
376
+ * }
377
+ * ```
378
+ *
379
+ * For a union of all row content, see {@link RootContent}.
380
+ */
381
+ export interface RowContentMap {
382
+ tableCell: TableCell;
383
+ }
384
+
385
+ /**
386
+ * Union of registered mdast nodes that can occur where table content is
387
+ * expected.
388
+ *
389
+ * To register custom mdast nodes, add them to {@link TableContentMap}.
390
+ * They will be automatically added here.
391
+ */
392
+ export type TableContent = TableContentMap[keyof TableContentMap];
393
+
394
+ /**
395
+ * Registry of all mdast nodes that can occur where {@link TableContent}
396
+ * is expected.
397
+ *
398
+ * This interface can be augmented to register custom node types:
399
+ *
400
+ * ```ts
401
+ * declare module 'mdast' {
402
+ * interface TableContentMap {
403
+ * custom: Custom;
404
+ * }
405
+ * }
406
+ * ```
407
+ *
408
+ * For a union of all table content, see {@link RootContent}.
409
+ */
410
+ export interface TableContentMap {
411
+ tableRow: TableRow;
412
+ }
413
+
414
+ // ### Special content types
415
+
416
+ /**
417
+ * Union of registered mdast nodes that can occur in {@link Root}.
418
+ *
419
+ * @deprecated Use {@link RootContent} instead.
420
+ */
421
+ export type Content = RootContent;
422
+
423
+ /**
424
+ * Union of registered mdast literals.
425
+ *
426
+ * To register custom mdast nodes, add them to {@link RootContentMap} and other
427
+ * places where relevant.
428
+ * They will be automatically added here.
429
+ */
430
+ export type Literals = Extract<Nodes, UnistLiteral>;
431
+
432
+ /**
433
+ * Union of registered mdast nodes.
434
+ *
435
+ * To register custom mdast nodes, add them to {@link RootContentMap} and other
436
+ * places where relevant.
437
+ * They will be automatically added here.
438
+ */
439
+ export type Nodes = Root | RootContent;
440
+
441
+ /**
442
+ * Union of registered mdast parents.
443
+ *
444
+ * To register custom mdast nodes, add them to {@link RootContentMap} and other
445
+ * places where relevant.
446
+ * They will be automatically added here.
447
+ */
448
+ export type Parents = Extract<Nodes, UnistParent>;
449
+
450
+ /**
451
+ * Union of registered mdast nodes that can occur at the top of the document.
452
+ *
453
+ * To register custom mdast nodes, add them to {@link BlockContent},
454
+ * {@link FrontmatterContent}, or {@link DefinitionContent}.
455
+ * They will be automatically added here.
456
+ */
457
+ export type TopLevelContent = BlockContent | FrontmatterContent | DefinitionContent;
458
+
459
+ // ## Abstract nodes
460
+
461
+ /**
462
+ * Abstract mdast node that contains the smallest possible value.
463
+ *
464
+ * This interface is supposed to be extended if you make custom mdast nodes.
465
+ *
466
+ * For a union of all registered mdast literals, see {@link Literals}.
467
+ */
468
+ export interface Literal extends Node {
469
+ /**
470
+ * Plain-text value.
471
+ */
472
+ value: string;
473
+ }
474
+
475
+ /**
476
+ * Abstract mdast node.
477
+ *
478
+ * This interface is supposed to be extended.
479
+ * If you can use {@link Literal} or {@link Parent}, you should.
480
+ * But for example in markdown, a thematic break (`***`) is neither literal nor
481
+ * parent, but still a node.
482
+ *
483
+ * To register custom mdast nodes, add them to {@link RootContentMap} and other
484
+ * places where relevant (such as {@link ElementContentMap}).
485
+ *
486
+ * For a union of all registered mdast nodes, see {@link Nodes}.
487
+ */
488
+ export interface Node extends UnistNode {
489
+ /**
490
+ * Info from the ecosystem.
491
+ */
492
+ data?: Data | undefined;
493
+ }
494
+
495
+ /**
496
+ * Abstract mdast node that contains other mdast nodes (*children*).
497
+ *
498
+ * This interface is supposed to be extended if you make custom mdast nodes.
499
+ *
500
+ * For a union of all registered mdast parents, see {@link Parents}.
501
+ */
502
+ export interface Parent extends Node {
503
+ /**
504
+ * List of children.
505
+ */
506
+ children: RootContent[];
507
+ }
508
+
509
+ // ## Concrete nodes
510
+
511
+ /**
512
+ * Markdown block quote.
513
+ */
514
+ export interface Blockquote extends Parent {
515
+ /**
516
+ * Node type of mdast block quote.
517
+ */
518
+ type: "blockquote";
519
+ /**
520
+ * Children of block quote.
521
+ */
522
+ children: Array<BlockContent | DefinitionContent>;
523
+ /**
524
+ * Data associated with the mdast block quote.
525
+ */
526
+ data?: BlockquoteData | undefined;
527
+ }
528
+
529
+ /**
530
+ * Info associated with mdast block quote nodes by the ecosystem.
531
+ */
532
+ export interface BlockquoteData extends Data {}
533
+
534
+ /**
535
+ * Markdown break.
536
+ */
537
+ export interface Break extends Node {
538
+ /**
539
+ * Node type of mdast break.
540
+ */
541
+ type: "break";
542
+ /**
543
+ * Data associated with the mdast break.
544
+ */
545
+ data?: BreakData | undefined;
546
+ }
547
+
548
+ /**
549
+ * Info associated with mdast break nodes by the ecosystem.
550
+ */
551
+ export interface BreakData extends Data {}
552
+
553
+ /**
554
+ * Markdown code (flow) (block).
555
+ */
556
+ export interface Code extends Literal {
557
+ /**
558
+ * Node type of mdast code (flow).
559
+ */
560
+ type: "code";
561
+ /**
562
+ * Language of computer code being marked up.
563
+ */
564
+ lang?: string | null | undefined;
565
+ /**
566
+ * Custom information relating to the node.
567
+ *
568
+ * If the lang field is present, a meta field can be present.
569
+ */
570
+ meta?: string | null | undefined;
571
+ /**
572
+ * Data associated with the mdast code (flow).
573
+ */
574
+ data?: CodeData | undefined;
575
+ }
576
+
577
+ /**
578
+ * Info associated with mdast code (flow) (block) nodes by the ecosystem.
579
+ */
580
+ export interface CodeData extends Data {}
581
+
582
+ /**
583
+ * Markdown definition.
584
+ */
585
+ export interface Definition extends Node, Association, Resource {
586
+ /**
587
+ * Node type of mdast definition.
588
+ */
589
+ type: "definition";
590
+ /**
591
+ * Data associated with the mdast definition.
592
+ */
593
+ data?: DefinitionData | undefined;
594
+ }
595
+
596
+ /**
597
+ * Info associated with mdast definition nodes by the ecosystem.
598
+ */
599
+ export interface DefinitionData extends Data {}
600
+
601
+ /**
602
+ * Markdown GFM delete (strikethrough).
603
+ */
604
+ export interface Delete extends Parent {
605
+ /**
606
+ * Node type of mdast GFM delete.
607
+ */
608
+ type: "delete";
609
+ /**
610
+ * Children of GFM delete.
611
+ */
612
+ children: PhrasingContent[];
613
+ /**
614
+ * Data associated with the mdast GFM delete.
615
+ */
616
+ data?: DeleteData | undefined;
617
+ }
618
+
619
+ /**
620
+ * Info associated with mdast GFM delete nodes by the ecosystem.
621
+ */
622
+ export interface DeleteData extends Data {}
623
+
624
+ /**
625
+ * Markdown emphasis.
626
+ */
627
+ export interface Emphasis extends Parent {
628
+ /**
629
+ * Node type of mdast emphasis.
630
+ */
631
+ type: "emphasis";
632
+ /**
633
+ * Children of emphasis.
634
+ */
635
+ children: PhrasingContent[];
636
+ /**
637
+ * Data associated with the mdast emphasis.
638
+ */
639
+ data?: EmphasisData | undefined;
640
+ }
641
+
642
+ /**
643
+ * Info associated with mdast emphasis nodes by the ecosystem.
644
+ */
645
+ export interface EmphasisData extends Data {}
646
+
647
+ /**
648
+ * Markdown GFM footnote definition.
649
+ */
650
+ export interface FootnoteDefinition extends Parent, Association {
651
+ /**
652
+ * Node type of mdast GFM footnote definition.
653
+ */
654
+ type: "footnoteDefinition";
655
+ /**
656
+ * Children of GFM footnote definition.
657
+ */
658
+ children: Array<BlockContent | DefinitionContent>;
659
+ /**
660
+ * Data associated with the mdast GFM footnote definition.
661
+ */
662
+ data?: FootnoteDefinitionData | undefined;
663
+ }
664
+
665
+ /**
666
+ * Info associated with mdast GFM footnote definition nodes by the ecosystem.
667
+ */
668
+ export interface FootnoteDefinitionData extends Data {}
669
+
670
+ /**
671
+ * Markdown GFM footnote reference.
672
+ */
673
+ export interface FootnoteReference extends Association, Node {
674
+ /**
675
+ * Node type of mdast GFM footnote reference.
676
+ */
677
+ type: "footnoteReference";
678
+ /**
679
+ * Data associated with the mdast GFM footnote reference.
680
+ */
681
+ data?: FootnoteReferenceData | undefined;
682
+ }
683
+
684
+ /**
685
+ * Info associated with mdast GFM footnote reference nodes by the ecosystem.
686
+ */
687
+ export interface FootnoteReferenceData extends Data {}
688
+
689
+ /**
690
+ * Markdown heading.
691
+ */
692
+ export interface Heading extends Parent {
693
+ /**
694
+ * Node type of mdast heading.
695
+ */
696
+ type: "heading";
697
+ /**
698
+ * Heading rank.
699
+ *
700
+ * A value of `1` is said to be the highest rank and `6` the lowest.
701
+ */
702
+ depth: 1 | 2 | 3 | 4 | 5 | 6;
703
+ /**
704
+ * Children of heading.
705
+ */
706
+ children: PhrasingContent[];
707
+ /**
708
+ * Data associated with the mdast heading.
709
+ */
710
+ data?: HeadingData | undefined;
711
+ }
712
+
713
+ /**
714
+ * Info associated with mdast heading nodes by the ecosystem.
715
+ */
716
+ export interface HeadingData extends Data {}
717
+
718
+ /**
719
+ * Markdown HTML.
720
+ */
721
+ export interface Html extends Literal {
722
+ /**
723
+ * Node type of mdast HTML.
724
+ */
725
+ type: "html";
726
+ /**
727
+ * Data associated with the mdast HTML.
728
+ */
729
+ data?: HtmlData | undefined;
730
+ }
731
+
732
+ /**
733
+ * Info associated with mdast HTML nodes by the ecosystem.
734
+ */
735
+ export interface HtmlData extends Data {}
736
+
737
+ /**
738
+ * Old name of `Html` node.
739
+ *
740
+ * @deprecated
741
+ * Please use `Html` instead.
742
+ */
743
+ export type HTML = Html;
744
+
745
+ /**
746
+ * Markdown image.
747
+ */
748
+ export interface Image extends Alternative, Node, Resource {
749
+ /**
750
+ * Node type of mdast image.
751
+ */
752
+ type: "image";
753
+ /**
754
+ * Data associated with the mdast image.
755
+ */
756
+ data?: ImageData | undefined;
757
+ }
758
+
759
+ /**
760
+ * Info associated with mdast image nodes by the ecosystem.
761
+ */
762
+ export interface ImageData extends Data {}
763
+
764
+ /**
765
+ * Markdown image reference.
766
+ */
767
+ export interface ImageReference extends Alternative, Node, Reference {
768
+ /**
769
+ * Node type of mdast image reference.
770
+ */
771
+ type: "imageReference";
772
+ /**
773
+ * Data associated with the mdast image reference.
774
+ */
775
+ data?: ImageReferenceData | undefined;
776
+ }
777
+
778
+ /**
779
+ * Info associated with mdast image reference nodes by the ecosystem.
780
+ */
781
+ export interface ImageReferenceData extends Data {}
782
+
783
+ /**
784
+ * Markdown code (text) (inline).
785
+ */
786
+ export interface InlineCode extends Literal {
787
+ /**
788
+ * Node type of mdast code (text).
789
+ */
790
+ type: "inlineCode";
791
+ /**
792
+ * Data associated with the mdast code (text).
793
+ */
794
+ data?: InlineCodeData | undefined;
795
+ }
796
+
797
+ /**
798
+ * Info associated with mdast code (text) (inline) nodes by the ecosystem.
799
+ */
800
+ export interface InlineCodeData extends Data {}
801
+
802
+ /**
803
+ * Markdown link.
804
+ */
805
+ export interface Link extends Parent, Resource {
806
+ /**
807
+ * Node type of mdast link.
808
+ */
809
+ type: "link";
810
+ /**
811
+ * Children of link.
812
+ */
813
+ children: PhrasingContent[];
814
+ /**
815
+ * Data associated with the mdast link.
816
+ */
817
+ data?: LinkData | undefined;
818
+ }
819
+
820
+ /**
821
+ * Info associated with mdast link nodes by the ecosystem.
822
+ */
823
+ export interface LinkData extends Data {}
824
+
825
+ /**
826
+ * Markdown link reference.
827
+ */
828
+ export interface LinkReference extends Parent, Reference {
829
+ /**
830
+ * Node type of mdast link reference.
831
+ */
832
+ type: "linkReference";
833
+ /**
834
+ * Children of link reference.
835
+ */
836
+ children: PhrasingContent[];
837
+ /**
838
+ * Data associated with the mdast link reference.
839
+ */
840
+ data?: LinkReferenceData | undefined;
841
+ }
842
+
843
+ /**
844
+ * Info associated with mdast link reference nodes by the ecosystem.
845
+ */
846
+ export interface LinkReferenceData extends Data {}
847
+
848
+ /**
849
+ * Markdown list.
850
+ */
851
+ export interface List extends Parent {
852
+ /**
853
+ * Node type of mdast list.
854
+ */
855
+ type: "list";
856
+ /**
857
+ * Whether the items have been intentionally ordered (when `true`), or that
858
+ * the order of items is not important (when `false` or not present).
859
+ */
860
+ ordered?: boolean | null | undefined;
861
+ /**
862
+ * The starting number of the list, when the `ordered` field is `true`.
863
+ */
864
+ start?: number | null | undefined;
865
+ /**
866
+ * Whether one or more of the children are separated with a blank line from
867
+ * its siblings (when `true`), or not (when `false` or not present).
868
+ */
869
+ spread?: boolean | null | undefined;
870
+ /**
871
+ * Children of list.
872
+ */
873
+ children: ListContent[];
874
+ /**
875
+ * Data associated with the mdast list.
876
+ */
877
+ data?: ListData | undefined;
878
+ }
879
+
880
+ /**
881
+ * Info associated with mdast list nodes by the ecosystem.
882
+ */
883
+ export interface ListData extends Data {}
884
+
885
+ /**
886
+ * Markdown list item.
887
+ */
888
+ export interface ListItem extends Parent {
889
+ /**
890
+ * Node type of mdast list item.
891
+ */
892
+ type: "listItem";
893
+ /**
894
+ * Whether the item is a tasklist item (when `boolean`).
895
+ *
896
+ * When `true`, the item is complete.
897
+ * When `false`, the item is incomplete.
898
+ */
899
+ checked?: boolean | null | undefined;
900
+ /**
901
+ * Whether one or more of the children are separated with a blank line from
902
+ * its siblings (when `true`), or not (when `false` or not present).
903
+ */
904
+ spread?: boolean | null | undefined;
905
+ /**
906
+ * Children of list item.
907
+ */
908
+ children: Array<BlockContent | DefinitionContent>;
909
+ /**
910
+ * Data associated with the mdast list item.
911
+ */
912
+ data?: ListItemData | undefined;
913
+ }
914
+
915
+ /**
916
+ * Info associated with mdast list item nodes by the ecosystem.
917
+ */
918
+ export interface ListItemData extends Data {}
919
+
920
+ /**
921
+ * Markdown paragraph.
922
+ */
923
+ export interface Paragraph extends Parent {
924
+ /**
925
+ * Node type of mdast paragraph.
926
+ */
927
+ type: "paragraph";
928
+ /**
929
+ * Children of paragraph.
930
+ */
931
+ children: PhrasingContent[];
932
+ /**
933
+ * Data associated with the mdast paragraph.
934
+ */
935
+ data?: ParagraphData | undefined;
936
+ }
937
+
938
+ /**
939
+ * Info associated with mdast paragraph nodes by the ecosystem.
940
+ */
941
+ export interface ParagraphData extends Data {}
942
+
943
+ /**
944
+ * Document fragment or a whole document.
945
+ *
946
+ * Should be used as the root of a tree and must not be used as a child.
947
+ */
948
+ export interface Root extends Parent {
949
+ /**
950
+ * Node type of mdast root.
951
+ */
952
+ type: "root";
953
+ /**
954
+ * Data associated with the mdast root.
955
+ */
956
+ data?: RootData | undefined;
957
+ }
958
+
959
+ /**
960
+ * Info associated with mdast root nodes by the ecosystem.
961
+ */
962
+ export interface RootData extends Data {}
963
+
964
+ /**
965
+ * Markdown strong.
966
+ */
967
+ export interface Strong extends Parent {
968
+ /**
969
+ * Node type of mdast strong.
970
+ */
971
+ type: "strong";
972
+ /**
973
+ * Children of strong.
974
+ */
975
+ children: PhrasingContent[];
976
+ /**
977
+ * Data associated with the mdast strong.
978
+ */
979
+ data?: StrongData | undefined;
980
+ }
981
+
982
+ /**
983
+ * Info associated with mdast strong nodes by the ecosystem.
984
+ */
985
+ export interface StrongData extends Data {}
986
+
987
+ /**
988
+ * Markdown GFM table.
989
+ */
990
+ export interface Table extends Parent {
991
+ /**
992
+ * Node type of mdast GFM table.
993
+ */
994
+ type: "table";
995
+ /**
996
+ * How cells in columns are aligned.
997
+ */
998
+ align?: AlignType[] | null | undefined;
999
+ /**
1000
+ * Children of GFM table.
1001
+ */
1002
+ children: TableContent[];
1003
+ /**
1004
+ * Data associated with the mdast GFM table.
1005
+ */
1006
+ data?: TableData | undefined;
1007
+ }
1008
+
1009
+ /**
1010
+ * Info associated with mdast GFM table nodes by the ecosystem.
1011
+ */
1012
+ export interface TableData extends Data {}
1013
+
1014
+ /**
1015
+ * Markdown GFM table row.
1016
+ */
1017
+ export interface TableRow extends Parent {
1018
+ /**
1019
+ * Node type of mdast GFM table row.
1020
+ */
1021
+ type: "tableRow";
1022
+ /**
1023
+ * Children of GFM table row.
1024
+ */
1025
+ children: RowContent[];
1026
+ /**
1027
+ * Data associated with the mdast GFM table row.
1028
+ */
1029
+ data?: TableRowData | undefined;
1030
+ }
1031
+
1032
+ /**
1033
+ * Info associated with mdast GFM table row nodes by the ecosystem.
1034
+ */
1035
+ export interface TableRowData extends Data {}
1036
+
1037
+ /**
1038
+ * Markdown GFM table cell.
1039
+ */
1040
+ export interface TableCell extends Parent {
1041
+ /**
1042
+ * Node type of mdast GFM table cell.
1043
+ */
1044
+ type: "tableCell";
1045
+ /**
1046
+ * Children of GFM table cell.
1047
+ */
1048
+ children: PhrasingContent[];
1049
+ /**
1050
+ * Data associated with the mdast GFM table cell.
1051
+ */
1052
+ data?: TableCellData | undefined;
1053
+ }
1054
+
1055
+ /**
1056
+ * Info associated with mdast GFM table cell nodes by the ecosystem.
1057
+ */
1058
+ export interface TableCellData extends Data {}
1059
+
1060
+ /**
1061
+ * Markdown text.
1062
+ */
1063
+ export interface Text extends Literal {
1064
+ /**
1065
+ * Node type of mdast text.
1066
+ */
1067
+ type: "text";
1068
+ /**
1069
+ * Data associated with the mdast text.
1070
+ */
1071
+ data?: TextData | undefined;
1072
+ }
1073
+
1074
+ /**
1075
+ * Info associated with mdast text nodes by the ecosystem.
1076
+ */
1077
+ export interface TextData extends Data {}
1078
+
1079
+ /**
1080
+ * Markdown thematic break (horizontal rule).
1081
+ */
1082
+ export interface ThematicBreak extends Node {
1083
+ /**
1084
+ * Node type of mdast thematic break.
1085
+ */
1086
+ type: "thematicBreak";
1087
+ /**
1088
+ * Data associated with the mdast thematic break.
1089
+ */
1090
+ data?: ThematicBreakData | undefined;
1091
+ }
1092
+
1093
+ /**
1094
+ * Info associated with mdast thematic break nodes by the ecosystem.
1095
+ */
1096
+ export interface ThematicBreakData extends Data {}
1097
+
1098
+ /**
1099
+ * Markdown YAML.
1100
+ */
1101
+ export interface Yaml extends Literal {
1102
+ /**
1103
+ * Node type of mdast YAML.
1104
+ */
1105
+ type: "yaml";
1106
+ /**
1107
+ * Data associated with the mdast YAML.
1108
+ */
1109
+ data?: YamlData | undefined;
1110
+ }
1111
+
1112
+ /**
1113
+ * Info associated with mdast YAML nodes by the ecosystem.
1114
+ */
1115
+ export interface YamlData extends Data {}
1116
+
1117
+ /**
1118
+ * Old name of `Yaml` node.
1119
+ *
1120
+ * @deprecated
1121
+ * Please use `Yaml` instead.
1122
+ */
1123
+ export type YAML = Yaml;
node_modules/@types/mdast/package.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "@types/mdast",
3
+ "version": "4.0.4",
4
+ "description": "TypeScript definitions for mdast",
5
+ "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mdast",
6
+ "license": "MIT",
7
+ "contributors": [
8
+ {
9
+ "name": "Christian Murphy",
10
+ "githubUsername": "ChristianMurphy",
11
+ "url": "https://github.com/ChristianMurphy"
12
+ },
13
+ {
14
+ "name": "Jun Lu",
15
+ "githubUsername": "lujun2",
16
+ "url": "https://github.com/lujun2"
17
+ },
18
+ {
19
+ "name": "Remco Haszing",
20
+ "githubUsername": "remcohaszing",
21
+ "url": "https://github.com/remcohaszing"
22
+ },
23
+ {
24
+ "name": "Titus Wormer",
25
+ "githubUsername": "wooorm",
26
+ "url": "https://github.com/wooorm"
27
+ },
28
+ {
29
+ "name": "Remco Haszing",
30
+ "githubUsername": "remcohaszing",
31
+ "url": "https://github.com/remcohaszing"
32
+ }
33
+ ],
34
+ "main": "",
35
+ "types": "index.d.ts",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
39
+ "directory": "types/mdast"
40
+ },
41
+ "scripts": {},
42
+ "dependencies": {
43
+ "@types/unist": "*"
44
+ },
45
+ "typesPublisherContentHash": "1599d3ca45533e9d9248231c90843306b49c07fe13ad94ebf7345da44d8fd4bd",
46
+ "typeScriptVersion": "4.7"
47
+ }
node_modules/@types/ms/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) Microsoft Corporation.
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